見出し画像

【Linux】 ApacheのHA構成

HA(High Availability)構成

Apache HTTPサーバーを用いたウェブサービスを高可用性(にするための設定や構成のこと。これにより、システム全体の信頼性が向上し、ダウンタイムが最小限に抑えられる。


HAの構成要素

サーバー

Apache HTTPサーバーを実行するための最低2台のサーバーが必要。

ロードバランサ、Keepalived、Corosync/Pacemaker

複数のApacheサーバーへのリクエストを分散させるために、HAProxyやNginxを別のサーバーにインストールすることもできる。
または、IPアドレスのフェイルオーバー機能を使う。

ストレージ、DRBD

クラスタ内のApacheサーバーが共有するデータを保持するためのストレージが必要。共有ストレージ(例: NAS、SAN)を使用するか、DRBDのようなデータレプリケーション技術を使用して各サーバーのストレージを同期させる。

ネットワークスイッチ、ルーター

クラスタ内のサーバー間の通信やインターネットへの接続を行う。
ルーターは、ネットワーク層でのパケット転送を行い、サブネット間の通信を可能にする。


作業ログ


設定例(DRBD、Keepalived、Pacemaker、ルーター)

DRBDインストール

DRBDを利用するために、ELRepoリポジトリからDRBD関連のパッケージをインストール。
DRBD関連のユーティリティとカーネルモジュールがインストールされ、drbdadmコマンドを使用できるようになる。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum install -y drbd90-utils kmod-drbd90


その他のパッケージのインストール

yum install -y httpd keepalived corosync pcs pacemaker
  • httpd: Apache HTTPサーバー。

  • keepalived: VRRPプロトコルを実装するデーモン。ネットワークインタフェースのIPアドレスをマスターとバックアップノード間で共有し、フェイルオーバーを提供します。

  • corosync: クラスタエンジン。ノード間で通信し、クラスタ内のノードの状態を監視します。

  • pcs: Pacemaker構成システム。クラスタリソースとサービスの構成と管理を行います。

  • pacemaker: クラスタリソースマネージャー。リソースの監視、フェイルオーバー、および回復を行います。


Apacheの起動

systemctl enable httpd
systemctl start httpd


DRBDの設定

DRBDを設定してデータのレプリケーションを行うために、DRBDリソース設定ファイルを作成し、HAを構成する両方のサーバで実行する。
ファイルがなければ作成する。

vi /etc/drbd.d/apache.res
-----------------------------------------------------------
resource apache {
    protocol C;
    startup {
        wfc-timeout 15;
        degr-wfc-timeout 60;
    }
    net {
        cram-hmac-alg sha1;
        shared-secret "your_secret";
    }
    on "hostname1" {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.1.1:7788;
        meta-disk internal;
    }
    on "hostname2" {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.1.2:7788;
        meta-disk internal;
    }
}
  • resource apache: DRBDリソースの名前を"apache"として定義。

  • protocol C: DRBDプロトコルCを使用することを指定しています。プロトコルCは、データとメタデータの同期が完了するまで、書き込み操作が完了しないことを保証。

  • startup: リソースの起動時のタイムアウト設定を定義。

    • wfc-timeout 15: DRBDリソースが開始されるまでの待機時間を15秒に設定。

    • degr-wfc-timeout 60: DRBDリソースが開始されるまでの待機時間を、デグレードモード(一方のノードがオフラインの場合)で60秒に設定。

  • net: ネットワーク関連の設定を定義。

    • cram-hmac-alg sha1: HMACアルゴリズムとしてSHA-1を使用。

    • shared-secret "your_secret": ノード間の通信を保護するための共有シークレットを設定しています。実際には、"your_secret"を独自の秘密鍵に置き換える必要がある。

  • on "hostname1": ホスト1(例:192.168.1.1)に関する設定を定義。

    • device /dev/drbd0: DRBDデバイスとして/dev/drbd0を使用。

    • disk /dev/sdb1: データが複製される実際のディスクパーティションとして/dev/sdb1を指定。

    • address 192.168.1.1:7788: ノード1のIPアドレスと通信ポートを指定。

    • meta-disk internal: メタデータ用のディスクスペースを、データディスクと同じパーティション内に設定。

  • on "hostname2": ホスト2(例:192.168.1.2)に関する設定を定義。


DRBDリソースの作成と同期

両方のサーバで以下のコマンドを実行して、DRBDリソースを作成し、データの同期を開始。

drbdadm create-md apache
drbdadm up apache
  • rbdadm create-md apache:メタデータを初期化。

  • drbdadm up apache:DRBDリソースをアクティブ化


Keepalivedの設定

両方のサーバでKeepalivedを設定して仮想IPアドレスを管理。
KeepalivedのVRRPプロトコルは、IPプロトコル番号112を使用するため、ファイアウォールで許可する必要がある。

vi /etc/keepalived/keepalived.conf
-----------------------------------------------------------
global_defs {
    router_id YOUR_ROUTER_ID
}

vrrp_script check_apache {
    script "/usr/bin/systemctl status httpd"
    interval 2
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass your_password
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        check_apache
    }
}
  • global_defs ブロック:

    • router_id: ルーターの一意のID。

  • vrrp_script check_apache ブロック:

    • VRRPスクリプトを定義。このスクリプトは、特定のサービス(の状態をチェックするために使用。

    • script: サービスの状態をチェックするために実行するシェルコマンドを指定。

    • interval: スクリプトを実行する間隔を秒単位で指定。

    • fall: スクリプトが連続して失敗する回数がこの値に達すると、サービスがダウンしていると判断。

    • rise: スクリプトが連続して成功する回数がこの値に達すると、サービスがアップしていると判断。

  • vrrp_instance VI_1 ブロック:

    • VRRPインスタンスを定義。

    • state: インスタンスの初期状態を指定。通常は BACKUP または MASTER のいずれかを指定。

    • interface: VRRPインスタンスがバインドされるネットワークインターフェースを指定。

    • virtual_router_id: VRRPインスタンスに割り当てる一意の仮想ルーターIDを指定。

    • priority: VRRPインスタンスの優先度を指定します。優先度が高いインスタンスがMASTERになる。

    • advert_int: VRRPアドバタイズメッセージを送信する間隔を秒単位で指定。

    • authentication: VRRPインスタンス間で使用する認証情報を定義。

      • auth_type: 認証タイプを指定します。通常は PASS を使用。

      • auth_pass: 認証に使用するパスワードを指定。

    • virtual_ipaddress: VRRPインスタンスに割り当てる仮想IPアドレスを指定。

    • track_script: VRRPインスタンスが追跡するスクリプトを指定

    • heck_apache: 以前に定義されたvrrp_script check_apache ブロックで定義したスクリプトを参照。このスクリプトは、Apache HTTPサーバの状態をチェックし、その結果に応じてVRRPインスタンスの状態が変化する。

VRRPの設定


Keepalivedの有効化

systemctl enable keepalived
systemctl start keepalived


クラスタの状態の確認

クラスタの状態を確認するためにKeepalivedのログを確認。
ログでVRRP_Instance(VI_1)がマスターまたはバックアップの状態になっていること。

journalctl -u keepalived


テスト

Apacheサーバーが正しくフェイルオーバーされるかどうかをテストする

systemctl stop httpd
  1. マスターノードでApacheサービスを停止

  2. 仮想IPアドレスにアクセスして、もう一方のノードが正常にアクティブになっていることを確認

  3. バックアップノードがアクティブになったら、Apacheサービスを再起動してフェイルバックをテスト

systemctl start httpd











よろしければサポートお願いします!よりいい情報を発信します。