第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 フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間