1.引言
在实际生产环境当中,缓存时支撑系统业务高效运行的重要基础设施。缓存的可靠性和可用性至关重要,本章利用Docker+docker-compose+Redis以实现单机版的Redis哨兵模式集群部署,阅读本章需要前置了解Docker容器和Redis哨兵模式的相关知识。2.Redis主从复制 2.1容器编排 完成主从复制、以支撑读写分离(写:主,读:从)
version: '3'
services:
master:
image: redis
container_name: redis-master
command: redis-server --requirepass 123456
ports:
- "6379:6379"
networks:
sentinel-master:
ipv4_address: 172.33.1.0
slave1:
image: redis
container_name: redis-slave-1
ports:
- "6380:6379"
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
depends_on:
- master
networks:
sentinel-master:
ipv4_address: 172.33.1.1
slave2:
image: redis
container_name: redis-slave-2
ports:
- "6381:6379"
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
depends_on:
- master
networks:
sentinel-master:
ipv4_address: 172.33.1.2
networks:
sentinel-master:
name: redis_sentinel-master
driver: bridge
ipam:
config:
- subnet: 172.33.0.0/16
2.2主从测试 【企业级实战|Docker Redis哨兵、集群部署详解】主机断开连接,从机依旧连接主机,但没有写操作直到主机重新连接
第一次连接主机,从机发送sync同步命令,master接收命令,启动后台存盘经常,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,完成一次全量复制
- 全量复制:slave接收到数据库文件数据后,将其存盘并加载到内存中
- 增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步
- 重新连接会触发全量复制
2.3测试网络 查看网络配置:docker inspect sentinel-master
容器网络测试:
- apt-get update
- apt-get install iputils-ping
- ping slave2
- ping slave1
version: '2'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
ports:
- "26379:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- "./conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf"
sentinel2:
image: redis
container_name: redis-sentinel-2
ports:
- "26380:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- "./conf/sentinel2.conf:/usr/local/etc/redis/sentinel.conf"
sentinel3:
image: redis
container_name: redis-sentinel-3
ports:
- "26381:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- "./conf/sentinel3.conf:/usr/local/etc/redis/sentinel.conf"
networks:
default:
external:
name: redis_sentinel-master
3.2 编写哨兵配置文件 分别命名sentinel.conf、sentinel2.conf、sentinel3.conf
port 26379
dir /tmp
sentinel monitor mymaster 172.33.1.0 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
sentinel deny-scripts-reconfig yes
注意:
- 配置了静态ip,无需修改任何配置
- 两票认为master宕机即进行选举:sentinel monitor mymaster 172.33.1.0 6379 2
- 查看实例:docker ps
文章图片
- 查看dockernet:docker inspact redis_sentinel-master
文章图片
- docker exec -it redis-sentinel-1 bash
- redis-cli -p 26379
- sentinel master mymaster
文章图片
- docker kill redis-master
- sentinel master mymaster
文章图片
- 主节点已自动切换、ip切换
- 主节点重启不会直接作为主机
- 哨兵集群,基于主从复制模式,兼又其有点
- 自动切换,对故障进行转移,可用性更佳
- 架构更健壮
缺点: - 不易在线扩容
- 哨兵配置较为复杂
解决方法:
- 可用通过布隆过滤器对请求数据进行过滤
- 设置缓存空对象
解决方法:
- 对热点数据进行过期延时设置
- 加分布式锁,对同一个key同时只能一个线程查询
解决方法:
- 保障redis高可用(集群)
- 限流降级
- 数据预热
6.参考资料 https://blog.csdn.net/qq_39211866/article/details/88044546
推荐阅读
- redis|Redis集群之哨兵模式
- Redis|Redis哨兵集群部署教程—从零开始(一主二从三哨兵)
- Docker运维技术最佳实践|08-Docker 镜像安装实践(MySql数据库,Redis数据库,Nginx代理,Nacos组件)
- docker|Docker Swarm集群搭建以及服务命令等操作
- mysql|MySQL 高级(进阶) SQL 语句 (一)
- docker|Centos 8.2安装docker
- 服务器|腾讯云轻量应用服务器CentOS系统使用docker安装tomcat,MySQL 并发布SSM maven项目
- 运维手册|CentOS7安装部署docker和docker-compose
- 容器化|详解CentOS安装部署Docker