こんにちは、takayukiです。
休日は自宅の仮想サーバを使ってスキルアップに励んでいます。 最近のマイブームは構成管理ツールAnsibleと PHPでのプログラミングの習得です。インフラの上に載せるものを作りたいです。
今回は、mod_clusterを使ってapache2.4とwildfly10でクラスタ構築してみました。
jdk-8u131-linux-x64.rpm :Oracleのサイトからダウンロード
wildfly-10.1.0.Final.tar.gz :Wildflyのサイトからダウンロード
wildfly用のOSユーザ・グループの作成
widlflyインストールファイルのオーナー、グループの変更
wildfly.serviceの記述内容の修正
launch.shの記述内容の修正
構築時ポイント1
-Djboss.node.name=wildfly01 を追記しノード名を指定します。
wildflyのwelcomeページが表示される事を確認します。
管理ユーザは a を選択します。
username: ここではwfadminを指定します。(任意)
password: (任意)
yesを選択します。
先ほど作成したユーザ wfadminとパスワードを入力して管理画面を表示させます。
DB無しでセッションを使用するjavaアプリを準備する必要があります。
ログインセッションを使用するjavaアプリのサンプルコードはネットで見つける事が出来ましたが、そのままでは動作せずデバッグの必要がありました。 (デバックはEclipseの警告メッセージに従えば行えます)
また、web.xmlにアプリ側でセッションレプリケーションを有効にする記述<distributable/>を追記する必要がありました。
TestTomcat.war
Cookieを一時利用してログインセッションを保持するテスト用javaアプリです。
ログイン/ログオフするだけのjavaアプリです。
ログインID:test@server-tech.xyz
パスワード:login
ログインに成功するとIDとパスワードが表示されます。ログオフするとログインページに戻ります。
ソースコードはこちらです。Eclipseでwarファイルを作成しました。
(wildfly01,wildfly02の2台にデプロイして下さい)
TestTomcat.war
ログイン画面が表示される事を確認します。
アクセスログは
/opt/wildfly-10.1.0.Final/standalone/log
に出力されます。
ここまででwildfly側の設定が完了です。
mod_advertise.so mod_cluster_slotmem.so mod_manager.so mod_proxy_cluster.so 4つのモジュールが出来上がります。
# vi /etc/httpd/conf.d/mod_cluster.conf
00-proxy.confの修正 # vi /etc/httpd/conf.modules.d/00-proxy.conf
01-cluster.confの作成
# vi /etc/httpd/conf.modules.d/01-cluster.conf
apacheの自動起動設定
wildfly01 と wildfly02の2ノードが表示されていればOKです。
ここまででmod_clusterを使ってapache2.4とwildfly10でクラスタ構築する手順は完了です。
休日は自宅の仮想サーバを使ってスキルアップに励んでいます。 最近のマイブームは構成管理ツールAnsibleと PHPでのプログラミングの習得です。インフラの上に載せるものを作りたいです。
今回は、mod_clusterを使ってapache2.4とwildfly10でクラスタ構築してみました。
構築手順編
構成
フロントのapacheで受けたトラフィックをバックのwildflyの負荷に応じて負荷分散させ、
片系が停止した際にはセッション情報が引き継がれるようにします。
apacheが単一障害点になるので実際の構築ではapacheも2重化する必要があるかと思います。
構築時のポイント片系が停止した際にはセッション情報が引き継がれるようにします。
apacheが単一障害点になるので実際の構築ではapacheも2重化する必要があるかと思います。
- wildfly起動時にnode名を指定して起動しないとデフォルトのlocalhostになってしまい、node名重複でapache側にうまく情報が登録されませんでした。
- セッション情報がレプリケーションされている事を確認する為にログインセッションを使用するjavaプログラムを準備する必要がありました。
- デフォルトではwildflyはアクセスログが無効になっているので有効にする必要がありました。
- 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のインストール
/opt/wildfly-10.1.0.Final
にwildflyがインストールされます。
# cd /usr/local/src # rpm -ihv jdk-8u131-linux-x64.rpmwildflyのインストール
# 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 wildflyOSユーザのパスワード設定
# 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)に変更して下さい。
起動スクリプトの準備をします。
wildfly.confの記述内容の修正
赤色が修正点# 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_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
(設定ファイルの指定)
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
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 wildflywildflyの起動確認
# systemctl status wildflywildflyの自動起動を有効
# systemctl enable wildfly
1-5 ブラウザからの確認
http://192.168.0.40:8080wildflyの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アプリの準備
構築時ポイント2DB無しでセッションを使用する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がモジュールをロードできずエラーになります。ソースからインストールする必要があるのでソースインストールの準備です。
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-develmod_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>
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とバッティングするのでコメントアウトします。
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を動作させるのに必要なモジュールをロードするように記述します。
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
2-5 apacheの起動
apacheの起動# systemctl start httpd
apacheの自動起動設定
# systemctl enable httpd
2-6 ブラウザでmod_cluster-managerのステータス確認
http://192.168.0.44:6666/mod_cluster-managerwildfly01 と wildfly02の2ノードが表示されていればOKです。
2-7 ブラウザでapacheを介してのテスト用アプリへのアクセス確認
http://192.168.0.44:6666/TestTomcat/index.jspここまででmod_clusterを使ってapache2.4とwildfly10でクラスタ構築する手順は完了です。
次回予告
Wildflyクラスタの検証レポートを掲載します。- フェールオーバー時のセッション維持確認
- Jmeterを用いた負荷試験
コメント
コメントを投稿