redis 主从复制原理

http://redis.cn/topics/replication.html
Redis使用默认的异步复制,其特点是低延迟和高性能

.conf放到测试目录下
[root@localhost test]# ll
总用量 276
-rw-r–r--. 1 root root 92293 3月 15 16:01 6379.conf
-rw-r–r--. 1 root root 92298 3月 15 16:03 6380.conf
-rw-r–r--. 1 root root 92298 3月 15 16:04 6381.conf
[root@localhost test]# pwd
/root/test

修改.conf文件:
daemonize no //不让后台运行
#logfile /var/log/redis_6379.log //日志不输出到控制台
appendonly no

删除原有的持久化目录:
[root@localhost test]# cd /var/lib/redis
[root@localhost redis]# ll
总用量 0
drwxr-xr-x. 2 root root 44 3月 8 07:53 6379
drwxr-xr-x. 2 root root 22 3月 8 00:59 6380
drwxr-xr-x. 2 root root 22 3月 15 15:24 6381
[root@localhost redis]# rm -fr ./*
[root@localhost redis]# ll
总用量 0
创建目录:
[root@localhost redis]# mkdir 6379
[root@localhost redis]# mkdir 6380
[root@localhost redis]# mkdir 6381
[root@localhost redis]# ll
总用量 0
drwxr-xr-x. 2 root root 6 3月 15 16:21 6379
drwxr-xr-x. 2 root root 6 3月 15 16:21 6380
drwxr-xr-x. 2 root root 6 3月 15 16:21 6381

启动实例:

redis-server ./6381.conf
redis-cli -p 6381
redis-server ./6382.conf
redis-cli -p 6382
redis-server ./6383.conf
redis-cli -p 6383

cd /var/lib/redis/6381 //目录下为空
cd /var/lib/redis/6382 //目录下为空
cd /var/lib/redis/6383 //目录下为空

至此 有三台实例 三台客户端
6381希望是主,6382 6383希望是从

127.0.0.1:6382> REPLICAOF localhost 6381
OK
6381控制台出现如下内容:
在这里插入图片描述
6382控制台内容如下:
在这里插入图片描述
主写入数据 ,从可以看到,但是从机默认禁止写入。

6383写入数据:

[root@localhost ~]# redis-cli -p 6383
127.0.0.1:6383> keys *
(empty array)
127.0.0.1:6383> set k2 ccc
OK
6381没有此数据,
127.0.0.1:6383> REPLICAOF 127.0.0.1 6381
OK
127.0.0.1:6383> keys * //发现刚才设置的k2消失了

  1. “k1”

到现在 发现rdb文件有了,是master传过来的。
[root@localhost 6382]# pwd
/var/lib/redis/6382
[root@localhost 6382]# ll
总用量 4
-rw-r–r--. 1 root root 175 3月 15 18:38 dump.rdb

================================================
master活着 从挂机

6382控制台按crtl+c 挂调
发现6381控制台输出如下内容:
8307:M 15 Mar 2021 18:52:39.848 # Connection with replica [::1]:6382 lost.

master执行:
127.0.0.1:6381> set k2 bbb
OK
127.0.0.1:6381> keys *

  1. “k1”
  2. “k2”

运维修复好后,重启6382

redis-server ./6382.conf --replicaof 127.0.0.1 6381 //控制台没有落入磁盘的内容
此时 同步策略有两种,一种是将6381数据全部同步过来,一种是只同步增量数据,
6382可以看到6381设置的k2
即从挂调后,主增量的数据 从在重启追随后是可以看到的。
===============================
6382按照crtl+c挂调,按照如下方式启动
[root@localhost test]# redis-server ./6382.conf --replicaof 127.0.0.1 6381 --appendonly yes
6381控制台出现如下内容:落rdb
在这里插入图片描述
只要按照如上方式启动 ,6382会重刷数据。因为混合模式AOF不会记录追随的ID号。
只要开启AOF 就不会用EDB,
master给slave rdb文件,slave若开启aof,则slave将rdb写入aof文件。
=======================

master挂:
6382变为主:
127.0.0.1:6382> replicaof no one
OK
6382控制台输出如下内容:
在这里插入图片描述

6383追随6382
127.0.0.1:6383> replicaof 127.0.0.1 6382
OK

======================================

查看配置文件 各个配置项
[root@localhost test]# vi 6381.conf
[root@localhost test]# pwd
/root/test
1.replication
在这里插入图片描述
replica-serve-stale-data yes
master给slave数据过程中,slave原有的数据 是否对外暴露,
yes 代表老的数据可以查,no代表 老数据不可以查

replica-read-only yes //slave只开启查询 no是开启写入
repl-diskless-sync no //yes是直接使用网络 no是走磁盘
在这里插入图片描述
repl-backlog-size 1mb //增量复制 1mb是给出的队列大小
slave 的redis宕机后 又从新启动,需要同步master的数据,一种方式是通过rdb 一种是slave给出offset 直接从master的队列中取数据。要根据业务设置合理的大小。
在这里插入图片描述
#min-replicas-to-write 3 //最小给几个写成功
#min-replicas-max-lag 10

===========================
上述需要人工维护主从故障,因此需要哨兵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值