Redis 学习笔记(十二)Redis 复制功能详解

来源:互联网 发布:windows 扩展屏幕 ipad 编辑:程序博客网 时间:2024/06/06 02:00

Redis 复制(Replication)

1. 复制介绍

分布式数据库为了获取更大的存储容量和更高的并发访问量,会将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上。Redis为了解决单点数据库问题,会把数据复制多个副本部署到其他节点上,通过复制,实现Redis高可用性,实现对数据的冗余备份,保证数据和服务的高度可靠性

2. 复制的建立

建立复制的配置方式有三种。

  1. redis.conf文件中配置slaveof <masterip> <masterport>选项,然后指定该配置文件启动Redis生效。
  2. redis-server启动命令后加上--slaveof <masterip> <masterport>启动生效。
  3. 直接使用 slaveof <masterip> <masterport>命令在从节点执行生效。

我们以最简单的一主一从模型,使用第2种方式建立复制。

  • 首先先开启主节点master实例,端口8888
redis-server --port 8888

开启一个client,连接上主节点服务器

./redis-cli -p 8888127.0.0.1:8888> KEYS *              //新开启的Redis服务器,没有键值对(empty list or set)
  • 接着开启从节点slave实例,端口9999,并指定指定主节点。
redis-server --port 9999 --slaveof 127.0.0.1 8888//命令行开启Redis服务器后,会打印如下日志信息,已经开启复制了Connecting to MASTER 127.0.0.1:8888MASTER <-> SLAVE sync startedNon blocking connect for SYNC fired the event.Master replied to PING, replication can continue...Partial resynchronization not possible (no cached master)Full resync from master: 1aff09ecd70ca640e33083f8422018b29883b9d1:1MASTER <-> SLAVE sync: receiving 76 bytes from masterMASTER <-> SLAVE sync: Flushing old dataMASTER <-> SLAVE sync: Loading DB in memoryMASTER <-> SLAVE sync: Finished with success  

开启一个client,连接上从节点服务器。

➜  ~ redis-cli -p 9999127.0.0.1:9999> INFO replication# Replicationrole:slave                      //节点角色master_host:127.0.0.1           //主节点的IPmaster_port:8888                //主节点的端口master_link_status:up           //与主节点的连接状态master_last_io_seconds_ago:0    //主节点最后与从节点的通信时间间隔,单位秒master_sync_in_progress:0       //从节点是否正在全量同步主节点的RDB文件slave_repl_offset:407           //复制偏移量slave_priority:100              //从节点的优先级slave_read_only:1               //从节点是否只读connected_slaves:0              //连接从节点的个数master_repl_offset:0            //当前从节点作为其他从节点的主节点时的复制偏移量//以下四种信息为通用的配置repl_backlog_active:0           //复制缓冲区的状态repl_backlog_size:1048576       //复制缓冲区的大小repl_backlog_first_byte_offset:0//复制缓冲区起始偏移量,标识当前缓冲区可用的范围repl_backlog_histlen:0          //标识复制缓冲区已存在的有效数据长度127.0.0.1:9999> KEYS *          //由于主节点的键空间为空,所以从节点的键空间也为空。(empty list or set)

此时,我们查看主节点INFO replication 信息

//通过INFO replication命令可以查看当前的复制信息127.0.0.1:6380> INFO replication# Replicationrole:master                                                     //节点角色connected_slaves:1                                              //连接从节点的个数slave0:ip=127.0.0.1,port=9999,state=online,offset=631,lag=0     //连接从节点的信息master_repl_offset:631                                          //主节点的偏移量//以下四种信息为通用的配置  repl_backlog_active:1                                           //复制缓冲区的状态repl_backlog_size:1048576                                       //复制缓冲区的大小repl_backlog_first_byte_offset:2                                //复制缓冲区起始偏移量,标识当前缓冲区可用的范围repl_backlog_histlen:630                                        //由于主节点的键空间为空,所以从节点的键空间也为空。

