vSphere AppHA で Linux ゲストの Apache httpd を保護してみる。

vSphere AppHA で Linux ゲストの Apache httpd を保護してみる。

今回は、vSphere AppHA で、

Apache httpd Server 2.2 を保護してみようと思います。

今回の環境

  • vCenter / ESXi 5.5 u1
  • vSphere AppHA 1.1
  • vCenter Hyperic 5.8.1
  • 保護対象として、Oracle Linux 6.5 と、同梱の httpd を使用しています。

[root@vm03 ~]# cat /etc/oracle-release

Oracle Linux Server release 6.5

[root@vm03 ~]# uname -r

3.8.13-16.2.1.el6uek.x86_64

[root@vm03 ~]# rpm -q httpd

httpd-2.2.15-29.0.1.el6_4.x86_64

※今回は、すでに AppHA 環境が構築できている前提です。

AppHA の環境構築については、下記を参照してください・・・

vSphere AppHA への道。Part 1. Hyperic の vApp デプロイ

Apache httpd の起動

まず、Apacheを起動します。

AppHA(と連携する Hyperic)では、httpd の監視で

/server-status を見るようなので、それが表示できるようにしておきます。

※今回は、とりあえず動くようにします・・・

[root@vm03 ~]# cd /etc/httpd/conf/

[root@vm03 conf]# cp -p httpd.conf httpd.conf_bk

[root@vm03 conf]# vi httpd.conf

httpd の設定ファイル(httpd.conf) では、ServerName を設定して、

<Location /server-status> のコメントアウトを外します。

ちなみに、192.168.5.193 はこのゲスト(vm03)の IP アドレスです。

(修正前)

   917  # Allow server status reports generated by mod_status,

   918  # with the URL of http://servername/server-status

   919  # Change the ".example.com" to match your domain to enable.

   920  #

   921  #<Location /server-status>

   922  #    SetHandler server-status

   923  #    Order deny,allow

   924  #    Deny from all

   925  #    Allow from .example.com

   926  #</Location>

(編集後)

   921  <Location /server-status>

   922      SetHandler server-status

   923      Order deny,allow

   924      Deny from all

   925      Allow from 192.168.5.193

   926  </Location>

今回の httpd.conf の編集内容はこれだけです。

[root@vm03 conf]# diff httpd.conf_bk httpd.conf

276c276

< #ServerName www.example.com:80

---

> ServerName 192.168.5.193

921,926c921,926

< #<Location /server-status>

< #    SetHandler server-status

< #    Order deny,allow

< #    Deny from all

< #    Allow from .example.com

< #</Location>

---

> <Location /server-status>

>     SetHandler server-status

>     Order deny,allow

>     Deny from all

>     Allow from localhost

> </Location>

httpd を自動起動するようにしたうえで、起動しておきます。

[root@vm03 ~]# chkconfig httpd on

[root@vm03 ~]# chkconfig --list httpd

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@vm03 ~]# service httpd start

httpd を起動中:                                            [  OK  ]

[root@vm03 ~]# service httpd status

httpd (pid  1719) を実行中...

Web ブラウザからも表示確認しておきます。

appha-httpd-01.png

ちなみに、今回使用した OS 同梱の httpd は、

/server-status を使用できるようにする mod_status モジュールが

デフォルトで読み込まれます。

[root@vm03 ~]# httpd -M | grep status_module

status_module (shared)

Syntax OK

/server-status のページが取得できることを確認しておきます。

GUI 環境を起動していない Linux だったので、

Web ブラウザではなく curl コマンドで確認してみました。

[root@vm03 ~]# curl http://192.168.5.193/server-status | head

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

103  1763  103  1763    0     0  34599      0 --:--:-- --:--:-- --:--:-- 51852

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

<html><head>

<title>Apache Status</title>

</head><body>

<h1>Apache Server Status for 192.168.5.193</h1>

<dl><dt>Server Version: Apache/2.2.15 (Unix) DAV/2</dt>

<dt>Server Built: Aug 13 2013 10:51:17

</dt></dl><hr /><dl>

<dt>Current Time: Friday, 30-May-2014 01:09:56 JST</dt>

監視対象ゲストへの Hyperic エージェントの導入

今回も、下記の Hyperic Agent を使用します。

