Redis高可用哨兵機制及SpringBoot整合哨兵

前言:在前面講到了Redis分片機制可實現內存數據的擴容來提升執行速率---Redis分片機制,但是Redis分片依舊有一些問題,若是redis分片的節點若是有一個服務器宕機,則直接影響用戶的使用.Redis分片機制沒有實現高可用功能(HA)。----我所使用的Linux系統是dsCentOS-emptyjava


1.Redis高可用哨兵機制

1.1主從同步配置

1.1.1 主從同步說明

說明:若是須要實現redis的高可用(HA),則必須先實現主從的同步。node

當用戶操做主節點時,由程序內部自動的實現數據的同步,將數據同步給從節點.這時主機和從機擁有相同的數據。redis

1.1.2 準備哨兵的Redis節點

說明:spring

1.首先將redis的分片服務器所有關閉。

在這裏插入圖片描述

2.複製分片的文件目錄,而且更名爲sentinel
cp  -r shards  sentinel
3.刪除多餘的持久化文件
rm -f dump.rdb

在這裏插入圖片描述

4.分別啓動redis
redis-server 6379.conf & redis-server 6380.conf & redis-server 6381.conf &

檢查Redis啓動是否正常.vim

在這裏插入圖片描述

1.1.3檢查Redis節點狀態

命令: 要求在redis的客戶端中執行服務器

info replication

role:master說明是主機,connevted_slaves:0 說明暫無從機測試

在這裏插入圖片描述

1.1.4實現主從掛載

設計方案: 6379當主機 6380/6381當從機。.net

在6380/6381中執行以下命令:
slaveof   主機的IP地址   主機的端口號

在這裏插入圖片描述

2.檢查主從的狀態

role:slave覺得着它是從機,master_host/port 是主機信息設計

在這裏插入圖片描述

3.向Redis的主機中添加數據,以後檢查6380/6381中是否有數據 是否實現數據的同步.

在這裏插入圖片描述

1.2Redis哨兵實現

1.2.1 哨兵工做原理

在這裏插入圖片描述

工做原理說明:3d

  1. 當哨兵啓動時,會根據配置文件監聽當前的主機.獲取主機的所有信息。

  2. 哨兵利用心跳檢測機制,判斷當前主機是否存活.若是連續3次 PING-PONG檢測時都沒有響應.則判定當前主機宕機。

  3. 若是發現主機宕機,則哨兵會經過監聽獲取當前主機的從節點信息,以後利用選舉規則,動態選擇新的主機。

  4. 若是一旦肯定新的主節點,則將其他的節點設置爲新主機的從。

1.2.2編輯哨兵配置文件

1.複製哨兵的配置文件
cp sentinel.conf  sentinel/
2.打開sentinel配置文件

記住是sentinel文件目錄下的配置文件

vim sentinel.conf
2.關閉保護模式
protected-mode no    17行
3.開啓後臺啓動
daemonize yes  26行

在這裏插入圖片描述

4.配置哨兵的監控

mymaster:表示變量的名稱. 表明着當前redis的主機.
1: 表明哨兵在選舉的過程當中幾票生效.

在這裏插入圖片描述

5.修改哨兵的宕機選舉時間

在這裏插入圖片描述

將主機宕機後,從機選爲主機的時間定爲了10秒。

6.保存配置

1.2.3測試哨兵高可用

1.啓動哨兵
redis-sentinel sentinel.conf
2.檢查哨兵服務是否啓動

在這裏插入圖片描述

3.高可用測試

將redis主機宕機,等待10秒(這是自定義的),檢查主從結構是否變化。

kill -9 22005

在這裏插入圖片描述

主機6379被宕機後,轉化爲了6380,說明哨兵的選舉一切正常。

從新啓動6379服務器,檢查是否爲6380的從機

在這裏插入圖片描述

重啓以後,檢查6379的狀態信息 6379已是6380的從機.哨兵高可用完成

在這裏插入圖片描述

2.SpringBoot整合哨兵

2.1 哨兵入門案例

若是哨兵機制服務器所有重啓,問 :是否須要從新配置主從,從新配置哨兵?

不須要
緣由:一旦使用哨兵.則會將主從信息寫入每一個節點的配置文件中.若是全部的節點都重啓則根據本身的配置文件的信息.實現主從的分配.

redis.conf文件標識:

replicaof 192.168.126.166 6380

sentinel.conf文件標識:

sentinel leader-epoch mymaster 1
sentinel known-replica mymaster 192.168.126.166 6379
sentinel known-replica mymaster 192.168.126.166 6381
sentinel current-epoch 1

測試哨兵機制

說明:用戶應該連接redis哨兵,而不是redis主機。

/**
         * 測試哨兵機制
         * masterName:當前主機的變量名稱
         */
        @Test
        public void testSentinel() {
            Set<String> sentinels = new HashSet<String>();
            sentinels.add("192.168.126.166:26379");
            JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
            Jedis jedis = pool.getResource();//1主2從 1備份2次
            jedis.set("sentinel", "AAAAA");
            System.out.println(jedis.get("sentinel"));
        }

2.2 SpringBoot整合Redis哨兵

2.2.1添加redis依賴(在測試哨兵以前添加)

<!--spring整合redis -->
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
</dependency>

2.2.2 編輯redis.properties文件

#標識IP地址和端口號信息 IP:PORT
redis.node=192.168.126.166:6379
redis.nodes=192.168.126.166:6379,192.168.126.166:6380,192.168.126.166:6381
redis.sentinel=192.168.126.166:26379

2.2.3 編輯redisConfig配置類

@Value("${redis.sentinel}")
    private String sentinel;    //node,node,node
    
    @Bean
    public Jedis jedis() {
        Set<String> sentinels = new HashSet<String>();
        sentinels.add(sentinel);
        JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
        return  pool.getResource();//1主2從 1備份2次
        
    }

2.2.4修改RedisAOP

說明:修改RedisAOP的對象注入

在這裏插入圖片描述

相關文章
相關標籤/搜索