長時間未能看到資料同步,可能導致誤以為複製功能失效或配置錯誤,這時可以考慮使用salveof指令。其實不用擔心,有兩種方法可以確定是否正在建立複製。
在創建redis複製是,一開始可能會發現slave長時間不開始同步數據,可能數據量太大,導致了master在dump數據慢,此時可以在master上執行top -p $ {pgrep -d,redis-sever}指令,就可以看到dump的過程。
[root@img1_u ~]# top -p $(pgrep -d, redis-server) top - 14:06:24 up 54 days, 6:13, 1 user, load average: 1.18, 1.32, 1.20 Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie Cpu(s): 15.2%us, 1.7%sy, 0.6%ni, 81.9%id, 0.2%wa, 0.0%hi, 0.4%si, 0.0%st Mem: 24542176k total, 22771848k used, 1770328k free, 2245720k buffers Swap: 524280k total, 0k used, 524280k free, 4369452k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 21619 root 20 0 5654m 5.4g 388 R 99.9 23.0 0:23.70 redis-server 1663 root 20 0 5654m 5.4g 1068 S 15.3 23.0 5042:31 redis-server
redis-server是單一進程的,現在透過top指令查看已經有2個進程,因為之前提到的,redis在建立複製的時候,會在主服務上執行bgsave指令,fork一個子進程,dump出RDB檔。先完成主資料庫的轉儲,再將快照檔案傳輸到從資料庫
方法二:透過rdb_bgsave_in_progress標識
進入master的redis-cli
127.0.0.1:6381> info Persistence # Persistence loading:0 current_cow_size:0 current_cow_size_age:0 current_fork_perc:0.00 current_save_keys_processed:0 current_save_keys_total:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 ##这个表示没有 rdb_last_save_time:1648953406 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:311296 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 module_fork_in_progress:0 module_fork_last_cow_size:0
當rdb_bgsave_in_progress的值為1時,表示主伺服器正在執行後台儲存指令(bgsave)。 rdb_current_bgsave_time_sec指示了bgsave指令的已執行時間。由於master伺服器上預設不會開啟RDB和AOF日誌,如果rdb_bgsave_in_progress為1,那麼就可以肯定由於複製原因發送一個bgsave指令dump出RDB檔案。
以上是redis複製碰到的問題有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!