Redis10_订阅发布、主从复制、哨兵模式
Redis10_订阅发布、主从复制、哨兵模式
订阅发布
订阅发布的使用场景:
- 实时消息系统
- 实时聊天
- 订阅关注
复杂的场景中一般选择使用MQ
线程A(订阅端):
subscribe 订阅指定频道,监听推送信息:
127.0.0.1:6379> subscribe BLU
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "BLU"
3) (integer) 1
线程B(发送端):
publish 频道发布:
127.0.0.1:6379> publish BLU "hello,BBBBBBBBBBBBLU!"
(integer) 1
127.0.0.1:6379> publish BLU "hello,Redis!!!!!!!!!!"
(integer) 1
线程A自动接收消息:
1) "message" #消息
2) "BLU" #频道名称
3) "hello,BBBBBBBBBBBBLU!" #消息内容
1) "message"
2) "BLU"
3) "hello,Redis!!!!!!!!!!"
主从复制
注:从机无法进行写操作
主从复制的环境配置(只需要配置从库,不用配置主库):
info replication 命令查看主库信息:
[root@izbp10tup89om84qulgxbsz ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master #默认每台redis服务器的角色都为 master
connected_slaves:0 #没有从机
master_replid:b787676fb0bcac7f6a5e071cafdfd47d0ca50b09
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
使用命令设置从机的主机ip和端口:
slaveof 127.0.0.1 6379
注:真实的主从配置应当在配置文件中配置,这样的话就是永久的,在命令中配置的是暂时的,如果从机重启了就会变为主机
在从机的配置文件中配置主机(在REPLICATION模块下):
#配置主机的ip和端口
replicaof <masterip> <masterport>
#当master服务设置了密码保护时,slav服务连接master的密码
masterauth <master-password>
复制原理:
Slave 启动成功连接到 master 后将发送一个 sync 命令
Master 接收到命令后,将传送整个数据文件到 slave,完成一次完全同步
全量复制:slave 接收到数据库文件数据后,将其存盘并加载至内存中
增量复制:Master 继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要重新连接master,一次完全同步(全量复制)将被自动执行
注:从机也可以拥有自己的从机:
如果 Master 宕机了,从机可以通过如下命令 手动 使自己成为主机,然后其他从机可以 手动配置 更改主机ip和端口:
slaveof no ones
哨兵模式(自动选择主机的模式)
如果 Master 宕机,人工手动切换主服务器费时费力,还会造成一段时间内服务不可用。
因此不推荐手动切换,应当优先考虑 哨兵模式
哨兵模式能够后台监控服务器是否故障,当监测到master宕机时,会自动将 slave 切换为 master,然后通过 发布订阅模式 通知其他的从服务器,修改配置文件,让它们切换主机
只有一个哨兵进程对Redis进行监控可能会出现问题,因此可以使用多个哨兵进行监控,各个哨兵之间也会互相监控,形成多哨兵模式:
假设主服务器宕机,哨兵1首先监测到,系统并不会立刻进行failover过程,该现象称为 主观下线
当其他哨兵也监测到主服务器不可用,并且数量达到一定值时,哨兵之间将进行一次投票,进行failover(故障转移)操作,切换成功后就会通过发布订阅模式让各个哨兵把自己监控的从服务器实现切换主机,该现象称为 客观下线
在bluconfig目录下创建哨兵配置文件sentinel.conf,监控主机
#哨兵的运行端口
port 26379
# 哨兵的工作目录
dir /tmp
# 设置哨兵连接主从的密码(注意必须为主从设置一样的验证密码)
sentinel auth-pass mymaster 123456789
#指定多少毫秒后主节点没有应答哨兵即主观上认为 master 下线,默认为30s
sentinel down-after-milliseconds mymaster 30000
# 该配置指定在发生failover时最多可以有多少个slave同时对新的master进行同步
sentinel parallel-syncs mymaster 1
# 默认三分钟的故障转移时间
sentinel failover-timeout mymaster 180000
# 指定通知型脚本,当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本
# 这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息
# 调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述
# 如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功
sentinel notification-script mymaster /var/redis/notify.sh
#核心配置!!!!!
#sentinel monitor 被监控的名称 主机IP 端口 1
#数字1表示有1个哨兵认为 master 失联即为客观下线
sentinel monitor myredis 127.0.0.1 6379 1
使用指定配置文件启动哨兵:
redis-sentinel bluconfig/sentinel.conf
注:当宕机后的主机恢复后,将成为新主机的从机
还没有评论,来说两句吧...