redis 主从同步原理
在主从数据同步过程中,
master 只在第一次同步时创建了 RDB 文件, 用此做基础进行同步.
之后的同步, 都是通过增量传输命令的方式 (AOF) 进行同步.
环境描述:
master:192.168.2.100 不开启 RDB 和 AOF
slave:192.168.2.200 开启 RDB 和 AOF
配置信息:
- master:
- # vim etc/redis.conf
- #save 600 5 // 禁用 RDB
- appendonly no // 禁用 AOF
- requirepass 123456 // 指定验证密码
- slave:
- # vim etc/redis.conf
- save 600 5 // 禁用 RDB
- appendonly yes // 禁用 AOF
- appendfilename "appendonly.aof" // 指定 AOF 文件
- appendfsync everysec // 每秒强制写入磁盘一次
- no-appendfsync-on-rewrite no // 在日志重写时, 不进行命令追加操作
- auto-aof-rewrite-percentage 100 // 当前 AOF 超过上一次 AOF 大小 100% 时重写
- auto-aof-rewrite-min-size 64mb // 日志重写最小值
- slaveof 192.168.2.100 6379 // 指定主库 IP 和端口
- masterauth 123456 // 指定主库登录密码
启动 redis:
- master:# redis-server etc/redis.conf
- slave:# redis-server etc/redis.conf
观察同步过程:
- master:
- # redis-cli -a 123456
- 127.0.0.1:6379> info replication // 查看主从关系是否正确
- 127.0.0.1:6379> keys * // 此时, master 安装目录下是没有 RDB 文件的
- (empty list or set)
- 127.0.0.1:6379> set name zhagnsan // 创建 key
- OK
- # ll /usr/local/redis-3.0.6-6379 // 目录下生成一个 RDB 文件, 用作和 slave 同步的基础
-rw-r--r-- 1 root root 35 5 月 20 21:59 dump_6379.rdb
- slave:
- # redis-cli
- 127.0.0.1:6379> info replication // 查看主从关系是否正确
- 127.0.0.1:6379> keys * // 数据已同步
- 1) "name"
- 127.0.0.1:6379> get name
- "zhagnsan"
- # ll /usr/local/redis-3.0.6-6379 // 目录下生成 RDB 文件和 AOF 文件
-rw-r--r-- 1 root root 60 5 月 20 21:59 appendonly.aof
-rw-r--r-- 1 root root 18 5 月 20 21:58 dump.rdb
- master:
- # redis-cli -a 123456
- 127.0.0.1:6379> set age 26 // 新增 2 个 key
- OK
- 127.0.0.1:6379> set home beijing
- OK
- # ll /usr/local/redis-3.0.6-6379 //RDB 文件大小没变化
-rw-r--r-- 1 root root 35 5 月 20 21:59 dump_6379.rdb
- slave:
- # redis-cli
- 127.0.0.1:6379> keys * // 数据已同步
- 1) "age"
- 2) "name"
- 3) "home"
- # ll /usr/local/redis-3.0.6-6379 // 发现: RDB 文件大小不变, 变化的只是 AOF
-rw-r--r-- 1 root root 126 5 月 20 22:00 appendonly.aof
-rw-r--r-- 1 root root 18 5 月 20 21:58 dump.rdb
总结: 在数据同步过程中, master 只在第一次同步时创建了 RDB 文件,
之后的同步, 都是通过增量传输命令的方式进行同步.
来源: http://www.bubuko.com/infodetail-2611678.html