溫馨提示×

Apache在Ubuntu上如何實現高可用

小樊
39
2025-10-19 05:51:14
欄目: 智能運維

Apache在Ubuntu上實現高可用的核心方案:Keepalived + 負載均衡/高可用集群
高可用(High Availability, HA)旨在通過冗余和故障轉移機制,確保Apache服務持續可用。在Ubuntu上,常用Keepalived實現故障轉移(虛擬IP漂移),結合Apache負載均衡模塊(如mod_proxy_balancer)分散請求,提升整體可用性。以下是具體實現步驟:

一、基礎環境準備

  1. 服務器配置:準備至少2臺Ubuntu服務器(如ubuntu-master、ubuntu-backup),確保網絡互通(同一局域網),安裝相同版本的Apache(sudo apt update && sudo apt install apache2)。
  2. 主機解析:編輯/etc/hosts文件,添加對方服務器的IP和主機名映射(避免DNS依賴):
    echo "192.168.1.10 ubuntu-master" | sudo tee -a /etc/hosts
    echo "192.168.1.11 ubuntu-backup" | sudo tee -a /etc/hosts
    
  3. 安裝必要工具:安裝net-tools(查看網絡信息)、vim(編輯配置)等工具:
    sudo apt install -y net-tools vim
    

二、配置Apache高可用基礎(優化與冗余)

1. 優化Apache配置

調整Apache的多處理模塊(MPM)和核心參數,提升性能與穩定性:

  • 禁用prefork(默認模塊,不適合高并發),啟用event模塊(適合異步非阻塞場景):
    sudo a2dismod mpm_prefork
    sudo a2enmod mpm_event
    sudo systemctl restart apache2
    
  • 啟用KeepAlive:減少TCP連接建立/關閉的開銷(適用于頻繁請求的場景)。編輯/etc/apache2/apache2.conf,設置:
    KeepAlive On
    MaxKeepAliveRequests 100  # 單個連接最大請求數
    KeepAliveTimeout 2        # 連接保持時間(秒)
    
  • 調整進程/線程參數:根據服務器資源(CPU、內存)修改mpm_event配置(/etc/apache2/mods-enabled/mpm_event.conf):
    <IfModule mpm_event_module>
        StartServers             2      # 啟動時的進程數
        MinSpareThreads          25     # 最小空閑線程數
        MaxSpareThreads          75     # 最大空閑線程數
        ThreadLimit              64     # 線程數上限
        ThreadsPerChild          25     # 每個子進程創建的線程數
        MaxRequestWorkers        150    # 最大并發請求數(根據內存調整,如1GB內存約150MaxConnectionsPerChild   1000   # 單個子進程處理的最大請求數(避免內存泄漏)
    </IfModule>
    
    重啟Apache使配置生效:sudo systemctl restart apache2。

2. 配置Apache負載均衡(分散請求)

若有多臺后端Apache服務器(如backend1:192.168.1.20、backend2:192.168.1.21),可通過mod_proxy_balancer將請求分發到后端,提升整體吞吐量:

  • 啟用必要模塊
    sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests
    sudo systemctl restart apache2
    
  • 配置負載均衡虛擬主機:編輯/etc/apache2/sites-available/loadbalancer.conf,添加以下內容:
    <VirtualHost *:80>
        ServerName yourdomain.com
        <Proxy balancer://mycluster>
            BalancerMember http://192.168.1.20:80 route=1  # 后端服務器1
            BalancerMember http://192.168.1.21:80 route=2  # 后端服務器2
            ProxySet lbmethod=byrequests  # 按請求數均勻分配(可選:bytraffic按流量、bysession按會話)
        </Proxy>
        ProxyPass / balancer://mycluster/
        ProxyPassReverse / balancer://mycluster/
    </VirtualHost>
    
  • 啟用配置并重啟
    sudo a2ensite loadbalancer.conf
    sudo systemctl restart apache2
    
    測試:訪問http://yourdomain.com,通過日志(/var/log/apache2/access.log)確認請求被分發到后端服務器。

三、配置Keepalived實現故障轉移(虛擬IP漂移)

