docker搭建主从架构和哨兵模式

下文介绍使用docker来创建redis的主从架构和哨兵模式

前提

linux已经下载并安装了docker
从仓库中pull redis的镜像

docker pull redis:latest

确保主机中的镜像已经有了刚下载好的redis镜像

docker images

在这里插入图片描述
架构图
在这里插入图片描述

一. docker创建redis的主从架构

1. 先创建一个master节点

首先需要在宿主机方创建一个redis.conf文件,用于配置信息的填写
相关的配置文件如下:

protected-mode no

# master节点,这里我们规定端口为6379
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300

# 设置为no,如果为yes,可能会与docker的-d后台命令产生冲突
daemonize no

# redis相关文件(如rdb、aof)的存放路径(这里我们要设置在容器内的路径,不是宿主机的路径)
dir "/docker/redis/data"

# 每个redis都会产生一个进程号,其保存在一个文件中,这里就记录了该文件的路径。当进行微服务架构时,都需要这个pid执行文件
pidfile "/docker/redis/data/6379.pid"

loglevel notice

# 日志文件保存位置
logfile "/docker/redis/data/logfile.log"

databases 16
always-show-logo no
set-proc-title yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
rdb-del-sync-files no

将上述文件存放在/docker/redis/redis1/conf/redis.conf中

2.使用docker相关命令启动redis

docker run -d --privileged=true --name=redis1 -p 6379:6379 -v /docker/redis/redis1/:/docker/redis/ redis redis-server /docker/redis/conf/redis.conf

命令解析
–privileged=true :表示在容器中以root权限进行
–name=redis1 :我们这里对容器取名字,使用redis1表示这是master
-v /docker/redis/redis1/:/docker/redis/ :卷映射(需要现在主机创建目录/docker/redis/redis1/conf和/docker/redis/redis1/data)

redis-server /docker/redis/conf/redis.conf:指定配置文件启动redis服务。

启动成功后,使用命令

docker ps

查看对应的容器是否创建成功。

3.cp redis1对应的目录和配置文件

redis1对应的目录结构如下:

/docker/redis/redis1/conf/redis.conf
/docker/redis/redis1/data/

我们需要做的就是创建master对应的两个从主机redis2和redis3,所以这里我们在/docker/redis/目录下cp redis1形成redis2和redis3。如下:

/docker/redis/redis2/conf/redis.conf
/docker/redis/redis2/data

修改redis2中对应的配制文件redis.conf

protected-mode no
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
dir /docker/redis/data
Pidfile /docker/redis/data/6380.pid
loglevel notice
logfile /docker/redis/data/logfile.log
databases 16
always-show-logo no
set-proc-title yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
replicaof 20.20.20.130 6379
replica-read-only yes

配制文件解析:
其实redis2的配制文件和redis1的配制文件差不多,需要修改的如下

port 6380
Pidfile /docker/redis/data/6380.pid

修改成对应的端口号,
另外还需要增加从redis的命令:

# 表示当前redis的主redis是谁
replicaof 20.20.20.130 6379

# 该节点是否只读(主从架构下,从节点是只读的)
replica-read-only yes

4.启动redis2从主机

使用docker命令:

docker run -d --privileged=true --name=true -p 6380:6380 -v /docker/redis/redis2/:/docker/redis redis redis-server /docker/redis/conf/redis.conf

该命令和redis1启动命令类似。
即从主机的搭建,需要修改的基本上就是对应的主从redis中的配置文件,如port和repilca相关配置。

关于第三台主机redis3的启动方案和redis2启动方案差不多,这里就不在演示了。

5. 查看我们的3台redis的主从关系

前提:启动了master redis1和两台从机redis2和redis3

我们进入任意一台server,使用redis的客户端分别连接3个主机,使用info命令进行查看

进入容器

docker exec -it redis1 /bin/bash

连接客户端

redis-cli -h 20.20.20.130 -p 6379
redis-cli -h 20.20.20.130 -p 6380
redis-cli -h 20.20.20.130 -p 6381

三个客户端分别调用info命令

info

6379
在这里插入图片描述

6380
在这里插入图片描述

6381
在这里插入图片描述

综上所述,我们可以看到6379是master,而6380和6381是slave。

6. 测试

对master 6379 进行更改命令,看看对应的slave 6380和6381是否能够收到同步命令

二. docker搭建redis哨兵模式

前提:按照上述,先创建好主从架构的3个redis服务

通常哨兵需要创建奇数个,这里我们创建3个

1. 创建目录格式如下

/docker/redis/sentinel1/data
/docker/redis/sentinel1/conf/sentinel.conf

/docker/redis/sentinel2/data
/docker/redis/sentinel2/conf/sentinel.conf

/docker/redis/sentinel3/data
/docker/redis/sentinel3/conf/sentinel.conf

2.修改sentinel.conf文件

sentinel1

port 26379
daemonize no
pidfile "/docker/redis/data/redis\xe2\x80\x90sentinel\xe2\x80\x9026379.pid"
logfile "/docker/redis/data/26379.log"
dir "/docker/redis/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum>
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
# mymaster这个名字随便取,客户端访问时会用 到
sentinel monitor mymaster 20.20.20.130 6379 2
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid b78a872e9e5aa86a2b50730177307e22856c7353
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 172.17.0.1 6380
sentinel known-replica mymaster 172.17.0.1 6381

sentinel2

port 26380
daemonize no
pidfile "/docker/redis/data/redis‐sentinel‐26380.pid"
logfile "/docker/redis/data/26380.log"
dir "/docker/redis/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum>  
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效  
# mymaster这个名字随便取,客户端访问时会用 到
sentinel monitor mymaster 20.20.20.130 6379 

sentinel3

port 26381
daemonize no
pidfile "/docker/redis/data/redis‐sentinel‐26381.pid"
logfile "/docker/redis/data/26381.log"
dir "/docker/redis/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum> 
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
# mymaster这个名字随便取,客户端访问时会用 到
sentinel monitor mymaster 20.20.20.130 6379 2

3. docker启动sentinel

启动3个sentinel,因为命令大致都相同,这里就只展示一个命令

docker run --privileged=true --name=sentinel2 -it -d -p 26380:26380 -v /docker/redis/sentinel2/:/docker/redis/ redis redis-sentinel /docker/redis/conf/sentinel.conf

4. 查看哨兵所监视的信息

可以直接在哨兵的配置文件下查看信息
会发现配置文件末尾增加了几行数据,其数据就是相关的哨兵节点和主从节点
在这里插入图片描述

在这里插入图片描述

综上,我们通过docker成功搭建了简单版的主从架构和哨兵模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值