redis的主从和哨兵
原创大约 3 分钟
准备不同端口的文件夹
把bin复制成3份,并用端口命名即可
drwxr-xr-x. 2 root root 168 3月 23 16:37 6377
drwxr-xr-x. 2 root root 168 3月 23 16:39 6378
drwxr-xr-x. 2 root root 233 3月 23 17:15 6379
编写开启redis服务端的脚本
redis-start.sh
#!/bin/sh
# author: wuyilong
# description: 开启redis服务器
for i in "$@";do
if test -d ./$i
then
cd $i
echo "$i-----"
./redis-server redis.conf
cd ..
echo "开启成功,当前所在目录:$(pwd)"
else
echo "${i}目录不存在"
fi
done
// 脚本启动
[root@localhost redis]# ./redis-start.sh 6377 6378 6379
编写关闭redis服务端的脚本
redis-stop.sh
#!/bin/sh
# author: wuyilong
# description: 关闭redis服务器
for i in "$@";do
if test -d ./$i
then
cd $i
./redis-cli -p $i shutdown
cd ..
echo "关闭成功,当前的目录:$(pwd)"
else
echo "${i}目录不存在"
fi
done
// 脚本关闭
[root@localhost redis]# ./redis-stop.sh 6377 6378 6379
sentinel.conf的脚本编写
ps:其实和redis.conf差不多,你可以放到不同的文件夹,也可以在同一个文件夹,在这我就就累赘了。
redis.conf
// 端口
port 6379
// 所有的机器上的地址都可以访问到redis
bind 0.0.0.0
// 保护模式,默认开启,开启了要设置密码
protected-mode yes
// 后台启动,默认no
daemonize yes
// 设置密码
requirepass "123456"
// 设置数据库的存储路径
dir "/home/wuyilong/redis_slaver1"
---------------------------------------slave单独设置-----------------------------
// 设置本机为slave服务(只在slave中设置,master不用)
slaveof 192.168.1.114 6379
作用:自动同步master的数据
// 设置slave只有读的操作,默认yes
slave-read-only yes
ps: 就算改为no也没用,在slave写入的数据不用同步到master上,
// 当master设置了密码保护时,slave连接master的密码
masterauth "123456"
sentinel.conf
// 端口
port 26379
// 监听master,不要用(127.0.0.1)
sentinel monitor mymaster 192.168.1.114 6379 2
ps: 如果在redis-cli上可以用127.0.0.1去测试下,如果用语言连接,比如java,则连不了,必须用真的ip.
// 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
sentinel auth-pass mymaster 123456
// 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs mymaster 1
// 这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒
sentinel down-after-milliseconds mymaster 30000
// failover-timeout 可以用在以下这些方面:
1. 同一个sentinel对同一个master两次failover之间的间隔时间。
2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
3.当想要取消一个正在进行的failover所需要的时间。
4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。
sentinel failover-timeout mymaster 20000
// sentinel唯一的标识
sentinel myid 77f2e3c07806986f0cf1348ab55ef63cb837805c
ps: 在部署多个sentinel时要设置不同的myid,只有这样后面的故障转移才能生效
测试时出现的神奇之处
- 如果slave在master出现故障时,自己升为master,那么,slaveof 则会自动消失, 并且 sentinel monitor mymaster 192.168.1.114 6379 2中的ip会变成slave的IP地址,
会在sentinel.conf 自动生成一些配置
# Generated by CONFIG REWRITE
sentinel known-replica mymaster 127.0.0.1 6377
sentinel known-replica mymaster 127.0.0.1 6379
sentinel known-sentinel mymaster 127.0.0.1 26378 77f2e3c07806986f0cf1348ab55ef63cb837805b
sentinel known-sentinel mymaster 127.0.0.1 26377 77f2e3c07806986f0cf1348ab55ef63cb837805a
sentinel current-epoch 2