redis主从复制原理及实操

2022-10-04 09:42:32 浏览数 (1)

redis官方复制中文文档 redis使用默认的异步复制,其特点是低延迟和高性能

实操一下

在一台机器上起3个实例模拟主从复制

代码语言:javascript复制
mkdir test
cd test
延用之前的6379 6381,使用utils下的install_server起个6381
./install_server.sh
service redis_6381 stop
cd test
cp /etc/redis/* ./
vi 6379.conf # 关闭aof 让其只落rdb文件,其他配置和之前实验一样,在前台阻塞运行,日志也输出到控制台不出输出到log文件中,6380 6381两个配置文件也照着6379修改。
cd /var/lib/redis #如果有文件都删掉 6379 6380 6381文件夹保留
redis-server ~/test/6379.conf
redis-server ~/test/6380.conf
redis-server ~/test/6381.conf
#起三个服务分别在3个窗口前台运行,3个实例准备好了,redis-cli 36379 6380 6381分别连上,现在思路是让6379做主,另外两个做从。
#在6380客户端执行 
REPLICAOF 127.0.0.1 6379

6379上

6380上

代码语言:javascript复制
#在6379上设置k1
set k1 aaa
#在6380上取
keys * #可以看到 k1 aaa
#在6380上
set k2 aaaa #报错 READONLY You cant't write against a read only replica,当然这个不能写变成能写也可以在配置文件中去设置啦
#在6382上(这时还没有追随6379),设置一个k3 ccc,只有6381有k3,紧接着做一个追随
REPLICAOF 127.0.0.1 6379
代码语言:javascript复制
#6381上再来执行
keys *
#只有k1这个key了,6381上本身的k3已不复存在
#在test/6379 test/6380 test/6381目录下
ll
#可以看见有dump.rdb文件

这个主从复制存在挂的情况,主可能会挂,从也可能会挂

代码语言:javascript复制
#现在6381上直接 ctrl c,退出redis运行,那么6381这个从就挂了
#在主节点6379上查看
代码语言:javascript复制
#现在在6379上新增一个k4,6380也可以get k4,这时候在重新启动6381 
redis-server ./6381.conf --replicaof 127.0.0.1 6379
#这时在查看key,可以看到有刚刚6381掉线后增加的k4
#还可以追加 aof
redis-server ./6381.conf --replicaof 127.0.0.1 6379 --appendonly yes
#可以看到6379落了rdb,6381下有aof文件

主挂了,主一定知道谁连着它的。直接将主挂掉,2个从都在报主挂了,这时候我们手动让6380为主

代码语言:javascript复制
#在6380上操作
REPLICAOF no one
代码语言:javascript复制
#在6381上操作,手动追随新主
REPLICAOF 127.0.0.1 6380

配置文件几个配置项

代码语言:javascript复制
replica-serve-stale-data yes #是不是要同步完才支持查询数据
replica-read-only yes #备机是不是只支持查询还是查询写入都可以
repl-diskless-sync no #主给从的数据是走磁盘还是网络
repl-backlog-size 1mb #增量复制
min-replicas-to-write 3 #最小写成功,向强一致性靠拢
min-replicas-max-lag 10

0 人点赞