基于容器技术的Redis sentinel主从复制读写分离高可用分布式架构方案

7 篇文章 0 订阅
6 篇文章 0 订阅

目的:提高并发访问、缓存数据备份、故障自动切换实现高可用

环境:系统:centos 7.6; Docker 18.03.1-ce

架构方案:3台哨兵一起监控1主2从,主节点负责写数据,从节点负责读数据,当master宕机时,由sentinel集群来自动切换某个从节点成为新的master,旧的master会成为新的从节点,应用端通过从sentinel获取主从redis节点信息,连接主从redis节点进行读写操作

基于哨兵的主从架构

实施构建

设计docker部署方案
容器名称容器IP端口映射Redis服务模式
redis-sentinel1172.16.0.10122531-26379sentinel
redis-sentinel2172.16.0.10222532-26379sentinel
redis-sentinel3172.16.0.10322533-26379sentinel
redis-master172.16.0.11122631-6379master
redis-slave1172.16.0.11222632-6379slave
redis-slave2172.16.0.11322633-6379slave
搭建环境
创建Docker的自定义网络
docker network create --subnet=172.16.0.0/16 sentinelnetwork
构建容器

Dockerfile内容

FROM centos:latest
RUN groupadd -r redis && useradd  -r -g redis redis
RUN yum -y update &&  yum -y install epel-release && yum -y install redis && yum -y install net-tools
EXPOSE 6379

1.进入Dockerfile文件目录构建镜像

docker build -t redis-base-image .

2.构建6个运行redis服务的容器

docker run -itd --name redis-sentinel1 --net sentinelnetwork -p 22531:26379 --ip 172.16.0.101 redis-base-image
docker run -itd --name redis-sentinel2 --net sentinelnetwork -p 22532:26379 --ip 172.16.0.102 redis-base-image
docker run -itd --name redis-sentinel3 --net sentinelnetwork -p 22533:26379 --ip 172.16.0.103 redis-base-image
docker run -itd --name redis-master --net sentinelnetwork -p 22631:6379 --ip 172.16.0.111 redis-base-image
docker run -itd --name redis-slave1 --net sentinelnetwork -p 22632:6379 --ip 172.16.0.112 redis-base-image
docker run -itd --name redis-slave2 --net sentinelnetwork -p 22633:6379 --ip 172.16.0.113 redis-base-image

运行 docker ps -a 查看生成的容器
在这里插入图片描述
3.主从配置
使用 "docker exec -it 容器名称 bash " 命令进入容器
1). 为了方面测试,先将6个容器的redis.conf配置成bind 0.0.0.0 和 protected-mode no
2).配置主从关系:修改从节点的redis.conf文件的slaveof参数

slaveof 172.16.0.111 6379

3).将主从3个节点开启redis-server服务

redis-server /etc/redis.conf &

4)登录Master节点的redis-cli,用 info replication 查看到角色是master的信息
在这里插入图片描述
登录Slave节点的redis-cli,用 info replication 查看角色是slave的信息
在这里插入图片描述
5) 测试数据复制:
在master上写入一个数据 set name jo
在这里插入图片描述
然后在两个从节点查看到数据复制情况:
salve1节点
在这里插入图片描述
slave2节点
在这里插入图片描述

4.哨兵配置
1). 进入sentinel容器修改redis-sentinel.conf,将 “sentinel monitor mymaster 127.0.0.1 6379 2”这行配置改成监控master节点

sentinel monitor mymaster 172.16.0.111 6379 2

2).开启redis-sentinel服务

redis-sentinel /etc/redis-sentinel.conf &

3).查看sentinal监控日志

cat /var/log/redis/sentinel.log

在这里插入图片描述

测试故障自动切换
1.关停当前master节点的redis服务: kill 26

在这里插入图片描述

2.过一段时间,再进入从节点查看主从关系,发现172.16.0.112这台机器自动变成了新的Master

在这里插入图片描述
113这台从节点改成为112的从节点了
在这里插入图片描述

3.查看sentinel日志,可以看到哨兵集群检测发现111Master下线了,然后重新选择了112作为新的主节点并做了切换操作,sentinel改监控112了

在这里插入图片描述

4.重启111的redis-server后,发现它确实变成了从节点,而且redis.conf文件被自动修改了slaveof 配置

在这里插入图片描述

5.最后演变成的结构

在这里插入图片描述

当然也可以使用docker-compose进行自动化构建点击查看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值