网站首页 > 技术文章 正文
科普
Redis 支持的三种集群方案是什么???
什么是redis集群、哨兵、主从......回顾一下
- 【redis主从】:是备份关系, 我们操作主库,数据也会同步到从库。 如果主库机器坏了,从库可以上。就好比你 D盘的数据丢了,但是你移动硬盘里边备份有。
- 【redis哨兵】:哨兵保证的是HA(高可用),保证特殊情况故障自动切换,哨兵盯着你的“redis主从集群”,如果主库死了,它会告诉你新的老大是谁。
- 【redis集群】:集群保证的是高并发,因为多了一些兄弟帮忙一起扛。同时集群会导致数据的分散,整个redis集群会分成一堆数据槽,即不同的key会放到不不同的槽中。
正文
下面咱们就在docker下搭建一下哨兵模式吧:
注意:redis集群不支持docker的端口映射模式,网络模式必须指定为host,--net=host
环境:
三台机器,一主两从,三个哨兵
master: xxxxx
slave1: xxxxx
slave2: xxxxx
- 1. master上执行redis_master.sh
- 2. slave1和slave2分别执行redis_slave.sh
- 3. master、slave1、slave2上执行redis_sentinel.sh
- 4. 验证主从同步
- 5. 验证高可用,slave自动切换为master
- 6. 还原master
1.Redis master脚本
#!/bin/bash
#redis master 重启脚本
role=master
access_port=6379 #启动监听的端口
password=amaocl@123
data_path=/data/redis/data
function restart_master_redis() {
container_name=redis-${access_port}-${role}
docker kill $container_name || echo "ok"
docker rm $container_name || echo "ok"
docker run \
--name redis-${access_port}-${role} \
--net=host \
--restart=always \
-v ${data_path}:/data \
-d redis:5.0.10 \
redis-server --port ${access_port} --appendonly yes --requirepass ${password} --masterauth ${password} --protected-mode no
}
restart_master_redis
2.slave1和slave2分别执行redis_slave.sh
#!/bin/bash
role=slave
access_port=6379 #启动监听的端口
master_ip=10.40.35.35 #修改为master的ip
master_port=6379 #修改为master的端口
data_path=/data/redis/data
password=amaocl@123
function restart_slave_redis() {
container_name=redis-${access_port}-${role}
docker kill $container_name || echo "ok"
docker rm $container_name || echo "ok"
docker run \
--name redis-${access_port}-${role} \
--net=host \
--restart=always \
-v ${data_path}:/data \
-d redis:5.0.10 \
redis-server --port ${access_port} --appendonly yes --requirepass ${password} --masterauth ${password} --protected-mode no \
--replicaof ${master_ip} ${master_port}
}
restart_slave_redis
3.master、slave1、slave2上执行redis_sentinel.sh
#!/bin/bash
#redis sentinel 重启脚本
master_ip=xx.xx.xx.xx #master的ip
master_port=6379 #master端口
role=sentinel
access_port=26379 #sentinel监听端口
quorum=2 #两台机器判定主被动下线后,就进行failover(故障转移)
password=amaocl@123
sentinel_conf_path=`pwd`/${role}_${access_port}.conf
cat << EOF > ${sentinel_conf_path}
port ${access_port}
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
sentinel monitor mymaster ${master_ip} ${master_port} ${quorum}
sentinel auth-pass mymaster ${password}
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 90000
sentinel deny-scripts-reconfig yes
protected-mode no
EOF
function restart_sentinel_redis() {
#启动前删除
container_name=redis-${access_port}-${role}
docker kill $container_name || echo "ok"
docker rm $container_name || echo "ok"
docker run \
--name redis-${access_port}-${role} \
--net=host \
--volume=${sentinel_conf_path}:/usr/local/etc/redis/sentinel.conf \
--restart=always \
-d redis:5.0.10 \
redis-sentinel /usr/local/etc/redis/sentinel.conf
}
restart_sentinel_redis
4. 验证主从同步
1. 在master上连接到redis新建一个key,去其他slave上查看是否有相应的key生成 ,若有证明主从正常,否则同步异常
set test hello-world
2. 删除测试key
del test
5. 验证高可用,slave自动切换为master
1. 停止master的容器,(不是停止哨兵的容器)
docker stop master的容器id
2. 连接到其他两台slave上的redis,执行info 查看当前的master是哪台机器,是否有有台机器变成了master, 若无证明哨兵异常,需要排查
6. 还原master
master已经自动其他机器
若第五步正常,将1、2、 3三步的脚本重新执行一下(按顺序执行)
猜你喜欢
- 2024-10-14 Docker Overlay 网络学习 dockercompose 网络
- 2024-10-14 盘点c++几种常见的设计模式及具体实现
- 2024-10-14 Docker新手福音!这个开源控制面板让你更快上手Docker
- 2024-10-14 Docker-掌握这三种方法,创建自己的docker镜像
- 2024-10-14 docker 基础概念 docker基于什么
- 2024-10-14 小白也能轻松上手,深度体验绿联私有云DX4600 Docker功能
- 2024-10-14 一文带你了解docker常用命令 docker常用命令及参数
- 2024-10-14 Docker最佳实践的反模式 docker反向代理
- 2024-10-14 docker中容器如何实现通信 docker容器之间如何通信
- 2024-10-14 工程化Docker:确保应用程序的可靠性、可扩展性和可维护性
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)