docker redis主从+哨兵模式+ip漂移

一、环境说明

准备3台服务器:

192.168.6.95 master

192.168.6.96 slave

192.168.6.98 slave

分别安装docker服务

二、master 配置说明

1、192.168.6.95 在root下创建文件夹redis文件夹,放入下列文件

redis.conf redis配置文件
sentinel.conf 哨兵配置文件
setip.sh 哨兵漂移ip所用脚本
sh 哨兵首次需执行安装文件的脚本

redis.conf

#redis 密码
requirepass "test123456"
#请求新master需要的密码,你不设你不是master你就连不上别人了
masterauth "test123456"

sentinel.conf

port 26379

sentinel monitor manager 192.168.6.95 6379 1
#表示主节点失败至少需要1个sentinel节点同意,mymaster是主节点的别名 不是主机名

sentinel auth-pass manager test123456
#主redis认证密码

sentinel down-after-milliseconds manager 3000
#多少毫秒请求一次 超时认定不可达

sentinel parallel-syncs manager 2
#当sentinel节点集合对主节点故障判定达成一致时,sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs就是用来限制在一次故障转移之后,允许同时多少个从服务器一起复制

sentinel client-reconfig-script manager /data/setip.sh
#ip漂移

setip.sh

需要配置docker的宿主机的ip,宿主机密码,宿主机需要添加的vip子网掩码,和设置网卡接口,作为设置宿主机虚拟ip所用。

#!/bin/bash
MASTER_IP=$6  #第六个参数是新主redis的ip地址
LOCAL_IP='192.168.6.95' #本机ip 
password='test123456'
VIP='192.168.6.100'
NETMASK='24'
INTERFACE='ens33'
date >/data/1
echo ${MASTER_IP} = ${LOCAL_IP} >> /data/1
if [ ${MASTER_IP} = ${LOCAL_IP} ];then  #master的ip等于本机的话 本机设置vip,否则清除vip 
    sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip ${VIP}/${NETMASK} >> /data/1 2>&1
    echo sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip ${VIP}/${NETMASK} >> /data/1 2>&1
    exit 0
else 
    sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip down >> /data/1 2>&1 
    echo sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip down >> /data/1 2>&1 
   exit 0
fi
exit 1

sh

{ \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free"; \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free"; \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free"; \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free"; \
} > /etc/apt/sources.list
apt-get update
apt-get install openssh-client sshpass -y
2、执行以下命令创建docker,因为试验了太多次了,这边就一直删了建删了建的,直接运行以下就行了
rm -rf /opt/redis-master
cp -R /root/redis/ /opt/redis-master

docker rm -f redis-master;docker run --name redis-master -p 6379:6379 -v /opt/redis-master/:/data/ --restart=always -d redis redis-server /data/redis.conf


docker rm -f redis-sentinel;docker run --name redis-sentinel -p 26379:26379 -v /opt/redis-master/:/data/ --restart=always -d redis redis-server /data/sentinel.conf --sentinel

docker exec -it redis-sentinel sh /data/sh

为什么一定要复制配置文件再去挂载? 因为redis会改你配置文件,你总想留一份原本的配置文件吧

三、slave 配置说明

1、 直接上配置 没什么区别,这边需要设置master的地址和认证信息

redis.conf

requirepass "test123456"
masterauth "test123456"
replicaof 192.168.6.95 6379

sentinel.conf

port 26379

sentinel monitor manager 192.168.6.95 6379 1
#表示主节点失败至少需要1个sentinel节点同意,mymaster是主节点的别名 不是主机名

sentinel auth-pass manager test123456
#主redis认证密码

sentinel down-after-milliseconds manager 3000
#多少毫秒请求一次 超时认定不可达

sentinel parallel-syncs manager 2
#当sentinel节点集合对主节点故障判定达成一致时,sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs就是用来限制在一次故障转移之后,允许同时多少个从服务器一起复制

sentinel client-reconfig-script manager /data/setip.sh
#ip漂移

setip.sh
记得改 记得改 记得改,当前宿主机的ip

#!/bin/bash
MASTER_IP=$6  #第六个参数是新主redis的ip地址
LOCAL_IP='192.168.6.96' #本机ip 
password='test123456'
VIP='192.168.6.100'
NETMASK='24'
INTERFACE='ens33'
date >/data/1
echo ${MASTER_IP} = ${LOCAL_IP} >> /data/1
if [ ${MASTER_IP} = ${LOCAL_IP} ];then  #master的ip等于本机的话 本机设置vip,否则清除vip 
    sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip ${VIP} >> /data/1 2>&1
    echo sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip ${VIP} >> /data/1 2>&1
    exit 0
else 
    sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip down >> /data/1 2>&1 
    echo sshpass -p ${password} ssh -o StrictHostKeyChecking=no root@${LOCAL_IP} ifconfig ${INTERFACE}:vip down >> /data/1 2>&1 
   exit 0
fi
exit 1

sh

{ \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free"; \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free"; \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free"; \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free"; \
} > /etc/apt/sources.list
apt-get update
apt-get install openssh-client sshpass -y
rm -rf /opt/redis-master
cp -R /root/redis/ /opt/redis-master

docker rm -f redis-master;docker run --name redis-master -p 6379:6379 -v /opt/redis-master/:/data/ --restart=always -d redis redis-server /data/redis.conf


docker rm -f redis-sentinel;docker run --name redis-sentinel -p 26379:26379 -v /opt/redis-master/:/data/ --restart=always -d redis redis-server /data/sentinel.conf --sentinel

docker exec -it redis-sentinel sh /data/sh
2、 第三台按上文一样配置。

四、验证说明

1、在第一台执行

docker exec -it redis-master redis-cli -a test123456 info

发现自己是master,剩下两台slave都加入到master里了,redis的主从 的 从服务器是不能写的,只能主写从读,所以vip的作用是让这个ip固定在redis master那台
在这里插入图片描述
因为设置vip需要容器跑脚本,而脚本只会在转移master时触发,容器前面命令没装完他跑不了脚本,需要手动设置一下vip ifconfig ens33:vip 192.168.6.100
在这里插入图片描述

虚拟机做实验可能存在无ARP信息,电脑无法ping通虚拟ip,用那台虚拟机ping一下本机即可
在这里插入图片描述

查看哨兵的状态

docker exec -it redis-sentinel redis-cli -p 26379 info

在这里插入图片描述

2. 模拟故障,关闭master的redis

发现vip已经被脚本下掉了
在这里插入图片描述

第二台执行 docker exec -it redis-master redis-cli -a test123456 info

发现他也是slave,master变成第三台了,状态是up的

在这里插入图片描述
第三台ifconfig找到vip
在这里插入图片描述

原来的master 当原来master启动后他也只能为从了,直到新主挂掉为止
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值