为了账号安全,请及时绑定邮箱和手机立即绑定

Docker Redis Sentinel 高可用部署实践

标签:
Docker

一、Redis Sentinel 介绍

1、Sentinel

数据库环境搭建,从单机版到主备、再到多数据库集群,我们需要一个高可用的监控;比如Mysql中,我们可能会采用MHA来搭建我们的高可用数据库服务;
目前很多项目都用到了redis,比如我们采用1+2的模式,也就是一主两从;我们设置Redis主从复制,将主节点数据同步给从节点,从而达到:
1、主机异常宕机,从节点作为主节点顶上来,让服务正常运行,给运维留足时间;
2、采用读写分离,分担主节点的读压力;
那么Redis 怎么解决主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,并且让所有从节点去复制新的主节点,整个过程不需要人工干预的问题?
Redis官方给出了解决方案,就是使用Sentinel来动态监控redis节点,并组建高可用方案。

2、Redis Sentinel的高可用

Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当发现节点不可达时,会对节点做下线标识。
如果被标识的是主节点,他还会选择和其他Sentinel节点进行选举,当大多数的Sentinel节点都认为主节点不可达时,他们会重新选举出一个Sentinel节点来完成自动故障转移工作,同时将这个变化通知给Redis应用方。
整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。

3、Redis Sentinel 架构结构图

我们整体部署的拓扑结构如图所示:
1、现部署

webp

redis主从

webp

sentinel高可用

AliasIPport
master10.192.33.22737701
slave110.192.33.22837702
slave210.192.33.22937702
Sentinel110.192.33.22737801
Sentinel210.192.33.22837801
Sentinel310.192.33.22937801

分别有3个Sentinel节点,1个主节点,2个从节点组成一个Redis Sentinel集群。

AliasIPport
master10.192.33.22737701
slave110.192.33.22837702
slave210.192.33.22937702
Sentinel110.192.33.22737801
Sentinel210.192.33.22837801
Sentinel310.192.33.22937801

二、使用Docker容器部署

1、使用docker部署redis,master和slaver,由于我是在内网部署,所以采用的是离线部署;docker部署再次不多说,如果不懂,可先自行了解,并安装;


webp

目录1


2、在redis-01-master中,创建docker-redis-master.sh文件,脚本如下:

docker run -d --network host --name redis-01-master
-v /data/docker/redis/redis-01-master/data:/data
redis:3.2.6-alpine  --appendonly yes --port 37701

3、在另外两台机器redis-02-slave下创建docker-redis-master.sh文件,脚本如下:

docker run -d --network host --name redis-02-slave
-v /data/docker/redis/redis-02-slave/data:/data
redis:3.2.6-alpine  --appendonly yes
--port 37702 --slave-read-only yes
--slaveof 10.192.33.227 37701

4、分别执行docker-redis-master.sh,之后使用sudo docker ps来查看镜像是否运行

webp

查看容器


5、搭建sentinel环境,在三台机器上分别建好目录


webp

目录2


6、在每个目录中创建这里目录和文件


webp

目录3


7、在conf中创建sentinel.conf文件,注意可写入权限

port 37801
dir "/var/redis/data"
logfile "/var/redis/data/logs/sentinel-01.log"
sentinel monitor master003 10.192.33.227 37901 2
sentinel down-after-milliseconds master003 30000
sentinel parallel-syncs master003 1
sentinel failover-timeout master003 180000
说明:
port 是sentinel节点的端口
dir是监控日志
sentinel monitor是指当前监控主节点
2代表判断主节点失败至少需要2个Sentinel节点节点同意
master003 是主节点的别名
如果超过30000毫秒且没有回复,则判定不可达
故障转移超时时间为180000毫秒

8、创建  docker-sentinel.sh执行文件,脚本如下:

docker run -d --network host --name redis-sentinel-01
-v /data/docker/redis/sentinel-01/data:/var/redis/data
-v /data/docker/redis/sentinel-01/conf:/conf
redis:3.2.6-alpine \
/conf/sentinel-01.conf --sentinel

9、依次启动,启动完后,sentinel.conf会自动写入发现的从节点和sentinel的follow节点信息,例如:

port 37801
dir "/var/redis/data"
logfile "/var/redis/data/logs/sentinel-02.log"
sentinel myid 1a26337bb909bba4c9692db916e551b61764dd8c
sentinel monitor master003 10.199.33.229 37701 2
# Generated by CONFIG REWRITE
sentinel config-epoch master003 0
sentinel leader-epoch master003 0
//发现的两个从节点
sentinel known-slave master003 10.199.33.227 37702
sentinel known-slave master003 10.199.33.228 37702
//发现的两个Sentinel节点
sentinel known-sentinel master003 10.199.33.227 37801 7eab541796e47ca8eea9fb4fc646250debc4082a
sentinel known-sentinel master003 10.199.33.229 37801 81f4bac8d2c1f8bdda9caadca05ac1d7adfb89ca
sentinel current-epoch 0

10、检测环境
进入sentinel容器,连接redis

redis-cli -p 37801
127.0.0.1:37801> sentinel masters

    2) "master003"
    3) "ip"
    4) "10.192.33.229"
    5) "port"
    6) "37701"
    7) "runid"
    8) "3a03b4ec2c90633edc013f8f2df088bfbc17151e"
    9) "flags"
   10) "master"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "315"
   19) "last-ping-reply"
   20) "315"
   21) "down-after-milliseconds"
   22) "30000"
   23) "info-refresh"
   24) "9456"
   25) "role-reported"
   26) "master"
   27) "role-reported-time"
   28) "85544506"
   29) "config-epoch"
   30) "0"
   31) "num-slaves"
   32) "2"
   33) "num-other-sentinels"
   34) "2"
   35) "quorum"
   36) "2"
   37) "failover-timeout"
   38) "180000"
   39) "parallel-syncs"
   40) "1"</pre>

环境基本搭建完成,由于时间关系,暂时只写到这里。后面在详细介绍redis cluster搭建和redis中间件大家redis统一管理;

webp

中间件



作者:NeilZhou
链接:https://www.jianshu.com/p/f3c6139284a6


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消