Docker搭建redis主从+哨兵

浅浅的花香味﹌ 2022-10-19 00:58 255阅读 0赞

文章目录

  • redis 哨兵
  • 搭建主从服务器 —— 一主两从
  • 启动哨兵
  • 客户端api连接哨兵存取数据

redis 哨兵

redis主从复制结构中,当主服务器宕机,哨兵可以监控到服务宕机,在从服务器中选举产生一个新的主服务器。

搭建主从服务器 —— 一主两从

清理容器(可选)

  1. docker rm -f $(docker ps -aq)

启动主服务器

  1. # --net=host 容器直接使用宿主机的端口,不需要做端口映射
  2. docker run -d --name redis6379 --net=host --restart=always redis
  3. # 进入容器,运行redis客户端
  4. docker exec -it redis6379 redis-cli
  5. # 查看集群信息,默认是主服务器
  6. > info replication

启动两个从服务器

  1. # 启动redis6380容器,作为 redis6379 的从服务器启动
  2. # --port 和 --slaveof 是 redis-server 命令的参数
  3. docker run -d --name redis6380 --net=host --restart=always redis \
  4. redis-server --port 6380 --slaveof 192.168.64.150 6379
  5. # 启动redis6381容器,作为 redis6379 的从服务器启动
  6. docker run -d --name redis6381 --net=host --restart=always redis \
  7. redis-server --port 6381 --slaveof 192.168.64.150 6379
  8. # 查看三个 redis 服务的角色
  9. docker exec -it redis6379 redis-cli
  10. > info replication
  11. docker exec -it redis6380 redis-cli -p 6380
  12. > info replication
  13. docker exec -it redis6381 redis-cli -p 6381
  14. > info replication

启动哨兵

哨兵的配置文件

  1. mkdir /opt/sentinel/
  2. cd /opt/sentinel/
  3. # 配置文件中的 "sentinel monitor mymaster 192.168.64.150 6379 2"
  4. # 末尾的 2 表示两个哨兵投票确认主服务器宕机,哨兵才会认为主服务器宕机
  5. cat <<EOF >5000.conf port 5000 sentinel monitor mymaster 192.168.64.150 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 EOF
  6. cat <<EOF >5001.conf port 5001 sentinel monitor mymaster 192.168.64.150 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 EOF
  7. cat <<EOF >5002.conf port 5002 sentinel monitor mymaster 192.168.64.150 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 EOF

启动三个哨兵

  1. docker run -d --name sentinel5000 \
  2. -v /opt/sentinel/5000.conf:/sentinel.conf \
  3. --net=host \
  4. redis redis-sentinel /sentinel.conf
  5. docker run -d --name sentinel5001 \
  6. -v /opt/sentinel/5001.conf:/sentinel.conf \
  7. --net=host \
  8. redis redis-sentinel /sentinel.conf
  9. docker run -d --name sentinel5002 \
  10. -v /opt/sentinel/5002.conf:/sentinel.conf \
  11. --net=host \
  12. redis redis-sentinel /sentinel.conf
  13. # 进入一个哨兵容器,查看它监控的主从服务器和其他哨兵
  14. docker exec -it sentinel5000 redis-cli -p 5000
  15. > sentinel master mymaster
  16. > sentinel slaves mymaster
  17. > sentinel sentinels mymaster

停止主服务器,测试主服务器重新选举

  1. # 停止主服务器
  2. docker stop redis6379
  3. # 在哨兵日志中查看服务器切换日志: +switch-master mymaster 192.168.64.150 6379 192.168.64.150 6381
  4. docker logs sentinel5000
  5. # 查看 6380 和 6381 服务器的角色变化
  6. docker exec -it redis6380 redis-cli -p 6380
  7. > info replication
  8. docker exec -it redis6381 redis-cli -p 6381
  9. > info replication

重新启动6379,不会把6379切换成主服务器,而是作为从服务器

  1. docker start redis6379
  2. docker exec -it redis6379 redis-cli
  3. > info replication

客户端api连接哨兵存取数据

  1. Set<String> sets = new HashSet<>();
  2. sets.add("192.168.64.151:5000");
  3. sets.add("192.168.64.151:5001");
  4. sets.add("192.168.64.151:5002");
  5. JedisPoolConfig poolConfig = new JedisPoolConfig();
  6. JedisSentinelPool pool = new JedisSentinelPool("mymaster",sets,poolConfig);
  7. Jedis jedis = pool.getResource();
  8. jedis.set("a", "aaaaaaa");
  9. System.out.println(jedis.get("a"));
  10. jedis.close();

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读

    相关 redis主从哨兵

    1. 为什么要有哨兵机制     哨兵机制是对Redis系统的运行情况的监控,解决主从复制的缺点的。  原理:当主节点出现故障时,由Redis Sentinel自动完成故障