docker-compose安装redis集群(哨兵模式)

环境 3台虚拟机----192.168.137.129,192.168.137.130,192.168.137.131

将192.168.137.129作为master,剩余两台机器作为slave节点。

思路: 先搭建主从模式,再拓展为sentinel模式

准备: 开放3台机器的6379、26379端口。其中6379是redis端口,26379是sentinel之间的通讯端口。

例:开放6379端口

vim /etc/sysconfig/iptables
# 加入如下代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
  • 保存退出后重启防火墙
service iptables restart

一、在master节点192.168.137.129上安装redis容器并启动

1.拉取镜像

docker pull redis

2.创建 redis 目录文件

mkdir -p /opt/redis/data
mkdir -p /opt/redis/conf

3.编写redis.yml

cd /opt/redis
vi redis.yml
version: '3'
services:
	redis:
		image: redis
		container_name: redis_rh
		restart: always
		ports:
		 - "6379:6379"
		volumes:
		 - /opt/redis/data:/data
		 - /opt/redis/conf/redis.conf:/etc/redis/redis.conf
		command:
		  redis-server /etc/redis/redis.conf --appendonly yes

4.编辑redis配置文件

daemonize no
databases 16
protected-mode no 

daemonize 不能设置为yes,否则docker不能启动

#protected-mode 默认yes,开启保护模式,限制为本地访问

5.创建redis容器并启动

docker-compose -f /opt/redis/redis.yml up
docker-compose -f /opt/redis/redis.yml start

二、在两个slave节点上创建redis容器并启动

两个slave节点192.168.137.130、192.168.137.131.

1.拉取镜像

docker pull redis

2.创建 redis 目录文件

mkdir -p /opt/redis/data
mkdir -p /opt/redis/conf

3.编写redis.yml

cd /opt/redis
vi redis.yml
version: '3'
services:
  sentinel2:
    image: redis
    container_name: redis_rh
    restart: always
    ports:
      - 6379:6379
    command: redis-server /etc/redis/redis.conf --slaveof 192.168.137.129 6379
    volumes:
      - /opt/redis/data:/data
      - /opt/redis/conf/redis.conf:/etc/redis/redis.conf

4.编辑redis配置文件

daemonize no
databases 16
protected-mode no 

5.创建redis容器并启动

docker-compose -f /opt/redis/redis.yml up
docker-compose -f /opt/redis/redis.yml start

6.检查主从模式是否搭建成功

在master节点192.168.137.129进入容器,查看主从信息。

docker exec -it de2 bash

 redis-cli -p 6379

info replication

role:master,角色为master

slave0、slavel两个从节点信息。

当看到以上信息时,说明主从模式搭建成功。

三、搭建sentinel模式

1.在master节点192.168.137.129安装redis-sentinel

  • 编写sentinel.conf文件
cd /opt/redis/conf

vi sentinel.conf
port 26379
dir /tmp
#监控的IP 端口号 名称 sentinel通过投票后认为mater宕机的数量,此处为至少2个
sentinel monitor mymaster 192.168.137.129 6379 2
#30秒ping不通主节点的信息,主观认为master宕机
sentinel down-after-milliseconds mymaster 30000
#故障转移后重新主从复制,1表示串行,>1并行
sentinel parallel-syncs mymaster 1
#故障转移开始,三分钟内没有完成,则认为转移失败
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
sentinel auth-pass mymaster 123456
  • 编排redis-sentinel.yml文件
mkdir -p /opt/redis/sentinel/

cd /opt/redis/sentinel

vim  redis-sentinel.yml
version: '3'
services:
  sentinel:
    image: redis
    container_name: redis-sentinel-1
    restart: always
    ports:
      - 26379:26379
    command: redis-sentinel /etc/redis/sentinel.conf
    volumes:
      - /opt/redis/conf/sentinel.conf:/etc/redis/sentinel.conf
  • 创建redis-sentinel容器并启动
docker-compose -f /opt/redis/sentinel/redis-sentinel.yml  up

docker-compose -f /opt/redis/sentinel/redis-sentinel.yml  start

2.在slave节点上安装redis-sentinel

在slave节点192.168.137.130、192.168.137.131上创建容器并启动,步骤与第1步相同

四、启动集群

1.首先启动redis的master-slave集群

2.然后启动sentinel集群

五、查看集群启动情况

在master节点192.168.137.129 上

docker ps
[root@localhost sentinel]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS             PORTS                                                     NAMES
a9918c7d03aa   redis     "docker-entrypoint.s…"   17 hours ago   Up 31 seconds      6379/tcp, 0.0.0.0:26379->26379/tcp, :::26379->26379/tcp   redis-sentinel-1
de2fc6fd29d9   redis     "docker-entrypoint.s…"   2 days ago     Up About an hour   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                 redis_rh

六、进入sentinel容器查看

docker exec -it a99 bash

 redis-cli -p 26379

sentinel master mymaster

[root@localhost ~]# docker exec -it a99 bash
root@a9918c7d03aa:/data# redis-cli -p 26379
127.0.0.1:26379> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.137.129"
 5) "port"
 6) "6379"
 7) "runid"
 8) "4961f438c977833fb98ae9d3668abea182e921b1"
 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) "809"
19) "last-ping-reply"
20) "809"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "4262"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "687156"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "3"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
127.0.0.1:26379> 

可看到name、ip、port、num-slaves、"num-other-sentinels"等信息,说明sentinel搭建成功。

七、关闭master节点,看故障转移情况

(做过多次测试后,我的master节点变成了130) master节点为192.168.137.130,关闭该服务器上的redis镜像。查看sentinel的打印日志

