Mongodb的集群有两种,一个是主从复制,另一种是副本集。
主从复制 根据 Mongodb 的官方文档说明,在生产环境中建议使用副本集代替主从复制。 http://docs.mongodb.org/manual/core/master-slave/
不过对于主从复制还是可以了解一下。假设有如下三台主机:
172.17.0.4 (主)
172.17.0.5 (从)
172.17.0.6 (从)
要进行主从复制的配置,首先修改主服务器的配置信息:
1 2 master = true # 以主服务器模式启动 bind_ip = 0.0.0.0
然后修改另两台从服务器配置信息:
1 2 3 slave = true source = 172.17.0.4 bind_ip = 0.0.0.0
最后启动三台主机上的 Mongodb 服务,再通过一个简单的程序来测试一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/usr/bin/env ruby require "mongo" begin conn = Mongo::Connection .new '172.17.0.4' db = conn['test' ] rescue Exception=>e p e exit 1 end i = 0 while i < 100 d = {'no' => i} d = db['data' ].insert(d) i += 1 puts d end
执行该脚本,向 172.17.0.4 主机的 Mongodb 中插入一些数据。然后发现数据被同步到了另外两台主机上。
主从之间安全认证: 如果启动了 auth 项,那么主从之间的认证需要使用 keyFile 选项。
执行如下命令生成 key 文件,并设置为只有 mongodb 的进程用户可读写:
1 2 3 $ openssl rand -base64 741 > /path/mongodb_keyFile $ chmow 600 /path/mongodb_keyFile $ chown mongodb:mongodb /path/mongodb_keyFile
将该文件复制到这三台主机中,然后分别修改主从的配置信息:
1 keyFile = /path/mongodb_keyFile
副本集 同样的对于这三台主机,我们重新修改配置设置为副本集的形式。
172.17.0.4
172.17.0.5
172.17.0.6
首先修改配置文件,设置副本集的名字。 注意:副本集中所有主机设置的名字需要一样。这里我们设为 myrepl0。 注意:设置副本集之前各个 mongodb 的数据目录必须都为空。
接着启动所有 mongodb 服务,然后对副本集进行初始化。 连接任意一台 mongodb 服务,执行如下操作:
1 2 3 4 5 > rs.initiate({'_id': 'myrepl0', 'members': [ {'_id': 1, 'host': '172.17.0.4:27017'}, {'_id': 2, 'host': '172.17.0.7:27017'}, {'_id': 3, 'host': '172.17.0.8:27017'} ]})
现在副本集的初始化已完成,可以通过如下命令查看状态:
在运行过程中可以随时添加或移除一个节点,如:
1 2 rs.add("172.17.0.8:27017") rs.remove("172.17.0.8:27017")
可以再通过上面的程序添加一些数据。然后再连接到任意一台主机进行查询,看看数据是否已同步。
详细内容可参考文档: http://docs.mongodb.org/manual/core/replication/
安全认证:
1.禁用 auth 选项和 replSet 选项再运行 mongodb
2.连接到该 mongodb 服务并创建用户
1 2 3 4 5 6 7 8 9 10 > use admin switched to db admin > db.addUser('root','root') { "user" : "root", "readOnly" : false, "pwd" : "2a8025f0885adad5a8ce0044070032b3", "_id" : ObjectId("54745351f79804bd44b596fb") } >
3.重新以 auth、keyFile 和 replSet 模式启动 mongodb
4.连接到刚刚创建用户的 mongodb 服务
5.跟之前的步骤一样,配置副本集
1 2 3 4 5 > rs.initiate({'_id': 'myrepl0', 'members': [ {'_id': 1, 'host': '172.17.0.4:27017'}, {'_id': 2, 'host': '172.17.0.7:27017'}, {'_id': 3, 'host': '172.17.0.8:27017'} ]})
参考: http://docs.mongodb.org/manual/tutorial/deploy-replica-set-with-auth/