基于Docker的Redis高可用集群搭建(redis-sentinel)
前言
之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的。
目前来说,高可用(主从复制、主从切换)redis集群有两种方案,一种是redis-sentinel,只有一个master,各实例数据保持一致;一种是redis-cluster,也叫分布式redis集群,可以有多个master,数据分片分布在这些master上。
本文介绍基于docker和redis-sentinel的高可用redis集群搭建,大多数情况下,redis-sentinel也需要做高可用,这里先对redis搭建一主二从环境,另外需要3个redis-sentinel监控redis master。
很显然,只使用单个redis-sentinel进程来监控redis集群是不可靠的,由于redis-sentinel本身也有single-point-of-failure-problem(单点问题),当出现问题时整个redis集群系统将无法按照预期的方式切换主从。官方推荐:一个健康的集群部署,至少需要3个Sentinel实例。另外,redis-sentinel只需要配置监控redis master,而集群之间可以通过master相互通信。
redis-sentinel
redis-sentinel作为独立的服务,用于管理多个redis实例,该系统主要执行以下三个任务:
- 监控 (Monitor): 检查redis主、从实例是否正常运作
- 通知 (Notification): 监控的redis服务出现问题时,可通过API发送通知告警
- 自动故障迁移 (Automatic Failover): 当检测到redis主库不能正常工作时,redis-sentinel会开始做自动故障判断、迁移等操作,先是移除失效redis主服务,然后将其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器。当客户端试图连接失效的主服务器时,集群也会向客户端返回最新主服务器的地址,使得集群可以使用新的主服务器来代替失效服务器
环境说明
- Docker
- Ubuntu/CentOS
- Redis v4.0.10
sentinel.conf
sentinel.conf
是启动redis-sentinel的核心配置文件,可以从官网下载:
wget http://download.redis.io/redis-stable/sentinel.conf
一主二从
先搭建好Redis一主二从环境,这里仅给出操作过程,可以参考之前写的《Docker + Redis (4.0.10) 主从环境搭建》,在master上使用info Replication
查看集群状态(注意,为了让redis-sentinel可以发现slave,这里要确保redis服务端口和容器映射端口一致):
# 主库 docker run -it --name redis-master -d -p 6300:6300 redis redis-server --requirepass redispassword --port 6300 docker exec -it redis-master bash redis-cli -a redispassword -p 6300 config set masterauth redispassword # 从库1 docker run -it --name redis-slave -d -p 6301:6301 redis redis-server --requirepass redispassword --port 6301 docker exec -it redis-slave bash redis-cli -a redispassword -p 6301 slaveof <master-ip> <master-port> config set masterauth redispassword # 从库2 docker run -it --name redis-slave2 -d -p 6302:6302 redis redis-server --requirepass redispassword --port 6302 docker exec -it redis-slave2 bash redis-cli -a redispassword -p 6302 slaveof <master-ip> <master-port> config set masterauth redispassword
配置
根据上面下载好的sentinel.conf
,找到并修改如下配置:
# mymaster:自定义集群名,如果需要监控多个redis集群,只需要配置多次并定义不同的<master-name> <master-redis-ip>:主库ip <master-redis-port>:主库port <quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成2 sentinel monitor mymaster <master-redis-ip> <master-redis-port> <quorum> # 注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码 sentinel auth-pass mymaster redispassword # 添加后台运行 daemonize yes
将上面的sentinel.conf
复制三份,分别为sentinel1.conf
,sentinel2.conf
和sentinel3.conf
,再次编辑修改port
为26000
,26001
和26002
。
启动
redis-sentinel启动有以下两种方式:
redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel
大多数版本的redis都支持以上两种方式启动。实战中,为了让redis-sentinel作为独立的服务运行,这里用docker搭建环境:
# redis-sentinel实例1 docker run -it --name redis-sentinel1 -v /root/redis/sentinel1.conf:/usr/local/etc/redis/sentinel.conf -d redis /bin/bash # redis-sentinel实例2 docker run -it --name redis-sentinel2 -v /root/redis/sentinel2.conf:/usr/local/etc/redis/sentinel.conf -d redis /bin/bash # redis-sentinel实例3 docker run -it --name redis-sentinel3 -v /root/redis/sentinel3.conf:/usr/local/etc/redis/sentinel.conf -d redis /bin/bash
分别进入以上三个容器启动redis-sentinel:
docker exec -it redis-sentinel(x) bash # 或redis-server /usr/local/etc/redis/sentinel.conf --sentinel redis-sentinel /usr/local/etc/redis/sentinel.conf
连接并使用redis-sentinel API查看监控状况:
redis-cli -p 26000 (26001 | 26002) sentinel master mymaster 或 sentinel slaves mymaster
测试
进入redis-master容器,休眠60秒redis服务:
docker exec -it redis-master bash redis-cli -a redispassword -p 6300 DEBUG sleep 60
进入redis-slave或redis-slave2容器,查看info Replication
,可以看到master已经完成了切换。
60秒后原redis主库恢复服务,但降级后当前redis服务已无法恢复原主库身份。
参考
Docker化高可用redis集群
Redis Sentinel Documentation
Redis Sentinel 机制与用法(4.0.0版本)
Redis practise(二)使用Docker部署Redis高可用,分布式集群

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
kubernetes ConfigMap
ConfigMap概述 configmap用于将应用所需的配置信息与程序进行分离, 使应用程序更好的复用, 在大规模容器集群环境中, 对应用进行统一配置管理. 一般应用场景: 生成为容器内的环境变量; 以Volume的形式挂载为容器内部的文件或目录. configmap以一个或多个key:value的形式保存在kubernetes系统中供应用使用, 既可以用于表示一个变量的值(例如log-level:info), 也可以用于表示一个完整的配置文件内容(例如xml或properties配置文件的全部内容). 声明方式: 使用yaml配置文件; 使用命令行命令(kubectl create configmap). Pod中使用方式: 环境变量方式 Volume挂载 创建ConfigMap 1. 使用yaml文件方式创建 1) 内容为变量 创建yaml文件cm-log-test.yaml: apiVersion: v1 kind: ConfigMap metadata: name: cm-log data: apploglevel: info appdatadir: /var/data 生成...
- 下一篇
阿里云服务提供商分享视频直播网站服务器解决方案
大家应该都听过抖音、西瓜视频这类的视频网站,而且这些视频网站深受大家喜爱。直播模式也如雨后春笋一般快速出现,电商直播也逐渐火热。因此很多视频类公司纷纷搭建视频直播平台,那么这类网站的服务器该如何选择呢?下面就由阿里云湖北授权服务中心捷讯技术的小编跟大家一起学习一下。 下面我们来看下视频直播整体架构 好了,下面我们还是来看看阿里云电商视频具体的直播解决方案。 基于阿里视频云承载高并发下的视频流处理,使用负载均衡、云主机、云数据库、对象存储和CDN支撑电商核心系统能够确保终端用户网络质量不佳情况下,自适应码率推流,提升速度;同时支持多路视频实时转码、录制、鉴黄服务;低延时直播,百万并发用户的视频分发和互动聊天也毫无压力;不中断直播 过程中的畅快购物体验,非常适合直播导购定向营销。 电商视频方案特点 1、视频直播加速 1)支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案; 2)结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量; 3)结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。 2、快速视频解码 1)多路码率实时转码输出;GPU转码有效支持百万级以上并发视频...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范