确保所有节点已安装相同版本的 MongoDB(建议 4.4 或更高版本)。每个节点需配置独立的存储路径、日志路径及不同的端口(如 27017、27018、27019)。
# 示例:在 Linux 安装 MongoDB
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 656408E390CFB1F5
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt update
sudo apt install mongodb-org
为每个节点创建独立的配置文件(如 mongod.conf
),启用副本集模式并指定名称(如 rs0
)。
# 节点1配置示例(保存为 /etc/mongod.conf)
storage:
dbPath: /data/db1
net:
bindIp: 0.0.0.0
port: 27017
replication:
replSetName: rs0
systemLog:
destination: file
path: /var/log/mongodb/mongod1.log
重复上述步骤为其他节点配置不同 dbPath
和 port
(如 27018、27019)。
在每个节点启动 MongoDB 服务,指定对应的配置文件。
mongod --config /etc/mongod.conf
验证服务是否运行:
ps aux | grep mongod
连接到任意节点(如主节点),执行副本集初始化命令。
// 在 mongo shell 中执行
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "node1:27017" },
{ _id: 1, host: "node2:27018" },
{ _id: 2, host: "node3:27019", arbiterOnly: true } // 仲裁节点可选
]
})
使用以下命令检查副本集状态和成员角色。
rs.status()
rs.conf() // 查看配置
在主节点插入数据,观察从节点是否自动同步。
use testdb
db.users.insertOne({ name: "Alice", role: "admin" })
在从节点执行(需先启用读取权限):
rs.slaveOk()
db.users.find()
手动关闭主节点,观察从节点是否自动升主。
# 在主节点执行
db.adminCommand({ shutdown: 1 })
重新检查 rs.status()
,确认新主节点已选举产生。