您好,登錄后才能下訂單哦!
1.檢查Replica Set的狀態
使用db.runCommand({"replSetGetStatus" : 1});或者rs.status();
2.檢查復制延遲時間
source: m1.example.net:30001 syncedTo: Tue Oct 02 2012 11:33:40 GMT-0400 (EDT) = 7475 secs ago (2.08hrs)source: m2.example.net:30002 syncedTo: Tue Oct 02 2012 11:33:40 GMT-0400 (EDT) = 7475 secs ago (2.08hrs)
復制延遲的可能原因有:
網絡延遲
可以使用ping和traceroute命令探測網絡狀況
磁盤吞吐量
如果Secondary的磁盤不能像Primary的磁盤那樣快速將數據刷新到磁盤上,將不能和Primary保持同步更新。可以使用iostat或者vmstat檢查磁盤使用狀況
并發量
在某些情況下,如果Primary上長期有操作,那么可能會阻斷Secondary的復制操作。可以考慮write concern 。再則就是查看是否有慢查詢。
Appropriate Write Concern
Replica Acknowledge Write Concern
Replica Set Write Concern
3.所有成員間的連接測試
Replica Set之間的成員需要能夠相互連通,檢查防火墻設置。
4.重啟多個Secondar的Socket Exceptions問題
當重啟Replica Set中的多個成員時,確保可以選出一個Primary。如果在維護的過程中程序出現socket連接錯誤,可以檢查TCP的keepalive設置。
cat /proc/sys/net/ipv4/tcp_keepalive_time
Linux下默認設置tcp_keepalive_time為7200秒,即兩個小時。可以將所有的MongoDB實例所在的服務器的這個值設置成300秒。
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time
這種設置重啟后將消失,需要重新修改。可以直接修改/etc/sysctl.conf然后執行sysctl -p
5.檢查Oplog的大小
oplog越大,能夠接受得延遲就越大。
使用db.printReplicationInfo();查看oplog的大小
db.printReplicationInfo(); configured oplog size: 50278.6203125MB log length start to end: 143109secs (39.75hrs) oplog first event time: Wed Mar 18 2015 00:36:53 GMT+0800 (CST) oplog last event time: Thu Mar 19 2015 16:22:02 GMT+0800 (CST) now: Thu Mar 19 2015 17:32:42 GMT+0800 (CST)
如果重新設置oplog的大小需要將所有的成員都設置成為大小一樣
6.Oplog Entry Timestamp Error
如果日志中出現如下報錯
replSet error fatal couldn't query the local local.oplog.rs collection. Terminating mongod after 30 seconds. <timestamp> [rsStart] bad replSet oplog entry?
參考資料:
http://docs.mongodb.org/v2.4/tutorial/troubleshoot-replica-sets/
http://john88wang.blog.51cto.com/2165294/1564543
http://docs.mongodb.org/v2.4/faq/diagnostics/#faq-keepalive
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。