redis搭建主、从、哨兵集群(docker构建)

redis主从:

主从复制,从只读模式。

哨兵sentinel:
  • 监控(Monitoring): Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器;
    当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
主从切换过程:

(1) slave leader升级为master
(2) 其他slave修改为新master的slave
(3) 客户端修改连接
(4) 老的master如果重启成功,变为新master的slave

搭建过程

安装docker-ce(略)

拉取镜像:

docker pull redis

主配置文件:
bind 0.0.0.0
daemonize no
pidfile "/var/run/redis.pid"
port 6379
timeout 300
loglevel warning
logfile "redis.log"
databases 16
rdbcompression yes
dbfilename "redis.rdb"
dir "/data"
requirepass "12345678"
masterauth "12345678"
maxclients 10000
maxmemory 1000mb
maxmemory-policy allkeys-lru
appendonly no
appendfsync always

启动一个master:
  • 这里虽然在前面dir中设置了工作目录dir,但是在redis启动命令加载配置文件的时候,还是加载不到,所以,我给配置文件加了容器内的路径,才得以找到配置文件。
docker run --name redis_master \
-p 6379:6379  \
-v /qj/redis/master/:/data/ \
-v /etc/localtime:/ete/localtime \
-v /etc/timezone:/etc/timezone \
--restart=always -d redis:latest \
redis-server /data/redis_master.conf --appendonly yes
从配置文件:
bind 0.0.0.0
daemonize no
pidfile "/var/run/redis.pid"
port 6380
timeout 300
loglevel warning
logfile "redis.log"
databases 16
rdbcompression yes
dbfilename "redis.rdb"
dir "/data"
requirepass "12345678"
masterauth "12345678"
maxclients 10000
maxmemory 1000mb
maxmemory-policy allkeys-lru
appendonly no
appendfsync always            
slaveof  172.17.0.1 6379#master的容器地址和端口
启动一个slave:
  • 因为是同一个宿主机,所以端口我改成了6380,企业生产环境或者虚拟机中不必这样。
docker run --name redis_slave \
-p 6380:6380 \
-v /qj/redis/slave/:/data/ \
-v /etc/localtime:/ete/localtime \
-v /etc/timezone:/etc/timezone \
--restart=always -d redis:latest \
redis-server /data/redis_slave.conf --appendonly yes

主从搭建完成。

sentinel配置文件
daemonize no
protected-mode no
port 26379
dir "/tmp"
sentinel monitor mymaster 172.17.0.1 6379 1
sentinel down-after-milliseconds mymaster 10000
sentinel auth-pass mymaster 12345678
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
启动sentinel:
docker run --name sentinel --network host \
-p 26379:26379 \
-v /qj/redis/sentinel/sentinel.conf:/data/sentinel.conf \
-v /etc/localtime:/ete/localtime \
-v /etc/timezone:/etc/timezone \
--restart=always -d redis:latest redis-sentinel sentinel.conf

哨兵搭建完成。

测试:

进入主redis写入数据
docker@master:~$ docker exec -it redis_master bash
 redis-cli \\进入redis终端
172.17.0.1:6379> AUTH 12345678 \\登录
OK
172.17.0.1:6379> info replication \\查看role角色是否为master

172.17.0.1:6379> set aaa 123 \\设置键值对
OK
172.17.0.1:6379>  keys * \\查看所有数据
1) "aaa"
OK
172.17.0.1:6379>exit

进入从redis查看数据
docker@slave:~$ docker exec -it redis_slave bash
 redis-cli -p 6380 \\进入redis终端
172.17.0.1:6380> AUTH 12345678 \\登录
OK
172.17.0.1:6380> info replication \\查看role角色是否为slave

172.17.0.1:6380>  keys * \\查看所有数据
1) "aaa"
172.17.0.1:6380>exit

主从复制成功。

先动态加载sentinel日志:

docker logs -f sentinel

停掉master的容器:

docker stop redis_master

观看日志变化。

再次进入从redis,用info replication查看状态,这里省略,参考上面。

master再次启动,进入master容器,info replication查看状态为slave。

这个简单的实验,可以理解redis主、从、哨兵的工作机制。

更多详细资料参考:
https://www.cnblogs.com/kevingrace/p/9004460.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值