目录标题
- 一、Redis订阅发布
- 二、Redis主从复制
- 1、主从复制是什么?
- 2、一主二从原理
- 3、一主二从搭建
- (1)一台服务器模拟三台主机:
- (2)查询主从信息:info replication
- (3)设置主从关系:
- (4)在主机上6379上进行写操作
- (5)主写从读、读写分离:在6380和6381上执行写操作set k3 v3
- (6)主机宕机:6379执行指令shutdown,并查看6380和6381的redis信息
- (7)主机宕机后恢复:重启6379,并且执行写命令set k4 v4;6380和6381上分别执行get k4
- (8)从机宕机:6380执行指令shutdown,并查看6379和6381的redis信息
- (9)从机宕机后恢复:重启6380,并查看6380、6379和6381的redis信息
- (10)从机恢复连主机前,主机写操作:6379执行写命令set k5 v5,6380和6381分别执行命令get k5
- (11)从机恢复连接主机,6380执行命令:slaveof 127.0.0.1 6379,并且执行命令:get k5
- 4、薪火相传的搭建
- 5、谋朝篡位的搭建
- 6、主从复制的原理
- 三、哨兵模式
一、Redis订阅发布
1、什么是发布和订阅?
- Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
- Redis 客户端可以订阅任意数量的频道。
2、发布订阅示意图
(1)客户端可以订阅频道如下图:
(2)当给这个频道发布消息后,消息就会发送给订阅的客户端
3、发布订阅的常用 命令
(1)subscribe
语法:subscribe channel [channel…]
功能:订阅一个或多个频道的信息
返回值:订阅的消息
(2)publish
语法:publish chanel message
功能:将信息发送到指定的频道。
返回值:数字。接收到消息订阅者的数量。
(3)psubscribe
语法:psubscribe pattern [pattern]
功能:订阅一个或多个符合给定模式的频道。模式以 * 作为通配符,例如:news.* 匹配所有以 news. 开头的频道。
返回值:订阅的信息。
示例1:
订阅端:
127.0.0.1:6379> subscribe hczstudy #订阅hczstudy
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "hczstudy"
3) (integer) 1
1) "message"
2) "hczstudy"
3) "hello,hcz"
1) "message"
2) "hczstudy" #返回订阅信息
3) "hello,hcz2" #返回订阅信息
发送端:
127.0.0.1:6379> PUBLISH hczstudy "hello,hcz" #发送信息到订阅的频道
(integer) 1
127.0.0.1:6379> PUBLISH hczstudy "hello,hcz2" #发送信息到订阅的频道
(integer) 1
127.0.0.1:6379>
二、Redis主从复制
1、主从复制是什么?
- 主机数据更新后根据配置和策略,自动同步到从机的 master/slave 机制,Master以写为主,Slave以读为主。
2、一主二从原理
1、配从(库)不配主(库)
2、配从(库): slaveof 主库IP 主库端口
3、主写从读、读写分离
4、从连前后同
5、主断从待命、从断重新连
3、一主二从搭建
(1)一台服务器模拟三台主机:
第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf
第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名如:port 6379 pidfile /var/run/redis_6379.pid logfile "6379.log" dbfilename dump6379.rdb
第三步:分别打开三个窗口模拟三台服务器,开启redis服务。
(2)查询主从信息:info replication
以上3个的角色都是主机(master)
(3)设置主从关系:
- 在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379
(4)在主机上6379上进行写操作
注意:
如果要永久设置该主从关系,就需要在配置文件上修改即可
(5)主写从读、读写分离:在6380和6381上执行写操作set k3 v3
(6)主机宕机:6379执行指令shutdown,并查看6380和6381的redis信息
(7)主机宕机后恢复:重启6379,并且执行写命令set k4 v4;6380和6381上分别执行get k4
(8)从机宕机:6380执行指令shutdown,并查看6379和6381的redis信息
(9)从机宕机后恢复:重启6380,并查看6380、6379和6381的redis信息
注意:从机跟master断开联系,必须重新连接,除非写进配置文件
(10)从机恢复连主机前,主机写操作:6379执行写命令set k5 v5,6380和6381分别执行命令get k5
(11)从机恢复连接主机,6380执行命令:slaveof 127.0.0.1 6379,并且执行命令:get k5
4、薪火相传的搭建
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。
- 6379执行命令saveof 127.0.0.1 6381,并在6379和6381执行info replication
一台主机配多台从机,一台从机再配多台从机,从而实现了庞大的集群架构。同时也减轻了一台主机的压力,缺点是增加了服务器间的延迟。
5、谋朝篡位的搭建
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
第一步:主机宕机,6379执行命令:shutdown
第二步:6380断开主从关系,执行命令:SLAVEOF no one
第三步:重新搭建主从,6381执行命令:info replication,SLAVEOF 127.0.0.1 6380
第四步:之前主机恢复,重启6379的Redis服务,并执行命令:info replication
在6379主机宕机后,6380从机断开主从关系,6381开始还在原地待命;后来6380从机上位,6381投靠6380,6379主机即使回来但它已是孤寡老人,空头司令。
6、主从复制的原理
(1)全量复制
- Slave启动成功连接到master后会发送一个sync命令
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
- slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
- 只要是重新连接master,一次完全同步(全量复制) 将被自动执行
(2)增量复制
- Master将新的所有收集到的修改命令依次传给slave,完成同步。
三、哨兵模式
1、哨兵模式的原理
2、哨兵模式的搭建
(1)创建sentinel.conf文件
- 编辑里边的内容:sentinel monitor myredis 127.0.0.1 6379 1,表示:指定监控主机的ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。
(2)新开窗口,启动哨兵
- redis-sentinel hczconfig/sentinel.conf
(3)主机宕机:从机选举中产生新的主机
- 哪个从机会被选举为主机呢?根据优先级别:slave-priority
- 原主机重启后会变为从机
(4)等待从机投票,在sentinel窗口中查看打印信息
(5)查看6380和6381的redis信息
(6)原主机恢复,启动6379
3、故障恢复
4、小结
(1)操作步骤
- 查看主从复制关系命令:info replication
- 设置主从关系命令:slaveof 主机ip 主机port
- 开启哨兵模式命令:./redis-sentinel sentinel.conf
- 主从复制原则:开始是全量复制,之后是增量复制
- 哨兵模式三大任务:监控,提醒,自动故障迁移
(2)优点
- 哨兵集群,基于主从复制模式,所有的主从复制优点,其都有
- 主从可以切换,故障可以转移
- 哨兵模式就是主从复制模式的升级,从手动到自动,更加健壮
(3)缺点
Redis的主从复制最大的缺点就是延迟,主机负责写,从机负责备份,这个过程有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,从机器数量的增加也会使这个问题更加严重。