redis配置之tcp_nodely
Redis repl-disable-tcp-nodelay配置
問題:在slave和master同步後(傳送psync/sync),後續的同步是否設定成TCP_NODELAY?
假如設定成yes,則redis會合並小的TCP包從而節省頻寬,但會增加同步延遲(40ms),造成master與slave資料不一致。
假如設定成no,則redis master會立即傳送同步資料,沒有延遲。
前者關注效能,後者關注一致性
是否禁止複製tcp連結的tcp nodelay引數,可傳遞yes或者no。預設是no,即開啟tcp nodelay。
如果master設定了yes來禁止tcp nodelay設定,在把資料複製給slave的時候,會減少包的數量和更小的網路頻寬。但是這也可能帶來資料的延遲。預設我們推薦更小的延遲,但是在資料量傳輸很大的場景下,建議選擇yes。
redis執行slaveof命令過程原理(執行步驟)
從資料庫向主資料庫傳送sync命令。
主資料庫接收sync命令後,執行BGSAVE命令(儲存快照),建立一個RDB檔案,在建立RDB檔案期間執行的命令將儲存在緩衝區中。
當主資料庫執行完BGSAVE時,會向從資料庫傳送RDB檔案,而從資料庫會接收並載入該檔案。
主資料庫將緩衝區的所有寫命令發給從伺服器執行。
以上處理完之後,之後主資料庫每執行一個寫命令,都會將被執行的寫命令傳送給從資料庫。
注意:在Redis2.8之前,主從斷線或則重啟之後再重連線,都需要做一次完整的sync操作(5步驟),即使斷線期間只有幾條的更新操作或則是沒有操作,導致系統資源極度浪費。Redis2.8之後,會用一個psync來替換sync,不會進行完整的sync操作,只需要同步斷線期間的記錄。相關引數:repl-backlog-size、repl-backlog-ttl
repl-diskless-sync-delay
diskless複製的延遲時間,防止設定為0。一旦複製開始,節點不會再接收新slave的複製請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來。
repl-diskless-sync-delay預設為5
sentinel日誌資訊
# Sentinel runid is 07a40fd381d618f0716c20b270d5c1bd47ef8fa3
+monitor master mymaster 127.0.0.1 10086 quorum 2 #主加入監控
+slave slave 127.0.0.1:10087 127.0.0.1 10087 @ T1 127.0.0.1 10086 #檢測到一個slave並新增進slave列表
+slave slave 127.0.0.1:10088 127.0.0.1 10088 @ T1 127.0.0.1 10086 #檢測到一個slave並新增進slave列表
+sentinel sentinel 127.0.0.1:20087 127.0.0.1 20087 @ T1 127.0.0.1 10086 #增加了一個sentinel
+sentinel sentinel 127.0.0.1:20088 127.0.0.1 20088 @ T1 127.0.0.1 10086 #增加了一個sentinel
+reset-master <instance details> -- 當master被重置時.
+slave <instance details> -- 當檢測到一個slave並新增進slave列表時.
+failover-state-reconf-slaves <instance details> -- Failover狀態變為reconf-slaves狀態時
+failover-detected <instance details> -- 當failover發生時
+slave-reconf-sent <instance details> -- sentinel傳送SLAVEOF命令把它重新配置時
+slave-reconf-inprog <instance details> -- slave被重新配置為另外一個master的slave,但資料複製還未發生時。
+slave-reconf-done <instance details> -- slave被重新配置為另外一個master的slave並且資料複製已經與master同步時。
-dup-sentinel <instance details> -- 刪除指定master上的冗餘sentinel時 (當一個sentinel重新啟動時,可能會發生這個事件).
+sentinel <instance details> -- 當master增加了一個sentinel時。
+sdown <instance details> -- 進入SDOWN狀態時;
-sdown <instance details> -- 離開SDOWN狀態時。
+odown <instance details> -- 進入ODOWN狀態時。
-odown <instance details> -- 離開ODOWN狀態時。
+new-epoch <instance details> -- 當前配置版本被更新時。
+try-failover <instance details> -- 達到failover條件,正等待其他sentinel的選舉。
+elected-leader <instance details> -- 被選舉為去執行failover的時候。
+failover-state-select-slave <instance details> -- 開始要選擇一個slave當選新master時。
no-good-slave <instance details> -- 沒有合適的slave來擔當新master
selected-slave <instance details> -- 找到了一個適合的slave來擔當新master
failover-state-send-slaveof-noone <instance details> -- 當把選擇為新master的slave的身份進行切換的時候。
failover-end-for-timeout <instance details> -- failover由於超時而失敗時。
failover-end <instance details> -- failover成功完成時。
switch-master <master name> <oldip> <oldport> <newip> <newport> -- 當master的地址發生變化時。通常這是客戶端最感興趣的訊息了。
+tilt -- 進入Tilt模式。
-tilt -- 退出Tilt模式。12345678910111213141516171819202122232425262728293031
美團在Redis上踩過的一些坑-目錄(本人非美團)
部落格地址:http://carlosfu.iteye.com/blog/2254154