Pandora: Documentation ja: DRBD Appliance

From Pandora FMS Wiki
Jump to: navigation, search

Pandora FMS ドキュメント一覧に戻る

1 Pandora FMS CentOS アプライアンスでの HA

1.1 DRBD の概要

Distributed Replicated Block Device (DRBD) は、サーバ間でブロックデバイス (ハードディスク、パーティション、論理ボリュームなど) の内容をソフトウエアでミラーリングするためのストレージのソリューションです。

DRBD のデータミラー:

  • リアルタイムです。アプリケーションがデバイスのデータを変更するのに伴い、継続的にレプリケーションが発生します。
  • 透過的です。データをミラーデバイスに保存するアプリケーションは、データが複数のコンピュータに保存されていることには気づきません。
  • 同期または非同期です。同期ミラーリングでは、アプリケーションへの書き込み完了通知は、双方のコンピュータが完了したあとに出されます。非同期ミラーリングは、もう一方のシステムへの書き込みが完了する前に、ローカルの書き込みが完了した時点でアプリケーションへの通知がされます。

Drbd.png

DRBD では、ディスクのレプリケーションでほぼ全てのクラスタリングが可能です。我々の場合、データベースのみをクラスタリングしたいのですが、サーバやローカルエージェント、もちろんデータベースも含め、Pandora FMS 全体のレプリケーションも可能です。

DRBD は、RAID-1 の TCP ベースのカーネルモジュールで、設定がとても簡単で早く、エラー防止がされています。DRBD に関しての詳細は、http://www.drbd.org を参照してください。

DRBD はオープンソースです。

1.2 初期環境

マスターとスレーブの HA 設定で MySQL のクラスタを構成したいとします。いくつかの Pandora FMS サーバとコンソールは、MySQL サーバが動作しているサーバへ仮想 IP アドレスを用いて接続します。

MySQL クラスタが動作している 2つのノードのネットワーク設定は以下の通りです。

  • 192.168.10.101 (drbd1) -> マスター
  • 192.168.10.102 (drbd2) -> スレーブ
  • 192.168.10.100 仮想IP

今回の想定では、1台の Pandora FMS サーバが動作しています。

192.168.70.10 pandora -> mysql app

それぞれのノードには 2つのハードディスクがあります。

/dev/sda にベースの linux システム。 /dev/sdb は空で未初期化ディスク。DRBD で RAID1 構成を組むのに使います。

全てのノード間は時刻同期されていると仮定します。これは非常に重要です。そうでなければ ntp やその他仕組みで先に同期をさせてください。

1.3 パッケージのインストール

DRBD は、CentOS の公式リポジトリには無いため、双方のシステムにリポジトリを追加する必要があります。

[[email protected] ~]# rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
Retrieving http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
warning: /var/tmp/rpm-tmp.dIHerV: Header V4 DSA/SHA1 Signature, key ID baadae52: NOKEY
Preparing...                ########################################### [100%]
   1:elrepo-release         ########################################### [100%]


次のパッケージをインストールします。

yum install drbd84-utils kmod-drbd84 corosync pacemaker openais python-dateutil python-lxml redhat-rpm-config

デフォルトではインストールされない、pacemaker で利用する crm コマンドをインストールする必要があります。

rpm -Uvh http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/i686/python-pssh-2.3.1-4.2.i686.rpm 
rpm -Uvh http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/i686/pssh-2.3.1-4.2.i686.rpm 
rpm -Uvh http://rpm.repo.onapp.com/repo/centos/6.6/i386/RPMS-4.0/crmsh-2.1-1.6.i686.rpm

1.4 DRBD の設定

1.4.1 DRBD の初期設定

/etc/drbd.conf を編集します。

global {
  usage-count no;
}

common {
 protocol C;
}

resource mysql {
   on drbd1 {
       device /dev/drbd1;
       disk /dev/sdb1;
       address 192.168.70.10:7789;
       meta-disk internal;
   }
   on drbd2 {
       device /dev/drbd1;
       disk /dev/sdb1;
       address 192.168.70.11:7789;
       meta-disk internal;
   }
   disk {
       on-io-error detach; # Desconectamos el disco en caso de error de bajo nivel.
   }
   net {
       max-buffers 2048; #Bloques de datos en memoria antes de escribir a disco.
       ko-count 4; # Maximos intentos antes de desconectar.
   }
   syncer {
       rate 10M; # Valor recomendado de sincronización para redes de 100 Mb´s..
       al-extents 257; 
   }
   startup {
       wfc-timeout 0; # drbd init script esperará ilimitadamente los recursos.
       degr-wfc-timeout 120; # 2 minuteos
   }
}


