Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

Posted godzff

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)相关的知识,希望对你有一定的参考价值。

参考并感谢

下载redis镜像(不带tag标签则表示下载latest版本)

docker pull redis

从github 下载最新的redis.conf,注意重要参数

# 端口
port 6379
# 密码
requirepass Mypwd@123456
# 支持数据持久化
appendonly yes
# 关闭守护进程
daemonize no
# 默认多少个数据库
databases 16

# 从库时需要增加主库配置
# 主库密码(一个集群密码需要保持一致)
masterauth Mypwd@123456
# 主库地址和端口
slaveof 172.17.0.1 6379

启动 redis6379 主库

docker run -d -p 6379:6379 --name redis6379 --mount type=bind,source=/var/docker/configs/redis/6379/redis.conf,target=/usr/local/etc/redis/redis.conf --mount type=bind,source=/var/docker/datas/redis/6379,target=/data --restart always redis:latest redis-server /usr/local/etc/redis/redis.conf

启动 redis6380 从库(需要修改redis.conf的port和从服务器相关配置)

docker run -d -p 6380:6380 --name redis6380 --mount type=bind,source=/var/docker/configs/redis/6380/redis.conf,target=/usr/local/etc/redis/redis.conf --mount type=bind,source=/var/docker/datas/redis/6380,target=/data --restart always redis:latest redis-server /usr/local/etc/redis/redis.conf

启动 redis6381 从库(需要修改redis.conf的port和从服务器相关配置)

docker run -d -p 6381:6381 --name redis6381 --mount type=bind,source=/var/docker/configs/redis/6381/redis.conf,target=/usr/local/etc/redis/redis.conf --mount type=bind,source=/var/docker/datas/redis/6381,target=/data --restart always redis:latest redis-server /usr/local/etc/redis/redis.conf

从github 下载最新的sentinel.conf,注意重要参数

# 端口
port 26379
# 关闭守护进程
daemonize no
# 设定监听的redis集群的名称(mymaster)+IP+主库端口+最少从库数量
sentinel monitor mymaster 172.17.0.1 6379 2
# 设定监听的redis集群的密码(集群中主库和从库密码需要保持一致)
sentinel auth-pass mymaster Mypwd@123456

开放redis和sentinel端口并立即生效

firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=6380/tcp --permanent
firewall-cmd --zone=public --add-port=6381/tcp --permanent
firewall-cmd --zone=public --add-port=26379/tcp --permanent
firewall-cmd --zone=public --add-port=26380/tcp --permanent
firewall-cmd --zone=public --add-port=26381/tcp --permanent
firewall-cmd --reload

不修改redis.conf,通过命令方式使从库加入集群

docker exec -it redis6380 bash
redis-cli -a Mypwd@123456 -p 6380
slaveof 172.17.0.1 6379
config set masterauth Mypwd@123456
docker exec -it redis6381 bash
redis-cli -a Mypwd@123456 -p 6381
slaveof 172.17.0.1 6379
config set masterauth Mypwd@123456

主容器查询集群状态

docker exec -it redis6379 bash
redis-cli -a Mypwd@123456 -p 6379
info Replication

查看哨兵监控情况(不同的哨兵登录不同的容器使用客户端26379 26380 26381)

redis-cli -p 26379
# 查看集群主库情况
sentinel master mymaster
# 查看集群从库情况
sentinel slaves mymaster

从库退出集群并保持原先数据(通过bash登录从库容器后,使用redis-cli客户端)

slaveof no one

验证哨兵模式+集群是否高可用(通过bash登录从库容器后,使用redis-cli客户端)

redis-cli -a Mypwd@123456 -p 6379 DEBUG sleep 60

PS:
启动容器之前,需要创建好对应的宿主机的文件目录,宿主机缺少文件会导致容器启动失败

《(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)》CSDN地址:https://blog.csdn.net/madmarszff/article/details/100902662

《(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)》博客园地址:https://www.cnblogs.com/godzff/p/11530290.html

《(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)》简书地址:

以上是关于Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)的主要内容,如果未能解决你的问题,请参考以下文章

基于共享存储的Harbor高可用-Docker部署方案

docker硬核知识-容器部署redis集群

docker-compose搭建redis-cluster集群

基于共享存储的Harbor高可用-Docker部署方案

部署redis主从高可用集群

docker-compose部署Apollo多环境高可用集群