Pacemaker 資料一覧
2015/10/26更新
対応バージョン: Vagrant 1.4.3, Pacemaker 1.0.13, Heartbeat 3.0.5, Apache 2.2.15, Tomcat 7.0.56
以下で作成したApacheの2ノードクラスタにTomcatを組み込む手順を示す。
関連資料・記事
要件は以下の通りとする。
Tomcat用にVIP(192.168.1.102)を用意し、稼動系・待機系どちらにも接続できるようにする
コンテンツはSANやNASなどの共有領域には置かずに各サーバのローカルに置くものとする
待ち受けポートはデフォルトのままとし、Webサーバへのアクセスは8080、AJP接続は8009とする
Apacheに/app/でアクセスしてきた場合にVIPの8009ポートにAJP接続する
AJP接続がうまくいかない場合に備えてWebサーバ用のポート8080は閉じずに残しておく
Vagrantfile作成
基本的な設定は今までと同様とし、プロビジョニング用のスクリプトでTomcat環境を構築する。
# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define :s1 do |v| v.vm.box = "centos65_64" v.vm.hostname = "s1" v.vm.network :private_network, ip: "192.168.1.121" v.vm.network :private_network, ip: "192.168.9.121" v.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2122 v.vm.provision :shell, :path => "heartbeat.sh" v.vm.provision :shell, :path => "apache.sh" v.vm.provision :shell, :path => "tomcat.sh" v.vm.provision :shell, :path => "httpd-proxy.sh" end config.vm.define :s2 do |v| v.vm.box = "centos65_64" v.vm.hostname = "s2" v.vm.network :private_network, ip: "192.168.1.122" v.vm.network :private_network, ip: "192.168.9.122" v.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2222 v.vm.provision :shell, :path => "heartbeat.sh" v.vm.provision :shell, :path => "apache.sh" v.vm.provision :shell, :path => "tomcat.sh" v.vm.provision :shell, :path => "httpd-proxy.sh" v.vm.provision :shell, :path => "pacemaker.sh" end end
前回のheartbeat.shからApacheの環境構築部分を切り出してapache.shとし、Tomcatの構築(tomcat.sh)とAJP接続の設定(httpd-proxy.sh)をそれぞれ新規作成する。
pacemaker.shはtomcatのリソース定義を追加する。
heartbeat.sh, apache.sh
heartbeat.shの前回作成ファイルから以下のApacheの環境構築部分を削除してapache.shに移動する。
### install httpd(Apache) yum -y install httpd cp /vagrant/index.html /var/www/html
tomcat.sh
#!/bin/sh today=`date "+%Y%m%d"` ### install yum -y install java-1.7.0-openjdk useradd -s /sbin/nologin -u 700 tomcat cd /tmp wget http://ftp.riken.jp/net/apache/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat-7.0.56.tar.gz tar zxvf apache-tomcat-7.0.56.tar.gz rm -f apache-tomcat-7.0.56.tar.gz mv apache-tomcat-7.0.56 /usr/local cd /usr/local chown -R tomcat:tomcat apache-tomcat-7.0.56 ln -s apache-tomcat-7.0.56 tomcat install -m 0755 /vagrant/tomcat /etc/init.d chkconfig --add tomcat chkconfig tomcat off ### setting cp -p /etc/profile /etc/profile.${today} JAVA_PATH=`readlink -e $(which java)` cat << EOD >> /etc/profile JAVA_HOME=${JAVA_PATH} CATALINA_HOME=/usr/local/tomcat export JAVA_HOME CATALINA_HOME EOD source /etc/profile ### firewall cd /etc/sysconfig cp -p iptables iptables.${today} iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8009 -j ACCEPT service iptables save service iptables restart
### install
Tomcatに先立ちOpenJDKをインストールする。
実行ユーザのtomcatを作成する2台のサーバでそれぞれ作成するが、UIDの付与をシステムに任せておくと2台で別々のUIDが割り当てられる可能性があるので-uオプションでUIDを指定しておく。今回の構成のようにコンテンツが各ローカルにあれば問題ないが、共有領域に両サーバからアクセスする構成にする場合にUIDが異なっているとファイルの書き込みができなくなる。
Tomcatのバイナリを任意のミラーサイトからダウンロードして/usr/local配下に配置する。
/vagrantに用意した起動スクリプトtomcatを/etc/init.dにインストールし、システム起動時の自動起動はOFFにする。
(tomcat)
#!/bin/bash # # tomcat Startup script for the Tomcat Servlet Container # # chkconfig: 2345 35 65 # description: Tomcat is the servlet container that is used in the official \ # Reference Implementation for the Java Servlet and JavaServer \ # Pages technologies TOMCAT_USER=tomcat CATALINA_HOME=/usr/local/tomcat . /etc/rc.d/init.d/functions prog=tomcat start() { echo -n $"Starting $prog: " daemon --user $TOMCAT_USER $CATALINA_HOME/bin/startup.sh > /dev/null RETVAL=$? if [ $RETVAL -eq 0 ]; then echo_success else echo_failure fi echo [ $RETVAL = 0 ] && touch /var/lock/subsys/$prog return $RETVAL } stop() { echo -n $"Stopping $prog: " daemon --user $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh > /dev/null RETVAL=$? if [ $RETVAL -eq 0 ]; then echo_success else echo_failure fi echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) INSTANCES=`ps --columns 512 -aef|grep java|grep tomcat|grep org.apache.catalina.startup.Bootstrap|wc -l` if [ $INSTANCES -eq 0 ]; then echo $prog is stopped RETVAL=3 else if [ $INSTANCES -eq 1 ]; then echo $prog is running 1 instance... else echo $prog is running $INSTANCES instances... fi RETVAL=0 fi ;; *) echo $"Usage: $prog {start|stop|restart|status|help}" exit 1 esac exit $RETVAL
### setting
/etc/profileにTomcatが動作するための環境変数JAVA_HOME,CATALINA_HOMEを定義する。
### firewall
2つの待受ポート(8080,8009)へのアクセスを許可する。
httpd-proxy.sh
### connect Apache - Tomcat cp /vagrant/httpd-proxy.conf /etc/httpd/conf.d/
### connect Apache - Tomcat
/vagrantに用意したApache - TomcatのAJP接続用のファイルを配置する。
(httpd-proxy.conf)
<Location /app/> ProxyPass ajp://192.168.1.102:8009/ </Location>
pacemaker.sh
前回の設定にTomcatのリソース定義を追加する。
: ### setting resouce - Tomcat JAVA_PATH="/usr" crm configure primitive vip_tomcat ocf:heartbeat:IPaddr2 params \ ip="192.168.1.102" nic="eth1" cidr_netmask="24" op monitor interval="10" crm configure primitive tomcat ocf:heartbeat:tomcat params \ java_home="${JAVA_PATH}" catalina_home="/usr/local/tomcat" \ tomcat_user="tomcat" statusurl="http://192.168.1.102:8080/" \ op start interval="0" timeout="90" on-fail="restart" \ op monitor interval="10" timeout="60" on-fail="restart" \ op stop interval="0" timeout="300" on-fail="block" crm configure group webapp vip_tomcat tomcat
### setting resouce - Tomcat
java_homeに指定するのはjavaプログラムそのものではなく2つ上のディレクトリ。RA(/usr/lib/ocf/resource.d/heartbeat/tomcat)の中でjavaのパスを以下のように決めているので注意が必要である。
(tomcat)
: 586 JAVA_HOME="${OCF_RESKEY_java_home}" : 644 JAVA=${JAVA_HOME}/bin/java :
仮想マシン起動
以上の設定が終わったら仮想マシンを起動し、以下のURLにアクセスしてどちらもTomcatのトップ画面が出ればOKである。
http://192.168.1.102:8080/ ... TomcatのWebサーバ
http://192.168.1.101/app/ .... Apache - Tomcat AJP接続
リソースの状態は以下のようになっているはずである。
# crm_mon -f : Online: [ s1 s2 ] Resource Group: web vip_httpd (ocf::heartbeat:IPaddr2): Started s1 httpd (ocf::heartbeat:apache): Started s1 Resource Group: webapp vip_tomcat (ocf::heartbeat:IPaddr2): Started s1 tomcat (ocf::heartbeat:tomcat): Started s1 Migration summary: * Node s1: * Node s2: