Redis哨兵集群搭建
主机名 | IP地址 | 角色 |
---|---|---|
master | 10.206.0.4 | master |
node1 | 10.206.0.8 | slave1 |
node2 | 10.206.0.5 | slave2 |
安装Redis5.0
配置主机名及域名解析
#所有节点操作
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
vim /etc/hosts
10.206.0.4 master
10.206.0.8 node1
10.206.0.5 node2
同步时间
#所有节点
yum install ntpdate -y
ntpdate ntp1.aliyun.com
安装redis5.0
#所有节点操作
#上传redis-5.0.0.tar.gz
#解压到/usr/local/目录下
tar -zxvf redis-5.0.0.tar.gz -C /usr/local/
#编译安装
cd /usr/local/redis-5.0.0/
make
cd ./src && make install
修改redis.conf配置文件
#所有节点操作
#备份redis.conf文件
cp redis.conf redis.conf.bak
vim redis.conf
#修改配置项(所有节点均修改)
bind 0.0.0.0
protected-mode no
requirepass "123456" # 设置密码
masterauth p@ss1234 # 主服务器密码(避免挂掉后重启无法加入主从)
appendonly yes # 开启持久化
#master将redis.conf配置文件发送到slave1,slave2
scp redis.conf root@10.206.0.8:/usr/local/redis-5.0.0/
scp redis.conf root@10.206.0.5:/usr/local/redis-5.0.0/
##从节点新增配置项
replicaof 10.206.0.4 6379 # 此项配置IP为主节点IP,并且只在从节点配置
masterauth p@ss1234 # 主服务器密码
注意:
①其中masterauth和requirepass为设置的redis登录密码,和后面的sentinel.conf密码一致
②replicaof 10.206.0.4 6379只在从节点配置,主节点不配置;
修改sentinel.conf配置文件
#所有节点操作
#备份sentinel.conf文件
cp sentinel.conf sentinel.conf.bak
#创建日志目录以及工作目录
mkdir -p /data/redis/logs
mkdir -p /data/redis/data
vim sentinel.conf
#修改配置项(三节点配置一样)
port 26379
protected-mode no
daemonize yes
pidfile /var/run/redis/redis-sentinel.pid
logfile /data/redis/logs/sentinel.log
dir /data/redis/data/
sentinel monitor mymaster 10.206.0.4 6379 2
sentinel auth-pass mymaster p@ss1234
启动Redis服务
#所有节点操作
#切换到src目录
cd /usr/local/redis-5.0.0/src
#启动命令
./redis-server ../redis.conf & #注:启动顺序master > slave1 > slave2
#查看进程确认启动成功
ps -ef | grep redis
查看主从信息
#master主机进入redis查看主从信息
./redis-cli -h 10.206.0.4 -p 6379
#输入密码
10.206.0.4:6379> auth p@ss1234
OK
#查看主从信息
10.206.0.4:6379> info replication
# Replication
role:master #角色
connected_slaves:2 #slave数量
slave0:ip=10.206.0.8,port=6379,state=online,offset=114654,lag=1 #slave1信息
slave1:ip=10.206.0.5,port=6379,state=online,offset=114654,lag=1 #slave2信息
master_replid:857391bc429c32ceb1e55fdde7297cdec1b6d31d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:114654
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:114654
启动sentinel服务
#所有节点操作
#切换到src目录
cd /usr/local/redis-5.0.0/src
#启动命令
./redis-sentinel ../sentinel.conf #注:启动顺序master > slave1 > slave2
#查看进程
ps -ef | grep sentinel
模拟测试
在master节点查看redis进程,执行kill命令使redis服务挂掉
#查看master节点redis服务进程
ps -ef | grep redis
root 8779 11034 0 15:15 pts/1 00:00:00 ./redis-server *:6379
root 8821 1 0 15:15 ? 00:00:00 ./redis-sentinel *:26379 [sentinel]
root 11194 11034 0 15:32 pts/1 00:00:00 grep --color=auto redis
#执行kill命令杀掉进程
kill -9 8779
查看slave1 Replication
#进入redis
./redis-cli -h 10.206.0.8 -p 6379
#输入密码
10.206.0.8:6379> auth p@ss1234
OK
#查看Replication
10.206.0.8:6379> info Replication
# Replication
role:master #master已经切换到10.206.0.8上面
connected_slaves:1 #slave数量只剩一个
slave0:ip=10.206.0.5,port=6379,state=online,offset=257421,lag=0
master_replid:41333f072d2c54dd920d93b1dd3da546ce4c86a9
master_replid2:857391bc429c32ceb1e55fdde7297cdec1b6d31d
master_repl_offset:257421
second_repl_offset:229528
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:257421
启动挂掉的master上的redis服务,查看Replication
#挂掉的master操作
#启动redis服务
./redis-server ../redis.conf &
#查看redis进程
ps -ef | grep redis
查看slave1 Replication
#查看Replication
10.206.0.8:6379> info Replication
# Replication
role:master #master已经切换到10.206.0.8上面
connected_slaves:2 #slave数量变成2个
slave0:ip=10.206.0.5,port=6379,state=online,offset=355358,lag=1
slave1:ip=10.206.0.4,port=6379,state=online,offset=355358,lag=0 #挂掉的master启动服务后自动变成slave
master_replid:41333f072d2c54dd920d93b1dd3da546ce4c86a9
master_replid2:857391bc429c32ceb1e55fdde7297cdec1b6d31d
master_repl_offset:355358
second_repl_offset:229528
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:355358