Redis-哨兵機制,實現高可用

概述

Redis哨兵爲Redis提供了高可用性。實際上這意味着你可以使用哨兵模式創建一個可以不用人爲干預而應對各種故障的Redis部署。

哨兵模式還提供了其他的附加功能,如監控,通知,爲客戶端提供配置。

下面是在宏觀層面上哨兵模式的功能列表:

  • :哨兵不斷的檢查master和slave是否正常的運行。

  • 通知:當監控的某臺Redis實例發生問題時,可以通過API通知系統管理員和其他的應用程序。

  • 自動故障轉移:如果一個master不正常運行了,哨兵可以啓動一個故障轉移進程,將一個slave升級成爲master,其他的slave被重新配置使用新的master,並且應用程序使用Redis服務端通知的新地址。

  • 配置提供者:哨兵作爲Redis客戶端發現的權威來源:客戶端連接到哨兵請求當前可靠的master的地址。如果發生故障,哨兵將報告新地址。


IP劃分:

10.0.0.140 redis-Master

10.0.0.141 redis-Slave1

10.0.0.142 redis-Slave2


拓撲圖:

捕獲.PNG



操作過程:

三臺安裝配置過程一樣

1.安裝依賴包

[root@redis-Master ~]# yum install gcc gcc-c++ -y


2.下載安裝包,解壓

[root@redis-Master ~]# cd /usr/local/src/
[root@redis-Master src]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz
[root@redis-Master src]# tar -zxvf redis-4.0.1.tar.gz


3創建redis用戶和目錄

[root@redis-Master ~]# useradd redis
[root@redis-Master ~]# mkdir /usr/local/redis


4.將解壓的redis移動到剛創建的目錄,並賦予權限

[root@redis-Master ~]# cd /usr/local/src/
[root@redis-Master src]# mv redis-4.0.1/* /usr/local/redis
[root@redis-Master src]# chown -R redis:redis /usr/local/redis


5.編譯

[root@redis-Master ~]# cd /usr/local/redis/
[root@redis-Master redis]# make MALLOC=libc
[root@redis-Master redis]# make && make install


6.編輯配置文件

[root@redis-Master ~]# vim /usr/local/redis/redis.conf 


daemonize yes    #默認no,該參數用於定製redis服務是否以守護模式進行
protected-mode no   #保護模式是否開啓
bind 10.0.0.140 #本機ip
logfile "/var/log/redis/redis.log"   #日誌存放位置
dir /usr/local/redis/rdb   #數據存放位置
supervised systemd    #systemd 是一個類似 supervise 的守護進程,用於管理需要後臺運行的服務。



7.創建配置文件所需的目錄,並重新賦權

[root@redis-Master ~]# mkdir /usr/local/redis/rdb
[root@redis-Master ~]# chown -R redis:redis /usr/local/redis/
[root@redis-Master ~]# mkdir /var/log/redis
[root@redis-Master ~]# chown -R redis:redis /var/log/redis


8.創建啓動腳本,跟腳本執行權限

[root@redis-Master ~]# cat /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 10.0.0.140 -p 6379 shutdown
Restart=always
[Install]
WantedBy=multi-user.target

[root@redis-Master ~]# chmod 750 /usr/lib/systemd/system/redis.service


9.啓動測試

[root@redis-Master ~]# systemctl enable redis.service

[root@redis-Master ~]# systemctl start redis.service

[root@redis-Master ~]# systemctl status redis.service

● redis.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2017-12-11 13:10:01 CST; 5s ago
 Main PID: 4514 (redis-server)
   CGroup: /system.slice/redis.service
           └─4514 /usr/local/redis/src/redis-server 10.0.0.140:6379
12月 11 13:10:01 redis-Master systemd[1]: Started Redis persistent key-value database.
12月 11 13:10:01 redis-Master systemd[1]: Starting Redis persistent key-value database...


三臺都要配置哨兵

1.先配置主從(10.0.0.140是Master),另外兩臺爲Slave,

Slave配置如下

[root@redis-Slave1 ~]# vim /usr/local/redis/redis.conf 
slaveof 10.0.0.140 6379
[root@redis-Slave2 ~]# vim /usr/local/redis/redis.conf 
slaveof 10.0.0.140 6379


2.配置哨兵(只改IP)

[root@redis-Master~]# vim /usr/local/redis/sentinel.conf 

sentinel monitor mymaster 10.0.0.140 6379 2 #(只改IP)
protected-mode no


配置完Redis和Sentinel之後,按順序啓動各個角色。啓動順序如下:

Master->Slave->Sentinel,要確保按照這個順序依次啓動。

Sentinel的啓動命令和Redis類似。


測試:

[root@redis-Master ~]# cd /usr/local/redis/

[root@redis-Master redis]# redis-sentinel sentinel.conf 

