Docker 搭建 Redis 主从复制 + 哨兵集群

主从复制

在官网下载 redis.conf 配置文件,修改以下内容

修改配置文件

master 节点配置

port 6379
# IP绑定,注释此行
# bind 127.0.0.1
pidfile /var/run/redis_6379.pid
logfile "/data/redis.log"

replication 节点配置

# 如果同一台服务器上启动,注意修改为不同的端口
port 6380
logfile "/data/slave_1.log"
# 同一台服务器上要修改成 docker 容器内部的 ip地址
replicaof 172.17.0.2 6379

可以通过这个命令查看 master 节点容器内部的 IP 地址

docker inspect redis1 | grep "IPAddress"

启动容器

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

测试

查看容器是否正常运行

docker ps 
##如正常运行就执行下面的验证,如总是不断的重启,这时就可以查看前面配置的日志文件了
##当然也可以直接用docker查看,但是有时候有些错误是看不到的,所以这时我们配置的日志文件就起到关键性的作用了

#进入主节点
##打开 redis 客户端
docker exec -it redis6 redis-cli -p 6379
ubuntu@VM-16-6-ubuntu:/usr/local/redis/etc$ sudo docker exec -it redis1 redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6380,state=online,offset=14,lag=1
slave1:ip=172.17.0.3,port=6381,state=online,offset=14,lag=1
master_failover_state:no-failover
master_replid:c1080f8991b470afecf5776b24c071c3ddf2b73e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
127.0.0.1:6379> set hello codeman
OK
127.0.0.1:6379> get hello
"codeman"
127.0.0.1:6379> exit
ubuntu@VM-16-6-ubuntu:/usr/local/redis/etc$ sudo docker exec -it redis2 redis-cli -p 6380
127.0.0.1:6380> get hello
"codeman"
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:130
slave_repl_offset:130
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:c1080f8991b470afecf5776b24c071c3ddf2b73e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:130
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:130
127.0.0.1:6380> exit
ubuntu@VM-16-6-ubuntu:/usr/local/redis/etc$ sudo docker exec -it redis3 redis-cli -p 6381
127.0.0.1:6381> get hello
"codeman"
127.0.0.1:6381> exit

哨兵

修改配置文件

官网上找到当前版本对应的 sentinel.conf 配置文件,修改以下内容:

#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 26379
#监控的主redis服务器
sentinel monitor mymaster 172.17.0.2 6379 2
# 修改日志文件的路径
logfile "/data/sentinel.log"

复制修改过的哨兵配置文件到各个服务器上

启动

ubuntu@VM-16-6-ubuntu:/usr/local/redis/etc$ sudo docker run -d --privileged=true --restart=always -p 26379:26379 \
-v /usr/local/redis/etc/sentinel_1.conf:/etc/redis/sentinel.conf \
-v /usr/local/redis/data/:/data/ \
--name sentinel1 \
redis redis-sentinel /etc/redis/sentinel.conf
  • redis-sentinel /etc/redis/sentinel.conf : 指定配置文件启动 redis-sentinel 进程
ubuntu@VM-16-6-ubuntu:/usr/local/redis/etc$ sudo docker exec -it sentinel1 redis-cli -p 26379
127.0.0.1:26379> 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.2:6379,slaves=4,sentinels=3
127.0.0.1:26379> exit

服务测试

  • 关闭master
  • 执行上面主从复制中的测试模块,多次执行 info replication 查看信息发生的变化
  • 或者监听哨兵配置的日志文件,可以实时看到其发生的变化

了解更多可扫码关注公众号
在这里插入图片描述

posted on 2021-11-28 21:31  凝神遐想  阅读(69)  评论(0编辑  收藏  举报

导航