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文件,
之后的同步,都是通过增量传输命令的方式进行同步。