You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨双数据中心搭建MongoDB集群时如何配置新加坡服务器的读写规则

跨AWS区域MongoDB集群读写分离配置方案

1. 先完成副本集基础配置

首先确保你已经搭建好跨区域的MongoDB副本集,主节点部署在AWS中国区,新加坡区节点设置为只读从节点,避免被选举为主,同时增加区域标签方便路由:

  • 在主节点的Mongo shell中执行如下命令添加新加坡从节点:
    rs.add({
      host: "<新加坡节点内网域名/IP>:27017",
      priority: 0, // 优先级设为0,禁止被选举为主节点
      votes: 0, // 跨区延迟高的场景建议设为0,避免影响主节点选举
      tags: {"region": "sg"} // 增加区域标签,用于读请求路由匹配
    })
    
  • 执行rs.conf()确认配置已生效,新加坡节点的参数和标签和上述配置一致。

2. 新加坡区域应用端核心配置

这一步是实现本地读、跨区写的核心,所有配置都在新加坡区的应用服务的MongoDB驱动侧完成:

  • 写请求配置:无需特殊修改,只要你使用副本集连接串而非直连主节点IP,MongoDB驱动默认会将所有写请求自动路由到当前主节点(也就是AWS中国区的节点)。可根据业务对数据一致性的要求配置writeConcern,比如要求主节点确认就返回设为w:1,要求多数节点确认设为w:majority。
  • 读请求配置:通过配置读偏好+标签路由,强制读请求走新加坡本地节点:
    1. 读偏好(readPreference)选secondaryPreferred(新加坡节点故障时自动 fallback 到主节点读,可用性更高)或者secondary(只允许读从节点,节点故障时报错,数据一致性更高)
    2. 配置读偏好标签(readPreferenceTags)为[{"region": "sg"}],驱动会自动将读请求路由到带有region:sg标签的从节点,也就是新加坡本地的节点,不会访问其他区域的节点。
      以下是Python pymongo驱动的配置示例,其他语言驱动逻辑一致:
    from pymongo import MongoClient, ReadPreference
    client = MongoClient(
        "mongodb://<中国主节点IP>:27017,<新加坡从节点IP>:27017/?replicaSet=<你的副本集名称>",
        read_preference=ReadPreference.SECONDARY_PREFERRED,
        read_preference_tags=[{"region": "sg"}]
    )
    

3. 网络优化配置

为了避免跨区网络波动影响服务稳定性,建议做以下网络配置:

  • AWS中国区和新加坡区之间走专线或者AWS Global Accelerator互联,不要走公网传输同步流量和写请求流量,降低延迟和丢包率
  • 新加坡区MongoDB节点的安全组仅放行本地VPC内应用服务器的27017端口访问权限,中国区主节点安全组放行新加坡区服务器的专线/公网IP的27017端口访问权限
  • 用AWS Route53私有解析或者本地hosts配置,将新加坡MongoDB节点的域名解析到本地内网IP,避免读请求走公网绕路

4. 配置验证

配置完成后可以通过以下方式确认路由逻辑正常:

  • 开启应用端MongoDB驱动的debug日志,分别发送读、写请求,确认读请求的目标IP是新加坡本地节点,写请求的目标IP是中国区主节点
  • 登录新加坡从节点执行db.currentOp(),可以看到来自本地应用服务器的读请求记录
  • 登录中国区主节点执行db.currentOp(),可以看到来自新加坡应用服务器的写请求记录

内容的提问来源于stack exchange,提问作者angelokh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:54:02