日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Sentinel兼容模式連接實例

云數據庫 Tair(兼容 Redis)采用自研的高可用服務HA組件,無需依賴Sentinel(哨兵)。但為了提高實例的兼容性,減少用戶的代碼改動,云數據庫 Tair(兼容 Redis)提供Sentinel兼容模式。開啟該功能后,您可以像連接開源Redis Sentinel一樣連接Tair(以及Redis開源版實例。

Redis Sentinel簡介

Redis Sentinel為開源Redis提供主從實例監控、故障告警、自動故障切換等服務,很多使用本地自建Redis數據庫并且對可靠性要求較高的業務場景都用到了Sentinel。為了給這類場景中的Redis數據庫遷移上云提供方便,阿里云開發了Sentinel兼容模式。開啟Sentinel兼容模式后,您可以使用如下的Sentinel相關命令:

命令

說明

SENTINEL sentinels

查詢master的Sentinel實例列表以及這些Sentinel實例的狀態。使用方式:

SENTINEL sentinels <任意名稱>

SENTINEL get-master-addr-by-name

查詢master的IP地址和端口號。使用方式:

SENTINEL get-master-addr-by-name <任意名稱>

關于Sentinel相關命令在各版本中的支持度,請參見Redis開源版命令支持

前提條件

  • 實例的版本為兼容Redis 4.0及以上。

  • 實例的網絡類型為專有網絡。

    說明

    如果實例為經典網絡,切換方法請參見切換為專有網絡VPC

  • 已將客戶端的IP地址(ECS實例的內網IP地址或本地主機的外網IP地址)加入實例白名單

操作步驟

  1. 訪問實例列表,在上方選擇地域,然后單擊目標實例ID。

  2. 實例信息頁的左側導航欄中,單擊參數設置

  3. 根據實例架構,通過修改對應的參數開啟Sentinel兼容模式,具體操作請參見設置參數

    • 若實例為集群架構代理模式或讀寫分離架構:將sentinel_compat_enable參數的值修改為1

    • 若實例為標準架構:將#no_loose_sentinel-enabled參數的值修改為yes

    說明
    • 您可以在實例詳情頁確認實例的架構信息。

    • 集群架構直連模式使用開源Redis Cluster進行負載均衡,無需Sentinel組件,也不支持設置Sentinel參數。

  4. (可選)開啟后,您可以連接實例,執行SENTINEL sentinels test命令進行測試,執行成功表示實例已開啟Redis Sentinel兼容模式。

    Sentinel兼容模式不提供額外的連接地址,您可以直接通過原連接地址(例如r-********.redis.rds.aliyuncs.com:6379)進行連接。

    說明
    • 如需設置SENTINEL命令免密,您可以將#no_loose_sentinel-password-free-access參數設置為yes,使用SUBSCRIBESENTINEL命令訂閱、監聽+switch-master通道免密

    • 如需更多免密命令,您可以在開啟上述免密參數后,通過#no_loose_sentinel-password-free-commands參數額外添加免密的命令列表。

Sentinel連接示例

開啟Sentinel兼容模式后,有兩種方式連接實例:若實例開啟專有網絡免密訪問,您可以通過Sentinel模式免密連接實例;若未開啟免密訪問,您需要在連接時配置驗證信息。

Sentinel免密連接

說明

開啟專有網絡免密訪問的具體操作,請參見開啟專有網絡免密訪問

阿里云Redis Sentinel兼容模式連接代碼配置示例如下。

Spring Data Redis

本示例的Spring Data Redis版本為2.4.2。

    @Bean
    public JedisConnectionFactory connectionFactory() {
        RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
                .master("testmaster")
                .sentinel("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", 6379);
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        ...
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory(sentinelConfig, poolConfig);
        return connectionFactory;
    }

參數說明:

  • master:自定義名稱,可保持默認,例如testmaster

  • sentinel:實例的專有網絡連接地址與端口號,用英文逗號(,)分隔,例如"r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", 6379

redis-py

本示例的Python版本為3.9、redis-py版本為4.3.6。

from redis.sentinel import Sentinel
SENTINEL_HOST = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com"
SENTINEL_PORT = 6379
SENTINEL_MASTER_NAME = "testmaster"

sentinel = Sentinel([(SENTINEL_HOST, SENTINEL_PORT)])
r = sentinel.master_for(SENTINEL_MASTER_NAME, db=0)
r.set('foo', 'bar')
print(r.get('foo'))

參數說明:

  • SENTINEL_HOSTSENTINEL_PORT:實例的專有網絡連接地址與端口號。

  • SENTINEL_MASTER_NAME:自定義名稱,可保持默認,例如testmaster

Sentinel密碼連接

阿里云Redis Sentinel兼容模式連接代碼配置示例如下

Java

本示例以Java客戶端的最低版本為例,客戶端版本要求如下:

  • Jedis為3.6.0版本及以上。

  • Lettuce為5.3.0.RELEASE版本及以上。

  • Spring Data Redis為2.5.1版本及以上,同時需要配置spring.redis.sentinel.password參數。

說明

強烈建議您升級最新穩定版本客戶端,最新版本請搜索MVN Repository

        String masterName = "any-name";
        Set<String> sentinels = new HashSet<>();
        sentinels.add("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379");
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        String dbPassword = "testaccount:Rp829dlwa";
        String sentinelPassword = "testaccount:Rp829dlwa";

        JedisSentinelPool jedisSentinelPool =
                new JedisSentinelPool(masterName, sentinels, poolConfig,
                        2000, 2000, dbPassword,
                        0, null, 2000, 2000,
                        sentinelPassword, null);

參數說明:

  • masterName:自定義名稱,可保持默認,例如testmaster

  • sentinels.add:設置為實例的專有網絡連接地址和端口號,格式為r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379

  • dbPasswordsentinelPassword:設置為實例賬號的密碼。根據選取賬號的不同,密碼的填寫格式有一定區別。如果忘記密碼,您可以重置密碼。具體操作,請參見修改或重置密碼

    說明
    • 默認賬號(即以實例ID命名的賬號):直接填寫密碼即可。

    • 新創建的賬號:密碼格式為<user>:<password>,默認賬號也支持此認證方式。例如自定義賬號為testaccount,密碼為Rp829dlwa,密碼需填寫為testaccount:Rp829dlwa

redis-py

本示例的Python版本為3.9、redis-py版本為4.3.6。

from redis.sentinel import Sentinel
SENTINEL_HOST = "r-bp10noxlhcoim2****.rds.aliyuncs.com"
SENTINEL_PORT = 6379
SENTINEL_MASTER_NAME = "redis_master"  # 注意:此名稱不可更改
SENTINEL_REDIS_PWD = "testaccount:Rp829dlwa"

conf = {
    'password': SENTINEL_REDIS_PWD,
}

sentinel = Sentinel([(SENTINEL_HOST, SENTINEL_PORT)], sentinel_kwargs=conf)
r = sentinel.master_for(SENTINEL_MASTER_NAME, db=0, **conf)
r.set('foo', 'bar')
print(r.get('foo'))

參數說明:

  • SENTINEL_HOSTSENTINEL_PORT:實例的專有網絡連接地址與端口號。

  • SENTINEL_MASTER_NAME:SENTINEL名稱,此名稱不可更改,固定為redis_master

  • SENTINEL_REDIS_PWD:實例賬號的密碼。

常見問題

  • Q:原來使用自建Redis Sentinel模式,切換至Redis Sentinel兼容模式后,遇到NOAUTH Authentication required錯誤該怎么處理?

    A:您可以啟用#no_loose_sentinel-password-free-access參數(設置為yes),即可在不開啟VPC免密功能的情況下,在VPC連接地址中實現Sentinel免密連接。

    若實例為Redis 6.0以下,請升級您的客戶端,并修改部分代碼用以添加Sentinel認證密碼,再進行重試。更多信息,請參見本文中的Sentinel密碼連接

  • Q:Redis倚天版實例支持Sentinel兼容模式嗎?

    A:支持。