您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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字,实际部署时请根据具体环境调整参数。建议在生产环境部署前进行充分测试。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
开发者交流群:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。