Docker容器技术技术微服务架构

Docker Redis Sentinel 高可用部署实践

2018-06-13  本文已影响220人  NeilZhou

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

中间件
上一篇 下一篇

猜你喜欢

热点阅读