読者です 読者をやめる 読者になる 読者になる

CA MOBILE エンジニアブログ

株式会社シーエー・モバイルのエンジニアブログです

【旧ブログ】"UltraMonkey"でLet's Dance!

NetWork

どうもです。インフラグループ pi★shiです。

さかのぼる事、2年前。 わたくしはあるオープンソースの存在を知りました。

その名も・・・

【UltraMonkey】

なんだか90年代を代表するダンスユニットを彷彿させるような 躍動感あるネーミングです。

そんなワケで当時検証した内容を記載してみることにします。 なにぶん一昔前のネタですのでうろ覚えですが、try me!

◆構成はコチラ

⇒2台をバランサ(アクティブ/スタンバイ構成)2台をWebサーバとします。

f:id:cam-engineer:20150904150735j:plain

◆利用ソースはコチラ

⇒保存場所は全て/usr/local/src。その後解凍。

・本体

 ultramonkey-l7-2.1.2-1.tar.gz

SSL

 sslproxy-1.0.1-1.tar.gz

・heartbeat

 heartbeat-2.1.4-1.rhel5.x86_64.RPMS.tar.gz

・ライブラリ

 apache-log4cxx-0.10.0.tar.gz
 apr-1.3.3.tar.gz
 apr-util-1.3.4.tar.gz
 boost_1_36_0.tar.gz
 DBD-mysql-4.005.tar.gz

◆参考マニュアルはコチラ

・UltraMonkey-L7ドキュメント

http://sourceforge.jp/projects/ultramonkey-l7/docman/

・UltraMonkey-L7 インストールマニュアル v1.8【v2.1.2-x対応版】

http://sourceforge.jp/projects/ultramonkey-l7/docs/uml7-install_manual_2.1.2-2_ja/ja/2/uml7-install_manual_2.1.2-2_ja.txt

・UltraMonkey-L7 管理者マニュアル v2.2【v2.1.2-x対応版】

http://sourceforge.jp/projects/ultramonkey-l7/docs/uml7-administration_manual_2.1.2-2_ja/ja/3/uml7-administration_manual_2.1.2-2_ja.txt

・UltraMonkey-L7 SSLProxyインストールマニュアル v1.1 【v1.0.1-x対応版】

http://sourceforge.jp/projects/ultramonkey-l7/docs/SSLProxy_install_manual_v1.1/ja/1/SSLProxy_install_manual_v1.1.txt

・UltraMonkey-L7 SSLProxy管理者マニュアル v1.2 【v1.0.1-x対応版】

http://sourceforge.jp/projects/ultramonkey-l7/docs/SSLProxy_admin_manual_v1.2/ja/7/SSLProxy_admin_manual_v1.2.txt

・UltraMonkey-L7 Heartbeat v2環境インストールマニュアル v1.3

http://sourceforge.jp/projects/ultramonkey-l7/docs/UltraMonkey-L7_HBv2_install_manual_v1.3/ja/7/UltraMonkey-L7_HBv2_install_manual_v1.3.txt

apr ライブラリのインストール

# cd /usr/local/src/apr-1.3.3
# ./configure --prefix=/usr --libdir=/usr/lib64
# make && make install

apr-util ライブラリのインストール

# cd /usr/local/src/apr-util-1.3.4
# ./configure --prefix=/usr --libdir=/usr/lib64 --with-apr=/usr
# make && make install

log4cxx のインストール

# cd /usr/local/src/apache-log4cxx-0.10.0
# ./autogen.sh
# ./configure --prefix=/usr --libdir=/usr/lib64
# make && make install

MySQL client インストール

# cd /usr/local/src/mysql-5.0.67
# ./configure --prefix=/usr/local/mysql --without-server --with-charset=sjis --with-extra-charsets=all
# make && make install

perlモジュールインストール

# cpan -i LWP::UserAgent
# cpan -i LWP::Debug
# cpan -i Net::Ping
# cpan -i Crypt::SSLeay
# cpan -i Net::FTP
# cpan -i Net::SMTP
# cpan -i Net::POP3
# cpan -i Mail::IMAPClient
# cpan -i Net::LDAP
# cpan -i Net::DNS
# cpan -i DBI

