基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)
我们知道,Redis的集群方案大致有三种:1)redis cluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。
sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
同样,我们使用docker进行搭建
新建一个mkdir redis-sentinel文件夹
进入项目文件夹 cd redis-sentinel,再建立一个sentinel专门来存放哨兵脚本,然后cd sentinel
建立sentinel.conf配置文件:
sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000
该配置的意思是,监控主服务器的6379端口并且起两个实例,如果哨兵5s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒,如果5秒以上连接不上主库同步,则在5秒后进行选举,对其他的从服务器进行角色转换
随后,建立sentinel-entrypoint.sh脚本文件:
#!/bin/shsed -i "s/$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf
sed -i "s/$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf
sed -i "s/$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.confexec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel
该脚本文件会对配置文件进行同步,用来启动哨兵
然后我们来建立Dockerfile指定基础镜像,同时拷贝配置文件到镜像内部:
FROM redisEXPOSE 26379
ADD sentinel.conf /etc/redis/sentinel.conf
RUN chown redis:redis /etc/redis/sentinel.conf
COPY sentinel-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh
ENTRYPOINT ["sentinel-entrypoint.sh"]
最后退到项目根目录 cd …
建立docker-compose.yml配置文件:
master:image: redisports:- "6379:6379"
slave1:image: rediscommand: redis-server --slaveof redis-master 6379links:- master:redis-masterports:- "6380:6379"
slave2:image: rediscommand: redis-server --slaveof redis-master 6379links:- master:redis-masterports:- "6381:6379"
sentinel1:build: sentinelenvironment:- SENTINEL_DOWN_AFTER=5000- SENTINEL_FAILOVER=5000 links:- master:redis-master- slave1
sentinel2:build: sentinelenvironment:- SENTINEL_DOWN_AFTER=5000- SENTINEL_FAILOVER=5000 links:- master:redis-master- slave2
意思是,我们起三台redis服务,分别跑在6379,6380,6381 ,一主两从,并且有两个哨兵实例来监控他们,最后项目结构是这样的
在项目根目录下,启动服务:
docker-compose up --force-recreate
如果希望在后台运行可以加-d参数
此时我们可以测一下同步是否成功,分别开三个窗口登录到redis,redis-cli -p 6379,redis-cli -p 6380,redis-cli -p 6381
在主库6379中set 123 123,然后分别在从库get 123
没有问题,现在我们来测一下哨兵模式是否好用,如果主库由于某种原因宕机了,从库是否能自动切换角色
我们可以手动停止主库的容器进程,来模拟宕机的情况
docker stop redissentinel_master_1
此时主库已经连接不上了,我们进入从库,使用info命令来查看从库的角色
发现之前6380本来是从库(slave)角色,现在已经变成主库了(master)了
其实这就是所谓的高负载高可用架构,在使用集群承担高负载的同时,也能进行高可用的容灾机制。
基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)相关推荐
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
- Redis缓存高可用集群哨兵模式详解
单机Redis服务器环境下,如果服务器宕机就会造成无法挽回的损失.于是就出现了主从架构的Redis服务器,从节点slave服务器并不对外提供服务,只是将数据定期从主节点master服务器上同步过来,此 ...
- docker mysql 高可用_使用docker 基于pxc镜像搭建mysql高可用集群
前置条件 docker已安装: 第一步:拉取镜像 docker pull percona/percona-xtradb-cluster:5.7.21 第二步:复制重命名镜像(可选) docker ta ...
- 【K8SRockyLinux】基于开源操作系统搭建K8S高可用集群(详细版)
文章目录 一.实验节点规划表
- docker搭建redis高可用集群
目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...
- 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程
大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:今天总结一下Redis集群高可用的搭建流程 [惊喜推荐+优质资源 ...
- redis高可用集群
一.redis集群方案比较 主从哨兵模式 redis3.0之前的版本实现集群一般采用的方案是借助哨兵sentinel工具来监控master节点的状态,如果master主节点异常,则会做主从切换,将一台 ...
- redis 04:Redis高可用集群
文章目录 一.Redis集群方案比较 二.Redis高可用集群搭建 三.Java操作redis集群 四.Redis集群原理分析 五.集群伸缩 5.1 集群扩展 5.1 缩容集群 六.总结 以下参考了图 ...
- 搭建Nginx高可用集群(keepalived+双机热备)
一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...
最新文章
- SDUTOJ3771_数组计算机(线段树)
- 120xa正反转参数_你知道变频器的“正反转死区时间”吗?它的“停机方式”有几种?...
- struts中多个模块时,使用多个struts-config.xml文件之间时如何切换的!
- ubuntu下c 访问mysql_Ubuntu下用C语言访问MySQL数据库
- Python《爬虫收集》
- linux系统恢复上一次,如何将您的Ubuntu Linux系统恢复到其上一个状态
- Django之内置组件
- flask服务器获取多个文件,python - OkHttp将带有名称的多个文件上传到Python Flask服务器 - 堆栈内存溢出...
- 基于java的康泰小区物业管理系统的设计与实现毕业设计源码101926
- 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法(FA-GN与IC-GN)
- rasa实现同义词替换
- 设置导航标题颜色以及导航条背景色
- 分享qq空间出现失败
- 内存管理Memorynbsp;OC——第九天
- Centos7.4.1708 安装usb无限网卡驱动
- linux vmware文件互传,Linux与Windows文件互传(VMWare)
- 解决问题——无法连接到更新服务器。我们将稍后再试,你也可以立即进行检查。如果问题仍然存在,请确保你已连接到Internet
- 实现textarea不自动换行
- 详解JVM之双亲委派机制
- iOS下载JPG图片会被压缩问题