搭建一主两从三哨兵
一、下载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,发现已经成为新的从服务器