hyperic-hqee-agent-x86-64-linux-5.8.1.tar.gz

[root@vm03 ~]# mkdir /opt/vmware

[root@vm03 ~]# cd /opt/vmware/

[root@vm03 vmware]# tar zxf /tmp/hyperic-hqee-agent-x86-64-linux-5.8.1.tar.gz

[root@vm03 vmware]# ln -s hyperic-hqee-agent-5.8.1 hyperic

[root@vm03 vmware]# cd /opt/vmware/hyperic/conf/

[root@vm03 conf]# sed -i "s/#agent.setup.acceptUnverifiedCertificate=no/agent.setup.acceptUnverifiedCertificate=yes/" agent.properties

[root@vm03 conf]# sed -i "s/^accept.unverified.certificates=false/accept.unverified.certificates=true/" agent.properties

下記のような起動スクリプトを作成して・・・

/etc/init.d/hq-agent

#!/bin/bash

#

# hq-agent: Hyperic HQ Agent

#

# chkconfig: 35 99 99

# description: Hyperic HQ Agent

#

HYPERIC_AGENT_USER=root

HYPERIC_AGENT_CMD=/opt/vmware/hyperic/bin/hq-agent.sh

su - $HQ_AGENT_USER -c "$HYPERIC_AGENT_CMD $@"

exit $?

OS 起動時に自動起動するように設定して、

[root@vm03 ~]# chmod +x /etc/init.d/hq-agent

[root@vm03 ~]# chkconfig --add hq-agent

[root@vm03 ~]# chkconfig --list hq-agent

hq-agent        0:off   1:off   2:off   3:on    4:off   5:on    6:off

エージェントを起動します。

※今回もエージェントは対話的に設定しています。

[root@vm03 ~]# service hq-agent start

Starting HQ Agent...... running (2182).

- No token file found, waiting for Agent to initialize

[ Running agent setup ]

Should Agent communications to HQ be unidirectional [default=no]:

What is the HQ server IP address: 192.168.5.186 ★Hyperic Server の IP アドレス

Should Agent communications to HQ always be secure [default=yes]:

What is the HQ server SSL port [default=7443]:

- Testing secure connection ... Success

What is your HQ login [default=hqadmin]:

What is your HQ password: ★パスワード入力

What IP should HQ use to contact the agent [default=192.168.5.193]:

What port should HQ use to contact the agent [default=2144]:

- Received temporary auth token from agent

- Registering agent with HQ

The server to agent communication channel is using a self-signed certificate and could not be verified

Are you sure you want to continue connecting? [default=no]: yes

- HQ gave us the following agent token

    1401380854470-8754554945777910096-7739955026510966986

- Informing agent of new HQ server

- Validating

- Successfully setup agent

[root@vm03 ~]# service hq-agent status

HQ Agent is running (PID:2182).

Current agent bundle: agent-x86-64-linux-5.8.1

Server IP address: 192.168.5.186

Server (SSL) port: 7443

Agent listen port: 2144

[root@vm03 ~]#

Hyperic でのリソース登録確認

Web ブラウザで Hyperic にアクセスすると、

「Dashboard」タブで、エージェントを起動したゲスト OS のリソースが

自動検知されています。

「Add to Inventory」をクリックして、リソース登録します。

appha-httpd-02.png

そのまま、Hyepric からアプリケーション制御ができることも確認しておきます。

「Resources」タブで、登録したゲストの名前をクリックします。

appha-httpd-03.png

「Apache 2.2.15」のリンクをクリックします。

appha-httpd-04.png

「Apache 2.2.15」の「Control」を開いて、

「Stop」できることを確認します。

appha-httpd-05.png

正常に Stop できたら、

「Start」できることも確認しておきます。

appha-httpd-06.png

AppHA でのポリシー設定


ここからは、Web Client で操作します。

VM が所属する vSphereHA クラスタの

「監視」→「アプリケーションの可用性」タブで、

保護対象の VM を選択して「ポリシーの割り当て」をクリックします。

VM が表示されていない場合、Hyperic にリソース登録できているようであれば、

検知されるまで結構時間がかかるようなので気長に待ってみます。

appha-httpd-07.png

「ポリシーの割り当て」画面が表示されます。

