在Debian系统上配置MongoDB高可用性前,需完成以下基础准备:
sudo apt update && sudo apt upgrade -y确保系统包为最新版本。wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian $(lsb_release -sc)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.listsudo apt update。sudo apt install -y mongodb-org。sudo systemctl start mongod && sudo systemctl enable mongod。副本集是MongoDB实现高可用性的核心机制,通过多个实例(主节点+从节点)实现数据冗余和自动故障转移。
在每个Debian节点上编辑MongoDB配置文件(/etc/mongod.conf),添加以下关键配置:
net: port: 27017 # 实例端口(可自定义,如27018、27019) bindIp: 0.0.0.0 # 允许所有IP连接(生产环境建议限制为节点IP) replication: replSetName: "rs0" # 副本集名称(所有节点需一致) 保存后重启MongoDB服务使配置生效:sudo systemctl restart mongod。
连接到任意一个节点的MongoDB Shell(mongo),执行初始化命令:
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "node1_ip:27017" }, { _id: 1, host: "node2_ip:27017" }, { _id: 2, host: "node3_ip:27017" } ] }) 将node1_ip、node2_ip等替换为实际节点IP地址。初始化完成后,副本集会自动选举主节点(Primary)。
在MongoDB Shell中运行rs.status(),检查以下内容:
SECONDARY(从节点)或PRIMARY(主节点);ok字段值为1(表示健康)。cfg = rs.conf()查看配置,修改priority字段(如主节点设为2,从节点设为1),再执行rs.reconfig(cfg),确保优先级高的节点优先成为主节点。rs.addArb("arbiter_ip:27017")。rs.add({ _id: 3, host: "delay_node_ip:27017", priority: 0, hidden: true, slaveDelay: 3600 })。若数据量较大,需通过分片集群实现水平扩展(将数据分散到多个分片),同时每个分片可配置为副本集以保证分片内高可用。
分片集群由以下组件组成:
启动3个配置服务器实例(端口分别为27019、27020、27021):
mkdir -p /data/configdb1 /data/configdb2 /data/configdb3 mongod --configsvr --replSet configReplSet --dbpath /data/configdb1 --port 27019 mongod --configsvr --replSet configReplSet --dbpath /data/configdb2 --port 27020 mongod --configsvr --replSet configReplSet --dbpath /data/configdb3 --port 27021 初始化配置服务器副本集:
mongo --port 27019 rs.initiate({ _id: "configReplSet", configsvr: true, members: [ { _id: 0, host: "node1_ip:27019" }, { _id: 1, host: "node2_ip:27020" }, { _id: 2, host: "node3_ip:27021" } ] }) 每个分片需配置为副本集(以shard1为例):
mkdir -p /data/shard1_1 /data/shard1_2 /data/shard1_3 mongod --shardsvr --replSet shard1 --dbpath /data/shard1_1 --port 27018 mongod --shardsvr --replSet shard1 --dbpath /data/shard1_2 --port 27019 mongod --shardsvr --replSet shard1 --dbpath /data/shard1_3 --port 27020 初始化分片副本集:
mongo --port 27018 rs.initiate({ _id: "shard1", members: [ { _id: 0, host: "node1_ip:27018" }, { _id: 1, host: "node2_ip:27019" }, { _id: 2, host: "node3_ip:27020" } ] }) 启动Mongos实例(端口27017):
mongos --configdb configReplSet/node1_ip:27019,node2_ip:27020,node3_ip:27021 --port 27017 连接到Mongos Shell(mongo --port 27017),添加分片:
sh.addShard("shard1/node1_ip:27018,node2_ip:27019,node3_ip:27020") sh.enableSharding("your_database");user_id):sh.shardCollection("your_database.your_collection", { "user_id": 1 })。mongostat、mongotop)或第三方工具(Prometheus+Grafana)监控集群状态(如节点存活、oplog大小、磁盘空间),设置报警阈值。mongodump(逻辑备份)或mongorestore(恢复)工具定期备份数据,建议备份到异地存储。ufw)允许必要端口(27017、27019等),启用MongoDB身份验证(security.authorization: enabled),避免未授权访问。通过以上配置,MongoDB在Debian系统上可实现数据冗余、自动故障转移和水平扩展,满足高可用性需求。生产环境中需根据实际负载调整节点数量、分片键设计和资源分配。