从前有人问要上一套MongoDB,问我要用什么版本?从我的角度来说我觉得最新的较好。一个是为了避免后续升级,二是减少漏洞,三是处理了bug,四是有新特性。我现在为我当初的决定感到庆幸,我的判断是对的。但是如果没有按照我说的做就坑了。
接到求助说应用连接不到mongo了。我尝试登录上去一看。有三台机器,每台上面的进程都一样。我只贴一个。

看到这里,心中有一丝安慰,好在基础的这些都还在。那么就不用慌了,只是mongos的进程没有了。那么问题不是非常大。如果每个节点都有各式各样的问题,那就棘手了。
尝试登录几个节点看看能不能用。看到了113是主节点。114和115都是secondary。证明集群状态完好,我们的危险已经基本排除了。现在只要恢复mongos就行了。

启动,但是启动不了。看了日志先网上查查日志自救一下。查下来说是这个问题。

我看了一下安装时间

再对比一下当时的时间。差不多时间对得上。

当然了网上的未必是真的,找到社区的人求证一下。大家都确认了是版本使用不当。不应该用不稳定的版本。
问题描述以及影响
The bug causes a failure of the thread that creates new Hash-based Message Authentication Code (HMAC) signing keys every 90 days.
New keys are generated when the Config Server Replica Set (CSRS) fails over. So, if a failover does not happen on the CSRS for 90 days, operations across the sharded cluster will start to fail and will not succeed again until the CSRS fails over.
有位大佬帮我这样指出和评价。这也印证了我为什么要用最新版本,如果都用新版本的话,是不会出现这个问题的。

立即处理的方法就是回避这个bug,手工切换就可以重新生成新密钥。相当于重新激活线程去创建密钥,之前主库的创建密钥的线程是死了。经过手工干预rs.stepDown()。完成了切换,完成后立即看到应用程序连接了。
任何数据库软件选择成熟大版本的稳定小版本。





