MongoDB提供三种主要的集群部署方式,可根据业务需求选择:
# mongod.conf 配置文件示例
storage:
dbPath: /data/db
journal:
enabled: true
replication:
replSetName: rs0
net:
bindIp: 0.0.0.0
port: 27017
// 在primary节点执行
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongo1:27017" },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017", arbiterOnly: true } // 仲裁节点
]
})
// 查看副本集状态
rs.status()
// 添加节点
rs.add("mongo4:27017")
// 移除节点
rs.remove("mongo4:27017")
// 强制重新选举
rs.stepDown(60) // 60秒内不参与选举
# 启动配置服务器副本集
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
# 启动分片服务器副本集
mongod --shardsvr --replSet shardReplSet1 --dbpath /data/shard1 --port 27018
# 启动mongos路由
mongos --configdb configReplSet/config1:27019,config2:27019,config3:27019
// 连接到mongos
use admin
// 添加分片
sh.addShard("shardReplSet1/mongo1:27018,mongo2:27018,mongo3:27018")
// 启用数据库分片
sh.enableSharding("mydatabase")
// 对集合分片
sh.shardCollection("mydatabase.mycollection", { "shardKey": 1 })
监控指标:
工具推荐:
# 热备份工具mongodump
mongodump --host rs0/mongo1:27017,mongo2:27017 --out /backup/$(date +%Y%m%d)
# 恢复工具mongorestore
mongorestore --host rs0/mongo1:27017 /backup/20230101
索引优化:
分片键选择:
# 安全配置示例
security:
authorization: enabled
keyFile: /path/to/keyfile
clusterAuthMode: keyFile
Primary节点宕机:
rs.status()
脑裂问题:
数据不一致:
rs.printSlaveReplicationInfo()
通过以上配置和管理策略,可以构建高可用的MongoDB集群架构,确保业务连续性并处理大规模数据需求。