ApsaraDB for Redis採用自研的高可用服務HA組件,無需依賴Sentinel(哨兵)。但為了提高ApsaraDB for Redis的相容性,減少代碼改動,ApsaraDB for Redis提供Sentinel相容模式,開啟後用戶端可以像串連開源Redis Sentinel一樣串連Tair執行個體。
Redis Sentinel簡介
前提條件
Redis執行個體的版本為4.0及以上。
Redis執行個體的網路類型為專用網路。
說明如果執行個體為傳統網路,切換方法請參見切換為Virtual Private Cloud。
已將用戶端的IP地址(ECS執行個體的內網IP地址或本地主機的外網IP地址)加入Redis白名單。
操作步驟
訪問Redis執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在執行個體資訊頁的左側導覽列中,單擊參數設定。
根據執行個體架構,通過修改對應的參數開啟Sentinel相容模式,具體操作請參見設定執行個體參數。
若執行個體為叢集架構代理模式或讀寫分離架構:將sentinel_compat_enable參數的值修改為1。
若執行個體為標準架構:將#no_loose_sentinel-enabled參數的值修改為yes。
說明您可以在執行個體詳情頁確認執行個體的架構資訊。
叢集架構直連模式使用開源Redis Cluster進行負載平衡,無需Sentinel組件,也不支援設定Sentinel參數。
開啟後,您可以串連執行個體,執行
SENTINEL sentinels test
命令進行測試,執行成功表示執行個體已開啟Redis Sentinel相容模式。Sentinel相容模式不提供額外的串連地址,您可以直接通過原串連地址(例如r-********.redis.rds.aliyuncs.com:6379
)進行串連。
Sentinel串連樣本
開啟Sentinel相容模式後,有兩種方式串連Redis執行個體:若執行個體開啟專用網路免密訪問,您可以通過Sentinel模式免密串連Redis執行個體;若未開啟免密訪問,您需要在串連時配置驗證資訊。
Sentinel免密串連
開啟專用網路免密訪問的具體操作,請參見開啟專用網路免密訪問。
本樣本以Spring Data Redis為例,阿里雲Redis Sentinel相容模式串連代碼配置樣本如下:
@Bean
public JedisConnectionFactory connectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("testmaster")
.sentinel("r-********.redis.rds.aliyuncs.com", 6379);
JedisPoolConfig poolConfig = new JedisPoolConfig();
...
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(sentinelConfig, poolConfig);
return connectionFactory;
}
參數說明:
master:自訂名稱,可保持預設,例如
testmaster
。sentinel:Redis執行個體的專用網路串連地址與連接埠號碼,用英文逗號(,)分隔,例如
"r-********.redis.rds.aliyuncs.com", 6379
。
Sentinel密碼串連
本樣本以Java用戶端的最低版本為例,用戶端版本要求如下:
Jedis為3.6.0版本及以上。
Lettuce為5.3.0.RELEASE版本及以上。
Spring Data Redis為2.5.1版本及以上,同時需要配置spring.redis.sentinel.password參數。
強烈建議您升級最新穩定版本用戶端,最新版本請搜尋MVN Repository。
阿里雲Redis Sentinel相容模式串連代碼配置樣本如下:
String masterName = "any-name";
Set<String> sentinels = new HashSet<>();
sentinels.add("r-********.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:設定為Redis執行個體的專用網路串連地址和連接埠號碼,格式為
r-********.redis.rds.aliyuncs.com:6379
。dbPassword與sentinelPassword:設定為Redis執行個體帳號的密碼。根據選取帳號的不同,密碼的填寫格式有一定區別。如果忘記密碼,您可以重設密碼。具體操作,請參見修改或重設密碼。
說明預設帳號(即以執行個體ID命名的帳號):直接填寫密碼即可。
新建立的帳號:密碼格式為
<user>:<password>
,預設帳號也支援此認證方式。例如自訂帳號為testaccount
,密碼為Rp829dlwa
,密碼需填寫為testaccount:Rp829dlwa
。
常見問題
Q:原來使用自建Redis Sentinel模式,切換至Tair Sentinel後,遇到
NOAUTH Authentication required
錯誤該怎麼處理?A:請升級您的用戶端,並修改部分代碼用以添加Sentinel認證密碼,再進行重試。更多資訊,請參見本文中的Sentinel密碼串連。
Q:Redis經濟版執行個體支援Sentinel相容模式嗎?
A:支援。