一、前言
本教程主要用于使用Docker compose在centos服务器中快速搭建redis哨兵集群,对redis配置相对较少,如果要对redis进行配置,只需要进行文件
二、Docker安装
三、搭建Redis主从集群
-
创建一个文件夹(名字自取,这里使用
Redis-Sentinel
),其结构如下-
文件夹结构:
Redis-Sentinel |-- master-slave 存储主从集群配置文件 `-- sentinel 存储所有哨兵配置文件 |-- sentinel1 存储哨兵1配置文件 |-- sentinel2 存储哨兵2配置文件 `-- sentinel3 存储哨兵3配置文件
-
指令:
mkdir -p Redis-Sentinel/master-slave Redis-Sentinel/sentinel/sentinel1 Redis-Sentinel/sentinel/sentinel2 Redis-Sentinel/sentinel/sentinel3
-
-
进入
master-slave
文件夹下:
cd master-slave
-
编写
docker-compose.yml
文件-
创建docker-compose.yml文件
vim docker-compose.yml
-
编辑docker-compose.yml文件
services: master: image: redis container_name: redis-master networks: - redisco command: bash -c "redis-server --protected-mode no --slave-announce-ip 43.143.212.194 --slave-announce-port 6379" ports: - 6379:6379 slave1: image: redis container_name: redis-slave-1 networks: - redisco ports: - 6380:6379 command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 43.143.212.194 --slave-announce-port 6380" slave2: image: redis container_name: redis-slave-2 networks: - redisco ports: - 6381:6379 command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 43.143.212.194 --slave-announce-port 6381" networks: redisco:
-
-
启动Redis主从集群
docker compose up -d
-
验证主从集群启动成功
-
查看启动容器
docker ps
-
进入主Redis
#进入主Redis的容器 docker exec -it f0f82adc36ab /bin/bash #进入主Redis redis-cli
-
查看状态信息
info
出现以下信息说明主从Redis通信正确
-
检查主从Redis数据库情况
-
主Redis:
主Redis可以正常写入和读取
-
从Redis:
从Redis可以获取到刚刚在主Rdis上设置的key-value值,并且无法写入
-
-
-
注意:
-
如果要修改Redis的配置,可以在
command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 49.232.163.85 --slave-announce-port 6381"
中添加,但是如果修改过多,建议在官方在conf文件中修改,再进行文件挂载(参考下面的哨兵集群搭建方式),并将上一行修改为command: redis-server /etc/redis/redis.conf
,其中最后的文件名和你挂载的文件夹中的配置文件名相同即可。 -
关于容器间通信:
我们可以在“启动Redis主从集群”模块中看到,在启动容器时,创建了一个名为
master-slave_redisco
网络。
这是因为
docker compose
会根据配置配置文件中的网络配置创建一个网络,就是以文件夹的名称+直接配置的网络名字。 我们在编写哨兵的compose文件时,要将哨兵Redis也添加到该网络中,不然就不在一个网段,故障转移无法切换。 -
四、搭建Redis哨兵集群
-
切换到
sentinel1
文件夹下cd ../sentinel/sentinel1
-
创建并编辑
sentinel1.conf
文件-
创建
sentinel1.conf
vim sentinel1.conf
-
编辑配置文件
-
配置文件内容,如果只是想配置,可以不看讲解内容,直接粘贴到
sentinel.conf
文件中即可protected-mode no sentinel monitor mymaster 43.143.212.194 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1
-
配置文件讲解
在Redis官网(High availability with Redis Sentinel | Docs)中其最简单的配置文件:
protected-mode no # sentinel monitor <Redis哨兵集群名字,自取> <ip(可以是宿主机ip,也可以是容器的子网ip)> <端口(如果ip使用的是宿主机ip,端口使用容器暴露的端口;如果ip使用容器的子网ip,端口使用容器中端口即可> <哨兵投票的票数(当主redis宕机三个哨兵必须两个哨兵都投票的redis才会变为主)> sentinel monitor mymaster 43.143.212.194 6379 2 #Sentinel判断实例进入主观下线所需的时间,毫秒单位。 sentinel down-after-milliseconds mymaster 60000 #在指定的时间内未能完成failover故障转移,则任务故障转移失败。 sentinel failover-timeout mymaster 180000 #限制在一次故障转移之后,每次向新的主节点同时发起复制操作节点个数,越大效率越慢。 sentinel parallel-syncs mymaster 1
注意:
因为在yml没有设置每个容器的子网ip,所以如果要查看容器子网ip,可以使用指令:
# docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id> docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-master
-
-
复制
sentinel1.conf
配置文件到sentinel2
和sentinel3
文件夹并修改名称cp sentinel1.conf ../sentinel2/sentinel2.conf cp sentinel1.conf ../sentinel3/sentinel3.conf
-
-
编写
docker-compose.yml
文件-
创建docker-compose.yml文件
cd .. vim docker-compose.yml
-
编辑docker-compose.yml文件
services: sentinel1: image: redis container_name: redis-sentinel-1 ports: - 26379:26379 command: redis-sentinel /usr/local/etc/redis/sentinel1.conf volumes: - ./sentinel1:/usr/local/etc/redis/ sentinel2: image: redis container_name: redis-sentinel-2 ports: - 26380:26379 command: redis-sentinel /usr/local/etc/redis/sentinel2.conf volumes: - ./sentinel2:/usr/local/etc/redis/ sentinel3: image: redis container_name: redis-sentinel-3 ports: - 26381:26379 command: redis-sentinel /usr/local/etc/redis/sentinel3.conf volumes: - ./sentinel3:/usr/local/etc/redis/ networks: default: name: master-slave_redisco external: true
-
-
启动Redis哨兵容器
docker compose up -d
-
验证Redis哨兵集群启动成功
-
查看哨兵信息
-
查看启动容器
docker ps
-
进入主Redis
#进入Redis哨兵的容器 docker exec -it b5931e670b08 /bin/bash #进入Redis哨兵 redis-cli -p 26379
-
查看状态信息
info
出现以下信息说明配置成功
-
故障转移测试
我们将主Redis停掉,观察日志
docker stop e77 docker compose logs
出现了故障转移,说明配置成功。
-
-