SoftLayer 環境における Linux-HA Apache クラスタ構築手順書 2014 年 12 月 17 日 1.0 版 株式会社サードウェア
目次 1 はじめに... 2 2 利用ソフトウェア 用語について... 3 3 本書について... 4 4 SoftLayer 構成... 4 4.1 構成図... 4 4.2 OS/ ソフトウェア情報... 6 4.3 SoftLayer 環境... 6 5 SoftLayer 設定... 7 5.1 SoftLayer 仮想サーバ作成... 7 5.2 ディスク追加... 7 5.3 SoftLayer サーバへの接続... 7 5.4 SoftLayer サーバ基本設定... 8 6 パッケージの追加... 9 6.1 DRBD インストール... 9 6.2 Heartbeat インストール... 11 6.3 Pacemaker インストール... 12 7 DRBD 設定... 13 7.1 DRBD 基本設定... 13 7.2 DRBD メタデータ作成... 14 7.3 DRBD 起動... 15 7.4 DRBD 初回同期... 16 7.5 DRBD マウント領域準備... 17 7.6 DRBD 停止... 18 8 Apache インストール... 19 9 Heartbeat 設定... 20 10 Pacemaker 設定... 21 10.1 crm コマンド開始... 21 10.2 クラスタのオプション設定... 21 10.3 リソース設定... 22 10.4 設定確認... 23
改訂履歴 版番号改訂年月日作成者備考 1.0 2014 年 12 月 17 日澤田初版 1
1 はじめに 商標 登録商標について DRBD LINBIT は オーストリア アメリカ合衆国及びその他の国における LINBIT 社の商標ならびに登録商標です IBM AIX は 世界の多くの国で登録された IBM Corp. の商標です SoftLayer は SoftLayer,Inc., IBM Company の登録商標または商標です その他 本ドキュメントに記載されている製品名は 各社の商標 登録商標です ライセンス情報 本ドキュメントの著作権は株式会社サードウェアが保有しています 2
2 利用ソフトウェア 用語について SoftLayer における Linux-HA Apache クラスタ構築手順書 DRBD DRBD は 分散ストレージシステムであり 2.6.33 以降の Linux カーネルに採用されています DRBD はオープンソースを用いたシェアードナッシングソリューションにおいて 世界をリードする製品になりました DRBD は LINBIT 社により活動的に開発 メンテナンスされています Heartbeat/Pacemaker 実績のあるクラスタ管理ソフトウェアで サービス継続を実現します Linux-HA 本手順書では DRBD Heartbeat Pacemaker で構成される高可用性のクラスタシステムをさします ポータブル IP アドレス グローバルで利用できる IP アドレスをさします プライベート IP アドレス SoftLayer 上で使用できるローカルな IP アドレスをさします 3
3 本書について 本書は SoftLayer 上にて Linux-HA クラスタを使った Apache サーバの構築手順を記載したホワイトペーパーです 以下 本書では Linux-HA クラスタを使った Apache サーバを Apache クラスタ と記載します また 本書ではプライベート IP を使用して構築しておりますが プライベート IP をポータブル IP に書き換えるこ とによって ポータブル IP を使用した Apache クラスタを構築することが可能です 4 SoftLayer 構成 SoftLayer 上に構築するサーバの構成を以下に記載します 4.1 構成図 SoftLayer 構成図を記載します SoftLayer のシンガポールのデータセンターに仮想サーバ2 台を構築し HA 化します 4
Linux-HA の基本構成図を記載します SoftLayer 上に構築するシステムの詳細は以下のようになります SoftLayer 構成図の Primary 機が稼動系 Secondary 機が待機状態となります 障害が発生しますと稼動系が Secondary 機へサーバーの切り替えを行い サービスの継続します 5
4.2 OS/ ソフトウェア情報 OS ソフトウェア情報を以下に記載します SoftLayer における Linux-HA Apache クラスタ構築手順書 OS 及びソフトウェア役割 ソフトウェア名 バージョン OS CentOS 6.6 HA DRBD 8.4.4-7 Heartbeat 3.0.5-1 Pacemaker 1.0.12-1 4.3 SoftLayer 環境 SoftLayer 環境を以下に記載します SoftLayer 構築環境一覧 役割 ホスト名 IF IP アドレス データセンター IP 共用設定 Primary vipha1 eth0 10.66.172.70( プライベート IP) eth1 119.81.105.214( ポータブル IP) シンガポール なし Secondary vipha2 eth0 10.66.172.71( プライベート IP) eth1 119.81.192.194 ( ポータブル IP) シンガポール なし VIP 10.66.172.73( プライベート IP) シンガポール あり SoftLayer の仕様上プライベート IP とポータブル IP のアドレスが自動的に振られますが 本手順書ではプライ ベート IP のみ使用して構築を行います Apache へは通常 10.66.172.73 でアクセスし クラスタを切り替えても同じ IP アドレスでアクセスできます 注意 VIP 用アドレスは Primary 機 Secondary 機で共に使用できる IP アドレスを申請し取得してくだい IP アドレスが共用できない設定になっているとサーバの切り替えが正しく行えません 6
5 SoftLayer 設定 Apache クラスタとして 利用するサーバを Primary 機 Secondary 機として 2 台構築します SoftLayer 上で仮想サーバを構築する手順を記載します 5.1 SoftLayer 仮想サーバ作成 仮想サーバの作成方法は一般的な SoftLayer の手順となりますので 割愛します 5.2 ディスク追加 仮想サーバを作成後に DRBD 用にディスクを追加します こちらも一般的な SoftLayer の手順となりますので 手順を割愛します 新しく追加したディスクに対して パーティション作成をする fdisk コマンドやファイルシステムを作成する mkfs コ マンドなどが必要となりますが 一般的な Linux のコマンドとなるために 手順は割愛します 5.3 SoftLayer サーバへの接続 SoftLayer サーバへのアクセスは VPN を利用して接続します 接続方法は一般的な SoftLayer の VPN 接続手順になりますので 割愛します 7
5.4 SoftLayer サーバ基本設定 基本的なサーバ設定を実施します selinux 設定 本書では selinux の設定を disabled に設定します 以下のように vi コマンドで実施します /etc/sysconfig/selinux # vi /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted iptables 設定 本書では全ての設定および動作確認が取れるまでは iptables の設定を一時的に off にします 以下のコマンドで iptables を off にします # chkconfig iptables off # hosts 設定 ホスト名を使用して通信を行うため ホスト名を設定します 以下のように vi コマンドで実施します # vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.66.172.70 vipha1 10.66.172.71 vipha2 サーバ再起動 サーバの基本設定が終了したら サーバの再起動をします 以下のコマンドで再起動を実施します # shutdown r now # 再起動後は ping コマンドを使い 対向ノードと疎通できることを確認します 8
6 パッケージの追加 Apache クラスタを構築するために必要な各種パッケージを追加します 追加するパッケージは Primary 機 Secondary 機で同様になります パッケージの追加手順を以下に記載します 6.1 DRBD インストール DRBD のインストール手順を記載します 本書の例では LINBIT 社 ( 日本国内では株式会社サードウェア ) から送付されるお客様用ハッシュキーを利 用し LINBIT DRBD リポジトリを登録しインストールを行います また LINBIT レポジトリを使用しない コンパイルを伴うインストール手順はここでは割愛します 9
DRBD インストール 以下は LINBIT リポジトリを使用した際のインストール手順になります # yum install drbd kmod-drbd ===================================================================== Package Arch Version Repository Size ===================================================================== Installing: drbd x86_64 8.4.4-7.el6 drbd-8.4 28 k kmod-drbd x86_64 8.4.4_2.6.32_431.11.2-7.el6 drbd-8.4 1.3 M Installing for dependencies: drbd-bash-completion x86_64 8.4.4-7.el6 drbd-8.4 7.0 k drbd-heartbeat x86_64 8.4.4-7.el6 drbd-8.4 8.8 k drbd-pacemaker x86_64 8.4.4-7.el6 drbd-8.4 27k drbd-udev x86_64 8.4.4-7.el6 drbd-8.4 5.8 k drbd-utils x86_64 8.4.4-7.el6 drbd-8.4 265 k drbd-xen x86_64 8.4.4-7.el6 drbd-8.4 8.3 K Transaction Summary ===================================================================== Install 8 Package(s) Total download size: 1.6 M Installed size: 7.8 M Is this ok [y/n]: y 10
6.2 Heartbeat インストール Heartbeat のインストール手順を記載します 以下は LINBIT リポジトリを使用した際のインストール手順になります Heartbeat インストール # yum install heartbeat ==================================================================== Package Arch Version Repository Size ===================================================================== Installing: heartbeat x86_64 3.0.5-1.0hg20110617.7e3a82377fa8.el6 linux-ha-clustering 162 k Installing for dependencies: OpenIPMI-libs x86_64 2.0.16-14.el6 rhui-region-rhel-server-releases 473 k PyXML x86_64 0.8.4-19.el6 rhui-region-rhel-server-releases 892 k cluster-glue x86_64 1.0.9-1.el6 linux-ha-clustering 255 k cluster-glue-libs x86_64 1.0.9-1.el6 linux-ha-clustering 110 k heartbeat-libs x86_64 3.0.5-1.0hg20110617.7e3a82377fa8.el6 linux-ha-clustering 263 k libtool-ltdl x86_64 2.2.6-15.5.el6 rhui-region-rhel-server-releases 44 k lm_sensors-libs x86_64 3.1.1-17.el6 rhui-region-rhel-server-releases 38 k net-snmp-libs x86_64 1:5.5-49.el6_5.2 rhui-region-rhel-server-releases 1.5 M openhpi-libs x86_64 2.14.1-6.el6 rhui-region-rhel-server-releases 135 k perl-timedate noarch 1:1.16-11.1.el6 rhui-region-rhel-server-releases 34 k resource-agents x86_64 3.9.2-40.el6 rhui-region-rhel-server-releases 342 Transaction Summary ===================================================================== Install 12 Package(s) Total download size: 4.2 M Installed size: 15 M Is this ok [y/n]: y 11
6.3 Pacemaker インストール Pacemaker のインストール手順を記載します 以下は LINBIT リポジトリを使用した際のインストール手順になります Pacemaker インストール # yum install pacemaker ==================================================================== Package Arch Version Repository Size ===================================================================== Installing: pacemaker x86_64 1.0.12-1.el6 linux-ha-clustering 669 k Installing for dependencies: libesmtp x86_64 1.0.4-15.el6 rhui-region-rhel-server-releases 57 k pacemaker-libs x86_64 1.0.12-1.el6 linux-ha-clustering 256 k Transaction Summary ===================================================================== Install 3 Package(s) Total download size: 982 k Installed size: 3.7 M Is this ok [y/n]: y 12
7 DRBD 設定 7.1 DRBD 基本設定 DRBD の基本設定を実施します 設定が必要なコンフィグファイルは以下のファイルになります /etc/drbd.d/global_common.conf /etc/drbd.d/r0.res global_common.conf はインストール後にデフォルトのファイルとして存在しますが r0.res は新規に作成が 必要となります global_common.conf 設定 vi エディタ等でコンフィグファイルを修正します 設定値は以下になります # vi /etc/drbd.d/global_common.conf global { usage-count no; } common { disk { } net { } al-extents 6433; on-io-error detach; c-plan-ahead 20; c-max-rate 10M; c-min-rate 1M; c-fill-target 0; c-delay-target 100; use-rle yes; max-buffers 128k; sndbuf-size 0; rcvbuf-size 0; csums-alg md5; cram-hmac-alg sha1; shared-secret "password"; } 13
r0.res 設定 vi エディタ等でコンフィグファイルを作成します 設定値は以下になります # vi /etc/drbd.d/r0.res resource r0{ protocol C; device /dev/drbd0; disk /dev/xvdc1; meta-disk internal; on vipha1 { address 10.66.172.70:7788; } } on vipha2 { address 10.66.172.71:7788; } 上記の例では disk /dev/xvdc1 としておりますが 構築の環境に合わせて変更してください 7.2 DRBD メタデータ作成 メタデータを作成します Primary 機 Secondary 機で共に以下のコマンドを実行します メタデータ作成 # drbdadm create-md r0 Writing meta data... initializing activity log NOT initializing bitmap New drbd meta data block successfully created. New drbd meta data block successfully created. が表示されることで正常にメタデータが作成でき たことを確認します DRBD はストレージサイズ 1TB あたり 32MB のメタデータ領域を必要とします 正確なメタデータサイズの計算 方法を含むメタデータついての詳しい情報は DRBD ユーザーズガイドをご覧ください http://www.drbd.jp/users-guide/ch-internals.html#s-meta-data-size 14
7.3 DRBD 起動 DRBD を起動します Primary 機 Secondary 機で共に以下のコマンドを実行します DRBD 起動 # service drbd start Starting DRBD resources: [ create res: r0 prepare disk: r0 adjust disk: r0 adjust net: r0 ]... # プロンプトが戻ってくることで 接続できていることが確認できます 15
7.4 DRBD 初回同期 DRBD の初回同期を起動します Primary 機で以下のコマンドを実行します DRBD 初回同期 # drbdadm primary --force all # プロンプトが戻ってくることで 同期開始を確認します 次に DRBD 同期中の状態を確認します DRBD の初回同期には時間がかかります ディスクのサイズにより同期完了までの時間が異なります 以下のコマンドで DRBD 同期の状態を確認します DRBD 状態確認 # watch cat /proc/drbd Every 2.0s: cat /proc/drbd Thu May 1 15:15:51 2014 version: 8.4.4 (api:1/proto:86-101) GIT-hash: 3c1f46cb19993f98b22fdf7e18958c21ad75176d build by buildsystem@linbit, 2014-04-09 07:59:07 0: cs:synctarget ro:secondary/primary ds:inconsistent/uptodate C r----- ns:0 nr:0 dw:0 dr:6194176 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2191428 [=============>...] sync'ed: 73.9% (2140/8188)M finish: 0:03:30 speed: 10,400 (10,236) want: 10,240 K/sec 上記の様に同期完了までの時間が表示されていることで同期が始まっていることを確認できます 同期が完了すると以下のように表示されます # watch cat /proc/drbd Every 2.0s: cat /proc/drbd Thu May 1 16:06:21 2014 version: 8.4.4 (api:1/proto:86-101) GIT-hash: 3c1f46cb19993f98b22fdf7e18958c21ad75176d build by buildsystem@linbit, 2014-04-09 07:59:07 0: cs:connected ro:primary/secondary ds:uptodate/uptodate C r----- ns:0 nr:0 dw:0 dr:8386268 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 cs:connected ds:uptodate/uptodate となっていることを確認します 16
7.5 DRBD マウント領域準備 DRBD 対象とする領域の準備を実施します Apache のデータはすべて /var/www に格納されますのでマウントの対象を /var/www とします DRBD 領域のファイルシステム作成 DRBD 領域のファイルシテムを作成します 以下の例ではファイルシステム ext4 を指定します # mkfs t ext4 /dev/drbd0 ( 省略 ) # エラープロンプトが返ってこないことを確認します マウント対象ディレクトリ移動 既存の /var/www のデータを DRBD 領域上にコピーするために一時的に退避します # cd /var # mv www www_org # mkdir www # エラープロンプトが返ってこないことを確認します DRBD 領域マウント # mount /dev/drbd0 /var/www # エラープロンプトが返ってこないことを確認します マウント確認 # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvdb1 10321208 2823524 6973448 29% / tmpfs 302240 0 302240 0% /dev/shm /dev/drbd0 10317472 0 9526084 0% /var/www 上記のように DRBD 領域に /var/www がマウントされていることを確認します DRBD 領域に既存データコピー 一時的に退避していた /var/www_org を /var/www にコピーします # cd /var/www_org # cp r * /var/www エラープロンプトが返ってこないことを確認します 17
7.6 DRBD 停止 DRBD のマウント確認が完了し 領域のコピーが終わった時点で DRBD を一度停止します DRBD 領域アンマウント 以下のコマンドで DRBD 領域をアンマウントします # umount /dev/drbd0 # エラープロンプトが返ってこないことを確認します DRBD 停止 以下のコマンドで DRBD を停止します # service drbd stop # エラープロンプトが返ってこないことを確認します 以降は heartbeat により DRBD の自動起動 自動マウント 自動アンマウントを行います 18
8 Apache インストール Apache のインストール手順を記載します Apache インストール # yum install httpd ( 省略 ) Dependencies Resolved ===================================================================== Package Arch Version Repository Size ===================================================================== Installing: httpd x86_64 2.2.15-31.el6_5 rhui-region-rhel-server-releases 823 k : Installing for dependencies: apr x86_64 1.3.9-5.el6_2 rhui-region-rhel-server-releases 123 k apr-util x86_64 1.3.9-3.el6_0.1 rhui-region-rhel-server-releases 87 k apr-util-ldap x86_64 1.3.9-3.el6_0.1 rhui-region-rhel-server-releases 15 k httpd-tools x86_64 2.2.15-31.el6_5 rhui-region-rhel-server-releases 73 k Transaction Summary ===================================================================== Install 5 Package(s) Total download size: 1.1 M Installed size: 3.6 M Is this ok [y/n]: y y を押下してインストールします Complete! を表示されることを確認します 19
9 Heartbeat 設定 Heartbeat の設定を実施します 設定が必要なコンフィグファイルは以下のファイルになります /etc/ha.d/ha.cf /etc/ha.d/authkeys /etc/ha.d/ha.cf 設定 vi エディタ等でコンフィグファイルを修正します 設定値は以下になります Primary 機 # vi /etc/ha.d/ha.cf crm yes node vipha1 node vipha2 ucast eth0 10.66.172.71 udpport 694 debugfile /var/log/ha-debug logfile /var/log/ha-log Secondary 機 # vi /etc/ha.d/ha.cf crm yes node vipha1 node vipha2 ucast eth0 10.66.172.70 udpport 694 debugfile /var/log/ha-debug logfile /var/log/ha-log /etc/ha.d/authkeys 設定 vi エディタ等でコンフィグファイルを修正します 設定値は以下になります Primary 機 Secondary 機 # vi /etc/ha.d/authkeys auth 2 #1 crc 2 sha1 ha-vip #3 md5 Hello! 20
10 Pacemaker 設定 Pacemaker の設定を実施します Pacemaker には設定ファイルがありません crm コマンドで設定値を投入する形で設定を実施します 設定は Primary 機で設定します Primary 機の設定が自動的に Secondary 機に同期されます 10.1 crm コマンド開始 Heartbeat 起動 crm コマンドを投入する前に Primary 機と Secondary 機で それぞれ Heartbeat を起動します # service heartbeat start Starting High-Availability services: Done. # エラーがなく コマンドプロンプトが返ってくることを確認します crm コマンド投入 Pacemaker の設定は crm コマンドを使用しリソース定義などを実施します crm コマンドを起動しリソースを設定するために configure モードに移行します # crm crm(live)# configure crm(live)configure# 10.2 クラスタのオプション設定 Apache クラスタのオプション設定を実施します オプション設定 crm コマンドの configure モードのままで以下のコマンドを投入します crm(live)configure# property stonith-enabled="false" crm(live)configure# property no-quorum-policy="ignore" crm(live)configure# property default-resource-stickiness="200" crm(live)configure# commit 最後に commit コマンドを実行し設定を反映します エラーが返って来ないことを確認します 21
10.3 リソース設定 Apache クラスタのリソースを登録します 各リソースを登録することにより VIP Apache DRBD などを監視し 制御することにより障害時にサーバの切り替え ( フェールオーバー ) が可能となります リソース設定 crm コマンドの configure モードのままで以下のコマンドを一行ずつ投入します 以下の例では見やすくするためにタブを行の先頭に入れていますが 本来は不要です # crm crm(live)# configure crm(live)configure# primitive res_ipaddr2_1 ocf:heartbeat:ipaddr2 \ params ip="10.66.172.72" nic="eth0" cidr_netmask="24" \ operations $id="res_ipaddr2_1-operations" \ op start interval="0" timeout="20" \ op stop interval="0" timeout="20" \ op monitor interval="5" timeout="20" start-delay="0" primitive res_drbd_r0 ocf:linbit:drbd \ params drbd_resource="r0" \ op monitor interval="20" primitive res_filesystem ocf:heartbeat:filesystem \ params device="/dev/drbd0" directory="/var/www" fstype="ext4" options="noatime" primitive res_httpd ocf:heartbeat:apache \ params port="80" configfile="/etc/httpd/conf/httpd.conf" \ op monitor interval="20s" group rg_https res_filesystem res_ipaddr2_1 res_httpd ms ms_drbd_r0 res_drbd_r0 \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" colocation c1 inf: res_filesystem ms_drbd_r0:master order o1 inf: ms_drbd_r0:promote res_filesystem:start order o2 inf: res_filesystem res_httpd 最後に commit コマンドを実行し設定を反映します エラーが返って来ないことを確認します 22
10.4 設定確認 crm_mon コマンドで Apache クラスタの設定を確認します 正常に設定ができている場合は以下のように表示されます # crm_mon ============ Last updated: Tue Nov 25 20:13:00 2014 Stack: Heartbeat Current DC: vipha1 (cded47ca-7f83-4c78-8248-4f9f60458867) - partition with quorum Version: 1.0.12-unknown 2 Nodes configured, unknown expected votes 2 Resources configured. ============ Online: [ vipha2 vipha1 ] Resource Group: rg_https res_filesystem (ocf::heartbeat:filesystem): Started vipha1 res_ipaddr2_1 (ocf::heartbeat:ipaddr2): Started vipha1 res_httpd (ocf::heartbeat:apache): Started vipha1 Master/Slave Set: ms_drbd_r0 Masters: [ vipha1 ] Slaves: [ vipha2 ] Apache クラスタが動作している側で Apache が動作していることを確認します # ps aux grep httpd [root@vipha1]# ps aux grep httpd root 1772 0.0 0.6 175724 3776? Ss 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1775 0.0 0.5 175856 3056? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1777 0.0 0.5 175856 3056? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1778 0.0 0.5 175856 3056? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1779 0.0 0.5 175856 3056? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1782 0.0 0.5 175856 3056? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1784 0.0 0.5 175856 3060? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1786 0.0 0.3 175724 2416? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf apache 1787 0.0 0.3 175724 2416? S 01:10 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf root 2594 0.0 0.1 103256 832 pts/0 S+ 01:12 0:00 grep httpd 23
また 対向ノードでは Apache が動作していないことを確認します # ps aux grep httpd [root@vipha1]# ps aux grep httpd root 2414 0.0 0.1 103252 824 pts/0 S+ 01:19 0:00 grep httpd 全ての設定が終了したら iptables の設定を行います 本手順書で開放しておく必要のあるポートは 80 694 7788 となります 本書では iptables の設定については割愛します 24