TB/TB-2007-02-HACLUSTER

出典: ScalixWikiJP

Scalix Wiki -> TB -> TB/TB-2007-02-HACLUSTER

このページは[Scalix Wiki - TB/TB-2007-02-HACLUSTER (米国サイト)]の翻訳です。

目次

高可用性(HA)クラスタの構築

概要

最も一般的な高可用性の設定は、Scalixのアクティブなインスタンスをそれぞれ動かして相互にフェイルオーバーするクラスター構成されたデュアルノードです。 両方のノードが起動して動いていて、Node Aではインスタンス"mail1"が動き、Node Bではインスタンス"mail2"が動いているとします。

一方のノードが落ちた場合に、残りのノードで両方のインスタンスが動き続けられるように、そのノードのアクティブなインスタンスを他ノードにフェイルオーバーします。 それぞれのインスタンスは全てのユーザの対話が起こる仮想のホスト名(インスタンスのホスト名あるいはサービスのホスト名)とIPアドレスと関連づけられているため、ユーザから見ると何も起きていないように見えます。

Image:HowTos-HA-ScalixCluster.png

Scalixのメッセージストアとデータベースは外部の共有ストレージに保存されます。 物理的に、そのストレージは常時両方のノードによってアクセスされます。 しかし、各インスタンスはそれぞれ別のメッセージストアを持っています。 そのため、各メッセージストアが関連するインスタンスを動かしているノードによってのみアクセスされるように、クラスタのソフトウェアはストレージへのアクセスを管理します。

マルチイニシエータSCSIあるいはiSCSIやファイバチャネルベースのSANのような様々な共有ストレージの技術を使うことができます。 Scalixは共有ストレージとしてNFSの利用をサポートしていません。

Scalixエンタープライズエディションはマルチインスタンスと仮想ホスト名のサポートを提供しています。 ストレージとネットワークアドレスへのアクセスとホスト名の管理はもちろん実際のクラスタ監視やフェイルオーバーがクラスタリングソフトウェアによって提供されます。 私たちはRedHat Cluster SuiteでHA-Scalixをテストしています。 しかし、たいていの他のクラスタ製品でも同じような設定を生成することができるはずです。

準備

ソフトウェアのバージョン

  • この文書はSuSE Linux Enterprise Server 10あるいはRedHat Enterprise Linux 4においてScalix 11.0.4以降を動かしていると想定します。

ネットワークアドレスとホスト名のレイアウト

それぞれのノードは自身の静的なIPアドレスを一つ持っています。 これは管理目的にのみ使われ、そのノードで使い続けられ、フェイルオーバーしたり、Scalixのサービスへのアクセスに使用したりしません。

Image:HowTos-HA-ScalixCluster-Network.png

この例では、次のようなIPアドレスとホスト名を使います:

Node A                        Node B
nodea.scalix.demo             nodeb.scalix.demo
192.168.100.11                192.168.100.12

それぞれのインスタンスは関連するIPアドレスも持っています。 これはエンドユーザからのアクセスに使用します。 それはインスタンスと一緒にノード間を移動します。 この例では、次のようなIPアドレスとホスト名を使います:

Instance 1                    Instance 2
mail1.scalix.demo             mail2.scalix.demo
192.168.100.21                192.168.100.22

全てのIPアドレスとホスト名は正引きと逆引きができるようにDNSに登録するべきです。 さらに、クラスタのノードにおいて、クラスタがDNSの可用性に依存しないようにIPアドレスのマッピングが/etc/hostsファイルにも記述されるべきです。

ストレージの設定

各インスタンスはそれ自身で専有するストレージ領域を必要とします。 バックアップの目的でファイルシステムのスナップショットを取ることができるだけでなく、ファイルシステムのサイズ変更も可能にするためにLVMの利用を推奨しています。 LVMの観点からは、各インスタンスは自身のLVMのボリュームグループ(VG)を持つべきです。このVGは一度に一つのホストのみによって活性化されアクセスされるようにします。 この例での設定では、次のように単純なディスク設定を使用します。

Image:ScalixCluster-SharedDisk.png

Image:ScalixCluster-LVM.png

私たちは各インスタンス用に共有ディスク上に二つのディスクあるいはLUNを使います。 そのディスク上に現在あるパーティションを全て削除し、それからメッセージストアとScalixデータ領域のためにボリュームグループと論理ボリュームを作成します。 さらに、論理ボリューム上のファイルシステムを初期化する必要があります。

  • Node Aにおいて:
[root@nodea ~]# dd if=/dev/zero of=/dev/sdd bs=512 count=1
 1+0 records in
 1+0 records out
[root@nodea ~]# pvcreate /dev/sdd
 Physical volume "/dev/sdd" successfully created
[root@nodea ~]# vgcreate vgmail1 /dev/sdd
 Volume group "vgmail1" successfully created
