什麼是Sentinel?
sentinel(哨兵)監控redis的運作情況,保證了redis的高可用性。主要功能包括兩個:1)、監控主伺服器和從伺服器是否正常運作;2)、主伺服器出現故障時,從伺服器自動切換成主伺服器。一個sentinel執行個體可以監控任意多個主伺服器,以及主伺服器下從伺服器;同樣,也可以使用多個sentinel來監控一個(多個redis伺服器組成的)redis系統。此時,多個sentinel也會互相監控,整個監控系統會更加完善。
Sentinel的實作原理
1、判斷redis伺服器下線(故障)
哨兵啟動後,會與redis主伺服器、redis從伺服器建立連接配接。哨兵會每隔1秒會向redis主伺服器、redis從伺服器和其他哨兵發送ping指令,通過ping指令傳回的結果來判斷對方是否線上。哨兵配置檔案(sentinel.conf)中sentinel down-after-milliseconds <master-name> <milliseconds>指定了哨兵判斷redis伺服器進入主觀下線的時間。如果redis伺服器在milliseconds(機關是毫秒)内向哨兵傳回無效回複,則哨兵認為該伺服器進入主觀下線狀态,當哨兵将某個redis伺服器(假設是redis主伺服器)認定為主觀下線時,哨兵會繼續向其他監控該redis主伺服器的哨兵發送指令,詢問該主伺服器是否真的下線,當哨兵從其他哨兵接收到足夠數量的(redis主伺服器)已下線判斷後,哨兵就會将該redis主伺服器判斷為客觀下線,并對主伺服器執行故障轉移。
2、故障轉移
故障恢複需要由領頭哨兵完成,選舉領頭哨兵是由raft算法完成(zookeeper的核心算法,想了解的可以百度下),選舉出領頭哨兵後,将會對redis主伺服器進行故障轉移。領頭哨兵會從停止服務的redis主伺服器的從伺服器中選出一個來當新的主伺服器,依據是優先級最高的從伺服器。優先級設定在redis配置檔案的replica-priority選項(參考【Redis的配置檔案】 )。選出一個從伺服器後,領頭哨兵會向從伺服器發送指令(slaveof no one)使其關閉複制功能并更新為主伺服器,接着會向其他伺服器發送指令(slaveof 新主伺服器.ip 新主伺服器.port)來使它們成為新主伺服器的從伺服器。最後,将停止服務的舊的主伺服器設定為新主伺服器的從伺服器,這樣,當舊的主伺服器重新啟動服務時,它将會以新主伺服器的從伺服器來進行運作。
Sentinel配置
1、在多個linux伺服器上安裝redis服務或者一台伺服器安裝不同端口的多個redis服務;
2、針對這多個redis服務進行主從複制配置;
3、配置sentinel.conf檔案;
4、啟動sentinel服務
在128上啟動4個redis服務(一主三從)來記錄下Sentinel需要怎麼樣配置,下面簡單地寫下步驟
第一步:打開一個視窗,記為視窗1,進入redis目錄
[[email protected] ~]# ps -ef|grep redis
root 2078 2058 0 13:16 pts/0 00:00:00 grep redis
[[email protected] ~]# cd /opt/redis-5.0.4
[[email protected] redis-5.0.4]# ls
00-RELEASENOTES appendonly.aof BUGS CONTRIBUTING COPYING deps dump.rdb INSTALL Makefile MANIFESTO README.md redis.conf runtest runtest-cluster runtest-sentinel sentinel.conf src tests utils
第二步:配置主從複制
複制redis的配置redis.conf,命名為redis6380.conf,并且修改配置,配置主從複制
[[email protected] redis-5.0.4]# cp redis.conf redis6380.conf
[[email protected] redis-5.0.4]# vim redis6380.conf
此次需要修改的配置
port 6380 設定端口
pidfile /var/run/redis_6380.pid pid檔案路徑
replicaof 192.168.136.128 6379 配置主機ip端口,配置主從複制
masterauth password(redis沒有設定密碼,則不需要配置)
replica-priority 10 優先級
已經修改過的:
bind 0.0.0.0
daemonize yes 不影響目前會話,啟動過程隐藏,守護程序
protected-mode no 關閉保護模式,其他伺服器可通路
然後再複制redis6380.conf,命名為redis6381.conf、redis6382.conf;配置相應修改(上面配置中的6380分别改成6381、6382);replica-priority分别設定為20、30
[[email protected] redis-5.0.4]# cp redis6380.conf redis6381.conf
[[email protected] redis-5.0.4]# cp redis6380.conf redis6382.conf
[[email protected] redis-5.0.4]# vim redis6381.conf
[[email protected] redis-5.0.4]# vim redis6382.conf
[[email protected] redis-5.0.4]# ls
00-RELEASENOTES BUGS COPYING dump.rdb Makefile README.md redis6381.conf redis.conf runtest-cluster sentinel.conf tests
appendonly.aof CONTRIBUTING deps INSTALL MANIFESTO redis6380.conf redis6382.conf runtest runtest-sentinel src utils
第三步:修改哨兵的配置檔案sentinel.conf
使用指令vim sentinel.conf 修改sentinel.conf檔案,簡單說明下需要注意的配置項:
port <sentinel-port>
哨兵端口,預設是26379,隻啟動單個sentinel,不需要修改,如果要運作多個sentinel,需要将這個端口号設定成唯一的,如:26380、26381等。
sentinel monitor <master-name> <ip> <redis-port> <quorum>
master-name表示要監控的redis名字,可以任意取,規則:由大小寫字母、數字、常用符号(如:下劃線等)組成;
<ip> <redis-port>表示redis伺服器的ip和端口号;
<quorum>表示最低通過票數,當redis主機發生故障時,從機選舉成主機的最少哨兵的同意個數。
sentinel auth-pass <master-name> <password>
設定redis連接配接的安全校驗密碼,沒有設定密碼的情況下,不需要配置。
sentinel down-after-milliseconds <master-name> <milliseconds>
判斷主機主觀下線的時間,當sentinel不斷向redis主機發送ping指令,在milliseconds(機關為毫秒,預設值為30000,即30S)時間内收不到回複,則認為主機主觀下線。
sentinel parallel-syncs <master-name> <numreplicas>
當新的主機産生時,複制新主機的從機數量,建議設定為1。
sentinel failover-timeout <master-name> <milliseconds>
故障轉移失敗時間,即在故障轉移開始後,如果在milliseconds時間内沒有任何操作,則認為故障轉移失敗,預設值為180000(3分鐘)。
[[email protected] redis-5.0.4]# vim sentinel.conf
修改成以下配置,然後儲存退出。
port 26379
sentinel monitor mymaster 192.168.136.128 6379 1
sentinel auth-pass mymaster password
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
第四步:啟動redis服務
[[email protected] redis-5.0.4]# pwd
/opt/redis-5.0.4
[[email protected] redis-5.0.4]# ./src/redis-server redis.conf &
^C
[[email protected] redis-5.0.4]# ./src/redis-server redis6380.conf &
^C
[[email protected] redis-5.0.4]# ./src/redis-server redis6381.conf &
^C
[[email protected] redis-5.0.4]# ./src/redis-server redis6382.conf &
^C
檢視下主從複制情況
6379~6382端口情況分别如下所示
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6379
127.0.0.1:6379> auth password
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.136.128,port=6380,state=online,offset=840,lag=0
slave1:ip=192.168.136.128,port=6381,state=online,offset=840,lag=0
slave2:ip=192.168.136.128,port=6382,state=online,offset=840,lag=1
master_replid:26d1c1a108f1b6a48def59de3dbee2e742d5b593
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:840
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:840
127.0.0.1:6379> quit
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6380
127.0.0.1:6380> auth password
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:192.168.136.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1064
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:26d1c1a108f1b6a48def59de3dbee2e742d5b593
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1064
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1064
127.0.0.1:6380> quit
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6381
127.0.0.1:6381> auth password
OK
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:192.168.136.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:1092
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:26d1c1a108f1b6a48def59de3dbee2e742d5b593
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1092
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:729
repl_backlog_histlen:364
127.0.0.1:6381> quit
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6382
127.0.0.1:6382> auth password
OK
127.0.0.1:6382> info replication
# Replication
role:slave
master_host:192.168.136.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1120
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:26d1c1a108f1b6a48def59de3dbee2e742d5b593
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1120
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:743
repl_backlog_histlen:378
以上說明主從複制配置成功。
第五步:重新打開一個視窗,記為視窗2,啟動sentinel服務
[[email protected] redis-5.0.4]# ./src/redis-sentinel sentinel.conf &
[5] 5941
[[email protected] redis-5.0.4]# 5941:X 19 Jun 2019 20:32:00.375 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5941:X 19 Jun 2019 20:32:00.375 # Redis version=5.0.4, bits=32, commit=00000000, modified=0, pid=5941, just started
5941:X 19 Jun 2019 20:32:00.375 # Configuration loaded
5941:X 19 Jun 2019 20:32:00.378 * Increased maximum number of open files to 10032 (it was originally set to 1024).
5941:X 19 Jun 2019 20:32:00.389 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now.
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.4 (00000000/0) 32 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 5941
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
5941:X 19 Jun 2019 20:32:00.395 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
5941:X 19 Jun 2019 20:32:00.416 # Sentinel ID is b5c6377a6935a9ef420689877be4fe259c865c62
5941:X 19 Jun 2019 20:32:00.416 # +monitor master mymaster 192.168.136.128 6379 quorum 1
5941:X 19 Jun 2019 20:32:00.420 * +slave slave 192.168.136.128:6380 192.168.136.128 6380 @ mymaster 192.168.136.128 6379
5941:X 19 Jun 2019 20:32:00.422 * +slave slave 192.168.136.128:6381 192.168.136.128 6381 @ mymaster 192.168.136.128 6379
5941:X 19 Jun 2019 20:32:00.425 * +slave slave 192.168.136.128:6382 192.168.136.128 6382 @ mymaster 192.168.136.128 6379
如上所示日志說明哨兵成功啟動,發現并監控了4個redis服務(主:6379,從:6380、6381、6382)。
測試故障轉移
視窗1切換到6379端口,在手動斷開redis服務
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6379
127.0.0.1:6379> auth password
OK
127.0.0.1:6379> shutdown
此時,視窗2(内容過多,中間省略一部分請求連接配接)會出現一系列日志,表示6379斷開,哨兵會ping 6379端口(沒有其他哨兵,不需要ping其他哨兵),一段時間後确定6379停止服務;
6191:M 19 Jun 2019 22:03:48.811 # User requested shutdown...
6191:M 19 Jun 2019 22:03:48.811 * Calling fsync() on the AOF file.
6191:M 19 Jun 2019 22:03:48.811 * Saving the final RDB snapshot before exiting.
6191:M 19 Jun 2019 22:03:48.813 * DB saved on disk
6191:M 19 Jun 2019 22:03:48.813 * Removing the pid file.
6191:M 19 Jun 2019 22:03:48.813 # Redis is now ready to exit, bye bye...
6209:S 19 Jun 2019 22:03:48.813 # Connection with master lost.
6209:S 19 Jun 2019 22:03:48.813 * Caching the disconnected master state.
6195:S 19 Jun 2019 22:03:48.813 # Connection with master lost.
6195:S 19 Jun 2019 22:03:48.813 * Caching the disconnected master state.
6201:S 19 Jun 2019 22:03:48.814 # Connection with master lost.
6201:S 19 Jun 2019 22:03:48.814 * Caching the disconnected master state.
6209:S 19 Jun 2019 22:03:49.146 * Connecting to MASTER 192.168.136.128:6379
6209:S 19 Jun 2019 22:03:49.146 * MASTER <-> REPLICA sync started
6209:S 19 Jun 2019 22:03:49.146 # Error condition on socket for SYNC: Connection refused
6195:S 19 Jun 2019 22:03:49.349 * Connecting to MASTER 192.168.136.128:6379
6195:S 19 Jun 2019 22:03:49.349 * MASTER <-> REPLICA sync started
6195:S 19 Jun 2019 22:03:49.349 # Error condition on socket for SYNC: Connection refused
6201:S 19 Jun 2019 22:03:49.474 * Connecting to MASTER 192.168.136.128:6379
6201:S 19 Jun 2019 22:03:49.474 * MASTER <-> REPLICA sync started
6201:S 19 Jun 2019 22:03:49.474 # Error condition on socket for SYNC: Connection refused
6209:S 19 Jun 2019 22:03:50.163 * Connecting to MASTER 192.168.136.128:6379
6209:S 19 Jun 2019 22:03:50.163 * MASTER <-> REPLICA sync started
6209:S 19 Jun 2019 22:03:50.163 # Error condition on socket for SYNC: Connection refused
6195:S 19 Jun 2019 22:03:50.368 * Connecting to MASTER 192.168.136.128:6379
6195:S 19 Jun 2019 22:03:50.368 * MASTER <-> REPLICA sync started
6195:S 19 Jun 2019 22:03:50.368 # Error condition on socket for SYNC: Connection refused
6201:S 19 Jun 2019 22:03:50.493 * Connecting to MASTER 192.168.136.128:6379
6201:S 19 Jun 2019 22:03:50.493 * MASTER <-> REPLICA sync started
6201:S 19 Jun 2019 22:03:50.493 # Error condition on socket for SYNC: Connection refused
6209:S 19 Jun 2019 22:03:51.182 * Connecting to MASTER 192.168.136.128:6379
6209:S 19 Jun 2019 22:03:51.182 * MASTER <-> REPLICA sync started
6209:S 19 Jun 2019 22:03:51.182 # Error condition on socket for SYNC: Connection refused
以下前兩行分别表示,哨兵主觀/客觀确定6379停止服務;然後進行故障恢複,選中6380為新的主伺服器(6380的優先級為10),6379改成6380的從伺服器;
6295:X 19 Jun 2019 22:04:18.849 # +sdown master mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:18.849 # +odown master mymaster 192.168.136.128 6379 #quorum 1/1
6295:X 19 Jun 2019 22:04:18.849 # +new-epoch 1
6295:X 19 Jun 2019 22:04:18.849 # +try-failover master mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:18.851 # +vote-for-leader b5c6377a6935a9ef420689877be4fe259c865c62 1
6295:X 19 Jun 2019 22:04:18.851 # +elected-leader master mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:18.851 # +failover-state-select-slave master mymaster 192.168.136.128 6379
6209:S 19 Jun 2019 22:04:18.860 * Connecting to MASTER 192.168.136.128:6379
6209:S 19 Jun 2019 22:04:18.860 * MASTER <-> REPLICA sync started
6209:S 19 Jun 2019 22:04:18.860 # Error condition on socket for SYNC: Connection refused
6295:X 19 Jun 2019 22:04:18.954 # +selected-slave slave 192.168.136.128:6380 192.168.136.128 6380 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:18.954 * +failover-state-send-slaveof-noone slave 192.168.136.128:6380 192.168.136.128 6380 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:19.012 * +failover-state-wait-promotion slave 192.168.136.128:6380 192.168.136.128 6380 @ mymaster 192.168.136.128 6379
6195:M 19 Jun 2019 22:04:19.013 # Setting secondary replication ID to 4247c484661438513d44520afd22e0babf0bee82, valid up to offset: 46099. New replication ID is f58614e1683a6e277dc85e4b33a40e3b6b069f45
6195:M 19 Jun 2019 22:04:19.013 * Discarding previously cached master state.
6195:M 19 Jun 2019 22:04:19.013 * MASTER MODE enabled (user request from 'id=10 addr=192.168.136.128:49072 fd=7 name=sentinel-b5c6377a-cmd age=204 idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=140 qbuf-free=32628 obl=36 oll=0 omem=0 events=r cmd=exec')
6195:M 19 Jun 2019 22:04:19.017 # CONFIG REWRITE executed with success.
6201:S 19 Jun 2019 22:04:19.266 * Connecting to MASTER 192.168.136.128:6379
6201:S 19 Jun 2019 22:04:19.266 * MASTER <-> REPLICA sync started
6201:S 19 Jun 2019 22:04:19.266 # Error condition on socket for SYNC: Connection refused
6295:X 19 Jun 2019 22:04:19.473 # +promoted-slave slave 192.168.136.128:6380 192.168.136.128 6380 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:19.473 # +failover-state-reconf-slaves master mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:19.516 * +slave-reconf-sent slave 192.168.136.128:6381 192.168.136.128 6381 @ mymaster 192.168.136.128 6379
6201:S 19 Jun 2019 22:04:19.516 * REPLICAOF 192.168.136.128:6380 enabled (user request from 'id=10 addr=192.168.136.128:55264 fd=7 name=sentinel-b5c6377a-cmd age=205 idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=300 qbuf-free=32468 obl=36 oll=0 omem=0 events=r cmd=exec')
6201:S 19 Jun 2019 22:04:19.518 # CONFIG REWRITE executed with success.
6209:S 19 Jun 2019 22:04:19.875 * Connecting to MASTER 192.168.136.128:6379
6209:S 19 Jun 2019 22:04:19.876 * MASTER <-> REPLICA sync started
6209:S 19 Jun 2019 22:04:19.876 # Error condition on socket for SYNC: Connection refused
6201:S 19 Jun 2019 22:04:20.282 * Connecting to MASTER 192.168.136.128:6380
6201:S 19 Jun 2019 22:04:20.282 * MASTER <-> REPLICA sync started
6201:S 19 Jun 2019 22:04:20.282 * Non blocking connect for SYNC fired the event.
6201:S 19 Jun 2019 22:04:20.282 * Master replied to PING, replication can continue...
6201:S 19 Jun 2019 22:04:20.282 * Trying a partial resynchronization (request 4247c484661438513d44520afd22e0babf0bee82:46099).
6195:M 19 Jun 2019 22:04:20.282 * Replica 192.168.136.128:6381 asks for synchronization
6195:M 19 Jun 2019 22:04:20.282 * Partial resynchronization request from 192.168.136.128:6381 accepted. Sending 168 bytes of backlog starting from offset 46099.
6201:S 19 Jun 2019 22:04:20.282 * Successful partial resynchronization with master.
6201:S 19 Jun 2019 22:04:20.282 # Master replication ID changed to f58614e1683a6e277dc85e4b33a40e3b6b069f45
6201:S 19 Jun 2019 22:04:20.282 * MASTER <-> REPLICA sync: Master accepted a Partial Resynchronization.
6295:X 19 Jun 2019 22:04:20.497 * +slave-reconf-inprog slave 192.168.136.128:6381 192.168.136.128 6381 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:20.497 * +slave-reconf-done slave 192.168.136.128:6381 192.168.136.128 6381 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:20.555 * +slave-reconf-sent slave 192.168.136.128:6382 192.168.136.128 6382 @ mymaster 192.168.136.128 6379
6209:S 19 Jun 2019 22:04:20.556 * REPLICAOF 192.168.136.128:6380 enabled (user request from 'id=10 addr=192.168.136.128:60387 fd=7 name=sentinel-b5c6377a-cmd age=206 idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=155 qbuf-free=32613 obl=36 oll=0 omem=0 events=r cmd=exec')
6209:S 19 Jun 2019 22:04:20.557 # CONFIG REWRITE executed with success.
6209:S 19 Jun 2019 22:04:20.893 * Connecting to MASTER 192.168.136.128:6380
6209:S 19 Jun 2019 22:04:20.893 * MASTER <-> REPLICA sync started
6209:S 19 Jun 2019 22:04:20.893 * Non blocking connect for SYNC fired the event.
6209:S 19 Jun 2019 22:04:20.893 * Master replied to PING, replication can continue...
6209:S 19 Jun 2019 22:04:20.893 * Trying a partial resynchronization (request 4247c484661438513d44520afd22e0babf0bee82:46099).
6195:M 19 Jun 2019 22:04:20.893 * Replica 192.168.136.128:6382 asks for synchronization
6195:M 19 Jun 2019 22:04:20.893 * Partial resynchronization request from 192.168.136.128:6382 accepted. Sending 168 bytes of backlog starting from offset 46099.
6209:S 19 Jun 2019 22:04:20.893 * Successful partial resynchronization with master.
6209:S 19 Jun 2019 22:04:20.893 # Master replication ID changed to f58614e1683a6e277dc85e4b33a40e3b6b069f45
6209:S 19 Jun 2019 22:04:20.893 * MASTER <-> REPLICA sync: Master accepted a Partial Resynchronization.
6295:X 19 Jun 2019 22:04:21.568 * +slave-reconf-inprog slave 192.168.136.128:6382 192.168.136.128 6382 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:21.568 * +slave-reconf-done slave 192.168.136.128:6382 192.168.136.128 6382 @ mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:21.671 # +failover-end master mymaster 192.168.136.128 6379
6295:X 19 Jun 2019 22:04:21.671 # +switch-master mymaster 192.168.136.128 6379 192.168.136.128 6380
6295:X 19 Jun 2019 22:04:21.671 * +slave slave 192.168.136.128:6381 192.168.136.128 6381 @ mymaster 192.168.136.128 6380
6295:X 19 Jun 2019 22:04:21.671 * +slave slave 192.168.136.128:6382 192.168.136.128 6382 @ mymaster 192.168.136.128 6380
6295:X 19 Jun 2019 22:04:21.671 * +slave slave 192.168.136.128:6379 192.168.136.128 6379 @ mymaster 192.168.136.128 6380
6295:X 19 Jun 2019 22:04:51.674 # +sdown slave 192.168.136.128:6379 192.168.136.128 6379 @ mymaster 192.168.136.128 6380
在視窗1中檢視程序,6379端口的redis為停止服務狀态
[[email protected] redis-5.0.4]# ps -ef|grep redis
root 6195 6123 0 21:51 pts/0 00:00:02 ./src/redis-server 0.0.0.0:6380
root 6201 6123 0 21:51 pts/0 00:00:01 ./src/redis-server 0.0.0.0:6381
root 6209 6123 0 21:52 pts/0 00:00:01 ./src/redis-server 0.0.0.0:6382
root 6295 6123 0 22:00 pts/0 00:00:03 ./src/redis-sentinel *:26379 [sentinel]
root 6362 6254 0 22:23 pts/1 00:00:00 grep redis
視窗1:切換到6380端口,檢視目前redis系統的情況
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6380
127.0.0.1:6380> auth password
OK
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.136.128,port=6381,state=online,offset=150755,lag=1
slave1:ip=192.168.136.128,port=6382,state=online,offset=150755,lag=0
master_replid:f58614e1683a6e277dc85e4b33a40e3b6b069f45
master_replid2:4247c484661438513d44520afd22e0babf0bee82
master_repl_offset:150755
second_repl_offset:46099
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_hist
主伺服器為6380,從伺服器為6381、6382,6379服務未啟動。
視窗1:修改redis.conf檔案中配置
masterauth password(redis沒有設定密碼,則不需要配置)
重新開機6379
127.0.0.1:6380> quit
[ro[email protected] redis-5.0.4]# ./src/redis-server redis.conf &
視窗2:
6195:M 19 Jun 2019 22:39:07.055 * Replica 192.168.136.128:6379 asks for synchronization
6195:M 19 Jun 2019 22:39:07.055 * Full resync requested by replica 192.168.136.128:6379
6195:M 19 Jun 2019 22:39:07.055 * Starting BGSAVE for SYNC with target: disk
6195:M 19 Jun 2019 22:39:07.055 * Background saving started by pid 6497
6497:C 19 Jun 2019 22:39:07.057 * DB saved on disk
6497:C 19 Jun 2019 22:39:07.057 * RDB: 0 MB of memory used by copy-on-write
6195:M 19 Jun 2019 22:39:07.078 * Background saving terminated with success
6195:M 19 Jun 2019 22:39:07.078 * Synchronization with replica 192.168.136.128:6379 succeeded
6295:X 19 Jun 2019 22:39:07.111 * +reboot slave 192.168.136.128:6379 192.168.136.128 6379 @ mymaster 192.168.136.128 6380
再次切換到6380,檢視redis系統資訊
[[email protected] redis-5.0.4]# ./src/redis-cli -p 6380
127.0.0.1:6380> auth password
OK
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.136.128,port=6381,state=online,offset=214912,lag=1
slave1:ip=192.168.136.128,port=6382,state=online,offset=215057,lag=0
slave2:ip=192.168.136.128,port=6379,state=online,offset=214912,lag=1
master_replid:f58614e1683a6e277dc85e4b33a40e3b6b069f45
master_replid2:4247c484661438513d44520afd22e0babf0bee82
master_repl_offset:215057
second_repl_offset:46099
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:215057
以上就是redis中sentinel的簡單介紹。
如果有寫的不對的地方,請大家多多批評指正,非常感謝!