redis 2.8 以後提供了 Redis Sentinel 哨兵機制,如果主執行個體當機,哨兵将一台從機更新為主機,實作高可用。上一篇記錄了redis哨兵叢集搭建,這裡驗證高可用
-
模式類型
主從模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之後的模式)、redis cluster模式(redis3.0版本之後),我們這裡說的是第二種 哨兵sentinel模式
-
主從複制特點
1、一個master可以有多個slave
2、一個slave隻能有一個master
3、資料流向是單向的,master到slave
-
redis sentinel(哨兵)
哨兵負責監控redis節點,當主執行個體當機,則通過選舉機制,把一個從節點更新為主節點,原來的主節點降級為從節點
- 圖解
-
故障轉移
我們先用info replication檢視一下三個節點的狀态
很明顯看出6379是master主節點,6380、6381是slave從節點
這時候我們關掉端口6379的主節點,再info replication看看,很明顯6380的從節點更新為了主節點
我們再次啟動6379的redis,原來6379的主節點降級為了slave的從節點 - 代碼驗證一下
pom.xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
public class JedisClusterClient {
public static void main(String[] args) {
Set<String> sentinels = new HashSet<>(Arrays.asList("192.168.33.76:26379","192.168.33.76:26380","192.168.33.76:26381"));
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
JedisSentinelPool pool = new JedisSentinelPool("mymaster",sentinels,poolConfig);
Jedis jedis = pool.getResource();
jedis.set("test_msg","test_value");
String test_value = jedis.get("test_msg");
System.out.println("redis擷取的值:"+test_value);
jedis.close();
}
}
run完main方法,看到已經寫進redis的一個值了
然後我們在主節點和從節點都看到有這個key的值了
當6379的節點挂了之後我們再run一下,結果也是正常的,因為6380的從節點更新為主節點,redis哨兵模式實作了高可用