{ "info": { "author": "Rick Copeland", "author_email": "rick@arborian.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Topic :: Database :: Database Engines/Servers", "Topic :: Utilities" ], "description": "MongoMultiMaster\n================\n\nThis is a tool which allows you to set up multi-master replication with\nMongoDB. It is emphatically *not* supported by 10gen, the makers of\nMongoDB.\n\nIt works by querying the oplog on one replica set and applying its\noperations to another replica set. It supports bidirectional replication\nby tagging each document replicated with its source.\n\nInstalling\n----------\n\nTo install, use pip:\n\n::\n\n pip install MongoMultiMaster\n\nMongoDB Setup\n-------------\n\nMMM needs access to the replica set oplog for each master. This means it\ndoesn't work with servers that are configured as standalone servers. To\nconvert a standalone server to a singleton replica set, first you need\nto tell it about the set it's in at launch time:\n\n::\n\n $ mongod --replSet foo\n\nThen, to start the replica set, you need to execute the following at the\n``mongo`` shell:\n\n::\n\n > rs.initiate()\n\nMongoMultiMaster Replication Setup\n----------------------------------\n\nOnce you've created the replica set master, you'll need to tell MMM\nwhere the servers are. This is done through a YAML config file. A sample\nconfig file with two servers is included below:\n\n::\n\n server_a:\n id: '2c88ae84-7cb9-40f7-835d-c05e981f564d'\n uri: 'mongodb://localhost:27019'\n server_b:\n id: '0d9c284b-b47c-40b5-932c-547b8685edd0'\n uri: 'mongodb://localhost:27017'\n\nFirst, let's verify that there's no configuration and that we can\nconnect to all the servers in the config file:\n\n::\n\n $ mmm -c test.yml clear-config\n About to clear config on servers: ['server_a', 'server_b'], are you sure? (yN) y\n Clear config for server_a\n Clear config for server_b\n $ mmm -c test.yml dump-config\n === Server Config ===\n server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb://localhost:27019\n server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb://localhost:27017\n\n === server_a Replication Config\n === server_b Replication Config\n\nNext, we'll set up two replicated collections:\n\n::\n\n $ mmm -c test.yml replicate --src=server_a/test.foo --dst=server_b/test.foo\n $ mmm -c test.yml replicate --src=server_a/test.bar --dst=server_b/test.bar\n\nAnd confirm they're configured correctly:\n\n::\n\n $ mmm -c test.yml dump-config\n === Server Config ===\n server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb://localhost:27019\n server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb://localhost:27017\n\n === server_a Replication Config\n === server_b Replication Config\n - test.foo <= server_a/test.foo\n - test.bar <= server_a/test.bar\n\nNow, let's make the replication bidirectional:\n\n::\n\n $ mmm -c test.yml replicate --src=server_b/test.foo --dst=server_a/test.foo\n $ mmm -c test.yml replicate --src=server_b/test.bar --dst=server_a/test.bar\n\nAnd verify that it's correct...\n\n::\n\n $ mmm -c test.yml dump-config\n === Server Config ===\n server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb://localhost:27019\n server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb://localhost:27017\n\n === server_a Replication Config\n - test.foo <= server_b/test.foo\n - test.bar <= server_b/test.bar\n === server_b Replication Config\n - test.foo <= server_a/test.foo\n - test.bar <= server_a/test.bar\n\nNow we can run the replicator:\n\n::\n\n $ mmm -c test.yml run\n\nThings to Consider\n------------------\n\n- Replication can fall behind if you're writing a lot. This is not\n handled at all.\n- Replication begins at the time when ``mmm run`` was first called. You\n should be able to stop/start ``mmm`` and have it pick up where it\n left off.\n- Conflicts between masters aren't handled; if you're writing to the\n same document on both heads frequently, you can get out of sync.\n- Replication inserts a bookkeeping field into each document to signify\n the server UUID that last wrote the document. This expands the size\n of each document slightly.\n\nThere are probably sharp edges, other missed bugs, and various nasty\nthings waiting for you if you use MMM in a production system without\nthorough testing. But if you like running with scissors and otherwise\nliving dangerously, feel free to try it out.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rick446/mmm", "keywords": "mongodb,replication", "license": "Apache License, Version 2.0", "maintainer": null, "maintainer_email": null, "name": "MongoMultiMaster", "package_url": "https://pypi.org/project/MongoMultiMaster/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/MongoMultiMaster/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/rick446/mmm" }, "release_url": "https://pypi.org/project/MongoMultiMaster/0.0.4dev/", "requires_dist": null, "requires_python": null, "summary": "Multimaster replication for MongoDB", "version": "0.0.4dev" }, "last_serial": 784735, "releases": { "0.0.1dev": [ { "comment_text": "", "digests": { "md5": "de368ecdd320d660ee9738f19db305d6", "sha256": "071bc66258d3df7cb8db913a9d87b0ed0397beb78d03cebd188d9e5289460066" }, "downloads": -1, "filename": "MongoMultiMaster-0.0.1dev.tar.gz", "has_sig": false, "md5_digest": "de368ecdd320d660ee9738f19db305d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6446, "upload_time": "2012-07-06T20:33:34", "url": "https://files.pythonhosted.org/packages/0b/2f/7d513b12872f2784739297c7cdf453089d3349cbe88c7418d286c2f20d80/MongoMultiMaster-0.0.1dev.tar.gz" } ], "0.0.2dev": [ { "comment_text": "", "digests": { "md5": "7157bd2c3de12258323ded646e573e76", "sha256": "6647d144f7cbef32204bd0f1ca5da053cecfd8381be81675e0fb28ed8289ccb6" }, "downloads": -1, "filename": "MongoMultiMaster-0.0.2dev.tar.gz", "has_sig": false, "md5_digest": "7157bd2c3de12258323ded646e573e76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6453, "upload_time": "2012-07-09T17:41:49", "url": "https://files.pythonhosted.org/packages/93/85/9b7294b9f69d03dd3be318ae63b24c1ef711a745095f187695550becf817/MongoMultiMaster-0.0.2dev.tar.gz" } ], "0.0.3dev": [ { "comment_text": "", "digests": { "md5": "28922aa4839893aa6eb15312ae70f243", "sha256": "8775d3027dac586c76b4ed9404dc08aeb10546a71f9816ecaa82296b8d8ac6dd" }, "downloads": -1, "filename": "MongoMultiMaster-0.0.3dev.tar.gz", "has_sig": false, "md5_digest": "28922aa4839893aa6eb15312ae70f243", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10817, "upload_time": "2012-07-09T18:14:24", "url": "https://files.pythonhosted.org/packages/b1/54/5c8e7b17f725b24ed7e07f2fd20047a529b7bede92bc3e5be8dec8f47465/MongoMultiMaster-0.0.3dev.tar.gz" } ], "0.0.4dev": [ { "comment_text": "", "digests": { "md5": "23d661c7c8fb60f19624f5d7bf742a0d", "sha256": "047cd5292c7718b3ecd45303f5ffe5c94ca6c0851a064a7ed136d997b6e1dad1" }, "downloads": -1, "filename": "MongoMultiMaster-0.0.4dev.tar.gz", "has_sig": false, "md5_digest": "23d661c7c8fb60f19624f5d7bf742a0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10961, "upload_time": "2012-07-13T18:05:48", "url": "https://files.pythonhosted.org/packages/e8/74/c44093dd69af10070ed6a833512c2975085c8e76aa64cf573105d89446ab/MongoMultiMaster-0.0.4dev.tar.gz" } ], "0.0dev": [ { "comment_text": "", "digests": { "md5": "04ecdc5f7af80db49bbe7ba885ec37f6", "sha256": "d56673e40450a41d4b1b9f0584fd3a5c3947c666651dc202438438dd0edadd1f" }, "downloads": -1, "filename": "MongoMultiMaster-0.0dev.tar.gz", "has_sig": false, "md5_digest": "04ecdc5f7af80db49bbe7ba885ec37f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6366, "upload_time": "2012-06-28T21:01:23", "url": "https://files.pythonhosted.org/packages/2e/4f/870c8120efec4cf6e7e65504dba04d6bf791053c5985e4c41fbdd8fc1739/MongoMultiMaster-0.0dev.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "23d661c7c8fb60f19624f5d7bf742a0d", "sha256": "047cd5292c7718b3ecd45303f5ffe5c94ca6c0851a064a7ed136d997b6e1dad1" }, "downloads": -1, "filename": "MongoMultiMaster-0.0.4dev.tar.gz", "has_sig": false, "md5_digest": "23d661c7c8fb60f19624f5d7bf742a0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10961, "upload_time": "2012-07-13T18:05:48", "url": "https://files.pythonhosted.org/packages/e8/74/c44093dd69af10070ed6a833512c2975085c8e76aa64cf573105d89446ab/MongoMultiMaster-0.0.4dev.tar.gz" } ] }