Redis Sentinel(哨兵)
Redis Sentinel保证了Redis的高可用性。实际上,这意味着使用Sentinel可以创建一个Redis部署,可以在没有人为干预的情况下抵抵抗某些类型的故障。
1、监控:Sentinel会不断检查主实例和从属实例是否按预期工作。
2、通知:如果redis服务发生故障,Sentinel可以通过api通知系统管理员
3、自动故障转移:如果主服务器未按预期工作,Sentinel可以启动故障转移过程,其中从服务器升级为主服务器,其他其他服务器重新配置为使用新主服务器,并且使用Redis服务器的应用程序通知有关新服务器的地址。
配置Sentinel
1、首先准备三个redis实列一主二从
①实例一(主服务器)创建配置文件6379.conf,在里面写入以下内容:
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no
②实例二(从服务器)创建配置文件6380.conf,在里面写入以下内容:
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no
slaveof 127.0.0.1 6379
②实例三(从服务器)创建配置文件6381.conf,在里面写入以下内容:
port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
protected-mode no
slaveof 127.0.0.1 6379
2、启动三个实列
[root@love2 ~]# redis-server 6379.conf
[root@love2 ~]# redis-server 6380.conf
[root@love2 ~]# redis-server 6381.conf
3、查看主从信息
主
[root@love2 data]# redis-cli -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=84,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=84,lag=1
master_replid:c68311b9fd7865c2429487dc756a36b2b533a737
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84
从1
[root@love2 data]# redis-cli -p 6380 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:126
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c68311b9fd7865c2429487dc756a36b2b533a737
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126
从2
[root@love2 data]# redis-cli -p 6381 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:168
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c68311b9fd7865c2429487dc756a36b2b533a737
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
4、主从已经配置好了,现在来配置哨兵的配置文件,最少需要三个哨兵,以下为配置文件,修改另外两个哨兵配置文件,如果为了方便,仅仅只需要更改端口就行,所以配置文件分别为 5000.conf,5001.conf,5002.conf
port 5000 #该哨兵运行端口
daemonize yes #使哨兵可以在后台运行
dir /data/5000/ #该哨兵存放数据的目录
logfile "5000.log" #日志文件路劲为'/data/5000/5000.log’
sentinel monitor master 127.0.0.1 6379 2
#当前Sentinel节点监控 192.168.119.10:6379 这个主节点,master是主节点的别名,2代表判断主节点失败以及切换主节点至少需要2个Sentinel节点节点同意
sentinel down-after-milliseconds master 5000
#sentinel会定期向redis主节点ping信号,如果5s内没有回复,则判断master故障
sentinel failover-timeout master 60000
#故障转移时间为6s
sentinel parallel-syncs master 1
#当sentinel达成协议一直时,将会向新的主节点转移数据,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
5、启动哨兵
可以使用 redis-sentinel,该文件位于redis的安装目录下,是一个可执行文件,直接使用以下命令:
redis-sentinel /data/5000.conf
也可以用redis-server命令:
redis-server /data/5000.conf --sentinel
6、启动后效果如下
[root@love2 data]# ps -ef |grep redis
root 8723 1 0 01:02 ? 00:00:05 redis-server *:6379
root 8734 1 0 01:07 ? 00:00:05 redis-server *:6380
root 8740 1 0 01:07 ? 00:00:04 redis-server *:6381
root 8863 1 0 01:41 ? 00:00:00 redis-server *:5000 [sentinel]
root 8884 1 0 01:44 ? 00:00:00 redis-server *:5001 [sentinel]
root 8889 1 0 01:44 ? 00:00:00 redis-server *:5002 [sentinel]
root 8894 8488 0 01:44 pts/0 00:00:00 grep --color=auto redis
7、通过命令查看状态信息
[root@love2 data]# redis-cli -p 5000 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
8、测试故障转移,我们直接杀死,master节点
kill -9 8921
9、查看效果,大概5s后,自动进行了主从切换
[root@love2 data]# redis-cli -p 5000 info sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3