启动主服务器
docker run -d --name redis6379 --restart=always --net=host redis
启动从服务器
docker run -d --name redis6380 --restart=always --net=host redis redis-server --port 6380 --slaveof 192.168.64.150 6379
启动从服务器
docker run -d --name redis6381 --restart=always --net=host redis redis-server --port 6381 --slaveof 192.168.64.150 6379
查看
docker exec -it redis6379 redis-cli info replication docker exec -it redis6380 redis-cli info replication主从哨兵
mkdir /opt/sentinel/ cd /opt/sentinel/ # 配置文件中的 "sentinel monitor mymaster 192.168.64.150 6379 2" # 末尾的 2 表示两个哨兵投票确认主服务器宕机,哨兵才会认为主服务器宕机 cat <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 cat < 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 cat < 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
启动三个哨兵
docker run -d --name sentinel5000 -v /opt/sentinel/5000.conf:/sentinel.conf --net=host redis redis-sentinel /sentinel.conf docker run -d --name sentinel5001 -v /opt/sentinel/5001.conf:/sentinel.conf --net=host redis redis-sentinel /sentinel.conf docker run -d --name sentinel5002 -v /opt/sentinel/5002.conf:/sentinel.conf --net=host redis redis-sentinel /sentinel.conf # 进入一个哨兵容器,查看它监控的主从服务器和其他哨兵 docker exec -it sentinel5000 redis-cli -p 5000 > sentinel master mymaster > sentinel slaves mymaster > sentinel sentinels mymaster
停止主服务器,测试主服务器重新选举
# 停止主服务器 docker stop redis6379 # 在哨兵日志中查看服务器切换日志: +switch-master mymaster 192.168.64.150 6379 192.168.64.150 6381 docker logs sentinel5000 # 查看 6380 和 6381 服务器的角色变化 docker exec -it redis6380 redis-cli -p 6380 > info replication docker exec -it redis6381 redis-cli -p 6381 > info replication
重新启动6379,不会把6379切换成主服务器,而是作为从服务器
docker start redis6379 docker exec -it redis6379 redis-cli > info replication
客户端api连接哨兵存取数据
Set搭建redis集群sets = new HashSet<>(); sets.add("192.168.64.151:5000"); sets.add("192.168.64.151:5001"); sets.add("192.168.64.151:5002"); JedisPoolConfig poolConfig = new JedisPoolConfig(); JedisSentinelPool pool = new JedisSentinelPool("mymaster",sets,poolConfig); Jedis jedis = pool.getResource(); jedis.set("a", "aaaaaaa"); System.out.println(jedis.get("a")); jedis.close();
https://wanght.blog.csdn.net/article/details/119374989



