一、搭建哨兵之前先要去搭建主从,如果你以完成主从搭建,那么开始搭建哨兵。
二、搭建哨兵:
//627a2368c865随即切换主、从id
进入容器:docker exec -it 627a2368c865 /bin/bash
在每个容器中安装vim,psutils
#需要进入容器中执行,完成三步安装(过程有可能比较慢,需要慢慢等待)
apt-get update
apt-get install vim
apt-get install procps
在每个容器中创建哨兵文件
//创建哨兵文件sentinel.conf
touch sentinel.conf
//创建完编辑哨兵文件
vim sentinel.conf
//在sentinel.conf添加如下代码
port 26379
daemonize yes
logfile "sentinel.log"
sentinel monitor mymaster 172.17.0.2 6379 2
其中,sentinel monitor mymaster 172.17.0.2 6379 2配置的含义是:该哨兵节点监控172.17.0.2:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移。
启动哨兵(每个节点都需要启动)
哨兵节点的启动有两种方式,二者作用是完全相同的(二选其一):
redis-sentinel sentinel.conf
redis-server sentinel --sentinel
下面可以看到redis-sentinel已经启动
root@7d4124eb4f7b:/data# ps -ef
127.0.0.1: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=172.17.0.2:6379,slaves=2,sentinels=3
127.0.0.1:26379>
到这里(exit)退出,可以去把从的也配置一下,操作和上面的一样,上面配置完毕继续往下操作。
演示故障转移
[root@aliyun ~]# docker stop redis-master
redis-master
随便进入一个slave节点内部
[root@aliyun ~]# docker exec -it redis-slave-2 /bin/bash
root@7d4124eb4f7b:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:down(这里可以看到master状态为down)
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:149730
master_link_down_since_seconds:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:149730
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:149688
redis主节点挂掉,两个slave会进行选举,时间为30秒
再将之前的master节点start,会发现之前的master已经成为slave节点
[root@aliyun ~]# docker start redis-master
[root@aliyun ~]# docker exec -it redis-master /bin/bash
root@fb8299058ead:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.3
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
进去当前的master节点看下当前信息
[root@aliyun ~]# docker exec -it redis-slave-1 /bin/bash
root@38493fef3e03:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6379,state=online,offset=268053,lag=1 slave1:ip=172.17.0.2,port=6379,state=online,offset=268053,lag=1 master_replid:c9bea460cf62fdc27109798770e115609594e541 master_replid2:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_repl_offset:268323 second_repl_offset:149731
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:268323 127.0.0.1:6379> info sentinel
127.0.0.1:6379> exit
root@38493fef3e03:/data# redis-cli -p 26379
127.0.0.1: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=172.17.0.3:6379,slaves=2,sentinels=3 127.0.0.1:26379>
到此就结束了!!!