4559:X 11 Dec 13:26:34.859 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4559:X 11 Dec 13:26:34.859 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=4559, just started
4559:X 11 Dec 13:26:34.859 # Configuration loaded
4559:X 11 Dec 13:26:34.860 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.1 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 4559
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
4559:X 11 Dec 13:26:34.862 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4559:X 11 Dec 13:26:34.863 # Sentinel ID is 33890665f4d321bbf024646efdd169a16713e953
4559:X 11 Dec 13:26:34.863 # +monitor master mymaster 10.0.0.140 6379 quorum 2
4559:X 11 Dec 13:26:34.864 * +slave slave 10.0.0.141:6379 10.0.0.141 6379 @ mymaster 10.0.0.140 6379
4559:X 11 Dec 13:26:34.865 * +slave slave 10.0.0.142:6379 10.0.0.142 6379 @ mymaster 10.0.0.140 6379
4559:X 11 Dec 13:27:01.069 * +sentinel sentinel 8583cec1a7634843d0141f9a7e00e5ee5f0b4293 10.0.0.141 26379 @ mymaster 10.0.0.140 6379
4559:X 11 Dec 13:27:12.489 * +sentinel sentinel 715f518a156837119ddf282b86b4fae992b4602c 10.0.0.142 26379 @ mymaster 10.0.0.140 6379


以客戶端方式查看主從

[root@redis-Slave2 ~]# cd /usr/local/redis/
[root@redis-Slave2 redis]# src/redis-cli -h 10.0.0.140 -p 26379 INFO Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.0.0.140:6379,slaves=2,sentinels=3


模擬故障將Master,down

捕獲.PNG


哨兵模式會自動切換Master

[root@redis-Slave1 redis]# src/redis-sentinel sentinel.conf 

14157:X 11 Dec 13:26:59.038 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
14157:X 11 Dec 13:26:59.038 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=14157, just started
14157:X 11 Dec 13:26:59.038 # Configuration loaded
14157:X 11 Dec 13:26:59.039 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.1 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 14157
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
14157:X 11 Dec 13:26:59.041 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
14157:X 11 Dec 13:26:59.042 # Sentinel ID is 8583cec1a7634843d0141f9a7e00e5ee5f0b4293
14157:X 11 Dec 13:26:59.042 # +monitor master mymaster 10.0.0.140 6379 quorum 2
14157:X 11 Dec 13:26:59.043 * +slave slave 10.0.0.141:6379 10.0.0.141 6379 @ mymaster 10.0.0.140 6379
14157:X 11 Dec 13:26:59.044 * +slave slave 10.0.0.142:6379 10.0.0.142 6379 @ mymaster 10.0.0.140 6379
14157:X 11 Dec 13:26:59.359 * +sentinel sentinel 33890665f4d321bbf024646efdd169a16713e953 10.0.0.140 26379 @ mymaster 10.0.0.140 6379
14157:X 11 Dec 13:27:12.474 * +sentinel sentinel 715f518a156837119ddf282b86b4fae992b4602c 10.0.0.142 26379 @ mymaster 10.0.0.140 6379
14157:X 11 Dec 13:31:43.607 # +sdown master mymaster 10.0.0.140 6379
14157:X 11 Dec 13:31:43.607 # +sdown sentinel 33890665f4d321bbf024646efdd169a16713e953 10.0.0.140 26379 @ mymaster 10.0.0.140 6379
14157:X 11 Dec 13:31:48.835 # +new-epoch 1
14157:X 11 Dec 13:31:50.877 # +vote-for-leader 715f518a156837119ddf282b86b4fae992b4602c 1
14157:X 11 Dec 13:31:50.877 # +tilt #tilt mode entered
14157:X 11 Dec 13:32:20.887 # -tilt #tilt mode exited
14157:X 11 Dec 13:32:20.887 # +odown master mymaster 10.0.0.140 6379 #quorum 2/2
14157:X 11 Dec 13:32:20.887 # Next failover delay: I will not start a failover before Mon Dec 11 13:37:51 2017
14157:X 11 Dec 13:32:21.759 # +config-update-from sentinel 715f518a156837119ddf282b86b4fae992b4602c 10.0.0.142 26379 @ mymaster 10.0.0.140 6379
14157:X 11 Dec 13:32:21.759 # +switch-master mymaster 10.0.0.140 6379 10.0.0.142 6379
14157:X 11 Dec 13:32:21.760 * +slave slave 10.0.0.141:6379 10.0.0.141 6379 @ mymaster 10.0.0.142 6379
14157:X 11 Dec 13:32:21.760 * +slave slave 10.0.0.140:6379 10.0.0.140 6379 @ mymaster 10.0.0.142 6379


以客戶端方式查看主從,實現了Master的自動切換

[root@redis-Slave2 redis]# src/redis-cli -h 10.0.0.142 -p 26379 INFO Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.0.0.142:6379,slaves=2,sentinels=3



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章