评论

收藏

[NoSQL] #yyds干货盘点# redis | 十八、redis之主从复制

数据库 数据库 发布于:2021-12-25 10:37 | 阅读数:372 | 评论:0

公众号:雨中散步撒哈拉
文章同步公众号,共同学习进步
个人网站:​​ https://liudongdong.top​​​
文章来源:​​ https://liudongdong.top/archives/redisshi-ba-redis-zhi-zhu-cong-fu-zhi​​





一、主从复制概念
主从复制简单来说,是指将一台 Redis 服务器上的数据复制到其他的 Redis 服务器中。前者称为 Master 节点,后者称为 slave 节点,并且数据的复制只能由主到从,主节点一般负责写请求,而从节点一般负责读请求。默认情况下,每个 redis 都是主节点
一个主节点可以没有从节点或有多个从节点,但一个从节点只能对应一个主节点使用读写分离的主要原因是因为一个网站大部分是读操作,分离后可以很大程度上减轻服务器压力主从复制的作用主要包括:

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 ( 即写 Redis 数据时应用连接主节点,读 Redis 数据时连接从节点 ),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是 Redis 高可用的基础

二、主从复制环境搭建
本redis系列使用windows学习,主从复制使用windows版本,操作步骤同Linux

1. 查看redis集群信息
在没有配置任何集群信息的环境下,先查看redis的集群信息
127.0.0.1:6379> info replication # 查看集群信息
# Replication
role:master # 当前redis角色(默认为master)
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:6379>

2. 复制三份redis配置信息
DSC0000.png

3. 修改redis配置
三份redis配置文件全部修改,端口划分为6379、6380、6381,修改过程只演示6379

  • 修改端口
修改端口为指定的6379,剩下俩份同理​​port 6379​​
DSC0001.png

  • 修改pid
Linux环境下修改,本次在windows下不支持pid文件​​pidfile /var/run/redis.pid​​
DSC0002.png

  • 修改日志文件
​​logfile "6379.log"​​
DSC0003.png

  • 修改默认rdb文件名称
​​dbfilename dump6379.rdb​​
DSC0004.png

4. 启动服务端
# 启动79服务
redis-server.exe redis.windows-79.conf
# 启动80服务
redis-server.exe redis.windows-80.conf
# 启动81服务
redis-server.exe redis.windows-81.conf
DSC0005.png

5. 启动客户端
# 启动79客户端
redis-cli.exe -p 6379
# 启动80客户端
redis-cli.exe -p 6380
# 启动81客户端
redis-cli.exe -p 6381
DSC0006.png

三、一主俩从集群配置
DSC0007.png 1. slaveof命令
命令形式配置一主俩从,命令如下:通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。利用“SLAVEOF NO ONE 不会丢弃同步所得数据集”这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
2. role命令
返回实例在复制中担任的角色, 这个角色可以是 master 、 slave 或者 sentinel 。 除了角色之外, 命令还会返回与该角色相关的其他信息, 其中:

  • 主服务器将返回属下从服务器的 IP 地址和端口。
  • 从服务器将返回自己正在复制的主服务器的 IP 地址、端口、连接状态以及复制偏移量。
  • Sentinel 将返回自己正在监视的主服务器列表。

1. 查看主节点79
redis默认为master节点
E:\programs\redis\redisInstall>redis-cli.exe -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info replication
# Replication
role:master
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:6379>
2. 配置80和81为从节点
slaveof 127.0.0.1 6379
DSC0008.png
查看79主节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=239,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=239,lag=0
master_repl_offset:239
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:238
127.0.0.1:6379>
四、集群间的主从复制
全量备份和增量备份Slave 启动成功,连接到 Master 后,会发送一个 sync 命令Master 接到命令后,启动后台的存储进程,收集所有接收到的用于修改数据集的命令,在后台的存储经执行完毕后,Master 将传输整个数据文件到 slave,完成一次全量备份
全量备份:Master 将所有收集到的命令传给 Slave,Slave 在接收到数据库文件数据后,将其持久化并加载到内存中
增量备份:连接后 ( 完成了全量备份后 ),Master 继续将新的收集到的写命令同步到 Slave 执行只要是重新连接到 Master,就会进行一次全量备份

1. 集群间值的复制
主节点存值,从节点取值
DSC0009.png

2. 主节点宕机,集群复制变化
模拟主机宕机,从节点的变化和从节点、主节点之间的区别
DSC00010.png

3. 从节点宕机,集群复制变化
模拟80服务宕机,结果发现对集群其他没有影响
DSC00011.png

五、链路集群配置
DSC00012.png

1. 配置集群
配置集群80位79的从节点,集群81位80的从节点
# 80划分为79的从节点
slaveof 127.0.0.1 6379
# 81划分为80的从节点
slaveof 127.0.0.1 6380
80为特殊节点,隶属于79,但又管辖于81,角色上依旧是slave,所以不能写数据。
DSC00013.png

2. 集群间取值
该模型也是可以集群间数据同步
DSC00014.png


关注下面的标签,发现更多相似文章