溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux下如何部署分布式數據庫MongoDB

發布時間:2022-02-18 09:34:57 來源:億速云 閱讀:170 作者:小新 欄目:開發技術
# 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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女