Redis系列
Redis系列——第一章 Redis配置文件
Redis系列——第二章 Redis数据类型以及基本使用
Redis系列——第三章 Redis开启事务并实现乐观锁
Redis系列——第四章 Redis发布订阅模式
Redis系列——第五章 Redis持久化策略RDB与AOF
Redis系列——第六章 Redis主从同步
Redis系列——第七章 Redis开启哨兵模式
文章目录
- Redis系列
- [Redis系列——第一章 Redis配置文件](https://blog.csdn.net/weixin_42083036/article/details/112462218?spm=1001.2014.3001.5501)
- [Redis系列——第二章 Redis数据类型以及基本使用](https://blog.csdn.net/weixin_42083036/article/details/112479336?spm=1001.2014.3001.5501)
- [Redis系列——第三章 Redis开启事务并实现乐观锁](https://blog.csdn.net/weixin_42083036/article/details/112600432?spm=1001.2014.3001.5501)
- [Redis系列——第四章 Redis发布订阅模式](https://blog.csdn.net/weixin_42083036/article/details/112601397?spm=1001.2014.3001.5501)
- [Redis系列——第五章 Redis持久化策略RDB与AOF](https://blog.csdn.net/weixin_42083036/article/details/112976935?spm=1001.2014.3001.5501)
- [Redis系列——第六章 Redis主从同步](https://blog.csdn.net/weixin_42083036/article/details/113363406?spm=1001.2014.3001.5501)
- [Redis系列——第七章 Redis开启哨兵模式](https://blog.csdn.net/weixin_42083036/article/details/113564295)
- 一、核心概念
- 二、数据同步
- 三、主从同步
- 四、主机和从机差异性
一、核心概念
- 主机:不需要特殊定义,我们一般开启一个redis服务就是默认为主机,可以说没有特殊的指定所有的redis都是主机
如下图: 我们开启一个客户端 查看主从情况
- 从机:所有的客户端都默认是主机,所有的主机都可以成为从机,从机可以认为是主机的小弟,所有的主从行为都可以被当成认老大
- 主从同步:主机和从机从上面来说,是分开的客户端,所以这样会产生一个问题——数据不一致!,所以为了保证A——>主机/从机A ,和B——>主机/从机B 获取的数据一致 所以我们需要将主机和所有的从机数据进行统一——主从同步
二、数据同步
- 全量复制:复制保存的是数据,将当前内存的数据全部快照到磁盘文件中,然后再将快照文件的内容全部传送到从节点,然后从节点开启一次全量同步,注意此时主节点还是在进行数据复制操作,也就是同步和快照是并行的
- 增量复制:Redis 同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本地的内存 buffer 中,然后异步将 buffer中的指令同步到从节点,从节点一边执行同步的指令流来达到和主节点一样的状态,一边向主节点反馈自己同步到哪里了 (偏移量)因为内存的 buffer 是有限的,所以 Redis 主库不能将所有的指令都记录在内存 buffer 中,Redis 的复制内存 buffer 是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容。
三、主从同步
默认情况下,每一台redis服务器都是主节点 主节点可以多个从节点,一个从节点只能有一个主节点
1、模式
一主一从
一主多从
2、认老大
-
命令模式 slaveof 主机IP 端口
打开一个客户端使用 slaveof 主机IP 端口 认老大,redis就认为此客户端被设置为从机 -
配置模式
配置步骤
(0)、找到配置文件中的 REPLICATION模块
(1)、复制.conf文件 有多少从机就多少
(2)、填写主机端口号
(3)、修改pid文件 建议使用从机端口命名 pidfile /var/run/redis_6380.pid
(4)、修改日志文件名 logfile “xxx.log”
(5)、修改持久化文件名 dbfilename xxx.rdb
(6)、masterauth 如果主机有密码需要配置
使用命令 配置文件启动redis
redis-server kconfig/redis.conf01.conf
3、配置启动和命令启动的区别
- 命令启动是有时效性的,只是暂时性的
四、主机和从机差异性
redis主机/从机 | 是否可读 | 是否可写 |
---|---|---|
主 | 可 | 可 |
从 | 可 | 默认不可以 |
# You can configure a slave instance to accept writes or not. Writing against
# a slave instance may be useful to store some ephemeral data (because data
# written on a slave will be easily deleted after resync with the master) but
# may also cause problems if clients are writing to it because of a
# misconfiguration.
#
# Since Redis 2.6 by default slaves are read-only.
#
# Note: read only slaves are not designed to be exposed to untrusted clients
# on the internet. It's just a protection layer against misuse of the instance.
# Still a read only slave exports by default all the administrative commands
# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
# security of read only slaves using 'rename-command' to shadow all the
# administrative / dangerous commands.
slave-read-only yes #默认从机只读
- 主机可以写,从机只能读
- 主机宕机,从机无法写
1、读写分离
主从架构 默认主机是可读可写 从机只读
2、主从复制
原理图
总共分为6步
- 执行slaveof后从节点保存主节点的地址信息便返回,这时候复制流程还没开始。
- 从节点内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接,从节点会建立一个socket套接字。
- 发送ping命令,检测主从之间网络套接字是否可用,检测主节点是否可用接受处理命令。如果发送 ping 命令后,从节点没有收到主节点的
pong 回复或者超时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连。 - 如果主节点配置了requirepass参数,则需要密码认证,从节点必须配置masterauth参数保证与主节点相同的密码才能通过验证。
- 主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持有的数据全部发送给从节点,这部分操作是耗时最长的步骤。
- 当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。
缓冲区大小调节:
-
由于缓冲区长度固定且有限,因此可以备份的写命令也有限,当主从节点offset的差距过大超过缓冲区长度时,将无法执行部分复制,只能执行全量复制。
-
反过来说,为了提高网络中断时部分复制执行的概率,可以根据需要增大复制积压缓冲区的大小(通过配置repl-backlog-size)来设置;
例如 如果网络中断的平均时间是 60s,而主节点平均每秒产生的写命令(特定协议格式)所占的字节数为100KB,则复制积压缓冲区的平均需求为6MB,保险起见, 可以设置为12MB,来保证绝大多数断线情况都可以使用部分复制。