Redis主從集羣以及Sentinel的配置

安裝完redis後,修改幾個redis從節點的配置文件redis.conf,主要是加入主節點位置redis

slaveof 192.168.0.108 6379

另外須要修改的地方包括,這樣容許其餘的從節點連入服務器

bind 0.0.0.0
protected-mode no

啓動redis主節點和從節點架構

./redis-server redis.conf

查看主節點信息分佈式

./redis-cli -h 192.168.0.108  info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.0.104,port=6379,state=online,offset=169,lag=1
master_repl_offset:169
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:168

而在192.168.0104上查看信息,看到一方面做爲192.168.0.108的從節點,另外192.168.0.107從192.168.0.104上覆制數據.spa

[root@redisserver bin]# ./redis-cli -h 192.168.0.104  info Replication
# Replication
role:slave
master_host:192.168.0.108
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:281
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=192.168.0.107,port=6379,state=online,offset=14848,lag=0
master_repl_offset:14848
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:14847

 

在192.168.0.107上的信息code

./redis-cli -h 192.168.0.107 info Replication
# Replication
role:slave
master_host:192.168.0.104
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:25426
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

 

啓動Redis-sentinel哨兵服務server

Redis 的 Sentinel 系統用於管理多個 Redis 服務器(instance), 該系統執行如下三個任務:blog

  • 監控(Monitoring): Sentinel 會不斷地檢查你的主服務器和從服務器是否運做正常。
  • 提醒(Notification): 當被監控的某個 Redis 服務器出現問題時, Sentinel 能夠經過 API 向管理員或者其餘應用程序發送通知。
  • 自動故障遷移(Automatic failover): 當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器改成複製新的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣能夠使用新主服務器代替失效服務器。

Redis Sentinel 是一個分佈式系統, 你能夠在一個架構中運行多個 Sentinel 進程(progress), 這些進程使用流言協議(gossip protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪一個從服務器做爲新的主服務器。進程

雖然 Redis Sentinel 釋出爲一個單獨的可執行文件 redis-sentinel , 但實際上它只是一個運行在特殊模式下的 Redis 服務器, 你能夠在啓動一個普通 Redis 服務器時經過給定 –sentinel 選項來啓動 Redis Sentinel 。ip

在192.168.0.107上編輯一個sentinel.conf配置文件

sentinel monitor redisslave2 192.168.0.108 6379 1

意思是監聽主節點redisslave2主機名,ip爲192.168.0.108 6379,主實例判斷爲失效至少須要1個 Sentinel進程的贊成.

 

啓動sentinel進程

./redis-sentinel sentinel.conf

[root@redisslave1 bin]# ./redis-sentinel ../etc/sentinel.conf
31843:X 19 Jul 09:14:59.356 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 31843
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

31843:X 19 Jul 09:14:59.360 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
31843:X 19 Jul 09:14:59.369 # Sentinel ID is a29b3e6df6406c2870301cb39db0de5fc9bcf884
31843:X 19 Jul 09:14:59.369 # +monitor master redisslave2 192.168.0.108 6379 quorum 1
31843:X 19 Jul 09:14:59.371 * +slave slave 192.168.0.104:6379 192.168.0.104 6379 @ redisslave2 192.168.0.108 6379

 

將192.168.0.108的master停掉,發現sentinel輸出爲

31843:X 19 Jul 09:16:41.307 # +sdown master redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.307 # +odown master redisslave2 192.168.0.108 6379 #quorum 1/1
31843:X 19 Jul 09:16:41.307 # +new-epoch 1
31843:X 19 Jul 09:16:41.307 # +try-failover master redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.314 # +vote-for-leader a29b3e6df6406c2870301cb39db0de5fc9bcf884 1
31843:X 19 Jul 09:16:41.314 # +elected-leader master redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.314 # +failover-state-select-slave master redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.367 # +selected-slave slave 192.168.0.104:6379 192.168.0.104 6379 @ redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.367 * +failover-state-send-slaveof-noone slave 192.168.0.104:6379 192.168.0.104 6379 @ redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.468 * +failover-state-wait-promotion slave 192.168.0.104:6379 192.168.0.104 6379 @ redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.684 # +promoted-slave slave 192.168.0.104:6379 192.168.0.104 6379 @ redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.685 # +failover-state-reconf-slaves master redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.770 # +failover-end master redisslave2 192.168.0.108 6379
31843:X 19 Jul 09:16:41.770 # +switch-master redisslave2 192.168.0.108 6379 192.168.0.104 6379
31843:X 19 Jul 09:16:41.771 * +slave slave 192.168.0.108:6379 192.168.0.108 6379 @ redisslave2 192.168.0.104 6379
31843:X 19 Jul 09:16:42.190 * +slave slave 192.168.0.107:6379 192.168.0.107 6379 @ redisslave2 192.168.0.104 6379
+switch-master redisslave2 192.168.0.108 6379 192.168.0.104 6379表示已經切換到192.168.0.104號節點.
[root@redisserver bin]# ./redis-cli -h 192.168.0.104  info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.0.107,port=6379,state=online,offset=82001,lag=1
master_repl_offset:82001
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:82000

 而當192.168.0.108從新啓動後已經變成從節點,集羣切換完成。

[root@redisslave2 bin]# ./redis-cli -h 192.168.0.108  info Replication
# Replication
role:slave
master_host:192.168.0.104
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:89076
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
相關文章
相關標籤/搜索