htbzwd 发表于 2018-10-26 11:32:14

MongoDB Replica Set排错

  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.  
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


页: [1]
查看完整版本: MongoDB Replica Set排错