# Redis 集群(主从 + 哨兵)模式

# 一、什么是 redis 主从复制?

主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点 (master),后者称为从节点 (slave), 数据的复制是单向的,只能由主节点到从节点。master 以写为主,slave 以读为主。

pEgTlKx.png

# 二、主从复制的作用

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写 Redis 数据时应用连接主节点,读 Redis 数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量。
读写分离:用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是 Redis 高可用的基础。

# 三、实现主从复制

主机名IP角色
redis01192.168.40.101master
redis02192.168.40.102slave
redis03192.168.40.103slave

# 3.1 关闭防火墙、selinux

[root@master01 ~]# hostnamectl set-hostname redis01
[root@redis01 ~]# systemctl stop firewalld
[root@redis01 ~]# systemctl disable firewalld
[root@redis01 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@redis01 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@redis01 ~]# yum install net-tools vim tree lrzsz wget unzip dos2unix bash-completion  lsof ntp ntpdate git -y
[root@redis01 ~]# yum update -y --exclude=kernel* && reboot
[root@redis01 ~]# echo 'Asia/Shanghai' >/etc/timezone
[root@redis01 ~]# ntpdate time2.aliyun.com
[root@redis01 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/null
[root@redis01 ~]# mkdir /soft /data /scripts /backup

# 3.2 安装 redis

[root@redis01 ~]# yum install gcc-c++ -y
[root@redis01 soft]# wget https://download.redis.io/releases/redis-6.2.11.tar.gz
[root@redis01 soft]# tar xf redis-6.2.11.tar.gz 
[root@redis01 soft]# ln -s /soft/redis-6.2.11 /soft/redis
[root@redis01 soft]# cd /soft/redis
[root@redis01 redis]# make            #执行make编译
[root@redis01 redis]# make install    #将 src下的许多可执行文件复制到/usr/local/bin 目录下
[root@redis01 redis]# redis-server /soft/redis/redis.conf &
[root@redis01 redis]# netstat -lntp|grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      69686/redis-server  
tcp6       0      0 ::1:6379                :::*                    LISTEN      69686/redis-server     
[root@redis01 redis]# redis-cli shutdown      #关闭Redis服务

# 3.3 redis 配置文件说明

[root@db01 redis]# vim redis.conf 
bind 127.0.0.1      		# 绑定的ip
protected-mode yes  		# 保护模式
port 6379           		# 端口设置
daemonize yes               # 后台启动
bind 127.0.0.1      		# 绑定的ip
protected-mode yes  		# 保护模式
port 6379           		# 端口设置
loglevel notice     		# 记录日志级别
logfile "redis.log"         # 日志的文件位置名
dir ./               		# 日志存储目录
databases 16        		# 数据库的数量,默认是 16 个数据库
always-show-logo yes 		# 是否总是显示LOGO

# 如果900s内,如果至少有一个1 key进行了修改,我们及进行持久化操作
save 900 1
# 如果300s内,如果至少10 key进行了修改,我们及进行持久化操作
save 300 10
# 如果60s内,如果至少10000 key进行了修改,我们及进行持久化操作
save 60 10000
# 我们之后学习持久化,会自己定义这个测试!
stop-writes-on-bgsave-error yes   # 持久化如果出错,是否还需要继续工作!
rdbcompression yes                # 是否压缩 rdb 文件,需要消耗一些cpu资源!
rdbchecksum yes                   # 保存rdb文件的时候,进行错误的检查校验!
dbfilename dump.rdb               # rdb 文件保存的名称!
dir ./                            # rdb 文件保存的目录!

slaveof 192.168.1.154 6379        # 配置主从复制
requirepass foobared              # 配置redis登录密码

appendonly no    # 默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分所有的情况下,rdb完全够用!
appendfilename "appendonly.aof"   # 持久化的文件的名字
# appendfsync always        # 每次修改都会 sync。消耗性能
appendfsync everysec        # 每秒执行一次 sync,可能会丢失这1s的数据!
# appendfsync no            # 不执行 sync,这个时候操作系统自己同步数据,速度最快!
no-appendfsync-on-rewrite   #重写时是否可以运用appendsync,默认no,可以保证数据的安全性

# 3.4 redis 环境配置

#修改 maser 配置文件

vim redis.conf
bind 192.168.40.101 #绑定本机ip地址
port 6739          #绑定端口号
daemonize yes      #用来指定redis是否要用守护进程的方式启动,默认为no
pidfile /var/run/redis_6379.pid
logfile "redis.log"   #redis日志文件
requirepass Superman*2023  #本地redis密码
masterauth Superman*2023   #主节点redis密码 注意:从节点也要配置,后边哨兵容灾切换用到
protected-mode yes    #保护模式

#修改 slave01 配置文件

vim redis.conf
bind 192.168.40.102 #绑定本机ip地址
port 6739          #绑定端口号
daemonize yes      #用来指定redis是否要用守护进程的方式启动,默认为no
pidfile /var/run/redis_6379.pid
logfile "redis.log"   #redis日志文件
replicaof  192.168.40.101 6379 #配置文件中设置主节点,redis主从复制这个地方只配置从库,注意:主库不需要这个配置
requirepass Superman*2023  #本地redis密码
masterauth Superman*2023   #主节点redis密码 注意:从节点也要配置,后边哨兵容灾切换用到
protected-mode yes    #保护模式

#修改 slave02 配置文件

vim redis.conf
bind 192.168.40.103 #绑定本机ip地址
port 6739          #绑定端口号
daemonize yes      #用来指定redis是否要用守护进程的方式启动,默认为no
pidfile /var/run/redis_6379.pid
logfile "redis.log"   #redis日志文件
replicaof  192.168.40.101 6379 #配置文件中设置主节点,redis主从复制这个地方只配置从库,注意:主库不需要这个配置
requirepass Superman*2023  #本地redis密码
masterauth Superman*2023   #主节点redis密码 注意:从节点也要配置,后边哨兵容灾切换用到
protected-mode yes    #保护模式

# 3.5 启动 3 台 redis 服务

#启动redis01
[root@redis01 redis]# redis-server /soft/redis/redis.conf
[root@redis0[root@redis01 redis]# redis-server /soft/redis/redis.conf redis]# netstat -lntp|grep redis
tcp        0      0 192.168.40.101:6379     0.0.0.0:*               LISTEN      117358/redis-server 

#启动redis02
[root@redis02 redis]# redis-server /soft/redis/redis.conf
[root@redis02 redis]# netstat -lntp|grep redis
tcp        0      0 192.168.40.102:6379     0.0.0.0:*               LISTEN      18210/redis-server

启动redis03
[root@redis03 redis]# redis-server /soft/redis/redis.conf
[root@redis03 redis]# netstat -lntp|grep redis
tcp        0      0 192.168.40.103:6379     0.0.0.0:*               LISTEN      19186/redis-server 

# 3.6 查看主从状态

#主节点
[root@redis01 redis]# redis-cli -p 6379 -h 192.168.40.101 -a Superman*2023
192.168.40.101:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.40.102,port=6379,state=online,offset=616,lag=0
slave1:ip=192.168.40.103,port=6379,state=online,offset=616,lag=0
master_failover_state:no-failover
master_replid:93df7cd5095dcccdbf8266787031b17cf638a2ad
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:616
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:616

#从节点
[root@redis01 redis]# redis-cli -p 6379 -h 192.168.40.103 -a Superman*2023
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.40.103:6379> info replication
# Replication
role:slave
master_host:192.168.40.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:812
slave_repl_offset:812
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:93df7cd5095dcccdbf8266787031b17cf638a2ad
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:812
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:295
repl_backlog_histlen:518

# 3.7 测试主从

[root@redis01 redis]# redis-cli -p 6379 -h 192.168.40.101 -a Superman*2023
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.40.101:6379> set k1 v1
OK
192.168.40.101:6379> set k2 v2
OK

[root@redis03 redis]# redis-cli -p 6379 -h 192.168.40.103 -a Superman*2023
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.40.103:6379> get k1
"v1"
192.168.40.103:6379> get k2
"v2"

注意:
1、主机可以写,从机不能写,只能读。主机中的所有数据都会保存到从机中去。
2、主机断开连接,从机依旧连接到主机的,但是没有写操作,这个时候,主机如果回来了,从机依旧可以直接获取到主机写的信息!
3、如果是使用命令行,来配置的主从,这个时候如果重启了,就会变回主机!只要变为从机,立马就会从主机中获取值!
4、主从复制原理
Slave 启动成功连接到 master 后会发送一个 sync 同步命令
Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master 将传送整个数据文件到 slave,并完成一次完全同步。
全量复制:slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master 继续将新的所有收集到的修改命令依次传给 slave,完成同步,但是只要是重新连接 master,一次完全同步(全量复制)将被自动执行! 主机的数据一定可以在从机中看到。

# 四、哨兵模式搭建

1、什么是 redis 哨兵?
RedisSentinel 是 Redis 的高可用性解决方案,由一个或多个 Sentinel(哨兵)实例组成。它可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,它的主要功能如下:
监控 (Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
通知 (Notification):当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
故障迁移:当主服务器不能正常工作时,Sentinel 会自动进行故障迁移,也就是主从切换。
统一的配置:管理连接者询问 sentinel 取得主从的地址。

2、哨兵原理是什么?
Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系统,系统容错,以及 Leader 选举,每个 Sentinel 都需要定期的执行以下任务:
每个 Sentinel 会自动发现其他 Sentinel 和从服务器,它以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个 PING 命令。
如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有 Sentinel 要以每秒一次的频率确认主服务器的确进入了主观下线状态。
如果一个主服务器被标记为主观下线, 并且有足够数量的 Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断,那么这个主服务器被标记为客观下线。
在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令。当一个主服务器 Sentinel 标记为客观下线时,Sentinel 向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
当没有足够数量的 Sentinel 同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向 Sentinel 的 PING 命令返回有效回复时, 主服务器的主管下线状态就会被移除。

pEgT1r6.png

# 4.1 搭建哨兵

在每台服务器上部署一个哨兵,配置方式如下:

[root@redis01 redis]# vim sentinel.conf
#端口默认为26379。
port 26379
#关闭保护模式,可以外部访问。
protected-mode no
#设置为后台启动。
daemonize yes
#日志文件。
logfile "/soft/redis/sentinel.log"
#指定服务器IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。注意:三台哨兵这里的ip配置均为主节点ip 和端口
sentinel monitor mymaster 192.168.40.101 6379 2
#当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster psw66
#这里设置了主机多少秒无响应,则认为挂了。
sentinel down-after-milliseconds mymaster 3000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的
snetinel parallel-syncs mymaster 1
#故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

# 4.2 启动三台服务器上的哨兵

#启动redis01的sentine
[root@redis01 redis]# redis-sentinel /soft/redis/sentinel.conf
[root@redis01 redis]#  netstat -lntp|grep redis
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      33536/redis-sentine 
tcp        0      0 192.168.40.101:6379     0.0.0.0:*               LISTEN      117358/redis-server 
tcp6       0      0 :::26379                :::*                    LISTEN      33536/redis-sentine

#启动redis02的sentine
[root@redis02 redis]# redis-sentinel /soft/redis/sentinel.conf
[root@redis02 redis]#  netstat -lntp|grep redis
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      18757/redis-sentine 
tcp        0      0 192.168.40.102:6379     0.0.0.0:*               LISTEN      18210/redis-server  
tcp6       0      0 :::26379                :::*                    LISTEN      18757/redis-sentine

#启动redis03的sentine
[root@redis03 redis]# redis-sentinel /soft/redis/sentinel.conf                     
[root@redis03 redis]# netstat -lntp|grep redis
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      19745/redis-sentine 
tcp        0      0 192.168.40.103:6379     0.0.0.0:*               LISTEN      19186/redis-server  
tcp6       0      0 :::26379                :::*                    LISTEN      19745/redis-sentine

# 4.3 连接客户端

[root@redis01 redis]# redis-cli -p 26379
127.0.0.1:26379>  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=mymaster,status=ok,address=192.168.40.101:6379,slaves=2,sentinels=3

# 4.4 redis 容灾切换

#连接redis客户端
[root@redis01 redis]# redis-cli -p 6379 -h 192.168.40.101 
#验证密码
192.168.40.101:6379> auth Superman*2023
OK
#关闭redis服务
192.168.40.101:6379> shutdown
not connected>
#退出客户端
not connected> exit

关闭主节点之后,我们去查看哨兵日志:

[root@redis01 ~]# tail -f /soft/redis/sentinel.log 
91936:X 14 Apr 2023 23:26:23.838 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
91936:X 14 Apr 2023 23:26:23.838 # Redis version=6.2.11, bits=64, commit=00000000, modified=0, pid=91936, just started
91936:X 14 Apr 2023 23:26:23.838 # Configuration loaded
91936:X 14 Apr 2023 23:26:23.838 * monotonic clock: POSIX clock_gettime
91936:X 14 Apr 2023 23:26:23.839 * Running mode=sentinel, port=26379.
91936:X 14 Apr 2023 23:26:23.839 # Sentinel ID is 835b4c8544fb250af5fd479f834ee369cc4f388e
91936:X 14 Apr 2023 23:26:23.839 # +monitor master mymaster 192.168.40.101 6379 quorum 2



91936:X 14 Apr 2023 23:31:25.329 # +sdown master mymaster 192.168.40.101 6379   #这里应该是发现主节点宕机
91936:X 14 Apr 2023 23:31:25.359 # +new-epoch 5
91936:X 14 Apr 2023 23:31:25.360 # +vote-for-leader ab43979285cb47b1b459aeb0ab91b63fa9d1a989 5
91936:X 14 Apr 2023 23:31:25.401 # +odown master mymaster 192.168.40.101 6379 #quorum 3/2 两个哨兵都觉得主节点宕机了
91936:X 14 Apr 2023 23:31:25.401 # Next failover delay: I will not start a failover before Fri Apr 14 23:37:25 2023
91936:X 14 Apr 2023 23:31:26.468 # +config-update-from sentinel ab43979285cb47b1b459aeb0ab91b63fa9d1a989 192.168.40.102 26379 @ mymaster 192.168.40.101 6379
91936:X 14 Apr 2023 23:31:26.468 # +switch-master mymaster 192.168.40.101 6379 192.168.40.103 6379 #通过投票选举40.103为新的主节点
91936:X 14 Apr 2023 23:31:26.468 * +slave slave 192.168.40.102:6379 192.168.40.102 6379 @ mymaster 192.168.40.103 6379
91936:X 14 Apr 2023 23:31:26.469 * +slave slave 192.168.40.101:6379 192.168.40.101 6379 @ mymaster 192.168.40.103 6379

下面我们去 40.103 下查看哨兵主从切换是否成功

[root@redis03 redis]# redis-cli -p 6379 -h 192.168.40.103
192.168.40.103:6379> auth Superman*2023
OK
192.168.40.103:6379> info replication
# Replication
role:master   # 40.103变成主节点了
connected_slaves:1   # 下面的从机个数为1
slave0:ip=192.168.40.102,port=6379,state=online,offset=108708,lag=1
master_failover_state:no-failover
master_replid:cf36f762dcae0c07b54f7287dc19d7ecc0d50dd3
master_replid2:a7de32d10b2d31f8886c84ca91dc7f055439c935
master_repl_offset:108851
second_repl_offset:59887
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:108851

重新连接挂掉的主节点

[root@redis01 redis]# redis-server redis.conf 
[root@redis01 redis]#  redis-cli -p 6379 -h 192.168.40.101
192.168.40.101:6379> auth Superman*2023
OK
192.168.40.101:6379> info replication
# Replication
role:slave          #主节点连接回来之后自动变成了从节点,并且成功连上了主机
master_host:192.168.40.103
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:130607
slave_repl_offset:130607
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:cf36f762dcae0c07b54f7287dc19d7ecc0d50dd3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:130607
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:126982
repl_backlog_histlen:3626

再去主节点确认一下

192.168.40.103:6379> info replication
# Replication
role:master
connected_slaves:2   #两个从节点
slave0:ip=192.168.40.102,port=6379,state=online,offset=147879,lag=1
slave1:ip=192.168.40.101,port=6379,state=online,offset=147879,lag=1
master_failover_state:no-failover
master_replid:cf36f762dcae0c07b54f7287dc19d7ecc0d50dd3
master_replid2:a7de32d10b2d31f8886c84ca91dc7f055439c935
master_repl_offset:148165
second_repl_offset:59887
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:148165

五、哨兵模式的优缺点
1. 优点

哨兵集群,基于主从复制模式,所有的主从配置优点,它全有

主从可以切换,故障可以转移,系统的可用性就会更好

哨兵模式就是主从模式的升级,手动到自动,更加健壮!

2. 缺点

Redis 不好在线扩容,集群容量一旦到达上限,在线扩容就十分麻烦

哨兵模式的配置繁琐

3. 哨兵模式的配置文件详解

# Example sentinel.conf
# 哨兵sentinel实例运行的端口 默认26379
port 26379
 
# 哨兵sentinel的工作目录
dir /tmp
 
# 哨兵sentinel监控的redis主节点的 ip port
# master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 配置多少个sentinel哨兵统一认为master主节点失联 那么这时客观上认为主节点失联了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
  
# 当在Redis实例中开启了requirepass foobared 授权密码这样所有连接Redis实例的客户端都要提供 密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
 
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
 
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长, 但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
 
# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那 里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时, slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了 # 默认三分钟
# sentinel failover-timeout <master-name> <milliseconds> bilibili:
sentinel failover-timeout mymaster 180000
 
# SCRIPTS EXECUTION
#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知 相关人员。
#对于脚本的运行结果有以下规则:
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等), 将会去调用这个脚本,这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信 息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果sentinel.conf配 置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无 法正常启动成功。
#通知脚本
# shell编程
# sentinel notification-script <master-name> <script-path> sentinel
notification-script mymaster /var/redis/notify.sh
 
# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已 经发生改变的信息。
# 以下参数将会在调用脚本时传给脚本:
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port> # 目前<state>总是“failover”,
# <role>是“leader”或者“observer”中的一个。
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通 信的# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path> sentinel client-reconfig-
script mymaster /var/redis/reconfig.sh

再去看一下 redis 的配置文件和哨兵的配置文件,你会惊讶的发现,里边的配置文件已经被改过来了。

cat redis.con
...
replicaof 192.168.40.103 6379
此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