[root@nodea ~]# lvcreate -L 140G -n lvmail1 vgmail1
 Logical volume "lvmail1" created
[root@nodea ~]# vgscan
 Reading all physical volumes.  This may take a while...
 Found volume group "vgmail1" using metadata type lvm2
 Found volume group "VolGroup00" using metadata type lvm2
[root@nodea ~]# mkfs.ext3 /dev/vgmail1/lvmail1 
 mke2fs 1.35 (28-Feb-2004)
 ...
 Writing superblocks and filesystem accounting information: done
[root@nodea ~]# vgchange -a y vgmail1
 1 logical volume(s) in volume group "vgmail1" now active
[root@nodea ~]# vgchange -c y vgmail1
 Volume group "vgmail1" successfully changed
  • Node Bにおいて:
[root@nodeb ~]# dd if=/dev/zero of=/dev/sde bs=512 count=1
 1+0 records in
 1+0 records out
[root@nodeb ~]# pvcreate /dev/sde
 Physical volume "/dev/sde" successfully created
[root@nodeb ~]# vgcreate vgmail2 /dev/sde
 Volume group "vgmail2" successfully created
[root@nodeb ~]# lvcreate -L 140G -n lvmail2 vgmail2
 Logical volume "lvmail2" created
[root@nodea ~]# vgscan
 Reading all physical volumes.  This may take a while...
 Found volume group "vgmail2" using metadata type lvm2
 Found volume group "VolGroup00" using metadata type lvm2
[root@nodeb ~]# mkfs.ext3 /dev/vgmail2/lvmail2 
 mke2fs 1.35 (28-Feb-2004)
 ...
 Writing superblocks and filesystem accounting information: done
[root@nodea ~]# vgchange -a y vgmail1
 1 logical volume(s) in volume group "vgmail1" now active
[root@nodea ~]# vgchange -a y vgmail2
 1 logical volume(s) in volume group "vgmail2" now active
[root@nodea ~]# vgchange -c y vgmail1
 Volume group "vgmail1" successfully changed
[root@nodea ~]# vgchange -c y vgmail2
 Volume group "vgmail2" successfully changed
  • Node Aにおいて:
[root@nodea ~]# vgchange -a y vgmail2
 1 logical volume(s) in volume group "vgmail2" now active
[root@nodea ~]# vgchange -c y vgmail2
 Volume group "vgmail2" successfully changed

次にマウントポイントを作成する必要があります。 これのために、インスタンスのルートディレクトリを決める必要があります。 このためのパス名は /var/opt/scalix/az になります。 ここで、azはインスタンス名の最初と最後の文字です。 例えば、インスタンスがmail1とmail2に名付けられていれば、マウントポイントはそれぞれ

/var/opt/scalix/m1

/var/opt/scalix/m2

になります。

両ノードのマウントポイントを作成します:

  • Node Aにおいて:
[root@nodea init.d]# mkdir -p /var/opt/scalix/m1
[root@nodea init.d]# mkdir -p /var/opt/scalix/m2
  • Node Bにおいて:
[root@nodeb init.d]# mkdir -p /var/opt/scalix/m1
[root@nodeb init.d]# mkdir -p /var/opt/scalix/m2

クラスタソフトウェアの構築

RedHat Cluster Suite (RHCS)

インストール

Hardware Prerequisites and basic cluster software installationのRedHatの文書を参照してください。 次の項目を見てください:

  • Install the cluster software on both nodes.
  • Run system-config-cluster on the first node, after performing the basic configuration, copy the cluster.conf file to the other node (as described in the cluster documentation).
  • You can use the default Distributed Lock Manager (DLM). You don't need the Global Lock Manager.
  • If you have more than one cluster on the same subnet, make sure to modify the default cluster name "alpha_cluster". This can be found in the cluster.conf file.

Scalixサービスの作成方法

Scalixのインストールを開始する前に、クラスタにScalixのインスタンスを表すサービスを作成するべきです。 これは仮想IPアドレスと共有ストレージのマウントポイントを与え、Scalixがこの情報を使ってインストールできるようにします。 Scalixサービスを生成するためには、次のようなステップを行います:

1. クラスタソフトウェアが両ノードで開始するのを確かめてください:

service ccds start; service cman start; service rgmanager start; service fenced start

2. system-config-clusterを使って、mail1とmail2の両方のサービスを加えてください:

  • サービス名としてインスタンス名"mail1"を使う
  • "Autostart this Service"のチェックを外し、リカバリポリシーを"Disable"に設定する
  • インスタンスのために定義された仮想IPアドレスを表すサービスのために新しいリソースを作成する
  • ファイルシステムとマウントポイントを表すサービスのために新しいリソースを作成する
