搭建一主两从三哨兵

一、下载redis配置文件以及环境准备

# 挂载目录前的准备,需要redis.conf文件 可以直接下载配置文件,下载路径到/usr/local

wget http://download.redis.io/redis-stable/redis.conf #下载redis.conf文件

# 环境准备,拉取redis镜像

docker pull redis

# 将redis.conf复制三份,并分别改名

cp redis.conf redis-6379.conf

cp redis.conf redis-6380.conf

cp redis.conf redis-6381.conf

1. 修改三份配置文件

# redis-6379

bind 0.0.0.0   #允许远程连接

protected-mode no  #关闭保护模式

appendonly yes    #开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里

logfile "/var/log/redis/redis-6379.log"   #日志文件存放路径

# 修改配置文件redis-6380.conf和redis-6381.conf修改如下,然后保存退出  

bind 0.0.0.0

protected-mode no

appendonly yes

slave-read-only no

replicaof 172.17.0.2 6379

logfile "/var/log/redis/redis-6380.log"

#redis-6381.conf

bind 0.0.0.0 protected-mode no

appendonly yes

slave-read-only no

replicaof 172.17.0.2 6379

logfile "/var/log/redis/redis-6381.log"

二、启动容器,以挂载文件的方式启动

####使用容器挂载文件的方式上传配置文件#####

# 主服务器redis-6379

docker run -d --name redis-6379 -p 6379:6379 -v /usr/local/redis-6379.conf:/usr/local/etc/redis/redis-6379.conf redis

# 从服务器redis-6380

docker run -d --name redis-6380 -p 6380:6379 -v /usr/local/redis-6380.conf:/usr/local/etc/redis/redis-6380.conf redis

# 从服务器redis-6381

docker run -d --name redis-6381 -p 6381:6379 -v /usr/local/redis-6381.conf:/usr/local/etc/redis/redis-6381.conf redis

# 检查容器是否启动成功,不成功则检查配置文件是否正确,不同版本的redis可能对应不同版本的配置文件

docker ps -a

# 查看三台容器的ip地址后续会用上

docker inspect redis-6379/redis-6380/redis-6381

redis-6379: 172.17.0.2

redis-6380: 172.17.0.3

redis-6381: 172.17.0.4

# 登录三台容器进入redis-cli查看 info-replication,此时三台服务器都是主服务器master

docker exec -it redis-6379/redis-6380/redis-6381 bash

redis-cli

info replication

三、修改主从配置

# 把redis-6380和redis-6381改成从服务器并查看是否配置成功

docker exec -it redis-6380 redis-cli

SLAVEOF 172.17.0.2 6379

info replication

docker exec -it redis-6381 redis-cli

SLAVEOF 172.17.0.2 6379

info replication

# 主服务器查看连接

docker exec -it redis-6379 redis-cli

role

# 测试主从是否成功

docker exec -it redis-6379 redis-cli

set test 123

get test

docker exec -it redis-6380/redis-6381 redis-cli

get test

四、redis哨兵配置

#####创建三个哨兵节点##########

# 创建sentinel1.conf配置文件,路径在/usr/local

vim  /usr/local/sentinel1.conf

port 16379               # 哨兵节点的工作端口

sentinel monitor master 172.17.0.2 6379 2   # 哨兵节点监控的指定服务器名字、ip、端口 2表示至少两台哨兵节点认可,这个主服务器才能失效

dir "/"         # 数据存储路径

logfile "sentinel1.log"  # 日志路径

# 创建第一个哨兵节点

docker run -itd --name redis-sentinel1 -v /usr/local/redis-sentinel1.conf/:/usr/local/etc/redis/redis-sentinel1.conf -p 16379:16379  redis redis-sentinel /usr/local/etc/redis/redis-sentinel1.conf

# 创建sentinel2.conf配置文件,路径在/usr/local

vim  /usr/local/sentinel2.conf

port 16380

sentinel monitor master 172.17.0.2 6380 2

dir "/"

logfile "sentinel1.log"

# 创建第二个哨兵节点

docker run -itd --name redis-sentinel2 -v /usr/local/redis-sentinel2.conf/:/usr/local/etc/redis/redis-sentinel2.conf -p 16380:16380  redis redis-sentinel /usr/local/etc/redis/redis-sentinel2.conf

# 创建sentinel3.conf配置文件,路径在/usr/local

vim  /usr/local/sentinel3.conf

port 16381

sentinel monitor master 172.17.0.2 6381 2

dir "/"

logfile "sentinel1.log"

# 创建第三个哨兵节点

docker run -itd --name redis-sentinel3 -v /usr/local/redis-sentinel3.conf/:/usr/local/etc/redis/redis-sentinel3.conf -p 16381:16381  redis redis-sentinel /usr/local/etc/redis/redis-sentinel3.conf

# 查看哨兵节点配置信息   #最后一行可以看见主服务器节点的status状态是ok,slave=2从服务器连接数两个

docker exec -it redis-sentinel1 bash

redis-cli -h 127.0.0.1 -p 16379

info sentinel

五、测试哨兵

# 测试哨兵

# 停掉master

docker stop redis-6379

# 等待30秒,登录其中一台从服务器,其中角色已经变为master,并且从服务器的连接数是1

docker exec -it redis-6381 redis-cli

info replication

# 重启关掉的那台redis,发现已经成为新的从服务器