在写入时等待复制参数writeConcern
“majority” 并不是唯一的writeConcern 选项。MongoDB 还允许将"w" 指定为任意的数字,注意,“w” 的值包含了主节点。如果希望将写操作传播到n 个从节点,则应该将"w" 设置
为n+1(以包括主节点)。设置"w" : 1 相当于没有传入"w" 选项,因为这样只会检查主节
点上的写入是否成功。
保证复制到每个数据中心的一台服务器上
可以通过在副本集配置中添加一个
“tags” 字段来做到这一点:
var config = rs.config()
config.members[0].tags = {“idc” : “cn-shanghai”}
config.members[1].tags = {“idc” : “cn-shanghai”}
config.members[2].tags = {“idc” : “cn-shenzhen”}
rs.reconfig(config)
将"getLastErrorModes" 添加到副本集配置中,并重新执行配置来创建规则:
var config = rs.config()
config.settings = {}
config.settings.getLastErrorModes = [{“eachIDC” : {“idc” : 2}}]
rs.reconfig(config)
对写操作应用这条规则:
db.products.insertOne(
{ “_id”: 10, “item”: “envelopes”, “qty”: 100, type: “Self-Sealing” },
{ writeConcern: { “w” : “eachIDC”, wtimeout : 1000 } }
);
注意,直接使用数字的缺点在于,如果副本集的配置发生了更改,则必须修改应用程序。