redis-主从复制原理及优化

一 什么是主从复制

机器故障;容量瓶颈;QPS瓶颈

一主一从,一主多从

做读写分离

做数据副本

扩展数据性能

一个maskter可以有多个slave

一个slave只能有一个master

数据流向是单向的,从master到slave

1.1 原理

1. 副本库通过slaveof 127.0.0.1 6379命令,连接主库,并发送SYNC给主库 
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的

1.2 主库是否要开启持久化

如果不开,有可能主库重启操作,造成所有主从数据丢失!

1.3 辅助配置(主从数据一致性配置)

min-slaves-to-write 1
min-slaves-max-lag 3
#那么在从服务器的数量少于1个,或者三个从服务器的延迟(lag)值都大于或等于3秒时,主服务器将拒绝执行写命令

二 复制的 配置

2 slave 命令

6380是从,6379是主

在6380(从库)上执行

slaveof 127.0.0.1 6379 #异步
slaveof no one #取消复制,不会把之前的数据清除

示例:

主配置文件/opt/jc/redis/conf/redis_6379.conf

daemonize yes
pidfile /var/run/redis.pid
port 6379
dir "/opt/jc/redis/data"
logfile "6379.log"

从配置文件/opt/jc/redis/conf/redis_6380.conf

daemonize yes
pidfile /var/run/redis_6380.pid
port 6380
dir "/opt/jc/redis/data"
logfile "6380.log"

启动主从

# cd /opt/jc/redis
# ./src/redis-server conf/redis_6379.conf
# ./src/redis-server conf/redis_6380.conf
[root@localhost src]# redis-cli 
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> set name jc
OK
127.0.0.1:6379> get name
"jc"
127.0.0.1:6379> set age 24
OK
127.0.0.1:6379>

连接从库

[root@localhost src]# redis-cli -p 6380
127.0.0.1:6380> KEYS *
(empty list or set)
127.0.0.1:6380> get name
(nil)
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> get name
"jc"
127.0.0.1:6380> get age
"24"
127.0.0.1:6380> 

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注