到此,一主一从模型的复制就建立成功了。我们可以在主节点建立一些新的键,然后查看从节点的键空间的变化

//根据端口区别主从节点127.0.0.1:8888> HSET hash_key hello world(integer) 1127.0.0.1:9999> KEYS *  //从节点的键空间已经更新1) "hash_key"

我们在查看从节点的INFO replication信息时,可以知道slave_read_only:1,从节点默认只能读不能写,因此执行写命令会得到如下回复:

127.0.0.1:9999> SET key value(error) READONLY You can't write against a read only slave.

只读模式由 redis.conf 文件中的 slave-read-only 选项控制,也可以通过 CONFIG SET命令来开启或关闭这个模式。

我们在查看从节点的INFO replication信息时,还发现有connected_slaves:0选项 ,说明Redis的复制拓扑结构支持单层或多层复制关系从节点还可以作为其他从节点的主节点进行复制

根据拓扑关系可以分为三种:

  • 一主一从

这里写图片描述

  • 一主多从

这里写图片描述

  • 树型主从结构

这里写图片描述

3. 复制的断开

复制断开也是在从节点执行命令slaveof on one来断开于主节点的复制关系。例如,将刚才端口为9999的从节点断开复制:

127.0.0.1:9999> SLAVEOF no oneOK//从节点服务器会打印如下日志Connection with master lost.Caching the disconnected master state.Discarding previously cached master state.MASTER MODE enabled (user request from 'id=3 addr=127.0.0.1:40218 fd=7 name= age=2218 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=slaveof')//主节点服务器也会打印断开的信息Connection with slave 127.0.0.1:9999 lost.  

从节点服务器断开后,从节点会晋升为主节点。从日志中可以看到MASTER MODE enabled,也可以从INFO命令查看到

127.0.0.1:9999> INFO replication# Replicationrole:master     //角色发生变化......

4. min-slaves配置选项

Redis的min-slaves-to-writemin-slaves-max-lag两个选项可以防止主节点在不安全的情况下执行写命令。

min-slaves-to-write 3   //从节点数量少于3个,主节点拒绝执行写命令min-slaves-max-lag 10   //3个从节点的延迟(lag)值,大于或等于10,主节点拒绝执行写命令
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耐克气垫鞋扎了怎么办 骑自行车右大腿根痛怎么办 骑车骑得膝盖疼怎么办 骑了自行车腿疼怎么办 群面没有被问题怎么办 群面没有被提问怎么办 校招解约学校不盖章怎么办 科目三老是跑偏怎么办 面试官说你不好怎么办 面试紧张心态调整不过来怎么办 面试官问缺乏经验怎么办 办好入职手续后就想辞职怎么办 新店长入职应该怎么办 刚入职怀孕了辞职店长不同意怎么办 派遣证丢了怎么办补办 出国留学回来怎么办派遣证 报到证坏了一边怎么办 江苏报到证丢了怎么办 河南报到证丢了怎么办 报到证丢失10年怎么办 退休时无派遣证怎么办 档案里没有派遣证怎么办 档案中派遣证丢失怎么办 中专毕业后想读大学该怎么办 软考准考证丢了怎么办 面试薪资要低了怎么办 应聘等通知没有电话回复怎么办 学生信息表里的籍贯不对怎么办? 小学生信息表里的籍贯不对怎么办? 钉钉下班没打卡怎么办 如果在厂里饭卡丢了怎么办 工作上做错了事想辞职怎么办 结婚辞职怀孕感觉做错了怎么办 换新手机了钉钉怎么办 公众号申请链接无效怎么办 指纹打卡机时间调错已打卡怎么办 智慧云平台先锋讲座打不开怎么办 下雨穿套裙工装好冷怎么办 国家债务违约不要国际融资怎么办 欠钱的确还不起怎么办 生完孩孑后手发账握不死手怎么办