温馨提示×

温馨提示×

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

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

Linux下如何部署分布式数据库MongoDB

发布时间:2022-02-18 09:34:57 来源:亿速云 阅读:181 作者:小新 栏目:开发技术
# 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 

3. 系统优化

# 禁用透明大页(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 

三、副本集部署实战

1. 安装MongoDB

# 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 

2. 配置三节点副本集

主节点配置(/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 

3. 初始化副本集

// 在主节点执行 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() 

四、分片集群部署指南

1. 架构规划

组件类型 服务器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

2. 配置服务器部署

# 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" } ] }) 

3. 分片节点部署

# 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 } ] }) 

4. 路由节点配置

mongos --configdb configReplSet/192.168.2.10:27019,192.168.2.11:27019,192.168.2.12:27019 --bind_ip 192.168.2.20 

5. 集群整合

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

五、安全配置

1. 认证配置

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 

2. 创建管理员

use admin db.createUser({ user: "clusterAdmin", pwd: "securePassword123", roles: [ { role: "clusterAdmin", db: "admin" } ] }) 

六、监控与维护

1. 常用监控命令

// 查看分片状态 sh.status() // 集群健康检查 db.runCommand({ serverStatus: 1 }) // 性能分析 db.currentOp() db.setProfilingLevel(1, 50) 

2. Ops Manager配置

# 安装监控代理 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 

七、常见问题排查

  1. 节点无法加入副本集

    • 检查防火墙:sudo ufw allow 27017/tcp
    • 验证主机名解析:确保所有节点能互相解析
  2. 分片均衡异常

    // 手动触发均衡 sh.startBalancer() sh.setBalancerState(true) 
  3. 性能下降处理

    • 检查慢查询:db.mycollection.find().explain("executionStats")
    • 重建索引:db.mycollection.reIndex()

八、扩展建议

  1. 多数据中心部署
    通过标签感知分片实现地理分布:

    sh.addShardTag("shard1ReplSet", "US-East") sh.addTagRange("mydatabase.mycollection", { "region": "US" }, { "region": "VT" }, "US-East") 
  2. TLS加密配置

    net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/ca.pem 
  3. 备份策略
    ”`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进行集群管理。

向AI问一下细节

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

AI