在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复制集。