Redis主從拷貝的特色node
Redis主從拷貝的過程
slave鏈接上master以後,slave發送一個SYNC命令到master,master接收到命令以後,不管是第一次同步創建的鏈接,仍是鏈接斷開後的從新鏈接,master會開啓BGSAVE操做,啓動一個後臺進程,保存一份當前master內存快照,而且開始保存從調用BGSAVE以後的全部寫命令,master生成完快照以後,發送內存快照rdb文件給slave。slave接收到master發送過來的rdb文件以後,將清空全部舊數據,加載接收到的rdb文件到內存中,發送完rdb文件給slave以後,開始發送剛剛保存的寫操做日誌給slave,slave執行這些寫操做,至此,主從數據保存一致。發送完寫日誌以後,master會增量發送以後的寫操做給slave,使主從一致。redis
ps: 當master和slave的鏈接斷開時,slave能夠自動從新創建鏈接。若是master同時收到多個slave發來的同步鏈接命令,只會使用啓動一個進程來寫內存快照,而後發送給全部的slave架構
Master write, Slave read機制
redis的主從複製,經過程序實現數據的讀寫分離,讓master負責處理些請求,slave負責處理讀請求,經過擴展slave處理更多的併發請求,減輕master端的負載。併發
ps:在程序中判斷用戶的讀寫請求,將write請求發送給master,read請求發送給slave處理tcp
redis主從拷貝配置
開啓主從複製,最簡單的方式,鏈接上從機redis,執行slaveof <主機host> <主機端口> ,另外也能夠在從機的配置文件中加入slaveof <主機host> <主機端口> ,這樣從機啓動的時候,就會自動鏈接主機,而且同步數據。
ide
slaveof 192.168.100.126 6379 # 配置主機信息 masterauth <master-password> # 若是主機設置了密碼,配置密碼 slave-serve-stale-data yes # 配置當從機正在和主機進行同步的時候是否響應,若是配置是,有可能客戶端會讀到舊數據,若是配置否,當請求讀數據的時候,將會報錯SYNC with master in progress slave-read-only yes # 從機是否只讀。這邊設置可寫,不會同步到主機, repl-ping-slave-period 10 # 從機發送ping命令到主機的間隔時間。 repl-timeout 60 # 主機響應超時時間,這個包括傳輸超時,IO超時,ping超時,注意這邊時間必須大於上面的間隔時間,要否則會一直報超時錯誤。 repl-disable-tcp-nodelay no # 是否禁用TCP NODELAY。官方對這個配置用法的建議是: # By default we optimize for low latency, but in very high traffic conditions # or when the master and slaves are many hops away, turning this to 「yes」 may # be a good idea. # 默認狀況下,咱們優化目的是爲了低延遲,可是在高傳輸條件或者主從機分佈在路由不少跳以外的,建議禁用掉tcp-nodelay。 slave-priority 100 # 若是master不能再正常工做,那麼會在多個slave中,選擇優先值最小的一個slave提高爲master,優先值爲0表示不能提高爲master