mod_clusterを使ってapache2.4とwildfly10でクラスタ構築する

こんにちは、takayukiです。
休日は自宅の仮想サーバを使ってスキルアップに励んでいます。 最近のマイブームは構成管理ツールAnsibleと PHPでのプログラミングの習得です。インフラの上に載せるものを作りたいです。
今回は、mod_clusterを使ってapache2.4とwildfly10でクラスタ構築してみました。

構築手順編

構成

フロントのapacheで受けたトラフィックをバックのwildflyの負荷に応じて負荷分散させ、
片系が停止した際にはセッション情報が引き継がれるようにします。
apacheが単一障害点になるので実際の構築ではapacheも2重化する必要があるかと思います。

構築時のポイント
  1. wildfly起動時にnode名を指定して起動しないとデフォルトのlocalhostになってしまい、node名重複でapache側にうまく情報が登録されませんでした。

  2. セッション情報がレプリケーションされている事を確認する為にログインセッションを使用するjavaプログラムを準備する必要がありました。

  3. デフォルトではwildflyはアクセスログが無効になっているので有効にする必要がありました。

  4. apache2.4にmod_clusterをインストールする際、公開されているバイナリーではapacheがモジュールをロードできずエラーになります。ソースからインストールする必要がありました。



1 Wildflyの構築

1-1 事前準備

必要なバイナリのダウンロード

jdk-8u131-linux-x64.rpm :Oracleのサイトからダウンロード
wildfly-10.1.0.Final.tar.gz :Wildflyのサイトからダウンロード

/usr/local/src に配置して下さい。

1-2 Wildflyのインストール

Javaのインストール
# cd /usr/local/src
# rpm -ihv jdk-8u131-linux-x64.rpm
wildflyのインストール
# tar zxvf wildfly-10.1.0.Final.tar.gz -C /opt/

/opt/wildfly-10.1.0.Final 
にwildflyがインストールされます。

wildfly用のOSユーザ・グループの作成
# groupadd -g 10001 wildfly

# useradd -u 10001 -g 10001 wildfly



OSユーザのパスワード設定
# passwd wildfly

widlflyインストールファイルのオーナー、グループの変更
# cd /opt/
# chown -R wildfly:wildfly wildfly-10.1.0.Final

1-3 wildflyの設定

widflyの設定ファイル修正
# cd /opt/wildfly-10.1.0.Final/standalone/configuration/
# vi standalone-full-ha.xml

修正箇所
127.0.0.1となっている所をサーバのIP(192.168.0.40 or 192.168.0.42)に変更して下さい。
localhostのみでの待ちうけから外部からアクセスできるように修正します。

wildflyをsystemdに登録
起動スクリプトの準備をします。

# cd /etc/

# mkdir wildfly

# cd wildfly/

# cp -piv /opt/wildfly-10.1.0.Final/docs/contrib/scripts/systemd/wildfly.conf .



# cd /etc/systemd/system/

# cp -piv /opt/wildfly-10.1.0.Final/docs/contrib/scripts/systemd/wildfly.service .



# cd /opt/wildfly-10.1.0.Final/bin/

# cp -piv /opt/wildfly-10.1.0.Final/docs/contrib/scripts/systemd/launch.sh .

wildfly.confの記述内容の修正
#vi /etc/wildfly/wildfly.conf
赤色が修正点

# The configuration you want to run
WILDFLY_CONFIG=standalone-full-ha.xml
(standaloneモードのクラスタ用の設定ファイルを指定します。)

# The mode you want to run
WILDFLY_MODE=standalone
(今回はstadaloneモードを指定します。)

# The address to bind to
WILDFLY_BIND=192.168.0.40
(192.168.0.40で待ちうけるように設定します。)

wildfly.serviceの記述内容の修正
設定ファイル、インストールディレクトリのパスを指定します。

# vi /etc/systemd/system/wildfly.service
赤色が修正点
[Service] Environment=LAUNCH_JBOSS_IN_BACKGROUND=1 EnvironmentFile=-/etc/wildfly/wildfly.conf 
(設定ファイルの指定)

User=wildfly
LimitNOFILE=102642
PIDFile=/var/run/wildfly/wildfly.pid
ExecStart=/opt/wildfly-10.1.0.Final/bin/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND
(インストールディレクトリの指定)

StandardOutput=null

launch.shの記述内容の修正
# vi /opt/wildfly-10.1.0.Final/bin/launch.sh
赤色が修正点

構築時ポイント1
 -Djboss.node.name=wildfly01 を追記しノード名を指定します。


if [ "x$WILDFLY_HOME" = "x" ]; then
WILDFLY_HOME="/opt/wildfly-10.1.0.Final"
fi

if [[ "$1" == "domain" ]]; then
 $WILDFLY_HOME/bin/domain.sh -c $2 -b $3
else
$WILDFLY_HOME/bin/standalone.sh -c $2 -b $3 -Djboss.node.name=wildfly01
fi

1-4 Wildflyの起動

wildflyの起動
# systemctl start wildfly
wildflyの起動確認
# systemctl status wildfly
wildflyの自動起動を有効
# systemctl enable wildfly

1-5 ブラウザからの確認

http://192.168.0.40:8080
wildflyのwelcomeページが表示される事を確認します。


