redis&&哨兵集群部署 docker单机模拟-六节点

目录

如果有不懂得,私信我就行,十分欢迎交流

一、准备工作

 二、拉取redis镜像

三、部署多个容器

四、脚本讲解

1、脚本循环

2、配置文件

3、创建docker容器

五、从节点加入主节点

一、加入主节点的方式有很多,我们选择最简单的一种方式,手动。

二、进入docker容器

三、连接客户端

四、设置主节点

 六、重启并启动哨兵

 七、查看哨兵日志

八、模拟主节点下线

1、回到宿主机终端,使主节点停止运行

 2、登录从节点查看哨兵日志

九、批量删除


如果有不懂得,私信我就行,十分欢迎交流

资源文件

redis哨兵集群脚本-Docker文档类资源-CSDN文库

一、准备工作

准备一台linux主机,我们在一台机子上部署六个节点来模拟集群,所以性能尽量高点

我给这台虚拟机配置了6c8g的性能。来进行集群模拟,系统用的是alpine-一个docker宿主机系统,没防火墙,端口配置比较方便,性能浪费少。用其他linux也可以

自己提前去准备

虚拟机安装xxxLinux系统
xxxLinux系统安装docker

我们默认大家都装好docker了

 二、拉取redis镜像

docker pull redis

三、部署多个容器

咱们以配置文件形式启动docker的redis

没配置文件的话redis会以默认参数启动,而且后续不能更改参数,显然是不符合生产环境的。

批量部署脚本以下-----------将脚本存入.sh文件我不用教了吧

#批量部署

