一.redis主從複製同步實現的過程
1.從服務發送一個sync同步命令給主服務要求全量同步
2.主服務接收到從服務的sync同步命令時,會fork一個子進程後臺執行bgsave命令(非阻塞)快照保存,生成RDB文件,並將
RDB文件發送給從服務
3.從服務再將接收到的RDB文件載入本身的redis內存
4.待從服務將RDB載入完成後,主服務再將緩衝區全部寫命令發送給從服務
5.從服務在將主服務全部的寫命令載入內存從而實現數據的完整同步
6.從服務下次在須要同步數據時只須要發送本身的offset位置(至關於mysql binlog的位置)便可,只同步新增長的數據,再不須要全量同步
二.經過命令行實現redis主從同步
master 192.168.1.9
slave 192.168.1.9
注意:建議保持主從redis的版本一致,避免致使因版本差別沒法創建主從鏈接
1.設置master的配置文件
[root@localhost ~]# vim /app/redis/etc/redis.conf
…
bind 127.0.0.0.1 192.168.1.9 #綁定監聽地址
…
port 6379 #默認開啓的端口號
….
daemonize yes #以守護進程開啓
supervised systemd #由systemd管理服務的啓動、中止.
pidfile /app/redis/run/redis_6379.pid #進程的pid保存路徑
logfile "/app/redis/log/redis_6379.log" #日誌文件保存路徑
save 2 1 #每隔2秒進行一次快照保存
stop-writes-on-bgsave-error yes #當快照保存失敗會禁止寫入redis,默認爲yes,通常改成no不開啓
dbfilename dump.rdb #保存快照的文件名
dir /app/redis/data/ #保存快照的路徑
requirepass 123456 #設置redis登陸的鏈接密碼
…
2.開啓redis主服務並查看內存中的數據
[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "wang"
2) "dfd"
3) "lady"
4) "ddsds"
5) "name"
6) "zhang"
127.0.0.1:6379>
3.先查看slave從服務狀態,在未設置時,從服務默認也爲master主服務
127.0.0.1:6379> info replication
#Replication
role:master
connected_slaves:0
master_replid:177a7792d02eb8e89c07b5441825a0f50d8ae8b8
master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d
master_repl_offset:2240
second_repl_offset:2241
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57
repl_backlog_histlen:2184
4.設置slave從服務的配置文件
[root@localhost ~]# vim /app/redis/etc/redis.conf
…
bind 127.0.0.0.1 192.168.1.106 #綁定監聽地址
…
port 6379 #默認開啓的端口號
….
daemonize yes #以守護進程開啓
dir /app/redis/data/ #保存快照的路徑
requirepass 123456 #設置redis登陸的鏈接密碼
…
5.slave從服務命令行操做實現主從鏈接
[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> slaveof 192.168.1.9 6379 #設置爲另外一臺服務的從服務
127.0.0.1:6379>config set masterauth 123456 #配置與主服務匹配的鏈接密碼
127.0.0.1:6379> info replication #查看主從鏈接是夠成功
#Replication
role:slave #已經切換爲從服務
master_host:192.168.1.9 #主服服主機的ip
master_port:6379
master_link_status:up #主從鏈接創建成功
…..
…..
27.0.0.1:6379> keys * #查看從主服器同步到的數據
1) "wang"
2) "name"
3) "dfd"
4) "zhang"
5) "ddsds"
6) "lady"
6.也可在命令行取消主從同步
127.0.0.1:6379> slaveof no one #取消主從同步的命令
OK
127.0.0.1:6379> info replication #查看是否取消成功
#Replication
role:master #已切換到master
connected_slaves:0
master_replid:77eab93a7015b0d338d1c44040d632e698d0159b
master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d
master_repl_offset:4004
second_repl_offset:4005
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2241
repl_backlog_histlen:1764
三.經過配置文件實現主從同步
1.只需配置從服務配置文件
[root@localhost ~]# vim /app/redis/etc/redis.conf
…..
slaveof 192.168.1.9 6379 #添加屬於某臺主機的從 服務
…..
masterauth 123456 #從服務鏈接主服的密碼
……
slave-read-only yes #從服務只讀,不可在命令行寫入數據
……
2.從新啓動從服務即實現主從鏈接
[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
#Replication
role:slave
master_host:192.168.1.9
master_port:6379
master_link_status:up
……
……