Redis主從複製網路閃斷處理

來源:互聯網
上載者:User

Redis主從複製網路閃斷處理

先記錄幾個有意思的用法
1.重複執行
-r 選項重複執行一個命令指定的次數。
-i 設定命令執行的間隔。
 比如查看redis每秒執行的commands(qps)

 ./redis-cli -r 100 -i 1 info stats | grep instantaneous_ops_per_sec
 instantaneous_ops_per_sec:334
 instantaneous_ops_per_sec:306
 instantaneous_ops_per_sec:294
 instantaneous_ops_per_sec:349
 instantaneous_ops_per_sec:371
 instantaneous_ops_per_sec:380
 instantaneous_ops_per_sec:388

2.擷取指定redis執行個體的rdb檔案,儲存到本地
redis-cli -h 192.168.44.16 -p 6379 --rdb 6379.rdb

3.類比slave從master上接收到的commands
 ./redis-cli --slave

和monitor不一樣,monitor接收所有命令.而--slave僅僅接收 insert,update,delete的命令.

4.--scan和--pattern
代替 keys IM*
 ./redis-cli --scan --pattern 'IM*'

這樣不會長時間阻塞redis而導致其他用戶端的命令請求一直處於阻塞狀態。

最近經常收到郵件警示,
一般都是Redis CPU使用率達到閾值.
那是一個Slave執行個體,qps也就僅僅幾百而已.
經過排查,應該是網路不穩定,導致的Slave斷線重連.

中間有幾個參數,還得重新回顧一下.

1.client-output-buffer-limit
 redis server以單進程的方式處理接收到的請求,而redis完成請求有些工作比較慢,比如網路IO和磁碟IO等比較慢的操作。redis為了提高處理用戶端請求的回應時間,做了很多最佳化。比如網路io和磁碟io是非同步完成、使用後台進程完成bgsave和bgrewriteaof工作,在server端為客戶提供讀buffer等等。
client buffer是在server端實現的一個讀取緩衝區。redis server在接收到用戶端的請求後,把影響結果寫入到client buffer中,而不是直接發送給用戶端。server把結果寫入到client buffer中後,繼續處理用戶端的其他請求。這樣非同步處理方式使redis server不會因為網路原因阻塞其他請求的處理。之前的文章中replication buffer也是client buffer中的一種。

1) "client-output-buffer-limit"
 2) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"


具體參數含義如下:
class : 用戶端種類,normal、slave、pubsub。
– mormal:普通的用戶端
– slave: 從庫的複製用戶端
– pub/sub: 發布與訂閱的用戶端的
hard limit: 緩衝區大小的硬性限制。
soft limit: 緩衝去大小的軟性限制。
soft seconds: 緩衝區大小達到了(超過)soft limit值的期間。
client-output-buffer-limit參數限制分配的緩衝區的大小,防止記憶體無節制的分配。參數的預設值都為0,意思是不做任何限制。

hard limit:當buffer的量達到硬限制之後,redis立即斷開與client的串連
soft limit和soft seconds:當buffer的在soft seconds秒內超出了soft limit,redis不會關閉client串連。如果當buffer的在soft seconds秒之後,仍然超出了soft limit 的限制,則redis立即關閉client串連。

2.repl-timeout
 redis裡面的repl-timeout參數值也太小也將會導致複製不成功.
redis設定檔中對repl-timeout的參數解釋如下:
 # The following option sets the replication timeout for:
 #
 # 1) Bulk transfer I/O during SYNC, from the point of view of slave.
 # 2) Master timeout from the point of view of slaves (data, pings).
 # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
三種情況認為複製逾時:
1)slave角度,如果在repl-timeout時間內沒有收到master SYNC傳輸的rdb snapshot資料,
2)slave角度,在repl-timeout沒有收到master發送的資料包或者ping。
3)master角度,在repl-timeout時間沒有收到REPCONF ACK確認資訊。
 當redis檢測到repl-timeout逾時(預設值60s),將會關閉主從之間的串連,redis slave發起重建立立主從串連的請求。
 對於記憶體資料集比較大的系統,可以增大repl-timeout參數。

3.slave ping period
 redis slave會定期從master發送ping命令,時間間隔repl-ping-slave-period指定。
 因而,設定參數時, repl-timeout > repl-ping-slave-period。
# Slaves send PINGs to server in a predefined interval.  The default value is 10 seconds.
 # repl-ping-slave-period 10
 
 # It is important to make sure that this value is greater than the values pecified for repl-ping-slave-period otherwise a timeout will be detected every time there is low traffic between the master and the slave.

4.repl-backlog-size
當主伺服器進行命令傳播的時候,maser不僅將所有的資料更新命令發送到所有slave的replication buffer,還會寫入replication backlog。當斷開的slave重新串連上master的時候,slave將會發送psync命令(包含複製的位移量offset),請求partial resync。如果請求的offset不存在,那麼執行全量的sync操作,相當於重建立立主從複製。

 為了避免網路不穩定造成的全量同步.
修改參數如下:
config set repl-timeout 240
 config set repl-backlog-size 67108864

下面關於Redis的文章您也可能喜歡,不妨參考下:

Ubuntu 14.04下Redis安裝及簡單測試

Redis主從複製基本配置

Redis叢集明細文檔

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis

Redis系列-安裝部署維護篇

CentOS 6.3安裝Redis

Redis安裝部署學習筆記

Redis設定檔redis.conf 詳解

Redis 的詳細介紹:請點這裡
Redis 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.