docker部署redis哨兵模式

本文详细介绍了如何使用Docker在本地环境中搭建Redis主从哨兵集群。首先通过yum安装pip3和docker-compose,然后创建对应目录并编写docker-compose.yml文件,分别配置Redis主从节点和哨兵节点。每个节点的配置文件中设置了端口、密码认证、数据持久化等参数。最后,启动Redis服务器和哨兵服务,完成集群的部署。
摘要由CSDN通过智能技术生成

准备环境和工具

1.安装docker

docker安装教程

2. 安装pip3

yum -y install python3-pip
pip3 install --upgrade pip

3. 安装 docker-compose

pip3 install docker-compose

开始搭建

1.创建两个文件夹,分别用于存放redis和sentinel的配置文件以及docker-compose.yml

mkdir -p /usr/local/etc/redis/sentinel/sentinel
mkdir -p /usr/local/etc/redis/sentinel/server

2.进入redis文件夹,并创建docker-compose.yml

cd /usr/local/etc/redis/sentinel/redis
vi docker-compose.yml

  • 内容如下:

version: ‘3’
services:
#主节点的容器
redis-server-master:
image: redis
container_name: redis-server-master
restart: always
# 为了规避Docker中端口映射可能带来的问题
# 这里选择使用host网络
network_mode: host
# 指定时区,保证容器内时间正确
environment:
TZ: “Asia/Shanghai”
volumes:
# 映射配置文件和数据目录
- ./redis-master.conf:/usr/local/etc/redis/redis.conf
- ./data/redis-master:/data
sysctls:
# 必要的内核参数
net.core.somaxconn: ‘511’
command: [“redis-server”, “/usr/local/etc/redis/redis.conf”]
#从节点1的容器
redis-server-slave-1:
image: redis
container_name: redis-server-slave-1
restart: always
network_mode: host
depends_on:
- redis-server-master
environment:
TZ: “Asia/Shanghai”
volumes:
- ./redis-slave1.conf:/usr/local/etc/redis/redis.conf
- ./data/redis-slave-1:/data
sysctls:
net.core.somaxconn: ‘511’
command: [“redis-server”, “/usr/local/etc/redis/redis.conf”]
#从节点2的容器
redis-server-slave-2:
image: redis
container_name: redis-server-slave-2
restart: always
network_mode: host
depends_on:
- redis-server-master
environment:
TZ: “Asia/Shanghai”
volumes:
- ./redis-slave2.conf:/usr/local/etc/redis/redis.conf
- ./data/redis-slave-2:/data
sysctls:
net.core.somaxconn: ‘511’
command: [“redis-server”, “/usr/local/etc/redis/redis.conf”]

3. 进入sentinel文件夹,并创建docker-compose.yml

cd /usr/local/etc/redis/sentinel/sentinel
vi docker-compose.yml

  • 内容如下:

version: ‘3’
services:
redis-sentinel-1:
image: redis
container_name: redis-sentinel-1
restart: always
# 为了规避Docker中端口映射可能带来的问题
# 这里选择使用host网络
network_mode: host
volumes:
- ./redis-sentinel-1.conf:/usr/local/etc/redis/redis-sentinel.conf
# 指定时区,保证容器内时间正确
environment:
TZ: “Asia/Shanghai”
sysctls:
net.core.somaxconn: ‘511’
command: [“redis-sentinel”, “/usr/local/etc/redis/redis-sentinel.conf”]
redis-sentinel-2:
image: redis
container_name: redis-sentinel-2
restart: always
network_mode: host
volumes:
- ./redis-sentinel-2.conf:/usr/local/etc/redis/redis-sentinel.conf
environment:
TZ: “Asia/Shanghai”
command: [“redis-sentinel”, “/usr/local/etc/redis/redis-sentinel.conf”]
redis-sentinel-3:
image: redis
container_name: redis-sentinel-3
restart: always
network_mode: host
volumes:
- ./redis-sentinel-3.conf:/usr/local/etc/redis/redis-sentinel.conf
environment:
TZ: “Asia/Shanghai”
command: [“redis-sentinel”, “/usr/local/etc/redis/redis-sentinel.conf”]

4. 进入 /usr/local/etc/redis/sentinel/sentinel目录,创建sentinel的配置文件

  • redis-sentinel-1.conf

#bind 127.0.0.1
#哨兵的端口号
#因为各个哨兵节点会运行在单独的Docker容器中
#所以无需担心端口重复使用
#如果需要在单机
port 26379
#设定密码认证
requirepass 123456
#配置哨兵的监控参数
#格式:sentinel monitor
#master-name是为这个被监控的master起的名字
#ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
#redis-port是被监控节点所监听的端口号
#quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor local-master 127.0.0.1 6379 2
#连接主节点的密码
#格式:sentinel auth-pass
sentinel auth-pass local-master 123456
#master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
#格式:sentinel down-after-milliseconds
sentinel down-after-milliseconds local-master 30000

  • redis-sentinel-2.conf

