今回は、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 ブラウザからも表示確認しておきます。
ちなみに、今回使用した 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」をクリックして、リソース登録します。
そのまま、Hyepric からアプリケーション制御ができることも確認しておきます。
「Resources」タブで、登録したゲストの名前をクリックします。
「Apache 2.2.15」のリンクをクリックします。
「Apache 2.2.15」の「Control」を開いて、
「Stop」できることを確認します。
正常に Stop できたら、
「Start」できることも確認しておきます。
AppHA でのポリシー設定
ここからは、Web Client で操作します。
VM が所属する vSphereHA クラスタの
「監視」→「アプリケーションの可用性」タブで、
保護対象の VM を選択して「ポリシーの割り当て」をクリックします。
VM が表示されていない場合、Hyperic にリソース登録できているようであれば、
検知されるまで結構時間がかかるようなので気長に待ってみます。
「ポリシーの割り当て」画面が表示されます。
今回は、httpd 保護をする AppHA ポリシーが未作成だったので、
「+」をクリックして作成します。
「ポリシーの作成」画面になります。
ポリシー名を入力して、「次へ」をクリックします。
アプリケーションサービスに「Apache httpd」を選択して、「次へ」をクリックします。
それ以外の設定は、今回はデフォルトのままです。
httpd が停止した時の修正(アプリケーションの自動再起動)の時間を設定します。
Hyperic エージェントが httpd を再起動できなかった場合は、
vSphereHA で VM をリセットするようにしています。
httpd の障害検知をしたときに、
vCenter アラームがトリガーされるようにチェックを入れておきます。
ポリシーの設定内容を確認して「終了」をクリックします。
「ポリシーの割り当て」画面に戻るので、
ここまでで作成したポリシーを選択して「OK」をクリックします。
保護対象の VM に、AppHA のポリシーが割り当てられました。
ちなみに、下記のように1つのポリシーを複数の VM に割り当てることもできます。
動作確認
ためしに、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 で自動起動されました。
[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 保護でした。