MongoDB ReplicaSet 集群搭建
说明
本文创建的集群的名字为test
,在同一台机器上创建了三个mongo
实例,端口不同即可。
安装mongodb的教程,之前总结过,请参考:CentOS安装MongoDB笔记
创建实例
# 本机默认原有mongodb.conf及相关文件夹了
cp /etc/mongodb.conf /etc/mongodb2.conf
cp /etc/mongodb.conf /etc/mongodb3.conf
mkdir -p /data/{mongodb2,mongodb3}/log
touch /data/{mongodb2,mongodb3}/log/mongodb.log
# 配置文件mongodb.conf
dbpath=/data/mongodb
logpath=/data/mongodb/log/mongodb.log
pidfilepath =/data/mongodb/mongodb.pid
logappend=true
port=27017
bind_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.conf
systemLog:
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 interfaces
net:
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
参考: