Mongodb的集群有两种,一个是主从复制,另一种是副本集。
主从复制
根据 Mongodb 的官方文档说明,在生产环境中建议使用副本集代替主从复制。 http://docs.mongodb.org/manual/core/master-slave/
不过对于主从复制还是可以了解一下。假设有如下三台主机:
- 172.17.0.4 (主)
- 172.17.0.5 (从)
- 172.17.0.6 (从)
要进行主从复制的配置,首先修改主服务器的配置信息:
1 | master = true # 以主服务器模式启动 |
然后修改另两台从服务器配置信息:
1 | slave = true |
最后启动三台主机上的 Mongodb 服务,再通过一个简单的程序来测试一下。
1 |
|
执行该脚本,向 172.17.0.4
主机的 Mongodb 中插入一些数据。然后发现数据被同步到了另外两台主机上。
主从之间安全认证:
如果启动了 auth
项,那么主从之间的认证需要使用 keyFile
选项。
执行如下命令生成 key 文件,并设置为只有 mongodb 的进程用户可读写:
1 | $ openssl rand -base64 741 > /path/mongodb_keyFile |
将该文件复制到这三台主机中,然后分别修改主从的配置信息:
1 | keyFile = /path/mongodb_keyFile |
副本集
同样的对于这三台主机,我们重新修改配置设置为副本集的形式。
- 172.17.0.4
- 172.17.0.5
- 172.17.0.6
首先修改配置文件,设置副本集的名字。
注意:副本集中所有主机设置的名字需要一样。这里我们设为 myrepl0
。
注意:设置副本集之前各个 mongodb 的数据目录必须都为空。
1 | replSet = myrepl0 |
接着启动所有 mongodb 服务,然后对副本集进行初始化。
连接任意一台 mongodb 服务,执行如下操作:
1 | > rs.initiate({'_id': 'myrepl0', 'members': [ |
现在副本集的初始化已完成,可以通过如下命令查看状态:
1 | > rs.status() |
在运行过程中可以随时添加或移除一个节点,如:
1 | rs.add("172.17.0.8:27017") |
可以再通过上面的程序添加一些数据。然后再连接到任意一台主机进行查询,看看数据是否已同步。
详细内容可参考文档: http://docs.mongodb.org/manual/core/replication/
安全认证:
1.禁用 auth 选项和 replSet 选项再运行 mongodb
2.连接到该 mongodb 服务并创建用户
1 | > use admin |
3.重新以 auth、keyFile 和 replSet 模式启动 mongodb
4.连接到刚刚创建用户的 mongodb 服务
5.跟之前的步骤一样,配置副本集
1 | > rs.initiate({'_id': 'myrepl0', 'members': [ |
参考: http://docs.mongodb.org/manual/tutorial/deploy-replica-set-with-auth/