Monstache如何配置多个MongoDB数据源实现与Elasticsearch同步索引
解决方案
Monstache 单个实例的mongo-url配置项仅支持单个MongoDB数据源,你可以通过以下两种方式实现多数据源同步:
方案1:部署多个Monstache实例(推荐)
每个Monstache实例对应一个MongoDB数据源,所有实例可共用同一个Elasticsearch集群,互相之间无冲突。Docker部署场景下该方案实现成本极低,你只需要为每个MongoDB数据源单独编写一份配置文件,仅修改对应配置项即可:
- 调整
mongo-url为当前实例对应的MongoDB连接地址 - 调整
direct-read-namespaces、change-stream-namespaces为对应库的集合规则 - 调整
mapping、script块中对应的命名空间、索引名、脚本路径 - 单独设置日志输出路径避免日志覆盖
示例配置(第二个MongoDB数据源对应的实例配置):
mongo-url = "mongodb://project-db2:27017" elasticsearch-urls = ["http://es7:9200"] direct-read-namespaces = ["project2.data"] change-stream-namespaces = ["project2.data"] [logs] error = "./logs/error-db2.log" [[mapping]] namespace = "project2.data" index = "Project2" [[script]] namespace = "project2.data" path = "./scripts/collection2.js" routing = true
如果使用Docker Compose管理服务,直接在配置文件中新增对应Monstache服务条目,分别挂载各自的配置文件即可。
方案2:MongoDB侧做集群聚合
如果你的10个MongoDB数据库可以统一接入分片集群架构,你可以将所有MongoDB实例作为分片加入同一个集群,通过mongos路由节点统一对外提供访问,此时只需将Monstache的mongo-url指向mongos节点,即可在单个Monstache实例中通过配置不同的namespace规则同步所有分片内的数据库数据。该方案需要改动MongoDB侧架构,适合底层基础设施可调整的场景。
内容的提问来源于stack exchange,提问作者Denn
相关产品推荐
相关产品推荐

