搭建过程参考:使用Docker搭建Redis集群(Redis Sentinel 集群部署)
概述
Redis 集群可以在一组 redis节点之间实现高可用性和 sharding。在集群中会有 1 个 master 和多个slave节点。当 master节点失效时,应选举出一个slave 节点作为新的 master。然而 Redis 本身(包括它的很多客户端)没有实现自动故障发现并进行主备切换的能力,需要外部的监控方案来实现自动故障恢复。
Redis Sentinel 是官方推荐的高可用性解决方案。它是 Redis 集群的监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务。
搭建 Redis 集群
搭建一主两从环境,docker-compose.yml 配置如下(注意端口号):
version: '2.0'
services:
master:
image: redis
container_name: redis-master
ports:
- 6378:6379
slave1:
image: redis
container_name: redis-slave-1
ports:
- 6380:6379
command: redis-server --slaveof redis-master 6379
slave2:
image: redis
container_name: redis-slave-2
ports:
- 6381:6379
command: redis-server --slaveof redis-master 6379
执行docker-compose up -d
进入到主节点查看状态,如下即一主两从集群搭建完成~
搭建 Sentinel 集群
由于我的window10挂载文件始终不成功,总是挂载成目录,所以先把redis镜像作为底包,新建一个镜像把配置文件塞进去
sentinel.conf写入如下配置:
# 禁止保护模式
protected-mode no
# 自定义集群名,其中 127.0.0.1 为 redis-master 的 ip(一台宿主机搭建集群的过程中,需要将ip换成上图中以太网适配器的ipv4地址),
# 6378 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster 127.0.0.1 6378 2
# 若redis未设置密码,本处也可不设置
sentinel auth-pass mymaster 123456
Dockerfile写入如下配置:
FROM redis:latest
MAINTAINER test "123@45.com"
ADD sentinel.conf /usr/local/etc/redis/sentinel.conf
在sentinel目录下执行 docker build -t zyx/redis-sentinel .
我们至少需要创建三个 Sentinel 服务,docker-compose.yml 配置如下:
version: '2.0'
services:
sentinel1:
image: zyx/redis-sentinel
container_name: redis-sentinel-1
ports:
- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
sentinel2:
image: zyx/redis-sentinel
container_name: redis-sentinel-2
ports:
- 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
sentinel3:
image: zyx/redis-sentinel
container_name: redis-sentinel-3
ports:
- 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
执行docker-compose up -d
进入容器查看,如下代表sentinel集群搭建成功!