MongoDB ReplicaSet 集群搭建

时间:2024-07-15 09:37:32

说明

本文创建的集群的名字为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.confmongodb3.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

参考:

参考