在Linux上搭建MongoDB复制集(Replica Set)可以提供数据冗余和高可用性。以下是一个基本的步骤指南:
首先,确保你已经在所有节点上安装了MongoDB。你可以从MongoDB官方网站下载并安装适合你Linux发行版的MongoDB版本。
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] 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-get update
sudo apt-get install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod
cat <<EOF | sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF
sudo yum install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod
在每个节点上编辑MongoDB配置文件(通常是/etc/mongod.conf
),确保以下配置:
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 0.0.0.0 # 绑定所有IP地址
replication:
replSetName: rs0 # 复制集名称
在每个节点上启动MongoDB服务:
sudo systemctl start mongod
sudo systemctl enable mongod
连接到任意一个MongoDB实例并初始化复制集:
mongo --host <node1_ip> --port 27017
在Mongo shell中执行以下命令:
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>
, <node3_ip>
替换为你的节点IP地址。
在Mongo shell中执行以下命令来验证复制集的状态:
rs.status()
你应该看到所有节点都列在复制集中,并且状态为SECONDARY
或PRIMARY
。
你可以配置每个节点的优先级,以控制哪个节点成为主节点:
cfg = rs.conf()
cfg.members[0].priority = 2
cfg.members[1].priority = 1
cfg.members[2].priority = 1
rs.reconfig(cfg)
如果你有奇数个节点,可以添加一个仲裁节点来提高复制集的可用性:
cfg = rs.conf()
cfg.members.push({
_id: 3,
host: "<arbiter_ip>:27017",
arbiterOnly: true
})
rs.reconfig(cfg)
将<arbiter_ip>
替换为仲裁节点的IP地址。
通过以上步骤,你应该能够在Linux上成功搭建一个MongoDB复制集。