报错信息
- 2018-11-28T06:46:55.783+0000 I REPL [replication-0] We are too stale to use 172.19.9.12:27003 as a sync source. Blacklisting this sync source because our last fetched timestamp: Timestamp(1542344943, 1) is before their earliest timestamp: Timestamp(1543387334, 5197) for 1min until: 2018-11-28T06:47:55.783+0000
- 2018-11-28T06:46:55.783+0000 I REPL [replication-0] sync source candidate: 172.19.9.11:27003
- 2018-11-28T06:46:55.783+0000 I REPL [replication-0] We are too stale to use 172.19.9.11:27003 as a sync source. Blacklisting this sync source because our last fetched timestamp: Timestamp(1542344943, 1) is before their earliest timestamp: Timestamp(1543387334, 5953) for 1min until: 2018-11-28T06:47:55.783+0000
错误原因分析:
报错节点数据太 "陈旧: stale" 了; 网络异常或者节点异常, 太久没有进行同步数据操作, 而导致其他节点的数据操作日志已经覆盖, 所以本节点被认为 stale, 无法从其他节点同步数据.
恢复方案
1: 停掉数据库, 直接删除异常节点 (shard) 本地数据, 然后启动 mongo 数据库, 启动之后存在一个同步的过程, 根据数据量, 网络, 磁盘性能等因素所需时间不同.
2: 停掉数据库, 直接拷贝主节点上的数据, 然后再启动 mongo, 这样就不存在数据同步的过程了. 问题, 就是数据时刻在变化, 拷贝过程中难免会漏掉一些数据.
处理办法:
我们的 MongoDB 集群是使用 docker 拉起的, 使用方案 1;
首先确定异常分片节点 ==》然后确定映射目录 ==》删除异常分片实例数据目录 ==》docker 服务会自动拉起服务 ==》集群开始数据恢复;
确认异常信息:
- /mongo localhost:27017/admin
- :PRIMARY> rs.status();
- {
- "_id" : 2,
"name" : "172.19.9.13:27003", 《== 节点信息
- "health" : 1,
- "state" : 5,
"stateStr" : "RECOVERING", 《== 异常状态
- "uptime" : 64,
- "optime" : {
- "ts" : Timestamp(0, 0),
- "t" : NumberLong(-1)
- },
具体操作:
数据目录:/data/shard3
- SSH $HOSTNAME
- cd /data/
- rm -rf shard3
删除数据目录后, 容器异常, 集群会自动拉起新的一个 docker 实例运行 shard 3 实例;
查看恢复状态:
STARTUP2 表示正在初始化并同步数据, 会看到数据目录文件在不停增加文件.
- /mongo localhost:27017/admin
- :PRIMARY> rs.status();
- {
- "_id" : 2,
- "name" : "172.19.9.13:27003",
- "health" : 1,
- "state" : 5,
"stateStr" : "STARTUP2", 《=== 表示正在初始化并同步数据.
- "uptime" : 64,
- "optime" : {
- "ts" : Timestamp(0, 0),
- "t" : NumberLong(-1)
- },
查看恢复结果
- /mongo localhost:27017/admin
- :PRIMARY> rs.status();
- "_id" : 2,
- "name" : "172.19.9.13:27003",
- "health" : 1,
- "state" : 2,
"stateStr" : "SECONDARY", <== 一段时间后状态恢复正常
- "uptime" : 945196,
- "optime" : {
- "ts" : Timestamp(1543401694, 1),
- "t" : NumberLong(1)
- },
注意事项:
同步数据时候比较耗费资源, 推荐在系统访问量最低的时间段进行. 防止数据大量更新滞后, 降低集群数据恢复风险.
来源: http://www.bubuko.com/infodetail-2864674.html