Keepalived通過VRRP協議實現虛擬IP(VIP)的自動漂移,當主服務器故障時,備服務器接管VIP,確保服務連續性。

1. 安裝Keepalived

在主(ubuntu-master)、備(ubuntu-backup)服務器上均安裝:

sudo apt install -y keepalived

2. 配置主服務器(ubuntu-master)

編輯/etc/keepalived/keepalived.conf,設置主節點參數:

global_defs {
    router_id LVS_MASTER  # 唯一標識(主備需不同,如MASTER/BACKUP)
}

vrrp_script chk_apache {
    script "/etc/keepalived/check_apache.sh"  # 健康檢查腳本(檢測Apache是否運行)
    interval 2                                # 檢查間隔(秒)
    weight 2                                  # 檢查失敗時權重降低2
}

vrrp_instance VI_1 {
    state MASTER                                # 主節點狀態
    interface ens160                            # 網卡名(通過`ip a`查看,如ens33)
    virtual_router_id 51                        # 虛擬路由ID(主備需相同,1-255)
    priority 101                                # 優先級(主備需不同,主>備,如101/100)
    advert_int 1                                # 心跳間隔(秒)
    authentication {
        auth_type PASS
        auth_pass 12345                         # 密碼(主備需相同)
    }
    virtual_ipaddress {
        192.168.1.100/24                        # 虛擬IP(VIP,客戶端訪問的地址)
    }
    track_script {
        chk_apache                              # 關聯健康檢查腳本
    }
}

3. 配置備服務器(ubuntu-backup)

修改/etc/keepalived/keepalived.conf,設置備節點參數(與主節點差異部分):

global_defs {
    router_id LVS_BACKUP  # 唯一標識
}

vrrp_instance VI_1 {
    state BACKUP          # 備節點狀態
    interface ens160      # 網卡名(與主節點一致)
    virtual_router_id 51  # 虛擬路由ID(與主節點一致)
    priority 100          # 優先級(低于主節點)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345   # 密碼(與主節點一致)
    }
    virtual_ipaddress {
        192.168.1.100/24  # 虛擬IP(與主節點一致)
    }
    track_script {
        chk_apache        # 關聯相同的健康檢查腳本
    }
}

4. 創建健康檢查腳本

編寫腳本檢測Apache是否運行,若未運行則重啟Apache(避免因進程崩潰導致VIP漂移)。在主、備服務器上均創建/etc/keepalived/check_apache.sh

#!/bin/bash
if ps ax | grep -v grep | grep apache2 > /dev/null; then
    exit 0  # Apache運行正常
else
    systemctl restart apache2  # 重啟Apache
    if [ $? -eq 0 ]; then
        exit 0
    else
        exit 1  # 重啟失敗,觸發VIP漂移
    fi
fi

賦予執行權限:

sudo chmod +x /etc/keepalived/check_apache.sh

5. 啟動Keepalived

在主、備服務器上啟動服務并設置開機自啟:

sudo systemctl enable keepalived
sudo systemctl start keepalived

6. 驗證故障轉移

  • 查看VIP綁定:在主服務器上執行ip a,應看到192.168.1.100綁定在網卡上;備服務器無此IP。
  • 模擬主服務器故障:停止主服務器的Apache服務(sudo systemctl stop apache2),觀察Keepalived日志(journalctl -u keepalived -f),確認VIP漂移到備服務器。
  • 恢復主服務器:重啟Apache(sudo systemctl start apache2),VIP應自動漂移回主服務器。

四、注意事項

  • 網絡要求:主備服務器需在同一局域網,確保VRRP協議通信不受阻礙(關閉防火墻或放行VRRP協議,默認端口112)。
  • 資源分配:根據服務器硬件調整Apache的MaxRequestWorkers(并發請求數),避免資源耗盡。
  • 監控與告警:使用Zabbix、Nagios等工具監控Apache狀態(如CPU、內存、請求數),設置告警規則(如VIP漂移時發送郵件/短信)。
  • SSL配置:若需HTTPS,需在Apache中配置SSL證書(certbot申請Let’s Encrypt免費證書),并同步到備服務器。

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