Redis 学习笔记(十二)Redis 复制功能详解
来源:互联网 发布:windows 扩展屏幕 ipad 编辑:程序博客网 时间:2024/06/06 02:00
Redis 复制(Replication)
1. 复制介绍
分布式数据库为了获取更大的存储容量和更高的并发访问量,会将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上。Redis
为了解决单点数据库问题,会把数据复制多个副本部署到其他节点上,通过复制,实现Redis
的高可用性,实现对数据的冗余备份,保证数据和服务的高度可靠性。
2. 复制的建立
建立复制的配置方式有三种。
- 在
redis.conf
文件中配置slaveof <masterip> <masterport>
选项,然后指定该配置文件启动Redis
生效。 - 在
redis-server
启动命令后加上--slaveof <masterip> <masterport>
启动生效。 - 直接使用
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-write
和min-slaves-max-lag
两个选项可以防止主节点在不安全的情况下执行写命令。
min-slaves-to-write 3 //从节点数量少于3个,主节点拒绝执行写命令min-slaves-max-lag 10 //3个从节点的延迟(lag)值,大于或等于10,主节点拒绝执行写命令
- Redis 学习笔记(十二)Redis 复制功能详解
- Redis 学习笔记(十二)Redis 复制功能详解
- Redis学习笔记之十二:Redis复制(数据同步)
- Redis学习笔记(十二)Redis实战之Redis + Jedis
- Redis学习笔记十二、管线
- redis学习系列(十一)--redis-复制功能
- redis学习系列(十一)--redis-复制功能实践
- Redis学习笔记10--Redis主从复制
- Redis学习笔记10--Redis主从复制
- Redis学习笔记五:redis主从复制
- Redis学习笔记10--Redis主从复制
- Redis学习笔记五:redis主从复制
- redis学习笔记(2)主从复制
- Redis研究(十二)—主从复制
- redis 学习笔记三(队列功能)
- redis学习笔记三(队列功能)
- Redis学习笔记(6)-redis.conf配置文件详解
- Redis学习笔记(九)redis 配置文件详解
- TortoiseSVN 管理码云开源项目
- OkHttp自定义重试次数
- hdu 2222 AC自动机 first
- 使用diskpart恢复使用win32 disk imager处理过的U盘
- 利用网上的Caesar算法写了一个全局唯一id生成类
- Redis 学习笔记(十二)Redis 复制功能详解
- 理解阻塞非阻塞与同步异步
- Install ProcessMaker 3.1 or 3.2 in CentOS/RHEL 7
- Python爬虫框架之Scrapy详解
- 什么是java?
- Java IO底层原理
- linux
- Vivado Logic Analyzer中VIO核的使用
- 【python学习笔记】12:用matplotlib绘制3D函数图像