安裝完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
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