
【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
マスターノードでApacheサービスを停止
仮想IPアドレスにアクセスして、もう一方のノードが正常にアクティブになっていることを確認
バックアップノードがアクティブになったら、Apacheサービスを再起動してフェイルバックをテスト
systemctl start httpd
いいなと思ったら応援しよう!
