文章目錄
- redis 哨兵
- 搭建主從服務器 —— 一主兩從
- 啟動哨兵
- 客戶端api連接哨兵存取資料
redis 哨兵
redis主從復制結構中,當主服務器宕機,哨兵可以監控到服務宕機,在從服務器中選舉產生一個新的主服務器,
搭建主從服務器 —— 一主兩從
清理容器(可選)
docker rm -f $(docker ps -aq)
啟動主服務器
# --net=host 容器直接使用宿主機的埠,不需要做埠映射
docker run -d --name redis6379 --net=host --restart=always redis
# 進入容器,運行redis客戶端
docker exec -it redis6379 redis-cli
# 查看集群資訊,默認是主服務器
> info replication
啟動兩個從服務器
# 啟動redis6380容器,作為 redis6379 的從服務器啟動
# --port 和 --slaveof 是 redis-server 命令的引數
docker run -d --name redis6380 --net=host --restart=always redis \
redis-server --port 6380 --slaveof 192.168.64.150 6379
# 啟動redis6381容器,作為 redis6379 的從服務器啟動
docker run -d --name redis6381 --net=host --restart=always redis \
redis-server --port 6381 --slaveof 192.168.64.150 6379
# 查看三個 redis 服務的角色
docker exec -it redis6379 redis-cli
> info replication
docker exec -it redis6380 redis-cli -p 6380
> info replication
docker exec -it redis6381 redis-cli -p 6381
> info replication
啟動哨兵
哨兵的組態檔
mkdir /opt/sentinel/
cd /opt/sentinel/
# 組態檔中的 "sentinel monitor mymaster 192.168.64.150 6379 2"
# 末尾的 2 表示兩臺從服務器投票確認主服務器宕機,哨兵才會認為主服務器宕機
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
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
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
啟動三個哨兵
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<String> 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://www.uj5u.com/shujuku/291934.html
標籤:其他
上一篇:實踐《Redis聚合統計使用》
下一篇:mysql表磁區的使用和底層原理
