Redis的主从架构搭建

一个主节点,一到多个从节点,主节点执行写操作,从节点进行数据备份。也可以让从节点提供写读操作,减轻主节点的压力。

Redis主从架构搭建

1. 从src/redis.conf重新复制一份配置文件

cp redis.conf redis.conf_1

2. 修改新建的文件redis.conf_1,配置如下信息

port 6380                                  #修改端口号,代表本机另外一台机器
pidfile /var/run/redis_6380.pid            #把pid写入到该文件中
logfile "6380.log"                         #log的地址和文件
dir /home/allen/packages/redis-5.0.3/6380  #知道数据存放的目录

3. 修改新建的文件redis.conf_1,配置主从复制信息

replicaof 127.0.0.1 6380  #本机从6371那台机器上获取数据 5.0之后改成slaveof
replica-read-only yes     #配置从节点只读

4. 启动从节点,并查看

[allen@localhost redis-5.0.3]$ src/redis-server conf/redis.conf_1
[allen@localhost redis-5.0.3]$ ps -ef|grep redis
allen     27587      1  0 04:25 ?        00:00:09 src/redis-server 127.0.0.1:6379
allen     89254  29143  0 05:31 pts/5    00:00:00 src/redis-server 127.0.0.1:6380

5. 链接从节点-src/redis-cli -p 6380,并从从节点获取主节点设置的值

#从主节点设置值节点:
127.0.0.1:6379> set Allen "you are the best"
OK
127.0.0.1:6379> 

#从从节点获取值:
[allen@localhost redis-5.0.3]$ src/redis-cli -p 6380
127.0.0.1:6380> get Allen
"you are the best"
127.0.0.1:6380> 

主从架构的复制原理

这些逻辑都是redis内部server端的用C语言实现的。

1. 从节点与主节点建立socket长连接,并向主节点发一条psync命令

2.1  执行bgsave生成最新的rdb快照文件。(服务器端自己做的,和你本地是否开启rdb文件无关)

2.2  把2.1执行期间的的新增数据放到缓存中Repl buffer。

3. 将rdb文件发送给slave节点。

4. 从节点清空本机中的rdb文件,并加载主节点的新rdb文件。

5.将2.2中的命令再发送给从节点。

6. replay5中收到的命令。

7. 主节点通过socket长连接持续发送同步命令。

从节点slave挂了后重新上线-断点续传

1. 发现断开链接

2. master会把最近数据,最近执行的命令缓存再一个repl backlog buffer中。如下配置文件会可以配置其大小,默认1m。

repl-backlog-size 1m

3. 重新链接主节点

4. 从节点将上次断开时的offset偏移量勇敢psync命令发送给主节点

5.  通过偏移量再2中的缓存去里面去找偏移量,将偏移量后面的命令发送给重节点。如果从节点挂的时间比较长,丢失数据比较多大于1m则直接全量复制。

 

一个主节点下面又太多的从节点,当多个从节点同时都从主节点复制数据时,可能导致主节点压力太大,出现主从复制风暴。所以一般采用下面的架构。

主从架构,如果主节点挂了,需要运维人员手动处理,重写配置主节点。

猜你喜欢

转载自blog.csdn.net/pengweismile/article/details/112297814