我正在将我的独立 mongodb 转换为副本集。我添加了一个成员(我想稍后再添加两个成员,并关闭主服务器)。
我的主 mongodb 运行的是 2.2.3,而新的副本成员运行的是 mongodb 的最新版本 2.6.4。
两个数据库都在 Ubuntu 服务器 14.04 和 Microsoft Azure 上运行,并且它们在同一个亲和性组中运行。(虚拟机大小为 A2)
我已经将“nofile”和“nproc”的 ulimit 编辑为 65535,在看到 MMMS 监控建议后,但仅限于辅助服务器,以避免机器的重启时间,有必要吗?
我在主数据库上获得了超过 80m 的文档,并且它正在实时生产中运行。是因为这个吗?
同步数据几个小时后,TTL 显示以下错误,并开始重新同步。并且它一直循环。
[rsSync] 已完成底层构建,准备提交
[rsSync] 旧日志文件将被删除:/datadrive/data/journal/j._9
[rsSync] 索引创建完成。共扫描 55381316 条记录。耗时 1348.97 秒
[conn221] serverStatus 非常慢:{在 basic: 0、在 asserts: 0、在 backgroundFlushing: 0、在 connections: 0、在 cursors: 0、在 dur: 0、在 extra_info: 0、在 globalLock: 0、在 indexCounters: 0、在 locks: 0、在 network: 0、在 opcounters: 0、在 opcountersRepl: 0、在 recordStats: 744214 之后、在 repl: 744214 之后、在结束时: 744214 }
[conn221] 命令 admin.$cmd 命令:serverStatus { serverStatus: 1 } keyUpdates:0 numYields:0 locks(micros) r:31 reslen:3920 1243515ms
[conn228] serverStatus 非常慢:{在 basic: 0、在 asserts: 0、在 backgroundFlushing: 0、在 connections: 0、在 cursors: 0、在 dur: 0、在 extra_info: 0、在 globalLock: 0、在 indexCounters: 0、在 locks: 0、在 network: 0、在 opcounters: 0、在 opcountersRepl: 0、在 recordStats: 634932 之后、在 repl: 634932 之后、在结束时: 634932 }
[conn228] 命令 admin.$cmd 命令:serverStatus { serverStatus: 1 } keyUpdates:0 numYields:0 locks(micros) r:33 reslen:3920 1073310ms
[conn235] serverStatus 非常慢:{在 basic: 0、asserts: 0、backgroundFlushing: 0、connections: 0、cursors: 0、dur: 0、extra_info: 0、globalLock: 0、indexCounters: 0、locks: 0、network: 0、opcounters: 0、opcountersRepl: 0、recordStats: 578551 之后、repl: 578551 之后、结束时: 578551 }
[conn235] 命令 admin.$cmd 命令:serverStatus { serverStatus: 1 } keyUpdates:0 numYields:0 locks(micros) r:28 reslen:3920 963376ms
[conn194] SocketException 处理请求,关闭客户端连接:9001 套接字异常 [SEND_ERROR] 服务器 [ServerIp:1250]
[conn252] SocketException 处理请求,关闭客户端连接:9001 套接字异常 [SEND_ERROR] 服务器 [ServerIp:1248]
[rsSync] Socket 说 send() errno:110 连接超时 ServerIp:27017
[rsSync] replSet 初始同步异常:9001 套接字异常 [SEND_ERROR] 服务器 [Serverip:27017] 剩余 8 次尝试
[rsSync] replSet 初始同步待处理
[rsSync] replSet 同步到:[ServerAddress]:27017
[rsSync] replSet 初始同步删除所有数据库
[rsSync] dropAllDatabasesExceptLocal 2
[rsSync] 删除日志文件
[rsSync] replSet 初始同步克隆所有数据库
[rsSync] replSet 初始同步克隆数据库:PkgsKeyValues
[FileAllocator] 分配新的数据文件 /datadrive/data/PkgsKeyValues.ns,并用零填充...
[FileAllocator] 分配新的数据文件 /datadrive/data/PkgsKeyValues.3,并用零填充...
[FileAllocator] 已完成分配数据文件 /datadrive/data/PkgsKeyValues.3,大小:512MB,耗时 0.124 秒
有任何想法吗?
答案1
基于如此有限的信息,很难确定,但看起来好像在尝试同步时,有什么东西正在切断辅助设备和主设备之间的连接。如果这种情况在大约同一时间反复发生,则表明网络中的某些东西正在强制执行最大连接时间。如果这种情况是随机发生的,则表明网络本身存在问题(如果不进行重大故障排除,则无法确定可能是什么问题)。
从日志片段中也可以明显看出,发生这种情况时,辅助服务器负载很重,因为运行 ServerStatus 需要几个小时(非负载时通常不到 100 毫秒)——现在,它正在构建索引,这是一个阻塞操作,因此如果索引很大,这可能是一个转移注意力的借口。如果索引不大,则表明辅助服务器的资源配置略显不足。
如果你不能解决循环问题,你可以采取其他措施来启动和运行二级系统,例如复制数据文件但是,除非您有快照选项,否则将涉及在复制期间停止写入或占用时间。