Docker Redis Sentinel 高可用部署实践

一、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、现部署

redis主从
sentinel高可用
Alias IP port
master 10.192.33.227 37701
slave1 10.192.33.228 37702
slave2 10.192.33.229 37702
Sentinel1 10.192.33.227 37801
Sentinel2 10.192.33.228 37801
Sentinel3 10.192.33.229 37801

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

Alias IP port
master 10.192.33.227 37701
slave1 10.192.33.228 37702
slave2 10.192.33.229 37702
Sentinel1 10.192.33.227 37801
Sentinel2 10.192.33.228 37801
Sentinel3 10.192.33.229 37801

二、使用Docker容器部署

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


目录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来查看镜像是否运行

查看容器

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


目录2

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


目录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统一管理;

中间件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容