哨兵模式 redis key 乱码_Docker下Redis哨兵集群模式搭建

科普

Redis 支持的三种集群方案是什么???

ce08cbdb4c1eab1fdd091d4904605599.png

what?

什么是redis集群、哨兵、主从......回顾一下

  • 【redis主从】:是备份关系, 我们操作主库,数据也会同步到从库。 如果主库机器坏了,从库可以上。就好比你 D盘的数据丢了,但是你移动硬盘里边备份有。
fb6dfac39dc32c23a892a5f79803a17c.png

主从原理

  • 【redis哨兵】:哨兵保证的是HA(高可用),保证特殊情况故障自动切换,哨兵盯着你的“redis主从集群”,如果主库死了,它会告诉你新的老大是谁。
89c1ac7834a0586d24f36b290f1440e1.png

哨兵模式

482d1c8f4fe11f930be26d2a444d83fb.png

多哨兵模式

  • 【redis集群】:集群保证的是高并发,因为多了一些兄弟帮忙一起扛。同时集群会导致数据的分散,整个redis集群会分成一堆数据槽,即不同的key会放到不不同的槽中。
e3f7fd9ee8117c469777b83558846bf5.png

集群

正文

下面咱们就在docker下搭建一下哨兵模式吧:

注意:redis集群不支持docker的端口映射模式,网络模式必须指定为host,--net=host

环境:

三台机器,一主两从,三个哨兵

master: xxxxx

slave1: xxxxx

slave2: xxxxx

  • 1. master上执行redis_master.sh
  • 2. slave1和slave2分别执行redis_slave.sh
  • 3. master、slave1、slave2上执行redis_sentinel.sh
  • 4. 验证主从同步
  • 5. 验证高可用,slave自动切换为master
  • 6. 还原master

1.Redis master脚本

#!/bin/bash#redis master 重启脚本 role=masteraccess_port=6379 #启动监听的端口password=amaocl@123data_path=/data/redis/data  function restart_master_redis() {      container_name=redis-${access_port}-${role}    docker kill $container_name || echo "ok"    docker rm $container_name || echo "ok"    docker run     --name redis-${access_port}-${role}    --net=host    --restart=always     -v ${data_path}:/data     -d redis:5.0.10    redis-server --port ${access_port}  --appendonly yes --requirepass ${password}  --masterauth ${password} --protected-mode no }restart_master_redis

2.slave1和slave2分别执行redis_slave.sh

#!/bin/bash role=slaveaccess_port=6379       #启动监听的端口master_ip=10.40.35.35 #修改为master的ipmaster_port=6379      #修改为master的端口data_path=/data/redis/datapassword=amaocl@123 function restart_slave_redis() {      container_name=redis-${access_port}-${role}    docker kill $container_name || echo "ok"    docker rm $container_name || echo "ok"    docker run     --name redis-${access_port}-${role}    --net=host    --restart=always     -v ${data_path}:/data     -d redis:5.0.10    redis-server  --port ${access_port} --appendonly yes --requirepass ${password} --masterauth ${password} --protected-mode no     --replicaof ${master_ip} ${master_port} }restart_slave_redis

3.master、slave1、slave2上执行redis_sentinel.sh

#!/bin/bash#redis sentinel 重启脚本 master_ip=xx.xx.xx.xx #master的ipmaster_port=6379 #master端口role=sentinelaccess_port=26379 #sentinel监听端口quorum=2 #两台机器判定主被动下线后,就进行failover(故障转移)password=amaocl@123sentinel_conf_path=`pwd`/${role}_${access_port}.conf cat << EOF > ${sentinel_conf_path}port ${access_port}daemonize nopidfile /var/run/redis-sentinel.pidlogfile ""dir /tmpsentinel monitor  mymaster  ${master_ip} ${master_port} ${quorum}sentinel auth-pass mymaster  ${password}sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 90000sentinel deny-scripts-reconfig yesprotected-mode noEOF function restart_sentinel_redis() {    #启动前删除    container_name=redis-${access_port}-${role}    docker kill $container_name || echo "ok"    docker rm $container_name || echo "ok"   docker run      --name redis-${access_port}-${role}    --net=host    --volume=${sentinel_conf_path}:/usr/local/etc/redis/sentinel.conf    --restart=always     -d redis:5.0.10    redis-sentinel /usr/local/etc/redis/sentinel.conf}restart_sentinel_redis

4. 验证主从同步

1. 在master上连接到redis新建一个key,去其他slave上查看是否有相应的key生成 ,若有证明主从正常,否则同步异常

set test hello-world

2. 删除测试key

del test

5. 验证高可用,slave自动切换为master

1. 停止master的容器,(不是停止哨兵的容器)

docker stop master的容器id

2. 连接到其他两台slave上的redis,执行info 查看当前的master是哪台机器,是否有有台机器变成了master, 若无证明哨兵异常,需要排查

6. 还原master

master已经自动其他机器

若第五步正常,将1、2、 3三步的脚本重新执行一下(按顺序执行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值