Redis的哨兵集群部署
一、新建三台虚拟机模拟三台服务器
主站: 192.168.247.128 用户名:root 密码:inspur2023
从站1 : 192.168.247.129 用户名:root 密码:inspur2023
从站2: 192.168.247.130 用户名:root 密码:inspur2023
二、安装docker和redis镜像
#(1) 安装yum
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# (2)安装wget下载工具
yum install wget
# (3)设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
# (4)安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 安装docker
yum install -y docker-ce
# (5)启动docker
sudo systemctl start docker
【附:docker相关命令】
【
systemctl status docker
启动命令:systemctl start docker
停止命令:systemctl stop docker
设置开机启动:systemctl enable docker
】
# (6)docker安装redis镜像:
docker pull redis:latest
三、redis配置文件创建和配置修改(redis.conf和sentinel.conf)
(1)三台虚拟机新建部署文件目录
Mkdir docker/redis/server/conf
Mkdir Docker/redis/server/data
mkdir Docker/redis/server/log
mkdir Docker/redis/sentinel/conf
mkdir Docker/redis/sentinel/data
mkdir Docker/redis/sentinel/log
(2)配置文件redis.conf
wget -c http://download.redis.io/redis-stable/redis.conf
--①主机:(192.168.247.128:6379)
Port: 6379 --端口
#bind 0.0.0.0 --所有网都可以访问
protected-mode no --关闭保护模式
masterauth inspur2023
requirepass inspur2023
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
logfile /docker/redis/server/log/redis-server.log
dir /docker/redis/server/data/
appendonly no
replica-announce-ip 192.168.247.128
replica-announce-port 6379
--②从机1:(192.168.247.129:6380)
//其余和主机相同
Port: 6380
replica-read-only no
replicaof 192.168.247.128 6379
replica-announce-ip 192.168.247.129
replica-announce-port 6380
或者slaveof(redis5.0以上)
--③从机2:(192.168.247.130:6381)
//其余和主机相同
Port: 6381
replica-read-only no
Replicaof 192.168.247.128 6379
replica-announce-ip 192.168.247.130
replica-announce-port 6381
或者slaveof(redis5.0以上)
(3)配置文件sentinal.conf
wget http://download.redis.io/redis-stable/sentinel.conf
--①主机:(192.168.247.128:26379)
Port: 26379 --端口
bind: 0.0.0.0
dir /docker/redis/sentinel/data/
logfile /docker/redis/sentinel/log/redis-sentinel.log
daemonize no
sentinel announce-ip 192.168.247.128
sentinel announce-port 26379
sentinel monitor redis-master 192.168.247.128 6379 2 //redis-master是主站redis的命名
sentinel auth-pass redis-master inspur2023
sentinel down-after-milliseconds local-master 5000 //判断下线时间 5s
--②从机1:(192.168.247.129:26380)
Port: 26380 --端口
bind: 0.0.0.0
# logfile /docker/redis/sentinel/log/redis-sentinel.log
daemonize no
sentinel announce-ip 192.168.247.129
sentinel announce-port 26380
sentinel monitor redis-master 192.168.247.128 6379 2
sentinel auth-pass redis-master inspur2023
//其余与主机相同
--③从机2:(192.168.247.130:26381)
Port: 26381 --端口
bind: 0.0.0.0
# logfile /docker/redis/sentinel/log/redis-sentinel.log
daemonize no
sentinel announce-ip 192.168.247.130
sentinel announce-port 26381
sentinel monitor redis-master 192.168.247.128 6379 2
sentinel auth-pass redis-master inspur2023
【注意: 配置文件原默认住进名 mymaster 需更换实际命名的 redis-master】
四、启动redis容器【redis实例启动(redis容器创建)】
主机master
docker run -d
-p 6379:6379
--name redis-master
-u root
-v /docker/redis/server/conf/redis.conf:/etc/redis/redis.conf
-v /docker/redis/server/data:/data
-d redis redis-server /etc/redis/redis.conf
从机slave1
docker run -p 6380:6380
--name redis-slave1
-u root
-v /docker/redis/server/conf/redis.conf:/etc/redis/redis.conf
-v /docker/redis/server/data:/data
-d redis redis-server /etc/redis/redis.conf
从机slave2
docker run -p 6381:6381
--name redis-slave2
-u root
-v /docker/redis/server/conf/redis.conf:/etc/redis/redis.conf
-v /docker/redis/server/data:/data
-d redis redis-server /etc/redis/redis.conf
对以上命令简单解释:
- 参数-p 6370:6370,冒号前的表示宿主机端口,冒号后的表示容器实例端口,意思是将容器实例端口映射到宿主机端口。
- 参数--name redis-6370,给容器实例命名。
- 参数-v /home/docker-data/redis/redis-conf/redis6370.conf:/etc/redis/redis.conf,冒号前是宿主机配置文件路径,冒号后是容器的配置文件路径,意思是将容器实例的配置路径映射到宿主机的路径。
- 参数-v /home/docker-data/redis/data-6370:/data,如上面意思相同。
- 选项-d表示以后台形式运行实例。
- 参数redis-server /etc/redis/redis.conf表示执行redis-server命令, /etc/redis/redis.conf表示以该配置文件启动redis实例,注意配置文件必须为redis-server命令的第一个参数
五、启动redis哨兵容器【redis实例启动(redis容器创建)】
主机master
docker run -p 26379:26379
--name sentinel-master
-v /docker/redis/sentinel/conf/sentinel.conf:/etc/redis/sentinel.conf
-v /docker/redis/sentinel/data:/data
-d redis redis-sentinel /etc/redis/sentinel.conf
从机slave1
docker run -p 26380:26380
--name sentinel-slave1
-v /docker/redis/sentinel/conf/sentinel.conf:/etc/redis/sentinel.conf
-v /docker/redis/sentinel/data:/data
-d redis redis-sentinel /etc/redis/sentinel.conf
从机slave2
docker run -p 26381:26381
--name sentinel-slave2
-v /docker/redis/sentinel/conf/sentinel.conf:/etc/redis/sentinel.conf
-v /docker/redis/sentinel/data:/data
-d redis redis-sentinel /etc/redis/sentinel.conf
(附:容器启动失败解决方法:
Docker logs <容器名称>
Docker ps -a //查看创建容器id
Docker start <容器id>
docker exec -it 容器id /bin/bash //进入docker容器
)
六、验证主从同步
主站服务器(192.168.247.128)设置name->”tony”
Docker exec -it redis-master redis_cli -p 6379 -a inspur2023
Set name tony
Get name
从站服务器(192.168.247.129)查看
Docker exec -it redis-master redis_cli -p 6380 -a inspur2023
Get name
验证主从同步
从站2(192.168.247.130:6381)切换为主站 主站输入:set name tony | 原主站(192.168.247.128:6379)变为从站 从站输入: get name | ||
七、验证哨兵主从切换
(1)进入哨兵容器
docker exec -it sentinel-master redis-cli -p 26379
docker exec -it sentinel-slave1 redis-cli -p 26380
docker exec -it sentinel-slave2 redis-cli -p 26381
查看状态
info sentinel
(2)主站master
进入redis容器
docker exec -it redis-master redis-cli -p 6379
docker exec -it redis-slave1 redis-cli -p 6380
docker exec -it redis-slave2 redis-cli -p 6381
输入密码
auth inspur2023
关闭主站
shutdown
查看状态
info replication
主站(192.168.247.128:6379) | 从站1(192.168.247.129:6380) | 从站2(192.168.247.130:6381) | |
主站关停:输入shutdown;间隔5s;
主站(192.168.247.128:6379) | 从站1(192.168.247.129:6380) | 从站2(192.168.247.130:6381) 切换为主站 | |
主站重新启动,主站变为从站
原主站(192.168.247.128:6379)变为从站 | 从站1(192.168.247.129:6380) | 从站2(192.168.247.130:6381)切换为主站 从站变为2个 | |