Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 下 MongoDB 完整部署、配置與服務化管理實戰

編輯:Linux 教學

MongoDB 作為主流文件型 NoSQL 資料庫,以高效能、無結構、易擴展著稱。本文記錄在 RHEL/CentOS 6.x 上部署 MongoDB 2.6.3 的完整流程,含目錄規劃、配置檔、System V 啟動腳本優化與 NUMA 調優。

MongoDB 核心特性速覽

  • 文件模型:BSON (Binary JSON),支援嵌套文件、陣列,適合物件導向資料
  • 無結構:動態結構插入,無需預定義 Schema
  • 高效能:記憶體映射檔案、豐富索引 (含地理空間、TTL、全文)
  • 高可用:Replica Set 自動故障轉移
  • 水平擴展:Sharding 自動分片
  • 適用場景:即時分析、內容管理、IoT、快取層、日誌收集
  • 不適用:強 ACID 交易、複雜跨集合 Join、傳統 BI

部署步驟

1. 環境準備與目錄規劃


# 建議掛載獨立磁碟/LVM於 /data/db, /var/log/mongodb
mkdir -p /usr/local/mongodb /data/db /var/log/mongodb
chown -R mongod:mongod /data/db /var/log/mongodb  # 建議建立專用用戶

2. 下載與安裝 (二進制包)


cd /usr/local/src
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.3.tgz
tar -xzf mongodb-linux-x86_64-2.6.3.tgz -C /usr/local/mongodb --strip-components=1

3. 核心配置檔 /etc/mongod.conf


# 基礎網路
port = 27017
bind_ip = 0.0.0.0  # 生產環境請限制具體 IP

# 儲存與日誌
dbpath = /data/db
logpath = /var/log/mongodb/mongod.log
logappend = true

# 效能與儲存引擎 (2.6 預設 MMAPv1, 3.0+ 支援 WiredTiger)
journal = true
# storageEngine = wiredTiger  # 3.0+ 才支援

# 複寫集 (生產必備)
# replSet = rs0

# 安全
# auth = true
# keyFile = /etc/mongodb.key

4. 環境變數與路徑


echo 'export PATH=$PATH:/usr/local/mongodb/bin' > /etc/profile.d/mongodb.sh
source /etc/profile.d/mongodb.sh

5. 優化版 System V 啟動腳本 /etc/init.d/mongod


#!/bin/bash
# MongoDB 服務管理腳本 - 支援 NUMA、狀態檢查、安全停止
# chkconfig: 345 85 15
# description: MongoDB Database Server

. /etc/rc.d/init.d/functions

MONGOD="/usr/local/mongodb/bin/mongod"
CONFIG="/etc/mongod.conf"
PIDFILE="/var/run/mongodb/mongod.pid"
LOCKFILE="/var/lock/subsys/mongod"
USER="mongod"

# NUMA 交錯記憶體分配優化 (需安裝 numactl)
NUMACTL="numactl --interleave=all"
if ! which numactl >/dev/null 2>&1; then
    NUMACTL=""
fi

start() {
    echo -n "Starting MongoDB: "
    daemon --user $USER --pidfile $PIDFILE "$NUMACTL $MONGOD -f $CONFIG --fork --pidfilepath $PIDFILE"
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    echo
    return $RETVAL
}

stop() {
    echo -n "Stopping MongoDB: "
    killproc -p $PIDFILE -d 30 $MONGOD
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f $LOCKFILE $PIDFILE
    echo
    return $RETVAL
}

status() {
    status -p $PIDFILE $MONGOD
}

case "$1" in
    start) start ;;
    stop) stop ;;
    restart) stop; start ;;
    status) status ;;
    *) echo "Usage: $0 {start|stop|restart|status}"; exit 1 ;;
esac
exit $RETVAL

6. 系統層面優化 (關鍵)


# 1. 關閉 Transparent Huge Pages (THP) - 必須!
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 加入 /etc/rc.local 永久生效

# 2. 設定 ulimit (開啟檔案數、進程數)
cat >> /etc/security/limits.conf <> /etc/sysctl.conf <

7. 啟動與驗證


chmod +x /etc/init.d/mongod
chkconfig --add mongod
chkconfig mongod on
service mongod start

# 驗證連線
mongo --eval "db.runCommand({connectionStatus:1})"
# 檢查日誌
tail -f /var/log/mongodb/mongod.log

Replica Set 初始化 (生產環境標準)


# 在 primary 節點
rs.initiate({
  _id: "rs0",
  members: [
    {_id: 0, host: "mongo1:27017"},
    {_id: 1, host: "mongo2:27017"},
    {_id: 2, host: "mongo3:27017", arbiterOnly: true}
  ]
})

常見運維操作

  • 備份:mongodump --host localhost --port 27017 --out /backup/$(date +%F)
  • 還原:mongorestore --host localhost --port 27017 /backup/2024-01-15
  • 監控:mongostat, mongotop, db.serverStatus()
  • 索引分析:db.collection.explain().find({...})

總結

MongoDB 部署易上手,但生產環境必須處理:THP 關閉、ulimit 調大、NUMA 交錯分配、Replica Set 高可用、備份策略、監控告警。配置檔與啟動腳本納入版控,配合 Ansible 實現一鍵部署,才是成熟運維姿態。

Copyright © Windows教程網 All Rights Reserved