Linux下如何配置MongoDB副本集

发布时间:2022-01-26 10:24:02 作者:小新
阅读:230
GO开发者专用服务器,限时0元免费领! 查看>>
# 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

2.2 软件环境

2.3 主机规划示例

主机名 IP地址 角色
mongo1 192.168.1.10 Primary
mongo2 192.168.1.11 Secondary
mongo3 192.168.1.12 Secondary

三、安装MongoDB

3.1 添加MongoDB仓库

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

3.2 安装MongoDB

# Ubuntu/Debian
sudo apt install -y mongodb-org

# CentOS/RHEL
sudo yum install -y mongodb-org

3.3 配置SELinux(如启用)

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

四、配置副本集

4.1 修改配置文件

编辑/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

4.2 创建密钥文件(安全认证)

openssl rand -base64 756 > /etc/mongodb-keyfile
chmod 400 /etc/mongodb-keyfile
chown mongod:mongod /etc/mongodb-keyfile

4.3 启动服务

sudo systemctl enable mongod
sudo systemctl start mongod

五、初始化副本集

5.1 在主节点执行初始化

// 连接到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" }
  ]
})

5.2 验证副本集状态

// 查看副本集状态
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
}

六、高级配置

6.1 读写分离配置

// 设置从节点可读
rs.slaveOk()

// 或在连接字符串中指定
mongodb://192.168.1.10:27017,192.168.1.11:27017/?replicaSet=rs0&readPreference=secondaryPreferred

6.2 优先级设置

// 修改节点优先级(优先级高的更容易成为主节点)
cfg = rs.conf()
cfg.members[1].priority = 2
rs.reconfig(cfg)

6.3 添加仲裁节点

rs.addArb("192.168.1.13:27017")

七、维护与监控

7.1 常见维护操作

// 强制重新选举
rs.stepDown(300)  // 主节点退位,300秒内不参与选举

// 移除节点
rs.remove("192.168.1.12:27017")

// 添加新节点
rs.add("192.168.1.14:27017")

7.2 监控指标

# 查看oplog状态
mongo --eval "db.getSiblingDB('local').oplog.rs.stats()"

# 检查复制延迟
mongo --eval "db.printReplicationInfo()"
mongo --eval "db.printSlaveReplicationInfo()"

7.3 备份策略

# 使用mongodump进行热备份
mongodump --host rs0/192.168.1.10:27017,192.168.1.11:27017 --oplog -o /backup/mongo-$(date +%Y%m%d)

八、故障处理

8.1 常见问题排查

问题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');
});

8.2 强制恢复流程

当大多数节点不可用时:

# 在剩余节点上强制重新配置
mongod --dbpath /var/lib/mongo --replSet rs0 --port 27017 --force

九、安全加固建议

  1. 启用认证:配置keyFile和用户权限
  2. 网络隔离:使用VPN或专用网络
  3. 定期轮换:每3个月更新密钥文件
  4. 审计日志:启用auditLog配置项

十、性能优化

10.1 硬件层面

10.2 配置优化

# 调整WiredTiger缓存
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4  # 根据内存调整

10.3 索引策略


附录:常用命令速查表

命令 作用描述
rs.initiate() 初始化副本集
rs.conf() 查看当前配置
rs.reconfig() 重新配置副本集
rs.add() 添加新节点
rs.remove() 移除节点
rs.status() 查看副本集状态
rs.printSlaveReplicationInfo() 查看复制延迟信息

”`

注:本文档约3800字,实际部署时请根据具体环境调整参数。建议在生产环境部署前进行充分测试。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:
  1. 配置mongodb副本集
  2. mongodb 副本集链接配置

开发者交流群:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux mongodb

上一篇:Linux系统保存文件的命令是什么

下一篇:@Transactional注解怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
开发者交流群×