redis sentinel 优势:
1.monitor:sentinel监控master,slave是否想预期正常工作
2.notification: 如果其中一个被监控的redis实例,sentinel 能通过API通知系统管理员,以及其他计算机程序
3.automatic failover: 如果redis master不像预期正常工作,sentinel能启动一个故障转移进程把其中一个redis slave提升为redis master ,剩余的所有redsi slave 根据新的redis master重新配置,并且使用redis server的应用也能在连接redis 时被通知到,重新连接新的redis master
4.configuration provider: sentinel 扮演一个 redis client 服务发现的原始授权,redis client 连接sentinel进程是为了请求redis 集群当前正常工作master地址 进行业务处理。如果故障转移发生,sentinel将会将新地址报告给新连接的redis client,让其动态修改地址,访问故障转移后的redis master 地址。
下载redis版本,解压到目标目录(确保是否读写该目录的权限),编译:
wget http://download.redis.io/releases/redis-4.0.0.tar.gz
tar xzvf redis-4.0.0.tar.gz -C 目标目录
cd path/to/redis
执行编译命令:
make
cd redis-4.0.0/
redis 配置文件 master.conf
#redis绑定ip,一般为本机ip,不建议为localhost/127.0.0.1
bind 192.168.1.186#redis绑定端口
port 6379#redis日志文件
logfile "/server/app/redis/log/redis.log"
#redis数据文件目录
dir "/server/app/redis/data"
#开启后端启动,启动命令是不加 &
daemonize yes#开启保护模式,需要sentinel.conf 开启该模式
protected-mode yes#开启密码
requirepass "root123"
masterauth "root123#减少高并发情况主突然不可用,造成的数据写丢失
min-slaves-to-write 1
min-slaves-max-lag 10
master 对应的哨兵配置文件 sentinel186.conf
#redis绑定ip,一般为本机ip,不建议为localhost/127.0.0.1
bind 192.168.1.186#哨兵端口
port 26379#后台启动,启动命令是不加 &
daemonize yes#开启保护模式
protected-mode yes#sentinel 数据文件目录
dir "/server/app/redis/sentinel"#sentinel 日志文件目录
logfile "/server/app/redis/log/sentinel_63791.log"#最后一个2:是需要2个哨兵确认是否可以进行主从切换, redis clustername 即为mymaster
#该配置要配置到 sentinel auth-pass 参数的前面
sentinel monitor mymaster 192.168.1.186 6379 2
#哨兵监控,主从切换超时时间
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000#开启密码需要如下配置
sentinel auth-pass mymaster root123
redis189.conf
#redis绑定ip,一般为本机ip,不建议为localhost/127.0.0.1
bind 192.168.1.189#redis端口
port 6379#redis 日志文件
logfile "/server/app/redis/log/redis.log"#redis 数据文件
dir "/server/app/redis/data"#后台启动,无需 在启动命令添加 &
daemonize yes#开启保护模式,需要sentinel.conf 开启该模式
protected-mode yes#保证数据一致性,从库只支持写
slave-read-only yes#主库所在地址
slaveof 192.168.1.186 6379#开启密码
requirepass "root123"
masterauth "root123"#减少高并发情况主突然不可用,造成的数据写丢失
min-slaves-to-write 1
min-slaves-max-lag 10
slave0 对应的哨兵文件
sentinel189.conf
#redis绑定ip,一般为本机ip,不建议为localhost/127.0.0.1
bind 192.168.1.189#哨兵端口
port 26379#后台启动,启动命令是不加 &
daemonize yes#保护模式开启要同时和bind参数使用
protected-mode yes#sentinel 数据文件目录
dir "/server/app/redis/sentinel"#sentinel 日志文件目录
logfile "/server/app/redis/log/sentinel_63791.log"#最后一个2:是需要2个哨兵确认是否可以进行主从切换, redis clustername 即为mymaster
#该配置要配置到 sentinel auth-pass 参数的前面
sentinel monitor mymaster 192.168.1.186 6379 2#哨兵监控,主从切换超时时间
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000
#开启密码需要如下配置
sentinel auth-pass mymaster root123
reids184.conf
#redis绑定ip,一般为本机ip,不建议为localhost/127.0.0.1
bind 192.168.1.184#redis进程所在端口
port 6379#redis日志文件
logfile "/server/app/redis/log/redis.log"#redis数据文件目录
dir "/server/app/redis/data"
#后台启动,无需 在启动命令添加 &
daemonize yes
#开启保护模式,需要sentinel.conf 开启该模式
protected-mode yes
#保证数据一致性,从库只支持写
slave-read-only yes#主库所在地址
slaveof 192.168.1.186 6379#开启密码解注下面两个参数
requirepass root123
masterauth root123
#减少高并发情况主突然不可用,造成的数据写丢失
min-slaves-to-write 1
min-slaves-max-lag 10
slave1 对应的哨兵配置文件
sentinel184.conf
#redis绑定ip,一般为本机ip,不建议为localhost/127.0.0.1
bind 192.168.1.184#哨兵端口
port 26379#后台启动,启动命令是不加 &
daemonize yes#保护模式开启要同时和bind参数使用
protected-mode yes#sentinel 数据文件目录
dir "/server/app/redis/sentinel"#sentinel 日志文件目录
logfile "/server/app/redis/log/sentinel_63791.log"#最后一个2:是需要2个哨兵确认是否可以进行主从切换, redis clustername 即为mymaster
#该配置要配置到 sentinel auth-pass 参数的前面
sentinel monitor mymaster 192.168.1.186 6379 2#哨兵监控,主从切换超时时间
sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 18000
#开启密码需要如下配置
sentinel auth-pass mymaster root123
注:其他参数:如redis多久,多少数据量进行快照,dump文件,根据需要进行配置,或者使用默认值(无需配置)
关于 password,protected-mode的设置 ,redis.conf,sentinel.conf要同时设置.
1.Error condition on socket for SYNC: Connection refused
解决 :
查看 redis.conf ,sentinel.conf中的bind是否配置正确,是否 根据自身机器hostname,ip配置
2.主从切换报错:failover-abort-not-elected
原因:redis.conf 和 sentinel.conf 的参数protected-mode 未保持一致
解决:将这redis.conf 和 sentinel.con文件 的参数protected-mode 保持一致
1)如果redis.conf配置如下连个参数:
protected-mode no
bind 192.168.98.136
如未配置:则在sentinel 配置文件加上
protected-mode no
2)如果redis.conf有配置如下两个参数
protected-mode yes
bind 192.168.1.186
则在sentinel 配置文件加上
protected-mode yes
bind 192.168.1.186