温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mongodb集群shard状态异常:RECOVERING

发布时间:2020-07-11 06:54:07 来源:网络 阅读:1830 作者:无锋剑 栏目:大数据

mongodb集群shard状态异常:RECOVERING

报错信息

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)
                        },

注意事项:

同步数据时候比较耗费资源,推荐在系统访问量最低的时间段进行。防止数据大量更新滞后,降低集群数据恢复风险。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI