Redis消息发布订阅
-
是什么?
-
进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
-
常用命令
命令 | 语法 | 说明 |
---|---|---|
SUBSCRIBE | SUBSCRIBE channel [channel …] | 订阅给定的一个或多个频道的信息。 |
PSUBSCRIBE | PSUBSCRIBE pattern [pattern …] | 订阅一个或多个符合给定模式的频道。 |
PUBLISH | PUBLISH channel message | PUBLISH channel message 将信息发送到指定的频道。 |
UNSUBSCRIBE | UNSUBSCRIBE [channel [channel …]] | 指退订给定的频道。 |
PUNSUBSCRIBE | PUNSUBSCRIBE [pattern [pattern …]] | 退订所有给定模式的频道。 |
PUBSUB | PUBSUB subcommand [argument [argument …]] | 查看订阅与发布系统状态。 |
- 第一个客户端:订阅一个名为"maoshu"频道
- 第二个客户端:向"maoshu"频道发送消息
- 第一个客户端:接受到"maoshu"频道发送的消息
Redis的复制(Master/Slave)
-
是什么?
-
行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,
自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 -
能干嘛?
- 读写分离:减轻同一台服务器执行sql的负担
- 容灾恢复:防止数据丢失导致系统奔溃
- 复制原理
- slave启动成功连接到master后会发送一个sync命令
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
- 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
配置
- 命令设置
命令 | 语法 | 说明 |
---|---|---|
slaveof | slaveof 目标主机ip 目标主机端口 | 临时设置链接一个主服务器,从主服务器中复制数据 |
info replication | info replication | 查看当前服务器连接信息 |
slaveof no one | slaveof no one | 断开连接主服务器 |
requirepass | requirepass | 数据较重要的节点,主从复制时使用密码验证: |
- 配置文件设置
- 在从服务器中的redis.conf文件中加入
slaveof slaveof 目标主机ip 目标主机端口
在主服务器启动完后再启从服务器,完成配置;
- 模拟一主二仆
- 主服务器(端口:6379)添加五个数据
- 从服务器(6380/6381)获取参数
- 当主服务器停止运行之后,从服务器会静止等待,直到主服务器重新连接.
- 当从服务器停止运行之后,如果没有设置配置文件,从服务器会变为主服务器,需要重新进行连接.
哨兵模式
-
当主服务器宏机之后,需要手动设置一台从服务器来作为主服务器才能够正常运作,这需要人工手动配置,很不方便,所以一般会使用哨兵模式自动进行修改.
-
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
-
模拟三个哨兵
-
复制redis目录下的sentinel.conf文件三份,修改sentinel.conf中的配置
-
配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,“目标主机地址” 代表监控的主服务器,"目标端口"代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2 -
设置 哨兵启动端口号 ,由于在同一机子上启动三个哨兵,所以需要使用不同的端口号
port 哨兵启动端口号
sentinel monitor mymaster 目标主机地址 目标端口 2
-
三个哨兵配置文件除了端口号不同之外,其他都相同
-
分别启动三个哨兵(启动顺序为:主服务器—>从服务器—>哨兵)
# 启动哨兵进程
./redis-sentinel ../sentinel-79.conf
./redis-sentinel ../sentinel-80.conf
./redis-sentinel ../sentinel-81.conf
- 当主服务器关闭之后
- 过段时间哨兵会监控到主服务器已经挂了,就会在剩下两台服务器之中挑选出一台作为主服务器
- 而其他从服务器自动将主服务器连接更换为新的主服务器