实验环境

192.168.186.129 centos7

实验前准备

#关闭防火墙
systemctl stop firewalld
#关闭selinux
setenforce 0
#创建目录
mkdir -p /usr/local/redis/7001
mkdir -p /usr/local/redis/7002
mkdir -p /usr/local/redis/7003
mkdir -p /usr/local/redis/7004

安装redis-5.0.3

#安装gcc
yum install gcc -y
#安装wget
yum install wget -y
#下载redis-5.0.3.tar.gz
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
#解压
tar zxvf redis-5.0.3.tar.gz
#移动到redis-5.0.3目录下,执行
make
#移动到redis-5.0.3/src目录下,执行
make install

复制redis-server、redis-cli、redis-sentinel到/usr/local/redis/目录下
复制redis.conf、sentinel.conf到/usr/local/redis/目录下
在7001、7002、7003、7004文件夹下创建sentinel目录

修改主redis.conf

#修改以下项
daemonize yes #后台运行
port 7001 #端口,按照创建的文件夹分配7001-7006端口
bind #绑定ip,默认绑定的是本机,只允许本地访问redis-server,注释掉
dir /home/bin/redis/7001/ #redis数据文件存储位置
appendonly yes #持久化
protected-mode no #保护模式
requirepass tang1611 #设置密码,当客户端连接redis-server时,需要使用-a <password> 来连接
masterauth tang1611 #集群通信密码

修改从redis.conf

#修改以下项
daemonize yes #后台运行
port 7002 #端口,按照创建的文件夹分配7001-7006端口
bind #绑定ip,默认绑定的是本机,只允许本地访问redis-server,注释掉
dir /home/bin/redis/7002/ #redis数据文件存储位置
appendonly yes #持久化
protected-mode no #保护模式
requirepass tang1611 #设置密码,当客户端连接redis-server时,需要使用-a <password> 来连接
masterauth tang1611 #集群通信密码
replicaof 127.0.0.1 7001 #表示以127.0.0.1 7001作为主redis

启动redis

#启动redis
./redis-server 7001/redis.conf
./redis-server 7002/redis.conf
./redis-server 7003/redis.conf
./redis-server 7004/redis.conf
#查看redis启动情况
ps -ef |grep redis

sentinel.conf配置

#修改以下配置
#关闭保护模式
protected-mode no
#端口,分配6001、6002、6003、6004端口
port 6001
#后台运行
daemonize yes
#pid文件目录
pidfile "/usr/local/redis/7001/sentinel/redis-sentinel.pid"
#日志目录
logfile "/usr/local/redis/7001/sentinel/redis-sentinel.log"
#哨兵sentinel的工作目录
dir "/usr/local/redis/7001/sentinel"
#配置master机器ip及端口,2表示必须至少要有2个及以上sentinel认为master挂掉,才认为master挂掉
sentinel monitor mymaster 127.0.0.1 7001 2
#如果redis.conf配置了requirepass,那么该项必须配置,密码与requirepass一致,该项配置必须在sentinel monitor之下
sentinel auth-pass mymaster tang1611

启动sentinel

./redis-sentinel 7001/sentinel.conf
./redis-sentinel 7002/sentinel.conf
./redis-sentinel 7003/sentinel.conf
./redis-sentinel 7004/sentinel.conf
#查看sentinel启动情况
ps -ef |grep redis

测试

#先确定master是在7001端口的redis上,查看其role
./redis.cli -a tang1611 -p 7001 info replication
#kill掉master节点
kill -9 <pid>
#查看redis-sentinel.log,从日志上可以看出来新的master(7003端口的redis)已经选举出来了
tail -n 10 redis-sentinel.log
11270:X 26 Mar 2020 16:32:53.542 * +slave slave 127.0.0.1:7004 127.0.0.1 7004 @ mymaster 127.0.0.1 7003
11270:X 26 Mar 2020 16:32:53.542 * +slave slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7003
11270:X 26 Mar 2020 16:32:53.542 * +slave slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7003
11270:X 26 Mar 2020 16:33:23.552 # +sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7003