第9回 挑戦! SELinuxでWebアプリもクラスタリング
面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2008/6/2
第8回「なぜクラスタリングにSELinuxを使わないのか!」に引き続き、HeartbeatとSELinuxを用いてアクティブ/スタンバイ型のクラスタリングシステムでのSELinuxを見ていきます。
図1 クラスタリングを実現するための検証環境 |
引き続き、検証環境として図1のような環境を想定しています。
- プライマリ :CentOS 5.1
- セカンダリ :CentOS 5.1
の2台のマシンが、アクティブ/スタンバイのクラスタリングを構成し、
- 仮想IPアドレス(クライアントPCからApacheに接続する際のIPアドレス)
- 共有ディスク(Apacheのコンテンツファイルを格納)
- Apache(仮想IP上で動作)
を提供しています。
LAMPを用いたWebアプリケーションのクラスタリング
最初に、LAMP(Linux/Apache/MySQL/PHP)を用いて構築したWebアプリケーションが、SELinuxを有効にしたクラスタリングシステム上できちんと動作するかを検証してみましょう。
図2 クラスタリングを実現するための検証環境 |
サンプルとして、@IT記事「今から始める MySQL入門」の「PHP+MySQLを用いたオンラインストア」を使用します。システム構成としては、図2に示すようにDRBDを用いてMySQLもクラスタリングすることにします。
DRBD+Heartbeatによるクラスタリング
今回、MySQLのデータ領域用のディスクとしてDRBDを使用しました。DRBDの作成方法とHeartbeatとの連携方法に関しては、@IT記事「Heartbeatでかんたんクラスタリング」の第4回「ミラーリングツール『DRBD』によるデータ保護」を参考にしています。
まずDRBDのサイトより、drbd-0.7.25.tar.gzをダウンロードしてコンパイルしインストールをします。方法については前述の記事を参照ください。また、MySQLをHeartbeatから起動するようにcib.xmlファイルを書き換えています。今回使用したcib.xmlはリスト1のようになります。
<cib generated="true" admin_epoch="0" epoch="1" num_updates="1" have_quorum="true" ignore_dtd="false" num_peers="2" ccm_transition="2" cib_feature_revision="2.0" cib-last-written="Fri Mar 28 00:58:19 2008"> <configuration> <crm_config> <cluster_property_set id="cib-bootstrap-options"> <attributes> <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="2.1.3-node: 552305612591183b1628baa5bc6e903e0f1e26a3"/> </attributes> </cluster_property_set> </crm_config> <nodes> <node id="2d343f83-10fa-4ae9-8b6a-90907164cc37" uname="primary" type="normal"/> <node id="1d19af62-ee33-490a-91e3-5353cdd0d5c3" uname="secondary" type="normal"/> </nodes> <resources> <group id="group_apache"> <primitive id="ipaddr" class="ocf" type="IPaddr" provider="heartbeat"> <instance_attributes id="ia_ipaddr"> <attributes> <nvpair id="ia_ipaddr_ip" name="ip" value="192.168.135.100"/> <nvpair id="ia_ipaddr_nic" name="nic" value="eth0"/> <nvpair id="ia_ipaddr_netmask" name="netmask" value="24"/> </attributes> </instance_attributes> </primitive> <primitive class="ocf" provider="heartbeat" type="Filesystem" id="fs0"> <meta_attributes id="ma-fs0"> <attributes/> </meta_attributes> <instance_attributes id="ia-fs0"> <attributes> <nvpair id="ia-fs0-1" name="fstype" value="ext3"/> <nvpair id="ia-fs0-2" name="directory" value="/var/www/html/testdir"/> <nvpair id="ia-fs0-3" name="device" value="/dev/sdb1"/> </attributes> </instance_attributes> </primitive> <primitive id="apache" class="lsb" type="httpd"> <instance_attributes id="ia_apache"> <attributes> <nvpair id="ia_apache_configfile" name="configfile" value="/etc/httpd/conf/httpd.conf"/> </attributes> </instance_attributes> </primitive> </group> <master_slave id="ms-drbd0"> <meta_attributes id="ma-ms-drbd0"> <attributes> <nvpair id="ma-ms-drbd0-1" name="clone_max" value="2"/> <nvpair id="ma-ms-drbd0-2" name="clone_node_max" value="1"/> <nvpair id="ma-ms-drbd0-3" name="master_max" value="1"/> <nvpair id="ma-ms-drbd0-4" name="master_node_max" value="1"/> <nvpair id="ma-ms-drbd0-5" name="notify" value="yes"/> <nvpair id="ma-ms-drbd0-6" name="globally_unique" value="false"/> </attributes> </meta_attributes> <primitive id="drbd0" class="ocf" provider="heartbeat" type="drbd"> <instance_attributes id="ia-drbd0"> <attributes> <nvpair id="ia-drbd0-1" name="drbd_resource" value="drbd0"/> </attributes> </instance_attributes> </primitive> </master_slave> <group id="group_mysql"> <primitive class="ocf" provider="heartbeat" type="Filesystem" id="fs1"> <meta_attributes id="ma-fs1"> <attributes/> </meta_attributes> <instance_attributes id="ia-fs1"> <attributes> <nvpair id="ia-fs1-1" name="fstype" value="ext3"/> <nvpair id="ia-fs1-2" name="directory" value="/var/lib/mysql"/> <nvpair id="ia-fs1-3" name="device" value="/dev/drbd0"/> </attributes> </instance_attributes> </primitive> <primitive id="mysql" class="lsb" provider="heartbeat" type="mysqld"> <operations> <op id="mysql_start" name="start" timeout="60s"/> <op id="mysql_stop" name="stop" timeout="60s"/> </operations> </primitive> </group> </resources> <constraints> <rsc_location id="rsc_location_group_1" rsc="ms-drbd0"> <rule id="prefered_location_group_1" role="Master" score="100"> <expression id="prefered_location_group_1_expr" attribute="#uname" operation="eq" value="primary"/> </rule> </rsc_location> <rsc_order id="drbd0_before_fs1" from="fs1" action="start" to="ms-drbd0" to_action="promote"/> <rsc_colocation id="fs1_on_drbd0" to="ms-drbd0" to_role="master" from="fs1" score="infinity"/> </constraints> </configuration> </cib> |
リスト1 検証環境で利用するcib.xml |
【関連記事】 「Heartbeatでかんたんクラスタリング」連載インデックス(@IT Linux Square) http://www.atmarkit.co.jp/flinux/index/indexfiles/heartbeatindex.html |
1/3 |
Index | |
挑戦! SELinuxでWebアプリもクラスタリング | |
Page1 LAMPを用いたWebアプリケーションのクラスタリング DRBD+Heartbeatによるクラスタリング |
|
Page2 フェイルオーバーの実験 共有ディスクで気を付けるべきSELinuxの権限設定 |
|
Page3 プライマリからセカンダリに切り替わった際の挙動 |
スイッチ・オン! SELinux 連載インデックス |
Security&Trust フォーラム 新着記事
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|