DBD::mysqlインストール

# cd /usr/local/src/DBD-mysql-4.005
# perl Makefile.PL --cflags=-I/usr/local/mysql/include/mysql 
--libs=
"-L/lib64 -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm" --testuser=test --testpassword=test 
--testhost=test --testdb=test
# make
# make test
# make install

UltraMonkey-L7 インストール

# cd /usr/local/src/ultramonkey-l7-2.1.2-1
# ./configure
# make && make install

監視設定ツール(l7directord)の設定

# mv /etc/ha.d/conf/l7directord.cf.sample /etc/ha.d/conf/l7directord.cf
# vi /etc/ha.d/conf/l7directord.cf
⇒適宜パラメータを設定。設定項目は主に監視の時間や回数といった所。

UltraMonkey-L7起動

# /etc/init.d/l7vsd start

boostライブラリのインストール

# cd /usr/local/src/boost_1_36_0
# ./configure
# make && make install

へッダファイルディレクトリへのシンボリックリンク作成

# rm -f /usr/local/include/boost
# ln -s /usr/local/include/boost-1_36 /usr/local/include/boost

sslproxyインストール

# cd /usr/local/src/sslproxy-1.0.1-1.tar.gz
# ./configure
# make && make install

sslproxy設定ファイル修正

# vi /etc/l7vs/sslproxy/sslproxyadm.cf
# vi /etc/l7vs/sslproxy/sslproxy.target_1.cf
# vi /etc/l7vs/sslproxy/sslproxy.target_2.cf
⇒適宜パラメータを設定。sslproxyadm.cfの設定項目はログ保存場所とか
sslproxy.target.cfの設定項目はエンドポイントのIP/portとか証明書周りの設定とか

iptabels設定

# vi /etc/sysconfig/iptables
⇒下記追記
### VRRP
-A INPUT -p vrrp -j ACCEPT
-A OUTPUT -p vrrp -j ACCEPT
### MultiCast Config
-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.22 -j ACCEPT

Heartbeat設定~事前準備

# yum -y install libtool-ltdl.x86_64
# yum -y install lm_sensors.x86_64
# yum -y install PyXML
# cp -p /etc/modprobe.conf /etc/modprobe.conf.bak
# vi /etc/modprobe.conf.bak
⇒下記項目修正
options softdog nowayout=0

Heartbeat設定~インストール

# cd /usr/local/src/heartbeat-2.1.4-1.rhel5.x86_64.RPMS
# wget ftp://ftp.muug.mb.ca/mirror/centos/5.2/updates/x86_64/RPMS/OpenIPMI-libs-2.0.6-6.el5_2.2.x86_64.rpm
# rpm -ivh heartbeat-2.1.4-1.x86_64.rpm 
heartbeat-gui-2.1.4-1.x86_64.rpm 
pils-2.1.4-1.x86_64.rpm stonith-2.1.4-1.x86_64.rpm 
OpenIPMI-libs-2.0.6-6.el5_2.2.x86_64.rpm

Heartbeat設定~付属モジュールのインストールと配置

# wget 
"http://wiki.linux-ha.org/ja/hbmonitor_ja?action=AttachFile&do=get&target=hb-monitor-1.02-1.hb214.x86_64.rpm"
# rpm -ivh hb-monitor-1.02-1.hb214.x86_64.rpm
# mkdir /etc/ha.d/monitoring
# cd /usr/local/src/monitoring-1.0-x86_64
# chown root:root heartbeat_logmoni.sh
# chown root:root startstop
# chmod 755 heartbeat_logmoni.sh
# chmod 755 startstop
# cp -p heartbeat_logmoni.sh /etc/ha.d/monitoring
# cp -p startstop /etc/ha.d/resource.d

Heartbeat設定~設定ファイルの配置

⇒サンプルを利用。
# mkdir /root/hb_def
# cp /usr/share/doc/ultramonkey-l7-2.1.3-0/heartbeat-ra/ha.cf /etc/ha.d
# cp /usr/share/doc/ultramonkey-l7-2.1.3-0/heartbeat-ra/authkeys /etc/ha.d
# cp /usr/share/doc/ultramonkey-l7-2.1.3-0/heartbeat-ra/logd.cf /etc/

