docker搭建最新版redis6.x哨兵模式集群的步骤和防坑指南

步骤1 

先要把主从模式搭建好 (我使用的是多虚拟机,多Docker模式下部署1主两从(3台机器,每台机器一个docker,每个机器上部署一个redissentinel),网络是手机热点)

主节点服务器的配置文件

bind 0.0.0.0

port 6379   daemonize yes

requirepass "1234" 以后以客户端进入Redis都要先输入密码auth “1234”

logfile "/usr/local/redis/log/master_redis1.log"

 (注意一定要先创logfile对应的目录,否则启动会失败,因为不会自动生成目录 

 dbfilename "xdclass1.rdb"

dir "/usr/local/redis/data" appendonly yes

appendfilename "appendonly1.aof"

 masterauth "1234"

两个从节点的配置文件

 bind 0.0.0.0

port 6380 daemonize yes

requirepass "1234" 以后以客户端进入Redis都要先输入密码auth “1234”

logfile "/usr/local/redis/log/salve_redis1.log"

(注意一定要先创logfile对应的目录,否则启动会失败,因为不会自动生成目录)

dbfilename "xdclass2.rdb"

dir "/usr/local/redis/data" appendonly yes

appendfilename "appendonly4.aof"

 replicaof 192.168.xx,xx 6379 (改成自己的主节点IP和端口)

masterauth "1234" 

步骤2 添加哨兵配置文件到容器对应目录中

(一个redis节点要对应一个Sentinel节点)(放在容器的  /usr/local/redis/conf中)

哨兵节点的配置文件(每个哨兵节点的配置文件信息类似,只要该具体的数值)

port 26381 #(不同哨兵配置文件只不同)

bind 0.0.0.0

daemonize yes

protected-mode no

pidfile "/var/run/redis-sentinel-1.pid"

logfile "/usr/local/redis/log/sentinel_26381.log"  #(不同哨兵配置文件只不同)

#必须要先创建logfile对应的目录在容器中 mkdir /usr/local/redis/log否则,无法正常重启容器

dir "/tmp"

sentinel monitor mymaster 192.168.43.188 6380 2

sentinel down-after-milliseconds mymaster 5000

sentinel auth-pass mymaster 1234

sentinel failover-timeout mymaster 30000

sentinel announce-ip "192.168.43.47"  #对外声明Sentinelip和端口  #(不同哨兵配置文件只不同)

sentinel announce-port 26381 #(不同哨兵配置文件只不同)

步骤3 启动主从模式的redis容器(先启动主)

docker run -d -p 6382:6382 -p 26379:26379 -v/myredis6.0/data:/data --name myredis_6.2.1_salve2 daff6a1e55d9

docker run -d -p 6380:6380 -p 26380:26380 -v/myredis6.0/data:/data --name myredis_6.2.1_salve2 daff6a1e55d9

docker run -d -p 6381:6381 -p 26381:26381 -v/myredis6.0/data:/data --name myredis_6.2.1_salve2 daff6a1e55d9

步骤4 修改主从节点的redis.conf中的端口号和对外声明redis的ip和端口

因为有些端口号我们设置的不是6379,但是容器是先启动我们才能去改配置文件,可以去容器中修改,也可以直接去挂载目录中修改(宿主机挂载目录是随机生成的))  还有announce-ip 和announce-port(对外声明redis的ip和端口)

步骤5重启容器(先启动主节点)并开启Sentinel,

启动顺序: 主节点 Redis ➡ 从节点 Redis ➡ 启动Sentinel集群

启动哨兵的命令

/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-1.conf --sentinel

步骤6 模拟主节点故障-实现故障转移

通过命令让,主节点 睡眠 60s 来模拟宕机

ddocker exec -it e0c40096d826 /bin/bash -c '/usr/local/redis/bin/redis-cli -a 1234 -p 6382 DEBUG sleep 70'ker exec -it 容器ID /bin/bash -c '/usr/local/redis/bin/redis-cli -a 1234 -p 6382 DEBUG sleep 70'

当出现故障转移时(即投票选举主从切换时)会去修改其他从节点的redis配置文件的replicaof

重新指定主节点的ip和端口,重新选举出来的主节点则会直接把之前的replicaof给去掉并且也会在各个节点Sentinel的配置文件中自动生成内容并且会修改sentinel monitor mymaster这个选项 如果之间挂的主机后来又连上去了肯定变成了从节点,此时它里面也会自动加上replicao

注意事项:

1 不仅要暴露redis端口,也要暴露sentinel的哨兵的端口,即容器启动时的端口映射要映射两个端口

     

 2 为了让redis的哨兵能够发现和监测到从节点,我们一定要保证redis服务端口和容器的映射端口一致(即redis的端口设置为6380,那么映射的端口也一定相同为6380,不能为其他,否则redis哨兵启动后,从节点立马会被识别为sdown主观下线,那么Sentinel哨兵集群也没有意义了)

3 我们要修改redis配置文件中的announce-ip 和announce-port(对外声明redis的ip和端口)此外还要修改哨兵配置文件中的sentinel announce-ip,sentinel announce-port否则哨兵节点之间无法通信,哨兵节点与redis节点之间也无法通信(如果不加announce-ip 和announce-port)

4  如果我们关闭了机器(虚拟机),要完全重启Sentinel集群的话(即完全恢复到第一次搭建的情况)我们必须把最后一次选举出来的主节点的配置文件中的replicaof给加上并指定主节点的ip和端口(在467行的位置),因为之前故障转移重新选举出来的主节点会直接把之前的replicaof给去掉,此外还有其他从节点的replicaof要修改为当前的主节点的ip和端口。(如果之间挂的主机又连上去了肯定变成了从节点,此时它里面也会自动加上replicaof新的主节点IP端口,我们在重启的时候必须删掉即+#并且把各个Sentinel的配置文件中,自动生成的部分给删掉并且修改里面的sentinel monitor mymaster,再按启动顺序: 主节点 Redis ➡ 从节点 Redis ➡ 启动Sentinel集群)重启 以上操作前提是上一次关闭前做了故障转移)

最好把之前的日志文件也删除掉

关机顺序最好是先关掉从,再关主

(如果之间挂掉的机器又重连了,他的配置文件和对应的sentinel也会被sentinel修改)我们可以不必做上述的操作直接可以实现哨兵

哨兵模式的优缺点

哨兵模式的优点:

相比 主从模式,可以实现⾃动主从切换(故障转移),可⽤性更⾼

哨兵模式的缺点:

主从切换需要消耗一定的时间会丢失短暂数据(这时无法写和读)

主节点的写能和存储能

(还是只有主节点可以写,存储能力还是处于单节点,因为主节点存的数据和其他节点一模一样,主节点存不下了,也就无法继续写了,存储就达到了上限了,数据不是分片存储的)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值