Name:              mail1fs
File System Type:  ext3
Mountpoint:        /var/opt/scalix/m1
Device:            /dev/vgmail1/lvmail1
Options:           
File System ID:    
Force Unmount:     Checked
Reboot host node:  Checked 
Check file system: Checked

3. それぞれのプライマリノードでサービスを起動させる

clusvcadm -e mail1 -m nodea.scalixdemo.com
clusvcadm -e mail2 -m nodeb.scalixdemo.com

4. このとき、IPアドレスとファイルシステムのリソースが動いているかを確認すればよい

  • Node A:
[root@nodea ~]# clustat
Member Status: Quorate
 Member Name                              Status
 ------ ----                              ------
 nodea.scalixdemo.com                     Online, Local, rgmanager
 nodeb.scalixdemo.com                     Online, rgmanager
 Service Name         Owner (Last)                   State         
 ------- ----         ----- ------                   -----         
 mail1                (nodea.scalixdemo.com)         disabled        
 mail2                (nodeb.scalixdemo.com)         disabled        

[root@nodea ~]# mount
...
/dev/mapper/vgmail1-lvmail1 on /var/opt/scalix/m1 type ext3 (rw)

[root@nodea ~]# ip addr show
...
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
   link/ether 00:06:5b:04:f4:25 brd ff:ff:ff:ff:ff:ff
   inet 169.254.0.51/24 brd 169.254.0.255 scope global eth0
   inet 169.254.0.61/32 scope global eth0
   inet6 fe80::206:5bff:fe04:f425/64 scope link 
      valid_lft forever preferred_lft forever

Scalixの構築

インストール

以上の準備が終わると、Scalixをインストールすることができます。 Scalixインストールガイドに記述された段階に従って、次の変更を行います:

  • インストーラを開始するとき、コマンドラインでインスタンス名と完全修飾ホスト名の両方を指示します:
  • On Node A:
[root@nodea ~]# ./scalix-installer --instance=mail1 --hostname=mail1.scalixdemo.com
  • Select 'Typical install'
  • On Node B:
[root@nodeb ~]# ./scalix-installer --instance=mail2 --hostname=mail2.scalixdemo.com
  • Select 'Typical install'
  • 'Secure Communications'でパスワードを尋ねられたときに、両方のノードで同じパスワードを使うことを確実に行ってください。

インストール後の作業

Scalixマネージメントサービスの設定

インスタンスのうち一つが管理インスタンス("Ubermanager")として指定される必要があります。 他のインスタンスはこれを通して管理されます。 この例では、"mail1"が管理インスタンスであると想定します。 インスタンスが管理サーバで動いていなければ、次のステップに従ってください:

  • そのノードから管理コンソールとサーバの登録を取り除きます:
[root@nodeb ~]# /opt/scalix-tomcat/bin/sxtomcat-webapps --del mail2 caa sac 
  • 管理インスタンスに報告するようにManagement Agentを再設定します:
[root@nodeb ~]# ./scalix-installer --instance=mail2 --hostname=mail2.scalixdemo.com
  • "Reconfigure Scalix Components"を選択します
  • "Scalix Management Agent"を選択します
  • マネージメントサービスがインストールされたホストを尋ねられたときには管理インスタンスの完全修飾仮想ホスト名を入力します。
  • 'Secure Communitcations'のパスワードを再入力してください。上記と同じ値を確実に使ってください。
  • Create Admin Groupsを選んではいけません。

Tomcatシャットダウンポートの設定

クラスタをまたがる各インスタンスはクラスタ内でユニークなTomcatのシャットダウンポート番号を持つ必要があります。 デフォルトでは全てのインスタンスは8005を使うように設定されています。 一つのインスタンスを除いて全てのインスタンスで、これは修正されなければいけません。 次のステップを行ってください:

  • 次のコマンドでユニークなシャットダウンポート番号を設定します:
[root@nodeb ~]# /opt/scalix-tomcat/bin/sxtomcat-modify-instance -p 8006 mail2
  • Tomcatを再起動します
[root@nodeb ~]# service scalix-tomcat restart

Scalixの自動起動を無効にする

Scalixのサービスをクラスタに統合する前に、システムのブート時にScalixのサービスが起動するのを除外する必要があります。 最初に、手動でScalixをシャットダウンします。これを行うために、全てのノードで次のようなコマンドを実行します:

[root@node ~]# service scalix-tomcat stop
[root@node ~]# service scalix-postgres stop
[root@node ~]# service scalix stop

システムの自動起動の設定からScalixのサービスを削除します。再び、全てのノードに対してこれを行う必要があります:

[root@node ~]# chkconfig --del scalix 
[root@node ~]# chkconfig --del scalix-tomcat
[root@node ~]# chkconfig --del scalix-postgres

訳者注: RPMパッケージの更新時の動作を考えると削除するのではなくoffにした方がよい。

