您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux下如何部署分布式数据库MongoDB
## 一、MongoDB分布式架构概述
MongoDB作为领先的NoSQL数据库,其分布式架构主要通过三种模式实现:
1. **副本集(Replica Set)**
提供数据冗余和高可用性,包含Primary节点(主节点)、Secondary节点(从节点)和Arbiter节点(仲裁节点)
2. **分片集群(Sharded Cluster)**
横向扩展方案,包含三个核心组件:
- Shard:存储实际数据的分片
- Config Server:存储集群元数据
- Mongos:路由查询请求
3. **混合部署**
副本集与分片集群的组合模式,适合超大规模场景
## 二、环境准备
### 1. 硬件要求
- 建议配置:
- CPU:4核以上
- 内存:8GB+(生产环境建议16GB起)
- 存储:SSD硬盘,容量根据数据量规划
- 网络:千兆内网互联
### 2. 软件要求
- 操作系统:Ubuntu 20.04+/CentOS 7+
- MongoDB版本:4.4+(推荐5.0+)
- 依赖组件:
```bash
# Ubuntu/Debian
sudo apt-get install libcurl4 openssl liblzma5
# CentOS/RHEL
sudo yum install libcurl openssl xz-libs
# 禁用透明大页(THP)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 调整文件描述符限制
echo "* soft nofile 64000" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 64000" | sudo tee -a /etc/security/limits.conf
# 关闭NUMA(可选)
sudo apt-get install numactl
numactl --interleave=all mongod
# Ubuntu示例
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
主节点配置(/etc/mongod.conf):
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
replication:
replSetName: "rs0"
net:
bindIp: 192.168.1.10,127.0.0.1
port: 27017
从节点配置差异:
net:
bindIp: 192.168.1.11,127.0.0.1
// 在主节点执行
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", arbiterOnly: true }
]
})
// 验证状态
rs.status()
组件类型 | 服务器IP | 端口范围 |
---|---|---|
Config Server | 192.168.2.10 | 27019 |
Mongos | 192.168.2.20 | 27017 |
Shard1 | 192.168.2.31-33 | 27018 |
Shard2 | 192.168.2.41-43 | 27018 |
# configsvr.conf
sharding:
clusterRole: configsvr
replication:
replSetName: configReplSet
net:
bindIp: 192.168.2.10
port: 27019
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 2
初始化命令:
rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "192.168.2.10:27019" },
{ _id: 1, host: "192.168.2.11:27019" },
{ _id: 2, host: "192.168.2.12:27019" }
]
})
# shard1.conf
sharding:
clusterRole: shardsvr
replication:
replSetName: shard1ReplSet
net:
bindIp: 192.168.2.31
port: 27018
初始化每个分片的副本集:
// 在第一个分片执行
rs.initiate({
_id: "shard1ReplSet",
members: [
{ _id: 0, host: "192.168.2.31:27018" },
{ _id: 1, host: "192.168.2.32:27018" },
{ _id: 2, host: "192.168.2.33:27018", arbiterOnly: true }
]
})
mongos --configdb configReplSet/192.168.2.10:27019,192.168.2.11:27019,192.168.2.12:27019 --bind_ip 192.168.2.20
// 连接到mongos
mongo --host 192.168.2.20 --port 27017
// 添加分片
sh.addShard("shard1ReplSet/192.168.2.31:27018,192.168.2.32:27018")
sh.addShard("shard2ReplSet/192.168.2.41:27018,192.168.2.42:27018")
// 启用分片数据库
sh.enableSharding("mydatabase")
// 创建分片集合
sh.shardCollection("mydatabase.mycollection", { "userId": "hashed" })
security:
authorization: enabled
keyFile: /etc/mongodb-keyfile
生成keyfile:
openssl rand -base64 756 > /etc/mongodb-keyfile
chmod 400 /etc/mongodb-keyfile
chown mongodb:mongodb /etc/mongodb-keyfile
use admin
db.createUser({
user: "clusterAdmin",
pwd: "securePassword123",
roles: [ { role: "clusterAdmin", db: "admin" } ]
})
// 查看分片状态
sh.status()
// 集群健康检查
db.runCommand({ serverStatus: 1 })
// 性能分析
db.currentOp()
db.setProfilingLevel(1, 50)
# 安装监控代理
curl -OL https://downloads.mongodb.com/on-prem-mms/deb/mongodb-mms-monitoring-agent_6.0.8.100-1_amd64.deb
sudo dpkg -i mongodb-mms-monitoring-agent_6.0.8.100-1_amd64.deb
节点无法加入副本集
sudo ufw allow 27017/tcp
分片均衡异常
// 手动触发均衡
sh.startBalancer()
sh.setBalancerState(true)
性能下降处理
db.mycollection.find().explain("executionStats")
db.mycollection.reIndex()
多数据中心部署
通过标签感知分片实现地理分布:
sh.addShardTag("shard1ReplSet", "US-East")
sh.addTagRange("mydatabase.mycollection", { "region": "US" }, { "region": "VT" }, "US-East")
TLS加密配置
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/ca.pem
备份策略
”`bash
mongodump –host rs0/192.168.1.10:27017,192.168.1.11:27017 –archive=/backup/mongodump_$(date +%Y%m%d).archive
# OPS Manager定时备份
通过以上步骤,您已成功在Linux环境下部署了生产级MongoDB分布式集群。建议定期进行性能测试和故障演练,确保集群稳定性。
注:实际部署时请根据您的具体硬件环境调整配置参数,特别是内存分配(wiredTiger cacheSizeGB)和网络设置。生产环境建议使用专业监控工具如Prometheus+Grafana或MongoDB Ops Manager进行集群管理。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。