for port in $(seq 8001 8006); \
do \
mkdir -p /root/data/redis${port}/data
mkdir -p /root/data/redis${port}/conf
touch /root/data/redis${port}/conf/redis.conf
cat << EOF >/root/data/redis${port}/conf/redis.conf
#这里面是配置文件
port ${port}
logfile "/data/redis${port}.log"
pidfile "/data/redis${port}.pid"
#关闭集群模式才能手动加入主从
#cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.5.242
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
#配置本机密码
requirepass 123456
#从节点配置主节点ip端口密码
#slaveof 192.168.5.242 8001
#配置主节点数据
#replicaof 192.168.5.242 8001
#配置同步验证密码主从或者集群用
masterauth 123456
EOF
touch /root/data/redis${port}/data/sentinel.conf
cat << EOF >/root/data/redis${port}/data/sentinel.conf
#配置哨兵配置文件
# 自定义集群名,其中192.168.5.242 为 redis-master 的 ip,8001 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
port 2${port}
# 禁止保护模式
protected-mode no
#后台运行
daemonize yes
logfile "/data/sentinel${port}.log"
dir "/tmp"
#多主节点配置多个 注意名字“mymaster1-2-3 ”每个主节点不可相同
sentinel monitor mymaster 192.168.5.242 8001 2
#多主节点配置多个 注意名字“mymaster1-2-3 ”每个主节点不可相同
sentinel down-after-milliseconds mymaster 30000
#多主节点配置多个 注意名字“mymaster1-2-3 ”每个主节点不可相同
sentinel parallel-syncs mymaster 1
#多主节点配置多个 注意名字“mymaster1-2-3 ”每个主节点不可相同
sentinel auth-pass mymaster redispwd
#多主节点配置多个 注意名字“mymaster1-2-3 ”每个主节点不可相同
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
#配置同步密码
#多主节点配置多个 注意名字“mymaster1-2-3 ”每个主节点不可相同
sentinel auth-pass mymaster 123456
EOF
chmod 777 -f /root/data/redis${port}/* 
docker run -p ${port}:${port} -p 1${port}:1${port} -p 2${port}:2${port} --name redis-${port} \
-v /root/data/redis${port}/data:/data \
-v /root/data/redis${port}/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf; \
done

简单讲一下,这是一个shell脚本,它的作用很简单,生成redis和哨兵的配置文件,并且创建docker容器分别是ip:8001-8006六个容器。

四、脚本讲解

如果想要明白原理还是看一下这个解释,大神可以不用看,

1、脚本循环

脚本定义了一个for循环,变量${port}从8001到8006,总计六次,创建六个容器以及配套配置文件

2、配置文件

在/root/data目录下按照端口不通创建了六套redis和哨兵的配置文件,包含服务端口8001,集群通信端口18001,哨兵通信端口28001,六个容器端口号依次递增,以及密码和同步密码123456,很简单的里面“#xxxx”是注释,创建结束后可以自己看一下配置文件我怎么写的注释、

最后给这几个文件夹配置权限为777,防止容器写文件权限出问题

3、创建docker容器

开放8001 18001 28001端口并映射redis.conf和/data文件夹,这里的/data文件夹是容器里redis服务存放配置和数据的地方映射进物理机方便保存查看数据和日志。

五、从节点加入主节点

一、加入主节点的方式有很多,我们选择最简单的一种方式,手动。

二、进入docker容器

docker exec -it redis-8001 /bin/bash

 这里是进入redis-8001容器,-it保持一个伪终端,程序是bash,就进入节点了

 进入后默认是/data目录,存放数据文件和配置文件

三、连接客户端

接着需要用客户端程序连接到redis服务才能进行操作

redis-cli -h 192.168.5.242 -p 8002 -a 123456

首先容器内自带了客户端程序,直接连接从节点8002,密码是123456,ip大家共用一个,成功进入redis。

四、设置主节点

SLAVEOF 192.168.5.242 8001

 如果界面显示ok则成功将8001设为主节点

然后客户端连接到8003 8004 8005 8006一个个设8001为主节点

redis-cli -h 192.168.5.242 -p 8003 -a 123456
SLAVEOF 192.168.5.242 8001
exit
redis-cli -h 192.168.5.242 -p 8004 -a 123456
SLAVEOF 192.168.5.242 8001
exit
redis-cli -h 192.168.5.242 -p 8005 -a 123456
SLAVEOF 192.168.5.242 8001
exit
redis-cli -h 192.168.5.242 -p 8006 -a 123456
SLAVEOF 192.168.5.242 8001
exit

 六、重启并启动哨兵

for port in $(seq 8001 8006); \
do \
docker restart redis-${port} 
echo "`redis-${port} `重启"
docker exec redis-${port} redis-sentinel /data/sentinel.conf
echo "哨兵启动"
done

哨兵的配置文件可以在上面回顾一下

哨兵端口为2800X,定义后台运行,data目录下输出日志然后就是主节点配置了,基本都一样

 redis-sentinel /data/sentinel.conf

这个命令则是指定配置文件启动哨兵。

 七、查看哨兵日志

首先进入主节点容器

docker exec -it redis-8001 /bin/bash

ls命令列出data文件夹下的文件

 其中sentinel8001.log 是哨兵的日志

使用cat命令查看日志

cat sentinel8001.log

root@be33de043adf:/data# cat sentinel8001.log
26:X 30 Dec 2022 05:51:42.451 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
26:X 30 Dec 2022 05:51:42.451 # Redis version=7.0.7, bits=64, commit=00000000, modified=0, pid=26, just started
26:X 30 Dec 2022 05:51:42.451 # Configuration loaded
26:X 30 Dec 2022 05:51:42.452 * monotonic clock: POSIX clock_gettime
26:X 30 Dec 2022 05:51:42.452 * Running mode=sentinel, port=28001.
26:X 30 Dec 2022 05:51:42.458 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:51:42.458 # Sentinel ID is 17b6f72bb0fd4811771d8d13c8e618081fa00237
26:X 30 Dec 2022 05:51:42.458 # +monitor master mymaster 192.168.5.242 8001 quorum 2
26:X 30 Dec 2022 05:51:46.150 * +sentinel sentinel 9d9270c598636d10a2b1fca7c46c65a6e826ff00 172.17.0.3 28002 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:51:46.176 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:51:47.688 * +sentinel sentinel 6df2c805c7b451011927699b89188e54b707d4de 172.17.0.4 28003 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:51:47.693 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:51:49.051 * +sentinel sentinel 9246ca494876e74e8a459a9344ef84cafda191c6 172.17.0.5 28004 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:51:49.064 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:51:50.727 * +sentinel sentinel f96c2c56fdf152308899d06f32c24611cc500f55 172.17.0.6 28005 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:51:50.740 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:51:52.330 * +sentinel sentinel 99f129b31e65e9aa72ffd8d7db8cf915ebf9e0d9 172.17.0.7 28006 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:51:52.347 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:52:02.564 * +slave slave 172.17.0.1:8003 172.17.0.1 8003 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:52:02.574 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:52:02.575 * +slave slave 172.17.0.1:8004 172.17.0.1 8004 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:52:02.585 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:52:02.585 * +slave slave 172.17.0.1:8005 172.17.0.1 8005 @ mymaster 192.168.5.242 8001
26:X 30 Dec 2022 05:52:02.596 * Sentinel new configuration saved on disk
26:X 30 Dec 2022 05:52:02.596 * +slave slave 172.17.0.1:8006 172.17.0.1 8006 @ mymaster 192.168.5.242 8001

分析日志我们不难看出,陆续节点以及哨兵都加入了哨兵集群中,并且主从分明。

八、模拟主节点下线

1、回到宿主机终端,使主节点停止运行

docker stop redis-8001

 2、登录从节点查看哨兵日志

docker exec -it redis-8002 bash

查看哨兵日志

cat sentinel8002.log

 很明显哨兵集群发现了8001主节点寄了,并推举出8005为新的主节点

我们将8001重启

docker restart redis-8001 
echo "`redis-8001 `重启"
docker exec redis-8001 redis-sentinel /data/sentinel.conf
echo "哨兵启动"

后续日志中8001上线

 但是新的主节点是8005,所以8001被哨兵集群安排为了从节点备用

中间ip变化是因为在同一台机子上,redis检测到docker的网络地址,智能的将自身地址切换成了docker内部网,如果容器使用host模式网络,就是真正的地址了

后续8005停掉,哨兵集群自动切换8003为主节点

九、批量删除

for port in $(seq 8001 8006); \
do \
docker stop redis-${port} 
docker rm redis-${port}
rm -rf /root/data/redis${port}
done

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值