用于管理多个redis服务实现HA
监控
通知
自动控制转移
程序:
redis-sentinel /path/to/file.conf
redis-server /path/to/file.conf –sentinel
(1)服务器自身初始化,运行redis-server 中专用于sentinel功能代码
(2)初始化sentinel状态,根据给定的配置文件,初始化监控的master服务器列表
(3)创建连向master的连接
专用配置文件:/etc/redis-sentinel.conf
port 26379
sentinel auth-pass <master-name> <password>
(1)sentinel monitor <master-name> <ip> <redis-port> <quorum> master参数配置
sentinel monitor mymaster 127.0.0.1 6379 2
(2)sentinel down-after-milliseconds <master-name> <milliseconds> 判断主服务器down的时间
sentinel down-after-milliseconds mymaster 30000
(3)sentinel parallel-syncs <master-name> <numslaves> 转移后允许多少个从服务器发起同步请求
sentinel parallel-syncs mymaster
(4)sentinel failover-timeout <master-name> <milliseconds>
故障转移的超时时间,把从服务器提升为主,多长时间提不起来认为失败
sentinel failover-timeout mymaster 180000
# mkdir -pv /redis/data/redis{1,2,3}
# mkdir -pv /redis/{run,log,conf}
# cp -v /etc/redis.conf /redis/conf/redis.conf1
# cp -v /etc/redis.conf /redis/conf/redis.conf2
# cp -v /etc/redis.conf /redis/conf/redis.conf3
# chown redis:redis -R /redis/
# cat /redis/conf1/redis.conf | egrep -v ‘(^#)’ | grep -v ‘^$’
bind 0.0.0.0
port 6379
daemonize yes
pidfile /redis/run/redis_6379.pid
logfile /redis/log/redis1.log
dir /redis/data/redis1
redis2:
port 6380
daemonize yes
pidfile /redis/run/redis_6380.pid
logfile /redis/log/redis2.log
dir /redis/data/redis2
redis3:
port 6381
daemonize yes
pidfile /redis/run/redis_6381.pid
logfile /redis/log/redis3.log
dir /redis/data/redis3
redis4:
# mkdir -pv /redis/{conf,bin,log}
# mkdir /redis/data/redis -pv
# chown -R redis.redis /redis/
port 6379
daemonize yes
pidfile /redis/run/redis_6379.pid
logfile /redis/log/redis.log
dir /redis/data/redis
# redis-cli -h 172.16.1.5 -p 6379
172.16.1.5:6379> AUTH password
OK
172.16.1.5:6379> SLAVEOF 172.16.1.5 6379
OK
# redis-cli -h 172.16.1.5 -p 6380
172.16.1.5:6380> AUTH password
OK
172.16.1.5:6380> SLAVEOF 172.16.1.10 6379
OK
# redis-cli -h 172.16.1.5 -p 6381
172.16.1.5:6381> AUTH password
OK
172.16.1.5:6381> SLAVEOF 172.16.1.10 6379
OK
# redis-sentinel /etc/redis-sentinel.conf
# nohup redis-sentinel /etc/redis-sentinel.conf &
# redis-cli -p 26379
127.0.0.1:26379> sentinel slaves mymaster
127.0.0.1:26379> sentinel masters
172.16.1.5:6379> info replication
# Replication
role:slave
master_host:172.16.1.10
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:2971
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
172.16.1.10:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=172.16.1.5,port=6381,state=online,offset=2546,lag=0
slave1:ip=172.16.1.5,port=6379,state=online,offset=2409,lag=0
slave2:ip=172.16.1.5,port=6380,state=online,offset=2546,lag=0
master_repl_offset:2546
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:2545
kill 掉master
172.16.1.5:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.1.5,port=6380,state=online,offset=1698,lag=0
slave1:ip=172.16.1.5,port=6381,state=online,offset=1698,lag=1
master_repl_offset:1698
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1697
恢复master:
172.16.1.5:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=172.16.1.5,port=6380,state=online,offset=6851,lag=1
slave1:ip=172.16.1.5,port=6381,state=online,offset=6851,lag=0
slave2:ip=172.16.1.10,port=6379,state=online,offset=6851,lag=0
master_repl_offset:6851
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:6850
主观下线:
一个sentinel实例判断出某节点下线:
客观下线:
多个sentinel协商后判断某节点下线
专用命令:
sentinel masters 列出所有master
sentinel slaves <master name> 获取指定主服务器的所有从节点
sentinel get-master-addr-by-name <master name> 根据主节点名字获取它的地址
sentinel reset 清除服务器所有状态从头再来,包括故障转移
sentinel failover <master name> 强制故障转移某个主从
Clustering:
分布式数据库,通过分片机制进行数据分布,clustering内的每个节点仅数据库的一部分
Twemproxy(Twitter) Twitter自己都不再使用
Codis (豌豆夹) 非常稳定国内用得多,效率高
Redis Cluster(官方)
Cerberus (芒果TV)