监控MongoDB集群
  CYFozBbS5Dub 2023年11月02日 38 0
《Linux高可用负载均衡实践真传》第9章节选


对负载均衡的集群监控,不仅仅集中在对集群所有的资源、服务等进行监控,还要兼顾整体逻辑。以MongoDB高可用负载均衡集群为例,对逻辑层面的监控,就是模拟用户行为,访问集群数据,判断运行状态是否正常。


MongoDB集群内置一个名为“db.serverStatus()”的工具,用它可以来监控整个集群是否处于正常状态。用客户端“mongosh”登录MongoDB集群路由“mongos”,切换到管理员用户“admin”,交互界面执行“db.serverStatus()”,部分输出如图9-2所示。

监控MongoDB集群_mongodb


图9- 2


这是一个正常运行且所有集群节点未发生故障的MongoDB集群,健康状态“health state”为’OK’。有意将所有配置集群节点(Config Server)的“mongod”服务关闭,再执行指令“db.serverStatus()”,指令超时并报错,如图9-3所示。

监控MongoDB集群_负载均衡_02


图9- 3


启动配置服务(Config Server)集群的“mongod”服务,同时将所有分片服务集群(Shard)的“mongod”服务全部关闭,在“mongosh”交互界面输入指令“show dbs”,将得不到任何输出。根据这个逻辑,将集群健康状态(Health state)与数据库获取两者集合,如果同时满足健康状态正常“OK”且能检索到集群的数据库,则认为MongoDB集群处于正常状态。


需求明确之后,我们可以将其转换成Shell脚本。关键性的两条指令有两条,MongoDB集群处于正常运行状态时,系统命令行下,分别执行下面两条指令:

[root@MongoDB-200-144 ~]# echo "show dbs"|mongosh --host 10.122.200.144 --username=admin --password="Yg9NxXYN5iae" --authenticatinotallow=admin|grep admin

Connecting to: mongodb://<credentials>@10.122.200.144:27017/?directCnotallow=true&authSource=admin&appName=mongosh+1.10.0

[direct: mongos] test> admin 288.00 KiB


[root@MongoDB-200-144 ~]# echo "db.serverStatus()"|mongosh --host 10.122.200.144 --username=admin --password="Yg9NxXYN5iae" --authenticatinotallow=admin|grep state

state: 'Ok',


逻辑上分析清楚以后,再撰写监控脚本就不在是什么难事。用文本编辑器在系统行下创建Shell脚本“/usr/local/bin/mon_mongodb.sh”,其完整内容如下:

#!/bin/bash

db_admin=$(echo "show dbs"|mongosh --host 10.122.200.144 --username=admin --password=" Yg9NxXYN5iae" --authenticatinotallow=admin|grep admin9|wc -l)


db_status=$(echo "db.serverStatus()"|mongosh --username=admin --password=" Yg9NxXYN5iae" --authenticatinotallow=admin|grep state|grep Ok |wc -l)


if [ $db_admin -ge 1 ] && [ $db_status -eq 1 ]

then

echo "MongoDB Cluster is OK!"

exit 0

else

echo "MongoDB Cluster is BAD!"

exit 2

fi

exit 0


此脚本适用于Nagios或者Centroen监控平台,状态码“exit 0”代表正常(OK),“exit 2”代表异常(Critical)。在MongoDB集群处于正常状态时,执行脚本“/usr/local/bin/mon_mongodb.sh”,其输出应该为“MongoDB Cluster is OK!”。作为对比,将MongoDB的所有分片集群(Shard)的“mongod”服务关闭,手动执行脚本“/usr/local/bin/mon_mongodb.sh”,其输出为“MongoDB Cluster is BAD!”,正是我们所期待的结果,如图9-4所示。

监控MongoDB集群_Server_03


图9- 4


将MongoDB分片集群所有节点的“mongod”服务启动,而将所有配置服务(Config Server)的“mongod”关闭,执行监控脚本,将得到同样的结果(MongoDB Cluster is BAD!)。同样,当MongoDB的路由集群故障时,运行监控脚本也会得到故障告警。





9.4 负载均衡集群升级


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
CYFozBbS5Dub