关于使用 HAProxy 进行 MongoDB 健康检查的后续问题
当重点是确定 mongo 是否响应时,当前解决方案效果很好,但我正在尝试扩展功能以根据主数据库或辅助数据库的状态进行跟踪。我尝试了 isMaster 的变体,但没有成功。在 MongoDB 端使用 mongosniff 或 wireshark,结果显示为查询解析错误,并且没有响应发回 HAProxy 主机。
使用 Mongo wire 协议,是否有可用的查询来获取给定 MongoDB 服务器的状态,而不是仅允许跟踪数据库响应的当前解决方案?
答案1
我按照 MongoDB 健康检查问题中的指南创建了这个 tcp 检查 (如何在 HAProxy 中构建 MongoDB 健康检查?)并使用 isMaster 命令(https://docs.mongodb.com/manual/reference/command/isMaster/#isMaster.ismaster)在mongodb中,正如Adam C在上面的评论中提到的:
tcp-check send-binary 3d00000001000000ffffffffd407000000000000746573742e24636d640000000000ffffffff170000000169734d617374657200000000000000f03f00
tcp-check expect binary 0869736d61737465720001
发送的二进制文件是该命令:
mongo --host <IP> --port <port> --eval 'db.isMaster().ismaster'
预期的二进制文件是响应文档的“ismaster”元素。重要的部分是结束值,如果是主数据库,则为 01,如果是辅助数据库,则为 00。
我使用了 MongodDB 3.4.4 和 HAproxy 1.5.18 。