Redis當中的Sentinel架構
Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 實例 組成的Sentinel 系統可以監視任意多個主服務器,以及這些主服務器屬下的所有從服務器,並在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級爲新的主服務器。
例如:
在Server1 掉線後:
升級Server2 爲新的主服務器:
第一步:三臺機器修改哨兵配置文件
三臺機器執行以下命令修改redis的哨兵配置文件
cd /export/servers/redis-3.2.8
vim sentinel.conf
# 配置監聽的主服務器,這裏sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,192.168.11.128代表監控的主服務器,6379代表端口,2代表只有兩個或兩個以上的哨兵認爲主服務器不可用的時候,纔會進行failover操作。
#修改bind配置,每臺機器修改爲自己對應的主機名
bind node01
#配置sentinel服務後臺運行
daemonize yes
#修改三臺機器監控的主節點,現在主節點是node01服務器
sentinel monitor mymaster node01 6379 2
# sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
# sentinel auth-pass <master-name> <password>
第二步:三臺機器啓動哨兵服務
三臺機器執行以下命令啓動哨兵服務
cd /export/servers/redis-3.2.8
src/redis-sentinel sentinel.conf
注意:此時redis-server和sentinel兩個都要啓動
第三步:node01服務器殺死redis服務進程
使用kill -9命令殺死redis服務進程,模擬redis故障宕機情況
過一段時間之後
就會在node02與node03服務器選擇一臺服務器來切換爲主節點
第四步:redis的sentinel模式代碼開發連接
public static void main(String[] args) {
//設置數據庫連接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//設置連接池的最大連接數
jedisPoolConfig.setMaxTotal(50);
//設置最大空閒數量
jedisPoolConfig.setMaxIdle(10);
//設置最小的空閒的數量
jedisPoolConfig.setMinIdle(5);
//連接超時時間(最大等待的時間)
jedisPoolConfig.setMaxWaitMillis(30000);
Set<String> sentinels = new HashSet<>(Arrays.asList("node01:26379","node02:26379","node03:26379"));
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster",sentinels,jedisPoolConfig);
Jedis jedis = jedisSentinelPool.getResource();
jedis.set("44","55");
String s = jedis.get("44");
System.out.println(s);
}