1:X 25 Feb 2022 06:03:02.296 # +sdown master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:03.174 # Could not rename tmp config file (Device or resource busy)
1:X 25 Feb 2022 06:03:03.174 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 25 Feb 2022 06:03:03.174 # +new-epoch 2
1:X 25 Feb 2022 06:03:03.174 # +config-update-from sentinel beb64b07dd3bd09d7d48f6ca85a18e9438e44a3b 172.19.0.2 26379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:03.174 # +switch-master mymaster 192.168.137.130 6379 192.168.137.131 6379
1:X 25 Feb 2022 06:03:03.174 * +slave slave 192.168.137.129:6379 192.168.137.129 6379 @ mymaster 192.168.137.131 6379
1:X 25 Feb 2022 06:03:03.174 * +slave slave 192.168.137.130:6379 192.168.137.130 6379 @ mymaster 192.168.137.131 6379
1:X 25 Feb 2022 06:03:03.179 # Could not rename tmp config file (Device or resource busy)
1:X 25 Feb 2022 06:03:03.179 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 25 Feb 2022 06:03:33.194 # +sdown slave 192.168.137.130:6379 192.168.137.130 6379 @ mymaster 192.168.137.131 6379

从节点129上sentinel打印日志如下,

1:X 26 Feb 2022 05:57:19.933 # Could not rename tmp config file (Device or resource busy)
1:X 26 Feb 2022 05:57:19.933 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 26 Feb 2022 05:57:19.933 # +new-epoch 2
1:X 26 Feb 2022 05:57:19.933 # +config-update-from sentinel beb64b07dd3bd09d7d48f6ca85a18e9438e44a3b 172.19.0.2 26379 @ mymaster 192.168.137.130 6379
1:X 26 Feb 2022 05:57:19.933 # +switch-master mymaster 192.168.137.130 6379 192.168.137.131 6379
1:X 26 Feb 2022 05:57:19.933 * +slave slave 192.168.137.129:6379 192.168.137.129 6379 @ mymaster 192.168.137.131 6379
1:X 26 Feb 2022 05:57:19.934 * +slave slave 192.168.137.130:6379 192.168.137.130 6379 @ mymaster 192.168.137.131 6379
1:X 26 Feb 2022 05:57:19.936 # Could not rename tmp config file (Device or resource busy)
1:X 26 Feb 2022 05:57:19.936 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 26 Feb 2022 05:57:49.990 # +sdown slave 192.168.137.130:6379 192.168.137.130 6379 @ mymaster 192.168.137.131 6379

从节点131上sentinel打印日志如下,显示主节点已经转移到131上。

1:X 25 Feb 2022 06:03:06.905 # +sdown master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:06.969 # +odown master mymaster 192.168.137.130 6379 #quorum 3/2
1:X 25 Feb 2022 06:03:06.969 # +new-epoch 2
1:X 25 Feb 2022 06:03:06.969 # +try-failover master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:06.973 # Could not rename tmp config file (Device or resource busy)
1:X 25 Feb 2022 06:03:06.973 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 25 Feb 2022 06:03:06.973 # +vote-for-leader beb64b07dd3bd09d7d48f6ca85a18e9438e44a3b 2
1:X 25 Feb 2022 06:03:06.974 # beb64b07dd3bd09d7d48f6ca85a18e9438e44a3b voted for beb64b07dd3bd09d7d48f6ca85a18e9438e44a3b 2
1:X 25 Feb 2022 06:03:06.974 # dcd0a1fe3a54214a84df0e8af7784bdc2d588101 voted for beb64b07dd3bd09d7d48f6ca85a18e9438e44a3b 2
1:X 25 Feb 2022 06:03:07.057 # +elected-leader master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.057 # +failover-state-select-slave master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.144 # +selected-slave slave 192.168.137.131:6379 192.168.137.131 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.144 * +failover-state-send-slaveof-noone slave 192.168.137.131:6379 192.168.137.131 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.204 * +failover-state-wait-promotion slave 192.168.137.131:6379 192.168.137.131 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.632 # Could not rename tmp config file (Device or resource busy)
1:X 25 Feb 2022 06:03:07.633 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 25 Feb 2022 06:03:07.633 # +promoted-slave slave 192.168.137.131:6379 192.168.137.131 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.633 # +failover-state-reconf-slaves master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:07.722 * +slave-reconf-sent slave 192.168.137.129:6379 192.168.137.129 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:08.390 * +slave-reconf-inprog slave 192.168.137.129:6379 192.168.137.129 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:08.391 * +slave-reconf-done slave 192.168.137.129:6379 192.168.137.129 6379 @ mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:08.473 # +failover-end master mymaster 192.168.137.130 6379
1:X 25 Feb 2022 06:03:08.473 # +switch-master mymaster 192.168.137.130 6379 192.168.137.131 6379
1:X 25 Feb 2022 06:03:08.475 * +slave slave 192.168.137.129:6379 192.168.137.129 6379 @ mymaster 192.168.137.131 6379
1:X 25 Feb 2022 06:03:08.475 * +slave slave 192.168.137.130:6379 192.168.137.130 6379 @ mymaster 192.168.137.131 6379
1:X 25 Feb 2022 06:03:08.478 # Could not rename tmp config file (Device or resource busy)
1:X 25 Feb 2022 06:03:08.478 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy
1:X 25 Feb 2022 06:03:38.479 # +sdown slave 192.168.137.130:6379 192.168.137.130 6379 @ mymaster 192.168.137.131 6379

八、验证master节点是否真的转移成功

在131上进入redis容器,set key;在129和130节点上进入redis容器get key,说明master节点转移成功,因为只有主节点可以写key,从节点只能读取key。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITSDSDFSDF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值