今回は、httpd 保護をする AppHA ポリシーが未作成だったので、

「+」をクリックして作成します。

appha-httpd-08.png

「ポリシーの作成」画面になります。

ポリシー名を入力して、「次へ」をクリックします。

appha-httpd-09.png

アプリケーションサービスに「Apache httpd」を選択して、「次へ」をクリックします。

それ以外の設定は、今回はデフォルトのままです。

appha-httpd-10.png

httpd が停止した時の修正(アプリケーションの自動再起動)の時間を設定します。

Hyperic エージェントが httpd を再起動できなかった場合は、

vSphereHA で VM をリセットするようにしています。

appha-httpd-11.png

httpd の障害検知をしたときに、

vCenter アラームがトリガーされるようにチェックを入れておきます。

appha-httpd-12.png

ポリシーの設定内容を確認して「終了」をクリックします。

appha-httpd-13.png

「ポリシーの割り当て」画面に戻るので、

ここまでで作成したポリシーを選択して「OK」をクリックします。

appha-httpd-14.png

保護対象の VM に、AppHA のポリシーが割り当てられました。

appha-httpd-15.png

ちなみに、下記のように1つのポリシーを複数の VM に割り当てることもできます。

appha-httpd-16.png

動作確認

ためしに、httpd のプロセスを停止してみます。

[root@vm03 ~]# ps aux | grep httpd

root      3172  0.0  1.1 175756  2748 ?        Ss   01:41   0:02 /usr/sbin/httpd -k start

apache    3173  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3174  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3175  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3176  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3177  0.0  1.2 175888  2996 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3178  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3179  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

apache    3180  0.0  1.1 175888  2792 ?        S    01:41   0:00 /usr/sbin/httpd -k start

root      5071  1.0  0.3 107516   868 pts/0    S+   05:58   0:00 grep httpd

[root@vm03 ~]# pkill httpd

[root@vm03 ~]# ps aux | grep httpd

root      5074  1.0  0.3 107516   868 pts/0    S+   05:59   0:00 grep httpd

そうすると、AppHA で障害を検知しました。

appha-httpd-17.png

そして少し待ったら、AppHA で自動起動されました。

[root@vm03 ~]# ps aux | grep httpd

root      5093  0.0  1.4 175756  3664 ?        Ss   06:00   0:00 /usr/sbin/httpd -k restart

apache    5094  0.0  1.2 175888  2944 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5095  0.0  1.2 175888  3080 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5096  0.0  0.9 175756  2444 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5097  0.0  0.9 175756  2444 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5098  0.0  0.9 175756  2444 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5099  0.0  1.2 175888  2944 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5100  0.0  1.2 175888  2944 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

apache    5101  0.0  1.2 175888  2944 ?        S    06:00   0:00 /usr/sbin/httpd -k restart

root      5156  1.0  0.3 107516   864 pts/0    S+   06:04   0:00 grep httpd

httpd は、下記のように Hyperic から定期監視されているようです。

1分ごとに、httpd にリクエストしていることがアクセスログからわかります。

[root@vm03 ~]# tail -n 5 /etc/httpd/logs/access_log

192.168.5.193 - - [30/May/2014:06:01:41 +0900] "GET /server-status?auto HTTP/1.1" 200 299 "-" "Hyperic-HQ-Agent/5.8.1"

192.168.5.193 - - [30/May/2014:06:02:41 +0900] "GET /server-status?auto HTTP/1.1" 200 299 "-" "Hyperic-HQ-Agent/5.8.1"

192.168.5.193 - - [30/May/2014:06:03:41 +0900] "GET /server-status?auto HTTP/1.1" 200 299 "-" "Hyperic-HQ-Agent/5.8.1"

192.168.5.193 - - [30/May/2014:06:04:41 +0900] "GET /server-status?auto HTTP/1.1" 200 299 "-" "Hyperic-HQ-Agent/5.8.1"

192.168.5.193 - - [30/May/2014:06:05:41 +0900] "GET /server-status?auto HTTP/1.1" 200 299 "-" "Hyperic-HQ-Agent/5.8.1"

以上、AppHA での httpd 保護でした。

Version history
Revision #:
1 of 1
Last update:
‎05-29-2014 04:40 PM
Updated by: