说明
本文创建的集群的名字为test
,在同一台机器上创建了三个mongo
实例,端口不同即可。
安装mongodb的教程,之前总结过,请参考:
创建实例
# 本机默认原有mongodb.conf及相关文件夹了cp /etc/mongodb.conf /etc/mongodb2.confcp /etc/mongodb.conf /etc/mongodb3.confmkdir -p /data/{mongodb2,mongodb3}/logtouch /data/{mongodb2,mongodb3}/log/mongodb.log
# 配置文件mongodb.confdbpath=/data/mongodblogpath=/data/mongodb/log/mongodb.log pidfilepath =/data/mongodb/mongodb.pidlogappend=trueport=27017bind_ip = 0.0.0.0 # 支持远端访问fork=true # 后台运行#auth=true # 注释则关闭权限验证, 创建好用户再启动replSet=test
mongodb2.conf
和mongodb3.conf
也都要修改为对应的路径,比如端口号对应了27018/27019
。
创建实例:
mongod -f /etc/{mongodb.conf,mongodb2.conf,mongodb3.conf}
可以通过:
mongo --port 27017 # 进入对应端口号的实例
集群配置文件其他示例
# mongod.confsystemLog: destination: file logAppend: false logRotate: rename path: /data/mongodb/logs/mongod.log# Where and how to store data.storage: dbPath: /data/mongodb/ journal: enabled: true# network interfacesnet: port: 27017# bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.security: authorization: enabled keyFile: /home/app/mongodb/mongodb-keyfile#operationProfiling:replication: replSetName: "cluster"#sharding:## Enterprise-Only Options#auditLog:#snmp:
集群初始化
rs.initiate()
添加节点
rs.addArb("localhost:27018")
增加仲裁(arbiter)节点
To determine the current primary, use
db.isMaster()
while connected to any member of the replica set.
可以使用db.isMaster()
函数来查看是否是主节点。
登录主节点:
rs.addArb("localhost:27019")
参考:
移除
rs.remove("localhost:27019")
说明
如果要实现一定容灾的话,至少需要三个节点来做replica set,当其中一个down掉之后,另外两个会重新选举一个primary。但是如果其中两个都down掉的话,另外一台不管之前是primary还是secondary,都会降级为secondary,这时mongodb会不可写。
避免这种情况更简单的办法是加入一个arbiter节点,只负责选举,不负责数据存储。这样一来结构就变成了primary,secondary,arbiter三个角色,任何一个down掉的话,都不会影响mongodb的使用,当然,如果两个都down掉那就没辙了
参考:
FAQ
Q1:URI无法连接
高版本的MongoDB需要加上replicaSet
参数才行。
mongodb://localhost,localhost:27018,localhost:27019/test?replicaSet=test
参考: