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 彻底的测试。但是如果你喜欢用剪刀或者其他 生活在危险之中,可以尝试一下。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在java中将字符串转换为音频输入   java如何使用Spring Boot RestTemplate解组json列表   计算机上C++ OpenCV项目转换为OpenCV Android的java步骤   Java Spring Telegraf数据表不工作   openurlconnection与connect之间的java差异?   java Solr字段搜索、通配符和转义字符   java如何使用DLFolderLocalServiceUtil类的getFolders()方法?   尝试用Java编写文件   java连续双缓冲解决方案不起作用   两个数组的Java乘积   java Jackson,如何正确编写自定义反序列化程序   java将布尔标志按一定顺序排列以获得更好的性能是否有意义   java Vaadin无缓冲网格无法关闭   java在MySQL中以同一用户身份同时从不同客户端登录安全吗?   java如何使用安卓asynchttp库   java无法在Android中使用AlarmManager停止服务   java在Hibernate的XML配置文件中指定默认值   Spring启动应用程序中的java内存SQLITE不工作   Java代码无法写入文本文件,