Heartbeat設定~設定ファイル作成及び修正

# vi /etc/init.d/heartbeat
restart)
sleeptime=`ha_parameter deadtime`
add->?? ?RunStartStop "pre-stop"
StopHA
Echo
EchoNoNl Waiting to allow resource takeover to complete:
sleep $sleeptime
sleep 10 # allow resource takeover to complete (hopefully).
echo_success
Echo
add-> ??? ?RunStartStop "pre-start"
StartHA
Echo


# vi /etc/ha.d/ha.cf
crm on
logfile /var/log/ha-log
logfacility local0
keepalive 3
deadtime 10
deadping 10
warntime 10
initdead 60
udpport 694
auto_failback on
bcast eth2
node 【メイン】
node 【バックアップ】
respawn root /usr/lib64/heartbeat/pingd -m 100 -d 5s -a default_ping_set
watchdog /dev/watchdog
# vi /etc/logd.cf
debugfile /var/log/ha-debug ← コメント解除(デバッグメッセージ用ファイル名)
logfile??????? /var/log/ha-log ← コメント解除(ログファイル名)
logfacility??? none ← コメント解除&変更(syslogへログを出力しない)
# vi /etc/ha.d/authkeys
auth 1
1 sha1 camobile
2 md5 less than sha1
# vi /var/lib/heartbeat/crm/cib.xml

Heartbeat設定~設定ファイルのチェック

# crm_verify -x /var/lib/heartbeat/crm/cib.xml

Heartbeat設定~RAスクリプトの配置

# cd /usr/local/src/ultramonkey-l7-hbra
# chown root:root L7vsd
# chown root:root L7directord
# chown root:root VIPcheck
# chown root:root SSLProxy
# chmod 755 L7vsd
# chmod 755 L7directord
# chmod 755 VIPcheck
# chmod 755 SSLProxy
# cp -p L7vsd /usr/lib/ocf/resource.d/heartbeat/L7vsd
# cp -p L7directord /usr/lib/ocf/resource.d/heartbeat/L7directord
# cp -p VIPcheck /usr/lib/ocf/resource.d/heartbeat/VIPcheck
# cp -p SSLProxy /usr/lib/ocf/resource.d/heartbeat/SSLProxy
# cp -p L7vsd /etc/ha.d/resource.d/L7vsd
# cp -p L7directord /etc/ha.d/resource.d/L7directord
# cp -p VIPcheck /etc/ha.d/resource.d/VIPcheck
# cp -p SSLProxy /etc/ha.d/resource.d/SSLProxy

Heartbeat設定~起動

# /etc/init.d/heartbeat start

Heartbeat設定~ステータス確認

# crm_mon

Heartbeat設定~自動起動設定

# chkconfig --level 23 heartbeat on

UltraMonkey-L7動作確認

# /etc/init.d/l7vsd status
# /etc/ha.d/conf/l7directord.cf status?? ??? ?「running」が表示されていることを確認
# l7vsadm -l
Layer-7 Virtual Server version 2.1.2-1
Prot LocalAddress:Port ProtoMod Scheduler
-> RemoteAddress:Port?????????? Forward Weight ActiveConn InactConn
TCP 【UltraMonkey仮想IP】:http sessionless rr
-> 【Web1のIP】:http????????? Masq??? 2????? 0????????? 5
-> 【web2のIP】:http????????? Masq??? 1????? 0????????? 4

こんな感じです。

当社はLVS+keepalivedでレイヤ4レベルで負荷分散していることが多く、 レイヤ7レベルで負荷分散させたい時に商用サービスとして乗せられるかが 当時の検証のポイント・・・だった記憶があります。

ただ、リアルサーバ向けの通信がリバースプロキシと同一状態になり、 プライベートIPで通信しちゃうんですよね。。

そのためUltraMonkey経由でSMTPを振った際に、 メールサーバがオープンリレー状態になってしまい スパムの送り手になり兼ねないので導入が困難だっていう結論・・・ になったって当時隣にすわっていたわたくしの上司が思い出させてくれました。

※わたくしは忘れてました。