Docker搭建redis集群(主从模式+哨兵模式)

本文详细介绍了如何在Docker环境下配置Redis的主从复制和哨兵模式。首先,从官方镜像拉取Redis,然后通过修改配置文件设置master和slave节点,启动各个实例。接着,测试主从复制的正确性,确保数据同步。最后,部署哨兵监控主节点,实现高可用性。当master节点故障时,哨兵能够自动完成故障切换。
摘要由CSDN通过智能技术生成

Docker搭建redis集群(主从模式+哨兵模式)

首先拉取redis的镜像文件

docker pull redis

主从复制

1、准备redis.conf 配置文件
https://gitee.com/mirrors/redis/blob/6.2/redis.conf
2、修改以下内容

master节点

port 7001
# IP绑定,注释此行
# bind 127.0.0.1
pidfile /var/run/redis_7001.pid
logfile "/data/redis.log"
protected-mode no

replication 节点配置

slave1

# 如果同一台服务器上启动,注意修改为不同的端口
port 7002
logfile "/data/slave_1.log"
# 修改成 docker 容器内部的 ip地址
replicaof 172.17.0.8 7001
protected-mode no

slave2

# 如果同一台服务器上启动,注意修改为不同的端口
port 7003
logfile "/data/slave_2.log"
# 修改成 docker 容器内部的 ip地址
replicaof 172.17.0.8 7001
protected-mode no

查看docker容器ip地址的方法

docker inspect name | grep "IPAddress"

docker启动失败可以查看启动日志

docker logs -f -t --tail 20 name
3、分别启动master和slave节点

master

docker run -d --privileged=true --restart=always -p 7001:7001 \
-v /redis_cluster/redis7001/conf/redis.conf:/etc/redis/redis.conf \
-v /redis_cluster/redis7001/data:/data \
--name redis_master \
redis redis-server /etc/redis/redis.conf
  • –restart=always:失败会一直重启。无论状态是如何,都重启容器
  • –restart=no:容器退出时,不重启容器
  • –restart=no-failure:10 表示最多重启10次
  • –privileged=true:使用该参数,容器内的 root 拥有真正的 root 权限

slave1

docker run -d --privileged=true --restart=always -p 7002:7002 \
-v /redis_cluster/redis7002/conf/redis.conf:/etc/redis/redis.conf \
-v /redis_cluster/redis7002/data:/data \
--name redis_slave1 \
redis redis-server /etc/redis/redis.conf

slave2

docker run -d --privileged=true --restart=always -p 7003:7003 \
-v /redis_cluster/redis7003/conf/redis.conf:/etc/redis/redis.conf \
-v /redis_cluster/redis7003/data:/data \
--name redis_slave2 \
redis redis-server /etc/redis/redis.conf
4、测试

连接上master节点redis-cli,执行以下命令,可以看到有两个slave信息

172.17.0.8:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.9,port=7002,state=online,offset=98,lag=0
slave1:ip=172.17.0.10,port=7003,state=online,offset=98,lag=1
master_failover_state:no-failover
master_replid:006f1ead9d06fdbc19a7481d66c6bb0e28d028e4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:112
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:112

在master节点写入数据

172.17.0.8:7001> set str  this-is-writed-by-master
OK

在slave查看

172.17.0.9:7002> get str
"this-is-writed-by-master"

172.17.0.10:7003> get str
"this-is-writed-by-master"

哨兵模式

1、准备sentinel.conf配置文件
https://gitee.com/mirrors/redis/blob/6.2/sentinel.conf
2、修改配置文件并复制到不同的redis配置目录下
#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 27001/27002/27003
#监控的主redis服务器
sentinel monitor mymaster 172.17.0.8 7001 2
# 修改日志文件的路径
logfile "/data/sentinel.log"
3、启动 redis-sentinel 进程

sentinel1

docker run -d --name sentinel1 -p 27001:27001  \
-v /redis_cluster/redis7001/conf/sentinel.conf:/etc/sentinel.conf \
-v /redis_cluster/redis7001/data/:/data/ redis redis-sentinel /etc/sentinel.conf 

sentinel2

docker run -d --name sentinel2 -p 27002:27002  \
-v /redis_cluster/redis7002/conf/sentinel.conf:/etc/sentinel.conf \
-v /redis_cluster/redis7002/data/:/data/ redis redis-sentinel /etc/sentinel.conf 

sentinel3

docker run -d --name sentinel3 -p 27003:27003  \
-v /redis_cluster/redis7003/conf/sentinel.conf:/etc/sentinel.conf \
-v /redis_cluster/redis7003/data/:/data/ redis redis-sentinel /etc/sentinel.conf 
4、服务测试
#进入sentinel节点
docker exec -it sentinel1 redis-cli  -p 27001
#查看sentinel信息
127.0.0.1:27001> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.17.0.8:7001,slaves=2,sentinels=3

  • 关闭master
  • 执行上面主从复制中的测试模块,多次执行 info replication 查看信息发生的变化
  • 或者监听哨兵配置的日志文件,可以实时看到其发生的变化
#断掉master节点
docker stop redis_master
#查看当前主节点信息
127.0.0.1:27001> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.17.0.9:7002,slaves=2,sentinels=3

可以看到master节点已经变成了7002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值