#bind 127.0.0.1
#哨兵的端口号
#因为各个哨兵节点会运行在单独的Docker容器中
#所以无需担心端口重复使用
#如果需要在单机
port 26380
#设定密码认证
requirepass 123456
#配置哨兵的监控参数
#格式:sentinel monitor
#master-name是为这个被监控的master起的名字
#ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
#redis-port是被监控节点所监听的端口号
#quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor local-master 127.0.0.1 6379 2
#连接主节点的密码
#格式:sentinel auth-pass
sentinel auth-pass local-master 123456
#master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
#格式:sentinel down-after-milliseconds
sentinel down-after-milliseconds local-master 30000

  • redis-sentinel-3.conf

#bind 127.0.0.1
#哨兵的端口号
#因为各个哨兵节点会运行在单独的Docker容器中
#所以无需担心端口重复使用
#如果需要在单机
port 26380
#设定密码认证
requirepass 123456
#配置哨兵的监控参数
#格式:sentinel monitor
#master-name是为这个被监控的master起的名字
#ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
#redis-port是被监控节点所监听的端口号
#quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor local-master 127.0.0.1 6379 2
#连接主节点的密码
#格式:sentinel auth-pass
sentinel auth-pass local-master 123456
#master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
#格式:sentinel down-after-milliseconds
sentinel down-after-milliseconds local-master 30000

5. 进入 /usr/local/etc/redis/sentinel/server目录,创建redis的配置文件

  • redis-master.conf

#bind 127.0.0.1
#启用保护模式
#即在没有使用bind指令绑定具体地址时
#或在没有设定密码时
#Redis将拒绝来自外部的连接
#protected-mode yes
#监听端口
port 6379
#启动时不打印logo
#这个不重要,想看logo就打开它
always-show-logo no
#设定密码认证
requirepass 123456
#禁用KEYS命令
#一方面 KEYS * 命令可以列出所有的键,会影响数据安全
#另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
#期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
rename-command KEYS “”
#此外还应禁止 FLUSHALL 和 FLUSHDB 命令
#这两个命令会清空数据,并且不会失败

  • redis-slave1.conf

#bind 127.0.0.1
#启用保护模式
#即在没有使用bind指令绑定具体地址时
#或在没有设定密码时
#Redis将拒绝来自外部的连接
#protected-mode yes
#监听端口
port 6380
#启动时不打印logo
#这个不重要,想看logo就打开它
always-show-logo no
#设定密码认证
requirepass 123456
#禁用KEYS命令
#一方面 KEYS * 命令可以列出所有的键,会影响数据安全
#另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
#期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
rename-command KEYS “”
#此外还应禁止 FLUSHALL 和 FLUSHDB 命令
#这两个命令会清空数据,并且不会失败
#配置master节点信息
#格式:
#slaveof
#此处masterip所指定的redis-server-master是运行master节点的容器名
#Docker容器间可以使用容器名代替实际的IP地址来通信
slaveof 127.0.0.1 6379
#设定连接主节点所使用的密码
masterauth “123456”

  • redis-slave2.conf

#bind 127.0.0.1
#启用保护模式
#即在没有使用bind指令绑定具体地址时
#或在没有设定密码时
#Redis将拒绝来自外部的连接
#protected-mode yes
#监听端口
port 6381
#启动时不打印logo
#这个不重要,想看logo就打开它
always-show-logo no
#设定密码认证
requirepass 123456
#禁用KEYS命令
#一方面 KEYS * 命令可以列出所有的键,会影响数据安全
#另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
#期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
rename-command KEYS “”
#此外还应禁止 FLUSHALL 和 FLUSHDB 命令
#这两个命令会清空数据,并且不会失败
#配置master节点信息
#格式:
#slaveof
#此处masterip所指定的redis-server-master是运行master节点的容器名
#Docker容器间可以使用容器名代替实际的IP地址来通信
slaveof 127.0.0.1 6379
#设定连接主节点所使用的密码
masterauth “123456”

哨兵模式验证

1. 启动redis

  • 在/usr/local/etc/redis/sentinel/server路径下执行:

docker-compose up #前台启动
docker-compose up -d #后台启动

2. 启动sentinel

  • 在/usr/local/etc/redis/sentinel/sentinel路径下执行:

docker-compose up #前台启动
docker-compose up -d #后台启动

3.启动成功

使用docker ps查看启动成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值