天天看點

redis哨兵模式一主二從三哨兵的高可用叢集筆記

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節點,當主執行個體當機,則通過選舉機制,把一個從節點更新為主節點,原來的主節點降級為從節點

  • 圖解
    redis哨兵模式一主二從三哨兵的高可用叢集筆記
  • 故障轉移

    我們先用info replication檢視一下三個節點的狀态

    redis哨兵模式一主二從三哨兵的高可用叢集筆記

    很明顯看出6379是master主節點,6380、6381是slave從節點

    這時候我們關掉端口6379的主節點,再info replication看看,很明顯6380的從節點更新為了主節點

    redis哨兵模式一主二從三哨兵的高可用叢集筆記
    我們再次啟動6379的redis,原來6379的主節點降級為了slave的從節點
    redis哨兵模式一主二從三哨兵的高可用叢集筆記
  • 代碼驗證一下

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的一個值了

redis哨兵模式一主二從三哨兵的高可用叢集筆記

然後我們在主節點和從節點都看到有這個key的值了

redis哨兵模式一主二從三哨兵的高可用叢集筆記

當6379的節點挂了之後我們再run一下,結果也是正常的,因為6380的從節點更新為主節點,redis哨兵模式實作了高可用

繼續閱讀