1.環(huán)境說明
系統(tǒng):CentOS-7-x86_64
ip:192.168.18.236
REDIS_HOME:/opt/redis-4.0.1
redis節(jié)點:
192.168.18.236:6379 master
192.168.18.236:6380 slave
192.168.18.236:6381 slave
2.修改配置
cd /opt/redis-4.0.1
cp redis.conf redis_6380.conf
cp redis.conf redis_6381.conf
#修改port、pidfile、slaveof
vi redis_6380.conf
port 6380
pidfile /var/run/redis_6380.pid
slaveof 127.0.0.1 6379
vi redis_6381.conf
port 6381
pidfile /var/run/redis_6381.pid
slaveof 127.0.0.1 6379
3.啟動測試
cd /opt/redis-4.0.1
#啟動master和2個slave
./src/redis-server redis.conf
./src/redis-server redis_6380.conf
./src/redis-server redis_6381.conf
#打開3個shell窗口突那,登錄3個客戶端
./src/redis-cli -p 6379
./src/redis-cli -p 6380
./src/redis-cli -p 6381
#查看6379復制系統(tǒng)中的信息
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=1246,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=1246,lag=1
master_replid:8bb4c076d0ce5179282dac083bf526173d8ef33b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1246
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1246
#查看6380復制系統(tǒng)中的信息
127.0.0.1:6380> INFO replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1442
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8bb4c076d0ce5179282dac083bf526173d8ef33b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1442
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1442
4.sentinel配置
sentinel介紹
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案
當用Redis做Master-slave的高可用方案時雀久,假如master宕機了,Redis本身(包括它的很多客戶端)都沒有實現(xiàn)自動進行主備切換
-
而Redis-sentinel本身也是一個獨立運行的進程,它能監(jiān)控多個master-slave集群嵌洼,發(fā)現(xiàn)master宕機后能進行自懂切換案疲。
它的主要功能有以下幾點:- 不時地監(jiān)控redis是否按照預期良好地運行;
- 如果發(fā)現(xiàn)某個redis節(jié)點運行出現(xiàn)狀況,能夠通知另外一個進程(例如它的客戶端);
- 能夠進行自動切換麻养。當一個master節(jié)點不可用時褐啡,能夠選舉出master的多個slave(如果有超過一個slave的話)中的一個來作為新的master,其它的slave節(jié)點會將它所追隨的master的地址改為被提升為master的slave的新地址。
Sentinel支持集群
很顯然鳖昌,只使用單個sentinel進程來監(jiān)控redis集群是不可靠的备畦,當sentinel進程宕掉后(sentinel本身也有單點問題,single-point-of-failure)整個集群系統(tǒng)將無法按照預期的方式運行许昨。所以有必要將sentinel集群
搭建2個sentinel節(jié)點
cd /opt/redis-4.0.1
cp sentinel.conf sentinel_26380.conf
vi sentinel.conf
#后端啟動
daemonize yes
logfile "/var/log/sentinel.log"
sentinel monitor mymaster 127.0.0.1 6379 2
vi sentinel_26380.conf
port 26380
#后端啟動
daemonize yes
logfile "/var/log/sentinel_26380.log"
sentinel monitor mymaster 127.0.0.1 6379 2
#啟動兩個sentinel服務
./src/redis-sentinel sentinel.conf
./src/redis-sentinel sentinel_26380.conf
5.測試sentinel
1).把6379 master節(jié)點關(guān)閉
ps aux | grep redis-server
#把6379的服務kill掉
kill -9 3584
2).查看sentinel log
cat /var/log/sentinel.log
4323:X 21 Sep 10:15:57.638 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4323:X 21 Sep 10:15:57.638 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=4323, just started
4323:X 21 Sep 10:15:57.638 # Configuration loaded
4324:X 21 Sep 10:15:57.641 * Increased maximum number of open files to 10032 (it was originally set to 1024).
4324:X 21 Sep 10:15:57.643 * Running mode=sentinel, port=26379.
4324:X 21 Sep 10:15:57.643 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4324:X 21 Sep 10:15:57.643 # Sentinel ID is 8ad4ea46a01c2176d7665b64fad69e08080bf9a8
4324:X 21 Sep 10:15:57.643 # +monitor master mymaster 127.0.0.1 6379 quorum 2
4324:X 21 Sep 10:16:05.756 * +sentinel sentinel 1e3e9ae7f00507f5153ee3cef0ba2dc2a97c2ff1 127.0.0.1 26380 @ mymaster 127.0.0.1 6379
4324:X 21 Sep 10:18:56.619 # +sdown master mymaster 127.0.0.1 6379
4324:X 21 Sep 10:18:56.753 # +new-epoch 1
4324:X 21 Sep 10:18:56.754 # +vote-for-leader 1e3e9ae7f00507f5153ee3cef0ba2dc2a97c2ff1 1
4324:X 21 Sep 10:18:57.189 # +config-update-from sentinel 1e3e9ae7f00507f5153ee3cef0ba2dc2a97c2ff1 127.0.0.1 26380 @ mymaster 127.0.0.1 6379
4324:X 21 Sep 10:18:57.189 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6381
4324:X 21 Sep 10:18:57.189 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
4324:X 21 Sep 10:18:57.189 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
4324:X 21 Sep 10:19:27.248 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
發(fā)現(xiàn)自動將master切換到6381上
3).cat sentinel.conf
#發(fā)現(xiàn)自動改為6381
sentinel monitor mymaster 127.0.0.1 6381 2
4).登錄6381客戶端,查看是否為master
./src/redis-cli -p 6381
#查看復制系統(tǒng)信息萍恕,role已經(jīng)改為master
127.0.0.1:6381> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=52458,lag=0
master_replid:9d438d265f580c023e1b08e73f0ea5edda5b8a8f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:52591
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:25409
repl_backlog_histlen:27183
5).再重新啟動6379節(jié)點
./src/redis-server redis.conf
./src/redis-cli -p 6379
#發(fā)現(xiàn)role為slave
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:83939
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9d438d265f580c023e1b08e73f0ea5edda5b8a8f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:83939
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:77064
repl_backlog_histlen:6876