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文件,
之後的同步,都是通過增量傳輸命令的方式進行同步。