MongoDB的多主机复制
MongoMultiMaster的Python项目详细描述
这是一个允许您使用 MongoDB。它是由10gen的制造商着重支持的not MongoDB。
它通过查询一个副本集上的oplog并应用 对另一个副本集的操作。它支持双向复制 通过标记每个复制的文档及其源。
安装
要安装,请使用pip:
pip install MongoMultiMaster
MongoDB设置
mmm需要访问每个主机的副本集oplog。这意味着 不适用于配置为独立服务器的服务器。到 将独立服务器转换为单实例副本集,首先需要 要在启动时告诉它它所在的集合:
$ mongod --replSet foo
然后,要启动复制集,需要在 mongo外壳:
> rs.initiate()
MongoMultimaster复制设置
一旦创建了副本集主控,就需要告诉mmm 服务器在哪里。这是通过一个yaml配置文件完成的。样品 包含两台服务器的配置文件如下:
server_a: id: '2c88ae84-7cb9-40f7-835d-c05e981f564d' uri: 'mongodb://localhost:27019' server_b: id: '0d9c284b-b47c-40b5-932c-547b8685edd0' uri: 'mongodb://localhost:27017'
首先,让我们验证是否没有配置,并且我们可以 连接到配置文件中的所有服务器:
$ mmm -c test.yml clear-config About to clear config on servers: ['server_a', 'server_b'], are you sure? (yN) y Clear config for server_a Clear config for server_b $ mmm -c test.yml dump-config === Server Config === server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb://localhost:27019 server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb://localhost:27017 === server_a Replication Config === server_b Replication Config
接下来,我们将设置两个复制集合:
$ mmm -c test.yml replicate --src=server_a/test.foo --dst=server_b/test.foo $ mmm -c test.yml replicate --src=server_a/test.bar --dst=server_b/test.bar
并确认配置正确:
$ mmm -c test.yml dump-config === Server Config === server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb://localhost:27019 server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb://localhost:27017 === server_a Replication Config === server_b Replication Config - test.foo <= server_a/test.foo - test.bar <= server_a/test.bar
现在,让我们将复制设置为双向:
$ mmm -c test.yml replicate --src=server_b/test.foo --dst=server_a/test.foo $ mmm -c test.yml replicate --src=server_b/test.bar --dst=server_a/test.bar
并验证它是否正确…
$ mmm -c test.yml dump-config === Server Config === server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb://localhost:27019 server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb://localhost:27017 === server_a Replication Config - test.foo <= server_b/test.foo - test.bar <= server_b/test.bar === server_b Replication Config - test.foo <= server_a/test.foo - test.bar <= server_a/test.bar
现在我们可以运行复制程序:
$ mmm -c test.yml run
需要考虑的事项
- 如果你写很多东西,复制可能会落后。这不是 完全可以处理。
- 复制在首次调用mmm run时开始。你 应该能够停止/启动mmm,并让它在它所在的位置进行拾取 离开了。
- 如果你写信给 同样的文件在两个头上经常,你可以得到不同步。
- 复制在每个文档中插入一个记帐字段以表示 上次写入文档的服务器uuid。这样就扩大了 每一份文件的一点。
可能有锋利的边缘,其他漏掉的虫子,以及各种各样的讨厌的东西 如果在生产系统中使用mmm 彻底的测试。但是如果你喜欢用剪刀或者其他 生活在危险之中,可以尝试一下。