[root@node ~]# chkconfig scalix off
[root@node ~]# chkconfig scalix-tomcat off
[root@node ~]# chkconfig scalix-postgres off

全てのノードで全てのインスタンスを登録する

各員スタンスは作成されたノードにのみ登録されます。 クラスターの動作としては、全てのインスタンスは全てのノードに登録される必要があります。 インスタンスの登録情報は設定ファイル /etc/opt/scalix/instance.cfg に記録されています。 このファイルの内容をマージし、全てのノードに組み合わせたファイルをインストールします。 それと同時に、登録ファイルにインスタンスの自動起動を無効にするべきです。 この例では、ファイルは全てのノードについてこのようになります:

OMNAME=mail1
OMHOSTNAME=mail1.scalixdemo.com
OMDATADIR=/var/opt/scalix/m1/s
OMAUTOSTART=FALSE
#
OMNAME=mail2
OMHOSTNAME=mail2.scalixdemo.com
OMDATADIR=/var/opt/scalix/m2/s
OMAUTOSTART=FALSE

全てのノードでapacheとの統合を構築する

バーチャルホストでルールウィザードを登録する

ウェブベースのScalixルールウィザードが動くためには、シンボリックリンクがApacheの設定ディレクトリに作成される必要があります。 次のコマンドを実行してください:

  • On Node A:
[root@nodea ~]# cd /etc/opt/scalix-tomcat/connector
[root@nodea connector]# cp /opt/scalix/global/httpd/scalix-web-client.conf jk/app-mail1.srw.conf
[root@nodea connector]# cp /opt/scalix/global/httpd/scalix-web-client.conf ajp/app-mail1.srw.conf
  • On Node B:
[root@nodeb ~]# cd /etc/opt/scalix-tomcat/connector
[root@nodeb connector]# cp /opt/scalix/global/httpd/scalix-web-client.conf jk/app-mail2.srw.conf
[root@nodeb connector]# cp /opt/scalix/global/httpd/scalix-web-client.conf ajp/app-mail2.srw.conf
mod_jkで全てのworkersを登録する

Apache mod_jk.soの全てのworkersは /etc/opt/scalix-tomcat/connector/jk/workers.conf に登録されなければなりません。 この例では、そのファイルは全てのノードでこのようになります:

JkWorkerProperty worker.list=mail1,mail2
Apache Tomcat connectorの設定ファイルをコピーする

/etc/opt/scalix-tomcat/connector/ajp と /etc/opt/scalix-tomcat/connector/jk にある全てのファイルはこれらのディレクトリがクラスタの全てのノードで同じ内容を持つように全てのノード間でコピーされます。 この例では、ディレクトリは両ノードにあるこれらのファイルを含めなければなりません:

[root@nodea connector]# ls -R *
ajp:
app-mail1.api.conf  app-mail1.srw.conf      app-mail2.srw.conf
app-mail1.caa.conf  app-mail1.webmail.conf  app-mail2.webmail.conf
app-mail1.m.conf    app-mail2.api.conf      instance-mail1.conf
app-mail1.res.conf  app-mail2.m.conf        instance-mail2.conf
app-mail1.sac.conf  app-mail2.res.conf
app-mail1.sis.conf  app-mail2.sis.conf 

jk:
app-mail1.api.conf  app-mail1.srw.conf      app-mail2.webmail.conf
app-mail1.caa.conf  app-mail1.webmail.conf  instance-mail1.conf
app-mail1.m.conf    app-mail2.api.conf      instance-mail2.conf
app-mail1.res.conf  app-mail2.m.conf        workers.conf
app-mail1.sac.conf  app-mail2.res.conf
app-mail1.sis.conf  app-mail2.sis.conf
Apacheの再起動

全てのapacheの設定変更を適応した後に、apacheは両ノードで再起動されるべきです:

service httpd restart

Scalixクラスタの統合

RedHat Cluster Suite (RHCS)

t.b.d.

クラスタでのScalixのアップグレード

アップグレードのために、クラスタは健康状態であるべきです。 例えば、各ノードは一つのインスタンスを動かしているべきです。 インスタンスがノードにあれば、インストールガイドのようにScalixをアップグレードするための操作は単に次のようになります。 しかし、インストーラのコマンドラインにインスタンスとホスト名を指示します。例えば:

./scalix-installer --instance=mail --hostname=mai1.scalixdemo.com

管理サーバを動かしていないインスタンスを持っているノードでアップグレードを行った後には、このインスタンスで動いているSACを再び無効にする必要があります:

  • ノードから管理コンソールとサーバの登録を削除してください:
[root@nodeb ~]# /opt/scalix-tomcat/bin/sxtomcat-webapps --del mail2 caa sac 
  • Tomcatを再起動してください:
[root@nodeb ~]# service scalix-tomcat restart mail2