您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # Linux下如何配置MongoDB副本集
## 一、MongoDB副本集概述
### 1.1 什么是副本集
MongoDB副本集(Replica Set)是由一组MongoDB实例组成的集群,包含一个主节点(Primary)和多个从节点(Secondary)。其核心特性包括:
- **自动故障转移**:当主节点不可用时,系统会自动选举新的主节点
- **数据冗余**:所有数据在多个节点上同步复制
- **读写分离**:支持将读操作分发到从节点
### 1.2 副本集架构组成
典型的三节点副本集架构:
| 节点类型   | 数量 | 职责说明                     |
|------------|------|------------------------------|
| Primary    | 1    | 处理所有写操作和默认读操作   |
| Secondary  | 2    | 复制主节点数据,可处理读请求 |
| Arbiter    | 可选 | 不存储数据,仅参与投票       |
### 1.3 适用场景
- 生产环境高可用需求
- 需要数据灾难恢复保障
- 读写分离负载均衡场景
## 二、环境准备
### 2.1 硬件需求建议
```bash
# 每个节点建议配置
CPU: 4核以上
内存: 8GB以上
存储: SSD硬盘,容量根据数据量确定
网络: 节点间延迟<10ms
| 主机名 | IP地址 | 角色 | 
|---|---|---|
| mongo1 | 192.168.1.10 | Primary | 
| mongo2 | 192.168.1.11 | Secondary | 
| mongo3 | 192.168.1.12 | Secondary | 
Ubuntu系统:
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt update
CentOS系统:
cat > /etc/yum.repos.d/mongodb-org-5.0.repo <<EOF
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
EOF
# Ubuntu/Debian
sudo apt install -y mongodb-org
# CentOS/RHEL
sudo yum install -y mongodb-org
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
编辑/etc/mongod.conf(所有节点):
# 网络配置
net:
  port: 27017
  bindIp: 0.0.0.0
# 存储配置
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
# 副本集配置
replication:
  replSetName: "rs0"  # 副本集名称必须一致
# 安全配置(可选)
security:
  keyFile: /etc/mongodb-keyfile
  authorization: enabled
openssl rand -base64 756 > /etc/mongodb-keyfile
chmod 400 /etc/mongodb-keyfile
chown mongod:mongod /etc/mongodb-keyfile
sudo systemctl enable mongod
sudo systemctl start mongod
// 连接到mongo shell
mongo --host 192.168.1.10
// 初始化副本集配置
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "192.168.1.10:27017" },
    { _id: 1, host: "192.168.1.11:27017" },
    { _id: 2, host: "192.168.1.12:27017" }
  ]
})
// 查看副本集状态
rs.status()
// 检查节点角色
rs.isMaster()
// 预期输出示例
{
  "set" : "rs0",
  "date" : ISODate("2023-08-20T08:00:00Z"),
  "myState" : 1,
  "members" : [
    {
      "_id" : 0,
      "name" : "192.168.1.10:27017",
      "health" : 1,
      "state" : 1,
      "stateStr" : "PRIMARY"
    },
    {
      "_id" : 1,
      "name" : "192.168.1.11:27017",
      "health" : 1,
      "state" : 2,
      "stateStr" : "SECONDARY"
    }
  ],
  "ok" : 1
}
// 设置从节点可读
rs.slaveOk()
// 或在连接字符串中指定
mongodb://192.168.1.10:27017,192.168.1.11:27017/?replicaSet=rs0&readPreference=secondaryPreferred
// 修改节点优先级(优先级高的更容易成为主节点)
cfg = rs.conf()
cfg.members[1].priority = 2
rs.reconfig(cfg)
rs.addArb("192.168.1.13:27017")
// 强制重新选举
rs.stepDown(300)  // 主节点退位,300秒内不参与选举
// 移除节点
rs.remove("192.168.1.12:27017")
// 添加新节点
rs.add("192.168.1.14:27017")
# 查看oplog状态
mongo --eval "db.getSiblingDB('local').oplog.rs.stats()"
# 检查复制延迟
mongo --eval "db.printReplicationInfo()"
mongo --eval "db.printSlaveReplicationInfo()"
# 使用mongodump进行热备份
mongodump --host rs0/192.168.1.10:27017,192.168.1.11:27017 --oplog -o /backup/mongo-$(date +%Y%m%d)
问题1:节点无法加入副本集
- 检查防火墙设置
- 验证密钥文件一致性
- 查看mongod日志/var/log/mongodb/mongod.log
问题2:复制延迟高
// 查看延迟情况
db.getSiblingDB('admin').runCommand({replSetGetStatus: 1}).members.forEach(function(d) {
  print(d.name, d.optimeDate - new Date(), 'seconds behind');
});
当大多数节点不可用时:
# 在剩余节点上强制重新配置
mongod --dbpath /var/lib/mongo --replSet rs0 --port 27017 --force
auditLog配置项# 调整WiredTiger缓存
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4  # 根据内存调整
db.collection.getIndexes()审查索引附录:常用命令速查表
| 命令 | 作用描述 | 
|---|---|
| rs.initiate() | 初始化副本集 | 
| rs.conf() | 查看当前配置 | 
| rs.reconfig() | 重新配置副本集 | 
| rs.add() | 添加新节点 | 
| rs.remove() | 移除节点 | 
| rs.status() | 查看副本集状态 | 
| rs.printSlaveReplicationInfo() | 查看复制延迟信息 | 
”`
注:本文档约3800字,实际部署时请根据具体环境调整参数。建议在生产环境部署前进行充分测试。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。