Linux-Redis哨兵搭建
环境资源准备
主机名 | IP | 端口号 | 角色 |
vm1 | 192.168.64.15 | 6379/26379 | master |
vm2 | 192.168.64.16 | 6379/26379 | slave |
vm3 | 192.168.64.17 | 6379/26379 | slave |
6379为redis服务暴露端口号、26379为sentinel暴露端口号。
安装Redis
# 包文件下载
wget https://github.com/redis/redis/archive/7.2.2.tar.gz
# 解压文件
tar -zxvf redis-7.2.2.tar.gz
# 进入包文件夹
cd redis-7.2.2/
# 安装依赖文件
## Ubuntu
sudo apt install -y gcc g++ make
## CentOS
sudo yum -y install gcc g++ make
## 创建安装文件夹、数据文件夹
mkdir -p /usr/local/redis/data/
# 再次检查当前目录是否为redis源码文件,如果是进行make操作
make
# make install安装到指定文件夹
make install PREFIX=/usr/local/redis/
配置文件
文件路径
/etc/redis.conf
主节点(去除中文解释)
daemonize yes
logfile "/var/log/redis.log"
bind 0.0.0.0
port 6379
protected-mode no
pidfile /var/run/redis_6379.pid
dir /usr/local/redis/data # 指定生成rdb文件的路径 相对路径受到启动redis的操作路径的影响
slave-read-only yes
slave-priority 100
appendonly yes # 开启AOF模式
appendfilename "appendonly.aof"
appendfsync everysec
requirepass 123456
从节点(去除中文解释)
注意将slaveof设置为置顶的主节点地址。
daemonize yes
logfile "/var/log/redis.log"
bind 0.0.0.0
port 6379
protected-mode no
pidfile /var/run/redis_6379.pid
dir /usr/local/redis/data # 指定生成rdb文件的路径 相对路径受到启动redis的操作路径的影响
slave-read-only yes
slave-priority 90 # 主节点最高,其他依次递减,一个从节点90,一个从节点85
appendonly yes # 开启AOF模式
appendfilename "appendonly.aof"
appendfsync everysec
requirepass 123456
slaveof 192.168.64.15 6379
masterauth 123456
启动服务
/usr/local/redis/bin/redis-server /etc/redis.conf
查看启动状态
root@vm1:/home/ubuntu/redis-7.2.2# ps -ef | grep redis
root 7827 1 0 14:48 ? 00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root 7848 1171 0 14:48 pts/0 00:00:00 grep --color=auto redis
登录验证
/usr/local/redis/bin/redis-cli
启动成功,从节点设置成功
此时,主从redis已经设置完毕,开始搭建哨兵。
哨兵配置文件
文件路径
/etc/sentinel.conf
配置内容
创建文件夹
mkdir -p /usr/local/redis/temp
protected-mode no
port 26379
dir /usr/local/redis/temp
logfile "/var/log/sentinel.log"
daemonize yes
sentinel monitor mymaster 192.168.64.15 6379 2 # mymaster集群的名字,2个节点以上认为不可用,进行fall over
sentinel down-after-milliseconds mymaster 10000 # 判断主节点宕机时间,主观下线
sentinel failover-timeout mymaster 60000 # 两次fallover间隔
sentinel auth-pass mymaster 123456
sentinel parallel-syncs mymaster 1 # 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel monitor,后第一个字符串为集群名称,一般为mymaster即可,后面跟主节点IP和端口号。三个节点配置文件相同。配置时去除中文。
启动sentinel服务
/usr/local/redis/bin/redis-sentinel /etc/sentinel.conf
查看启动情况
root@vm1:/home/ubuntu/redis-7.2.2# ps -ef | grep redis
root 7827 1 0 14:48 ? 00:00:01 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root 7887 1 0 14:57 ? 00:00:00 /usr/local/redis/bin/redis-sentinel *:26379 [sentinel]
root 7895 1171 0 14:58 pts/0 00:00:00 grep --color=auto redis
利用python检测哨兵节点切换
import time
from redis.sentinel import Sentinel
sentinel_list = [
("192.168.64.15", 26379),
("192.168.64.16", 26379),
("192.168.64.17", 26379),
]
mySentinel = Sentinel(sentinel_list, )
for i in range(1000):
try:
print(mySentinel.discover_master("mymaster"))
time.sleep(1)
except:
pass
此时节点进行了切换,从日志可以看出切换过程。