泰州公司网站建设,网站建设是否需要源代码,网店装修是什么意思,网站建设教程pdf百度云头脑风暴出于学习目的#xff0c;您可以很轻松地在docker环境下运行redis的单个实例#xff0c;但是如果您需要在生产环境中运行它#xff0c;那么必须将Redis部署为HA(High Avaliable)模式。Redis Sentinel为Redis提供高可用性#xff0c;这意味着使用Sentinel可以创建Red… 头脑风暴出于学习目的您可以很轻松地在docker环境下运行redis的单个实例但是如果您需要在生产环境中运行它那么必须将Redis部署为HA(High Avaliable)模式。Redis Sentinel为Redis提供高可用性这意味着使用Sentinel可以创建Redis HA部署该部署可以在无需人工干预的情况下抵抗某些类型的故障。Redis Sentinel提供的主要功能是当主节点发生故障时它将自动选择一个备用节点并将其升级为主节点。它是如何做到的它会定期检查Redis实例的运行状况和运行状况还会将新的主服务器通知给客户端和从服务器。使用的是带有领导者选举算法的gossip协议。Sentinel还充当客户端发现的中心授权来源客户端连接到Sentinel以获取主节点的地址。本文以自己的亲身经历使用Docker-compose搭建一个Redis Sentinel模型1:master-2:slave:3:sentinelDocker-compose搭建Redis SentinelRedis Sentinel是针对原始Master/Slave模型而衍生的高可用模型。我们为便于灵活部署,先易后难先搭建Redis Master/Slave模型再搭建Redis Sentinel模型。文件组织格式如下redis-sentinel
├── redis
│ └── docker-compose.yml
└── sentinel├── docker-compose.yml├── sentinel1.conf├── sentinel2.conf├── sentinel3.conf└── sentinel.conf
1. Master/Slave进入Redis文件夹创建docker-compose.yml文件下面的Compose文件设置了1Master 2Slaveversion: 3
services:master:image: rediscontainer_name: redis-mastercommand: redis-server --requirepass redis_pwd --masterauth redis_pwdports:- 6380:6379slave1:image: rediscontainer_name: redis-slave-1ports:- 6381:6379command: redis-server --slaveof redis-master 6379 --requirepass redis_pwd --masterauth redis_pwdslave2:image: rediscontainer_name: redis-slave-2ports:- 6382:6379command: redis-server --slaveof redis-master 6379 --requirepass redis_pwd --masterauth redis_pwd
注意如果设置了Redis客户端访问密码requirepass 那么也要设置相同的副本集同步密码masterauth。另外我们后面使用哨兵模式能够完成故障转移现有的Master可能会变成Slave故在当前Master容器中也要携带masterauth参数。可在容器内使用 config get [Param] 命令验证执行docker-compose up -d会产生3个Redis容器分别映射到宿主机6380、6381、6382端口 默认连接在redis-default网桥。docker ps输出如下fe2eb7a5cce9 redis docker-entrypoint.s… 2 hours ago Up 2 hours 0.0.0.0:6382-6379/tcp redis-slave-2
4c280aa6dc09 redis docker-entrypoint.s… 2 hours ago Up 2 hours 0.0.0.0:6381-6379/tcp redis-slave-1
91b83143b7c1 redis docker-entrypoint.s… 2 hours ago Up 2 hours 0.0.0.0:6380-6379/tcp redis-master
2. Redis Sentinel很明显我们即将搭建的Sentinel容器需要能访问到以上3个容器故需要在形成Sentinel容器时使用外置的redis-default网桥(Redis Master/Slave docker-compose 已经创建).2.1 进入sentinel文件夹创建docker-compose.ymlversion: 3
services:sentinel1:image: rediscontainer_name: redis-sentinel-1ports:- 26379:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel1.conf:/usr/local/etc/redis/sentinel.confsentinel2:image: rediscontainer_name: redis-sentinel-2ports:- 26380:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel2.conf:/usr/local/etc/redis/sentinel.confsentinel3:image: rediscontainer_name: redis-sentinel-3ports:- 26381:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:default:external:name: redis_default
2.2 创建哨兵文件将如下内容拷贝进去port 26379
dir /tmp
sentinel monitor mymaster 172.20.0.3 6379 2
sentinel auth-pass mymaster redis_pwd
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
注意以上 172.20.0.3是之前Redis Master/slave启动之后Master节点的IP通过docker inspect [containerIP]获取, 这里我们要配合设置Master/Slave访问密码。2.3 将哨兵文件复制三份Volume进Sentinel容器sudo cp sentinel.conf sentinel1.conf
sudo cp sentinel.conf sentinel2.conf
sudo cp sentinel.conf sentinel3.conf
docker-compose up -d生成3个Sentinel容器。此时docker ps显示如下80f4b776f5dd redis docker-entrypoint.s… 58 minutes ago Up 57 minutes 6379/tcp, 0.0.0.0:26380-26379/tcp redis-sentinel-2
3a1bcdc06253 redis docker-entrypoint.s… 58 minutes ago Up 57 minutes 6379/tcp, 0.0.0.0:26379-26379/tcp redis-sentinel-1
3bada23b572e redis docker-entrypoint.s… 58 minutes ago Up 57 minutes 6379/tcp, 0.0.0.0:26381-26379/tcp redis-sentinel-3
fe2eb7a5cce9 redis docker-entrypoint.s… 2 hours ago Up 2 hours 0.0.0.0:6382-6379/tcp redis-slave-2
4c280aa6dc09 redis docker-entrypoint.s… 2 hours ago Up 2 hours 0.0.0.0:6381-6379/tcp redis-slave-1
91b83143b7c1 redis docker-entrypoint.s… 2 hours ago Up 2 hours 0.0.0.0:6380-6379/tcp redis-master
验证Master/Slave副本集进入Master容器确认两个Slave容器已经连接。2. Redis Sentinel 进入其中一个Sentinel容器确认Master、2个Slave、另外2个Sentinelflags: master 表明master正常运作异常情况会显示s-down,o-downnum-slaves侦测到2个Slave副本集num-other-sentinels除此之外还有2个哨兵Redis Sentinel高可用停止 master容器等待10s进入任意sentinel容器使用sentinel master mymaster命令观察主节点发生变化观察外挂的Sentinel*.conf 主节点IP发生变化总结输出当初做这个部署曾经尝试采用阿里云的redis-sentinel docker-compose方式发现其采用docker-compose scale生成多个Sentinel容器不能映射到宿主机端口导致外部Redis客户端无法定位sentinel。结合网上一些资料摸索出渐进式部署 共享网桥的方式部署Redis Sentinel, 本人亲测有效。项目开源地址如下大家可积极使用。https://github.com/zaozaoniao/Redis-sentinel-with-docker-compose推荐阅读● 这么香的Chrome插件你都安装了吗● 一文掌握Cookies前世今生● ASP.NET Core跨平台技术内幕● TPL Dataflow组件应对高并发,低延迟要求● 实例解读Docker Swarm● 基于docker-compose的Gitlab CI/CD实践排坑指南戳原文更有料