1-6 wildflyの管理ユーザ作成

# su - wildfly

$ cd /opt/wildfly-10.1.0.Final/bin/ 

$ ./add-user.sh


管理ユーザは a を選択します。
username: ここではwfadminを指定します。(任意)
password: (任意)
yesを選択します。

1-7 ブラウザで管理コンソールへの接続を確認

http://192.168.0.40:9990
先ほど作成したユーザ wfadminとパスワードを入力して管理画面を表示させます。


1-8 テスト用javaアプリの準備

構築時ポイント2
DB無しでセッションを使用するjavaアプリを準備する必要があります。
ログインセッションを使用するjavaアプリのサンプルコードはネットで見つける事が出来ましたが、そのままでは動作せずデバッグの必要がありました。 (デバックはEclipseの警告メッセージに従えば行えます) 
また、web.xmlにアプリ側でセッションレプリケーションを有効にする記述<distributable/>を追記する必要がありました。


TestTomcat.war
Cookieを一時利用してログインセッションを保持するテスト用javaアプリです。
ログイン/ログオフするだけのjavaアプリです。

ログインID:test@server-tech.xyz
パスワード:login

ログインに成功するとIDとパスワードが表示されます。ログオフするとログインページに戻ります。
ソースコードはこちらです。Eclipseでwarファイルを作成しました。

1-9 テスト用javaアプリのデプロイ

テスト用のjavaアプリをデプロイ
(wildfly01,wildfly02の2台にデプロイして下さい)
TestTomcat.war


1-10 ブラウザでログインテスト用ページにアクセス

http://192.168.0.40:8080/TestTomcat/index.jsp
ログイン画面が表示される事を確認します。


1-11 wildflyのアクセスログを有効にする

構築時ポイント3

デフォルトではアクセスログは無効になっているので管理CLIより有効にする必要がありました。

# cd /opt/wildfly-10.1.0.Final/bin 

# ./jboss-cli.sh 

connect 192.168.0.40:9990 

/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add 

exit


アクセスログは
/opt/wildfly-10.1.0.Final/standalone/log
に出力されます。

ここまででwildfly側の設定が完了です。



2 apacheの構築

2-1 事前準備

githubよりmod_proxy_cluster\native のファイルをダウンロードして
/usr/local/srcに設置して下さい。

構築時ポイント4
apache2.4にmod_clusterをインストールする際、公開されているバイナリーでは apacheがモジュールをロードできずエラーになります。ソースからインストールする必要があるのでソースインストールの準備です。

2-2 apache2.4のインストール

apacheをyumでインストールします。
# yum install httpd

2-3 mod_clusterのソースインストール

コンパイルに必要なパッケージをインストール yumコマンドでmod_clusterに必要な以下のパッケージをインストールします。
# yum install cmake

# yum install apr-util

# yum install apr-util-devel

# yum install apr

# yum install apr-devel

# yum install httpd-devel

mod_clusterのビルドとインストール

# cd /usr/local/src/native
# mkdir build
# cp -p CMakeLists.txt build
# cd build
# cmake ../ -G "Unix Makefiles"
# make
# ls modules

mod_advertise.so mod_cluster_slotmem.so mod_manager.so mod_proxy_cluster.so 4つのモジュールが出来上がります。
# cd modules
# cp -p * /etc/httpd/modules

2-4 apacheの設定

mod_cluster.confの作成 mod_cluster.confを編集します。
# vi /etc/httpd/conf.d/mod_cluster.conf


<ifmodule manager_module>
 Listen 192.168.0.44:6666
<virtualhost 192.168.0.44:6666>

<directory/>
 Require all granted
</directory>

 KeepAliveTimeout 60
 MaxKeepAliveRequests 0
ServerAdvertise on
 ManagerBalancerName modcluster
 AdvertiseFrequency 5
 AdvertiseGroup 224.0.1.105:23364
 AllowDisplay On
 EnableMCPMReceive

<location mod_cluster-manager>
 SetHandler mod_cluster-manager
 Require all granted
</location>

</virtualhost>
</ifModule>



00-proxy.confの修正 # vi /etc/httpd/conf.modules.d/00-proxy.conf

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
mod_proxy_clusterとバッティングするのでコメントアウトします。

01-cluster.confの作成
# vi /etc/httpd/conf.modules.d/01-cluster.conf

LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so

LoadModule advertise_module modules/mod_advertise.so

mod_clusterを動作させるのに必要なモジュールをロードするように記述します。

2-5 apacheの起動

apacheの起動
# systemctl start httpd

apacheの自動起動設定
# systemctl enable httpd

2-6 ブラウザでmod_cluster-managerのステータス確認

http://192.168.0.44:6666/mod_cluster-manager
wildfly01 と wildfly02の2ノードが表示されていればOKです。


2-7 ブラウザでapacheを介してのテスト用アプリへのアクセス確認

http://192.168.0.44:6666/TestTomcat/index.jsp



ここまででmod_clusterを使ってapache2.4とwildfly10でクラスタ構築する手順は完了です。

次回予告

Wildflyクラスタの検証レポートを掲載します。
  1. フェールオーバー時のセッション維持確認
  2. Jmeterを用いた負荷試験

コメント