1.4.2 DRBD ノードの設定

/dev/sdb は完全に空のディスクである必要があります。(パーティション設定も不要)

/dev/sdb1 のパーティションを設定します。(linuxタイプ)

[[email protected] ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content will not be recoverable.
 
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
 
Command (m for help): n
Command action
    e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.

(両方のノードで実行します)

そして、両方のノードで、次のコマンドを使って drbd のためのディスクの初期化を行います。

drbdadm create-md mysql
drbdadm up mysql

(両方のノードで実行します)

1.4.3 ディスクの初期設定 (プライマリノード)

DRBD を設定する最後のコマンドで、プライマリノードでのみ実行します。これで、リソースを初期化しプライマリとして設定します。

drbdadm -- --overwrite-data-of-peer primary mysql

このコマンドを実行すると、初期の全体同期が実施されます。処理の進捗状況は /proc/drbd から確認できます。デバイスのサイズによって時間がかかります。

そして、初期の同期処理が完了する前でも(とはいえ若干パフォーマンスは下がります)、DRBD デバイスは使えるようになります。ブロックデバイスとして利用できファイルシステムを作ってマウントすることができます。通常のブロックデバイスとして使えます。

drbd1:~# cat /proc/drbd 
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by [email protected], 2008-11-12 16:40:33

 1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:44032 nr:0 dw:0 dr:44032 al:0 bm:2 lo:0 pe:0 ua:0 ap:0
	[>....................] sync'ed:  2.2% (2052316/2096348)K
	finish: 0:03:04 speed: 11,008 (11,008) K/sec
	resync: used:0/61 hits:2749 misses:3 starving:0 dirty:0 changed:3
	act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0


1.4.4 プライマリノードでのパーティション作成

これは、プライマリノードでのみ実行してください。他のノードへは自動的に複製されます。物理デバイスではなく、DRBD のブロックデバイスに対して操作します。

drbd1#mkfs.ext3 /dev/drbd1

ここからは通常のパーティションとして利用でき、次のようにプライマリノードにマウントします。

drbd1:~# mkdir /mysql
drbd1:~# mount /dev/drbd1 /mysql/


次のコマンドで確認します。

df -ah

セカンダリノードでは、フォーマットを実施し設定ディレクトリを作成します。

[[email protected] ~]#mkfs.ext3 /dev/drbd1 ; mkdir /mysql

1.4.5 システムステータス情報の取得

現在のプライマリノード (drbd1) で次のように実行します。

drbd1:~# drbdadm role mysql
Primary/Secondary
drbd1:~# drbdadm dstate mysql
UpToDate/UpToDate

drbd2 (バックアップ、レプリケーション) では次のように実行します。

drbd2:~# drbdadm role mysql
Secondary/Primary
drbd2:~# drbdadm dstate mysql
UpToDate/UpToDate

1.4.6 DRBD ディスクでの mysql の設定

mysql の全ファイルは次のディレクトリにあると仮定します。(Linux ディストリビューションごとに異なります)

/etc/mysql/my.cnf
/var/lib/mysql/

最初に、プライマリおよびセカンダリノードで mysql を停止します。

(/etc/init.d/mysqld stop)

プライマリノード(drbd1)にて:

全データをプライマリノードにマウントされたパーティション移動します。

drbd1:~# mv /etc/my.cnf /mysql/
drbd1:~# mv /var/lib/mysql /mysql/mysql

オリジナルのディレクトリへシンボリックリンクを張ります。

drbd1:~# ln -s /mysql/mysql/ /var/lib/mysql
drbd1:~# ln -s /mysql/my.cnf /etc/my.cnf

セカンダリノード(drbd2)にて:

mysql 関連ファイルを削除します。

drbd2:~# rm -Rf /var/lib/mysql
drbd2:~# rm -Rf /etc/my.cnf

プライマリノードでアンマウントし、セカンダリノードへ変更します。

drbd1:~# umount /mysql/ ; drbdadm secondary mysql

セカンダリをプライマリに変更し、設定を実行します。

drbd2:~# drbdadm primary mysql ; mount /dev/drbd1 /mysql


同じように、このノードでシンボリックリンクを作成します。

drbd2:~# ln -s /mysql/my.cnf /etc/cnf
drbd2:~# ln -s /mysql/mysql /var/lib/mysql

以上で mysql が両方のノードで設定されました。そして逆に、セカンダリノードとプライマリノードを再度逆に戻すこともできます。

drbd2:~# umount /mysql/ ; drbdadm secondary mysql
drbd1:~# drbdadm primary mysql ; mount /dev/drbd1 /mysql

1.4.7 スプリットプレインからの復旧方法

DRBD は、ノード間の通信が復旧し、DRBD プロトコルの初期ハンドシェイクが完了すると、スプリットブレインを検出します。もし、DRBD が両方のノードがプライマリであること(もしくは接続が切れていること)を検出したら、即座にレプリケーション接続を停止します。これを伝えるメッセージとして、次のような内容がシステムログに出力されます。

Split-Brain detected, dropping connection!

スプリットブレインの検出後は、一つのノードは常に StandAlone 状態でリソースを持ちます。もう一方は、同様に StandAlone 状態 (両方のノードが同時にスプリットブレインを検出した場合) か、もしくは WFConnection 状態 (スプリットブレインを検出する前に相手との接続が切れた場合) となります。

この場合、セカンダリノードは (drbd1) は次のように単独のノードになっています。

drbd1:~# cat /proc/drbd 
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by [email protected], 2008-11-12  16:40:33

  1: cs:WFConnection st:Secondary/Unknown ds:UpToDate/DUnknown C r---
     ns:0 nr:0 dw:0 dr:0 al:0 bm:7 lo:0 pe:0 ua:0 ap:0
	 resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
   	 act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

At this point, unless you configured DRBD to automatically recover from split brain, you must manually intervene by selecting one node whose modifications will be discarded (this node is referred to as the split brain victim). This intervention is made with the following commands:

この時、DRBD をスプリットブレインから自動的に復旧するように設定していない限り、いずれかのノードの変更の破棄 (このノードはスプリットブレインの場合の犠牲ノードとなります) を手動で実行する必要があります。この操作は次のコマンドで行います。

drbdadm secondary mysql
drbdadm -- --discard-my-data connect mysql

もう一方のノード (残すノード) では、接続状態が同様に StandAlone であるかどうか次のように確認します。

drbdadm connect mysql

ステータスを見ます。

 drbd2:~# cat /proc/drbd 
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by [email protected], 2008-11-12 16:40:33
 
  1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
     ns:34204 nr:0 dw:190916 dr:46649 al:12 bm:24 lo:0 pe:4 ua:20 ap:0
	 [============>.......] sync'ed: 66.7% (23268/57348)K
 	 finish: 0:00:02 speed: 11,360 (11,360) K/sec
	 resync: used:1/61 hits:2149 misses:4 starving:0 dirty:0 changed:4
   	 act_log: used:0/257 hits:118 misses:12 starving:0 dirty:0 changed:12


1.4.8 プライマリの切り替え方法

現在プライマリのサーバにて

1. mysql の停止

/etc/init.d/mysql stop

2. パーティションのアンマウント

umount /dev/drbd1

3. セカンダリへの切り替え

drbdadm secondary mysql

現在のセカンダリで、

4. プライマリへの切り替え

drbdadm primary mysql

5. パーティションのマウント

mount /dev/drbd1 /mysql

6. MySQL の起動

/etc/init.d/mysql start

1.5 Corosync / Pacemaker 設定

インストールの前に、/etc/hosts ファイル内に両方のシステムが正しく設定されているか確認します。

192.168.70.10 	   drbd1
192.168.70.11	   drbd2

また、ip_forwarding を有効にする必要があります。

sysctl -w net.ipv4.ip_forward=1 

これを行ったら、pacemaker、openais、corosync のインストールを(両方のノードで)進めます。

yum install pacemaker openais corosync

完了したら、(メインノードの)設定ファイル /etc/corosync/corosync.conf の設定をします。デフォルトではファイルは存在しないので、サンプルからファイルをコピーします。

/etc/corosync/corosync.conf.example.udpu:

#cp -p /etc/corosync/corosync.conf.example.udpu /etc/corosync/corosync.conf


totem {
        version: 2
        secauth: on
        interface {
                member {
                        memberaddr: 192.168.70.10
                }
                member {
                        memberaddr: 192.168.70.11
                }
                ringnumber: 0
                bindnetaddr: 192.168.70.10
                mcastport: 5405
                ttl: 1
        }
        transport: udpu
}
logging {
    fileline: off
    to_logfile: yes
    to_syslog: yes
    debug: on
    logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: on
    logger_subsys {
        subsys: AMF
        debug: off
    }
}

logging { 
        fileline: off 
        to_stderr: no 
        to_logfile: yes 
        to_syslog: yes 
        logfile: /var/log/cluster/corosync.log 
        debug: off 
        timestamp: on 
        logger_subsys { 
                subsys: AMF 
                debug: off 
        } 
} 

amf { 
        mode: disabled 
}

service.d フォルダ内に次の設定で新たなファイルを追加します。

# vi /etc/corosync/service.d/pcmk
service {
        # Load the Pacemaker Cluster Resource Manager
        name: pacemaker
        ver: 1
}

/etc/corosync/corosync.conf ファイルは、双方のノードで同じ必要があるため、ノード 2 の /etc/corosync にファイルをコピーします。

scp /etc/corosync/corosync.conf drbd2:/etc/corosync
scp /etc/corosync/service.d/pcmk drbd2:/etc/corosync/service.d/

次に、メインノードで corosync-keygen を実行して corosync の認証 keygen を作成します。

[[email protected] ~]# corosync-keygen

このコマンドを実行すると、キーのエントロピー作成を聞かれます。これを素早く実施するには、別のターミナルで大きなファイルをダウンロードするオプションが良いです。

キーが生成されたら、/etc/corosync/authkey ファイルが自動生成されます。ファイルは、keygen を同一にするためにセカンドノードの /etc/corosync にコピーする必要があります。

scp /etc/corosync/authkey [email protected]:/etc/corosync/authkey

コピーしたら、パーミッションを 400 にします。

chmod 400 /etc/corosync/authkey

これらの操作が完了したら、双方のノードでサーバを起動します。

/etc/init.d/corosync start

corosync のサービスが正常に起動したら、pacemaker のサービスを(両方のノードで)起動します。

/etc/init.d/pacemaker start

起動したら、双方のノードが設定され、オンラインであるというクラスタのステータスを見ることができます。(両方のノードで検出するには数分かかります)

crm_mon -1
[[email protected] ~]# crm status
Last updated: Sat Oct 18 19:44:52 2014
Last change: Sat Oct 18 19:44:23 2014 via crmd on drbd2
Stack: classic openais (with plugin)
Current DC: drbd2 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
0 Resources configured 
 
 

Online: [ drbd1 drbd2 ] 
[[email protected] ~]# crm status
Last updated: Sat Oct 18 19:45:24 2014
Last change: Sat Oct 18 19:44:23 2014 via crmd on drbd2
Stack: classic openais (with plugin)
Current DC: drbd2 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
0 Resources configured


Online: [ drbd1 drbd2 ]

Template warning.png

インストールの確認をする前に、すべてのステップを正しく実行したかと、corosync および pacemaker が両方のノードで正しく動作しているかの確認が重要です。

 


1.6 Pacemaker リソース設定

片方のサーバの Pacemaker (クラスタリソースマネージャ) と Corosync (ノード間のメッセージレイヤ) が正しく動作するようになったら、他のリソースを追加します。

まず最初に、扱うリソースの順番を理解する必要があります。

1.- 仮想 IP
2.- DRBD / ファイルシステム
3.- Apache
4.- Mysql
5.- Pandora サーバ
6.- Tentacle サーバ

この順番で進める必要があります。なぜなら、DRBD ファイルシステムがマウントされてないと、MySQL サーバを起動できないためです。また、mysql サービスがなければ、Pandora サーバは動作しません。

Template warning.png

pacemaker のバージョンによっては、'crm' コマンドが正しく動作しません。

 


もし、'crm configure' コマンドを実行したときにエラーになった場合は、修正のために次のコマンドを実行します(バージョンによって若干異なる可能性があります)。

cibadmin --modify --xml-text '<cib validate-with="pacemaker-2.1"/>'

問題解決したかどうか確認するには、'crm configure show' を実行してみてください。

1.6.1 クラスタリソースとして仮想 IP の設定

最初に、stonith を無効化します。

crm configure property stonith-enabled=false

そしてクラスタが quorum ポリシーを無視するように設定します。これは、一方のノードで問題が発生した場合に、他方で問題なくリソースを実行できるようにします。

crm configure property no-quorum-policy=ignore

ここで、仮想 IP リソースを追加できます。

crm configure primitive failover_ip ocf:heartbeat:IPaddr2 params ip=192.168.70.15 cidr_netmask=32 op monitor interval=30s

クラスタの状態を確認していれば、のちほど次のように認識されます。(crm_mon -1)

FAILOVER-ADDR	 (ocf::heartbeat:IPaddr2):		Started drbd1

ホストから仮想 IP に対して ping を実行すると、その時点でアクティブなノードから応答が返ります。

1.6.2 Apache リソースの作成

Apache のサービス自動起動を無効化します。

# chkconfig httpd off (on both)

次に、Pacemaker のサービス監視のために、apache の server-status を有効化します。 Apache の設定で、以下の設定のコメントを外す必要があります。

ExtendedStatus On
<Location /server-status>
	SetHandler server-status
	Order deny,allow
	Allow from localhost
</Location>

conf を一方のノードがもう一方へコピーします。

scp /etc/httpd/conf/httpd.conf drbd2:/etc/httpd/conf/httpd.conf

apache を再起動し、両方のノードで server-status ページが参照できるか確認します。

[[email protected] ~]# /etc/init.d/httpd restart
curl http://192.168.70.10/server-status
curl http://192.168.70.11/server-status
curl http://192.168.70.15/server-status

次に、Pacemaker の設定です。

#crm configure primitive apache_res ocf:heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf httpd=/usr/sbin/httpd statusurl="http://localhost/server-status" op monitor interval=60s timeout=10s op start timeout=40s op stop timeout=60s

IP リソース割り当ての後に、apache を起動します。

crm configure colocation apache_ip_colo INFINITY: apache_res failover_ip
crm configure order apache_after_ip mandatory: failover_ip apache_res

crm configure を実行すると、次のように表示されます。

node drbd1 \
        attributes standby=off
node drbd2 \
        attributes standby=off
primitive apache_res apache \
        params configfile="/etc/httpd/conf/httpd.conf" httpd="/usr/sbin/httpd" statusurl="http://localhost/server-status" \
        op monitor interval=60s timeout=10s \
        op start timeout=40s interval=0 \
        op stop timeout=60s interval=0
primitive failover_ip IPaddr2 \
        params ip=192.168.70.15 cidr_netmask=32 \
        op monitor interval=30s
colocation apache_ip_colo inf: apache_res failover_ip
order apache_after_ip Mandatory: failover_ip apache_res
property cib-bootstrap-options: \
        dc-version=1.1.10-14.el6_5.3-368c726 \
        cluster-infrastructure="classic openais (with plugin)" \
        expected-quorum-votes=2 \
        stonith-enabled=false \
        no-quorum-policy=ignore 

何らかのエラーがある場合は、pacemaker と corosync サーバを再起動します。 crm node standby / crm node online を実行して、マスターノードをスレーブノードに変えることができます。

apache のサービスを一方のノードからもう一方のノードに移すことができ、ブラウザで仮想 IP を指定してアクセスすると、Apache が動作している旨の表示が見られることが確認できるまで、次のステップには進まないでください。

[[email protected] ~]# crm status
Last updated: Sat Oct 18 22:32:25 2014
Last change: Sat Oct 18 22:32:14 2014 via crm_attribute on drbd1
Stack: classic openais (with plugin)
Current DC: drbd1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
2 Resources configured 


Node drbd1: standby
Online: [ drbd2 ] 

 failover_ip    (ocf::heartbeat:IPaddr2):       Started drbd2
 apache_res     (ocf::heartbeat:apache):        Started drbd2

[[email protected] ~]# crm node standby
[[email protected] ~]# crm status
Last updated: Sat Oct 18 22:34:53 2014
Last change: Sat Oct 18 22:34:40 2014 via crm_attribute on drbd2
Stack: classic openais (with plugin)
Current DC: drbd1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
2 Resources configured

 
Node drbd2: standby
Online: [ drbd1 ]

 failover_ip    (ocf::heartbeat:IPaddr2):       Started drbd1
 apache_res     (ocf::heartbeat:apache):        Started drbd1

1.6.3 DRBD リソースとファイルシステムの作成

最初に、DRBD (drbd_resource)が指定している方に drbd_res リソースを追加します。ここでは、mysql という名前と、確認間隔、起動、停止について指定しています。

drbd1:~#crm
crm(live)#cib new drbd
crm(drbd)#configure primitive drbd_res ocf:linbit:drbd params drbd_resource=mysql op monitor interval=29s role=Master op monitor interval=31s role=Slave

そして、プライマリとして設定されているノードでのみ drbd_mysql を動作するようにするリソースを追加します。

crm(drbd)#configure ms drbd_master_slave drbd_res meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

変更を登録するために cib drbd の反映をします。

crm(drbd)#cib commit drbd

2つ目のリソース(fs_res)は、マウントポイントに drbd デバイスをマウントします。ここでは、/dev/drbd0 を /mysql/ にマウントします。 このリソースを追加するには、次の操作をします。

crm に入り、fs という名前の新たな cib を作成します。

# crm
crm(live)# cib new fs

そして、リソースを追加するために次のコマンドを実行します。

crm(fs)#configure primitive fs_res ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/mysql fstype=ext3

デバイスは、マスターノードおよび、それが実行された後(メインノードが設定された後)はリソースは常にアクティブであると認識します。

crm(fs)# configure colocation fs_drbd_colo INFINITY: fs_res drbd_master_slave:Master
crm(fs)# configure order fs_after_drbd mandatory: drbd_master_slave:promote fs_res:start
crm(fs)# configure colocation apache_fs_colo inf: apache_res fs_res
crm(fs)# configure order apache_after_fs inf: fs_res apache_res
crm(fs)# cib commit fs

結果は次の通りです。

Last updated: Sat Oct 18 23:07:52 2014
Last change: Sat Oct 18 23:06:08 2014 via crm_attribute on drbd1
Stack: classic openais (with plugin)
Current DC: drbd1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
5 Resources configured


Online: [ drbd1 drbd2 ]

failover_ip     (ocf::heartbeat:IPaddr2):       Started drbd1
apache_res      (ocf::heartbeat:apache):        Started drbd1
 Master/Slave Set: drbd_master_slave [drbd_res]
     Masters: [ drbd1 ]
     Slaves: [ drbd2 ]
fs_res  (ocf::heartbeat:Filesystem):    Started drbd1

ここで試すのは、一方のノードから他方へ受け渡されると、マスターノードの mysql のファイルを含む /mysql ディレクトリが移るということです。

1.6.4 MySQL または Percona リソースの作成

mysql/mysqld のサービス起動を無効かします。(双方のノード)

# chkconfig mysql off

次のリソース作成は、標準の MySQL データベースや Percona のバージョンによって若干ことなります。CentOS のアプライアンスを利用している場合は、Percona を追加する必要があります。最初にその設定を行います。 Percona デーモンを実行するようにリソースを設定します。

crm configure primitive mysql_res lsb:mysql op start timeout="120s" op stop timeout="120s" op monitor interval="10s" timeout="30s" meta target-role="Started"

ファイルシステムがあるノードで常にリソースが有効になるようにします。そして、ファイルシステムの設定の後に起動するようにします。

crm configure colocation mysql_drbd_colo inf: mysql_res drbd_master_slave:Master
crm configure order mysql_after_apache inf: apache_res mysql_res

最後に、最初の作成時に出たエラー状態をクリアします。

crm resource cleanup mysql_res


MySQL データベースの場合も似ていますが、最初のコマンドのみ異なります。

crm configure primitive mysql_res ocf:heartbeat:mysql params additional_parameters="--socket=/var/run/mysqld/mysqld.sock" op start interval="0" timeout="120" op stop interval="0" timeout="120" op monitor interval="10" timeout="30" depth="0"

そして、Percona リソースの場合と同じようにリソースの順番と状態を設定するためのコマンドを実行します。

crm configure colocation mysql_drbd_colo inf: mysql_res drbd_master_slave:Master
crm configure order mysql_after_apache inf: apache_res mysql_res

そして、エラーをクリアします。

crm resource cleanup mysql_res

1.6.5 Pandora リソースの作成

pandora_server の起動設定を無効かします。(両方のノード)

# chkconfig pandora_server off

Pandora リソースは追加した pandora サーバサービスを制御します。それには、crm 設定を次のコマンドで編集します。

crm configure primitive pandora_res lsb:pandora_server meta is-managed="true" target-role="Started" op monitor on-fail="standby" interval="10s"
crm configure colocation pandora_drbd_colo inf: pandora_res drbd_master_slave:Master
crm configure order pandora_after_mysql inf: mysql_res pandora_res

1.6.6 Tentacle リソースの作成

tentacle_serverd の起動設定を無効かします。(両方のノード)

# chkconfig tentacle_serverd off

Tentacle リソースは追加した tentacle サーバサービスを制御します。それには、crm 設定を次のコマンドで編集します。

crm configure primitive tentacle_res lsb:tentacle_serverd meta is-managed="true" target-role="Started" op monitor on-fail="standby" interval="10s"
crm configure colocation tentacle_drbd_colo inf: tentacle_res drbd_master_slave:Master
crm configure order tentacle_after_pandora inf: pandora_res tentacle_res

1.6.7 Pacemaker の最終的な設定

最後に、corosync と pacemaker をシステム起動時に自動起動するようにするのを忘れないようにしてください。

# chkconfig corosync on
# chkconfig pacemaker on

最終的な設定は次の通りです。

#crm configure show
node drbd \
        attributes standby="off"
node drbd2 \
        attributes standby="off"
primitive apache_res ocf:heartbeat:apache \
        params configfile="/etc/apache2/apache2.conf" httpd="/usr/sbin/apache2" \
        op monitor interval="60s" timeout="10s" \
        op start interval="0" timeout="40s" \
        op stop interval="0" timeout="60s"
primitive drbd_res ocf:linbit:drbd \
        params drbd_resource="mysql" \
        op monitor interval="29s" role="Master" \
        op monitor interval="31s" role="Slave"
primitive failover_ip ocf:heartbeat:IPaddr2 \
        params ip="192.168.70.202" cidr_netmask="32" \
        op monitor interval="30s"
primitive fs_res ocf:heartbeat:Filesystem \
        params device="/dev/drbd0" directory="/mysql" fstype="ext4"
primitive mysql_res ocf:heartbeat:mysql \
        params additional_parameters="--socket=/var/run/mysqld/mysqld.sock" \
        op start interval="0" timeout="120" \
        op stop interval="0" timeout="120" \
        op monitor interval="10" timeout="30" depth="0" \
        meta target-role="Started"
primitive pandora_res lsb:pandora_server \
        meta is-managed="true" target-role="Started" \
        op monitor on-fail="standby" interval="10s"
ms drbd_master_slave drbd_res \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation apache_fs_colo inf: apache_res fs_res
colocation apache_ip_colo inf: apache_res failover_ip
colocation fs_drbd_colo inf: fs_res drbd_master_slave:Master
colocation mysql_drbd_colo inf: mysql_res drbd_master_slave:Master
colocation pandora_drbd_colo inf: pandora_res drbd_master_slave:Master
order apache_after_fs inf: fs_res apache_res
order apache_after_ip inf: failover_ip apache_res
order fs_after_drbd inf: drbd_master_slave:promote fs_res:start
order mysql_after_apache inf: apache_res mysql_res
order pandora_after_mysql inf: mysql_res pandora_res
property $id="cib-bootstrap-options" \
        dc-version="1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="3" \
        stonith-enabled="false" \
        no-quorum-policy="ignore" 
#crm status
============
Last updated: Tue Oct 21 17:05:35 2014
Last change: Tue Oct 21 17:05:17 2014 via crm_attribute on drbd
Stack: openais
Current DC: drbd - partition with quorum
Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
2 Nodes configured, 3 expected votes
8 Resources configured.
============

Node drbd: standby
Online: [ drbd2 ] 

failover_ip     (ocf::heartbeat:IPaddr2):       Started drbd2
apache_res      (ocf::heartbeat:apache):        Started drbd2
 Master/Slave Set: drbd_master_slave [drbd_res]
     Masters: [ drbd2 ]
     Stopped: [ drbd_res:1 ]
fs_res  (ocf::heartbeat:Filesystem):    Started drbd2
mysql_res       (ocf::heartbeat:mysql): Started drbd2
pandora_res     (lsb:pandora_server):   Started drbd2
tentacle_res    (lsb:tentacle_serverd): Started drbd2