我这里是搭建一主一从,俩哨兵,准备两台服务器,分别安装docker
我这里有两台centos服务器
主服务器IP:192.168.252.134
从服务器IP:192.168.252.135
1.两台服务器分别拉取redis镜像
docker pull redis
2.查看镜像 docker images
3.创建文件目录,我这里是放在 /opt/docker/redis
mkdir /opt/docker/redis/conf
mkdir /opt/docker/redis/data
4.主节点配置文件修改(提前准备好配置文件)可以去redis官方下载:redis.conf 配置文件下载
进入到 cd /opt/docker/redis/conf 把 redis.conf 配置文件放到这里
如果不想下载的话也可以直接 vim redis.conf 创建并编辑文件,配置内容如下
cd /opt/docker/redis/conf
# 注释掉 所有IP都可以访问redis服务
#bind 127.0.0.1 -::1# 关闭保护模式
protected-mode no# 端口号
port 6379# 改为no 后台进程的模式,避免跟docker的-d命令冲实
daemonize nopidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
# 登录密码
requirepass 123456# 主节点密码
masterauth 123456# 持久化
# 开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里
appendonly yes
5.从节点配置文件修改
同样 cd /opt/docker/redis/conf 编辑 vim redis.conf
从节点的配置只多了一个 replicaof 主从复制的配置,(如果配置多个从节点,复制此配置即可)
# 注释掉 所有IP都可以访问redis服务
#bind 127.0.0.1 -::1# 关闭保护模式
protected-mode no# 端口号
port 6379# 改为no 后台进程的模式,避免跟docker的-d命令冲实
daemonize nopidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
# 登录密码
requirepass 123456# 主节点密码
masterauth 123456# 持久化
# 开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里
appendonly yes#从节点需要配置这个 主节点的IP 和端口
replicaof 192.168.252.134 6379
6.分别启动 两台服务器上的redis容器
# 主服务器启动
# 创建并运行redis容器
docker run -d --privileged=true --restart always -v /opt/docker/redis/data:/data -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf --name redis-master -p 6379:6379 redis /etc/redis/redis.conf# 从服务器启动
# 创建slave节点
docker run -d --privileged=true --restart always -v /opt/docker/redis/data:/data -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf --name redis-slave -p 6379:6379 redis /etc/redis/redis.conf
参数说明:
-v /opt/docker/redis/data:/data ## 将容器里的数据挂载到宿主机/opt/docker/redis/data目录下
-v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf ## 容器里的redis配置文件与/opt/docker/redis/conf/redis.conf下的配置文件互相通信
/etc/redis/redis.conf ## 指定要加载的配置文件 就是映射的上面配置的那个redis.conf文件
7.这样一主一从的redis服务就启动成功了,我们进入容器验证一下
# 查看容器
docker ps
# 进入主容器
docker exec -it redis-master /bin/bash
# 登录到redis服务
redis-cli
# 输入密码
auth 123456
# ping一下
ping
可以看到服务正常启动
8.查看主从信息
info replication
从节点查看:也是一样进入到从节点容器,登录redis服务里面
使用命令 exit 即可退出服务和容器
此时 主从搭建已经配置好了,我们可以用redis工具往主节点redis中set数据,即可看到从节点有相同的数据被同步过来了。
9.哨兵模式配置
哨兵的配置文件 sentinel.conf 也同样可以去 redis官方下载:sentinel.conf 配置文件下载
创建目录并进入
mkdir /opt/docker/sentinel
cd /opt/docker/sentinel
使用官方配置 把 sentinel.conf 文件copy到 服务器 /opt/docker/sentinel 这个目录
或者直接 vim sentinel.conf 配置内容如下
# Example sentinel.conf
# 关闭保护模式
protected-mode no# 哨兵服务的端口号
port 26379# 改为no 后台进程的模式,避免跟docker的-d命令冲实
daemonize nopidfile /var/run/redis-sentinel.pid
loglevel notice
logfile ""
dir /tmp
# 添加主节点的 IP和端口 后面的这个数字1,代表主机挂了,slave投票看让谁接替成为主机,票数最多的,就会成为主机! (我这只部署两台哨兵 所以写1)
sentinel monitor mymaster 192.168.252.134 6379 1# 主节点的认证密码
sentinel auth-pass mymaster 123456# 监控时间 (名称) (超时时间,当超过这个时间,则认为master已经挂了)
sentinel down-after-milliseconds mymaster 50000acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no
SENTINEL master-reboot-down-after-period mymaster 0
多个哨兵的配置都是如此
10.启动哨兵模式容器 多个哨兵操作都是同样的(我这里是两台服务器两个哨兵)
# redis 哨兵 主节点
docker run -d --privileged=true --restart always -v /opt/docker/sentinel/sentinel.conf:/etc/redis/sentinel.conf --name sentinel-master -p 26379:26379 redis redis-sentinel /etc/redis/sentinel.conf# redis 哨兵 从节点
docker run -d --privileged=true --restart always -v /opt/docker/sentinel/sentinel.conf:/etc/redis/sentinel.conf --name sentinel-slave -p 26379:26379 redis redis-sentinel /etc/redis/sentinel.conf
参数说明
redis-sentinel
是 Redis 提供的哨兵模式的命令行工具,它可以用来启动一个哨兵进程,并且可以通过它来监控和管理 Redis 服务/etc/redis/sentinel.conf 是指定启动的加载文件
11.进到哨兵容器里面查看哨兵信息
# 进入到哨兵容器
docker exec -it sentinel-master /bin/bash# 登录redis哨兵服务
redis-cli -p 26379# 查看哨兵信息
info sentinel
通过上面的几个状态信息,我们可以看到哨兵检测的主节点信息,主节点下面有几个从节点,同时哨兵节点有几个。
至此 redis主从搭建和哨兵模式都已经配置好了