個人用ツール

Pandora:Documentation ja:DRBD Appliance

提供: Pandora FMS Wiki JP

移動先: 案内, 検索

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

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

DRBD の概要

The Distributed Replicated Block Device (DRBD) is a software-based, shared-nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between servers.

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

DRBD mirrors data:

DRBD のデータミラー:

  • In real time. Replication occurs continuously, while applications modify the data on the device.
  • リアルタイムです。アプリケーションがデバイスのデータを変更するのに伴い、継続的にレプリケーションが発生します。
  • Transparently. The applications that store their data on the mirrored device are oblivious of the fact that the data is in fact stored on several computers.
  • 透過的です。データをミラーデバイスに保存するアプリケーションは、データが複数のコンピュータに保存されていることには気づきません。
  • Synchronously or asynchronously. With synchronous mirroring, a writing application is notified of write completion only after the write has been carried out on both computer systems. Asynchronous mirroring means the writing application is notified of write completion when the write has completed locally, but before the write has propagated to the peer system.
  • 同期または非同期です。同期ミラーリングでは、アプリケーションへの書き込み完了通知は、双方のコンピュータが完了したあとに出されます。非同期ミラーリングは、もう一方のシステムへの書き込みが完了する前に、ローカルの書き込みが完了した時点でアプリケーションへの通知がされます。

ファイル:Drbd.png

Over DRBD you can provide a cluster on almost everything you can replicate in disk. In our specific case when want to "clusterize" only the database, but we also could replicate a entire Pandora FMS setup, including server, local agents and of course database.

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

DRBD is a RAID-1/TCP based kernel module, very easy to setup and really fast and error-proof. You can get more information about DRBD in their website at http://www.drbd.org

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

DRBD is OpenSource.

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

初期環境

We want to have a MySQL cluster in a HA configuration based on a master (active) and slave (passive). Several Pandora FMS servers and console will use a virtual IP address to connect with the running node which contains a MySQL server.

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

This is the network configuration for the two nodes running the MySQL cluster:

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

192.168.70.10 (drbd1) -> Master 192.168.70.11 (drbd2) -> Slave 192.168.70.15 virtual-ip

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

In our scenario, the only Pandora FMS server is running here:

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

192.168.70.10 pandora -> mysql app

Each node has two hardisks:

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

/dev/sda with the standard linux system. /dev/sdb with an empty, unformatted disk, ready to have the RAID1 setup with DRBD.

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

We assume you have time synchronized between all nodes, this is extremely IMPORTANT, if not, please synchronize it before continue, using ntp or equivalent mechanism.

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

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

DRBD isn't located in Centos official repositories, so it's necessary to add the repository in both systems:

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

[root@drbd1 ~]# 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%]


Install the following packages:

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

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

In the Pacemaker version available in Centos, is necessary install crm command that isn't installed by default:

デフォルトではインストールされない、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

DRBD の設定

DRBD の初期設定

Edit /etc/drbd.conf

/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
   }
}


DRBD ノードの設定

You need to have a completelly empty disk on /dev/sdb (even without partitioning).

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

Do a partition in /dev/sdb1 (linux type).

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

[root@drbd1 ~]# 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.

(Do it in both nodes).

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

And create the internal structure in the disk for drbd with the following commands in both nodes:

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

drbdadm create-md mysql
drbdadm up mysql

(Do it again in both nodes).

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

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

The last command to setup DRBD, and only on the primary node, it's to initialize the resource and set as primary:

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

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

After issuing this command, the initial full synchronization will start. You will be able to monitor its progress via /proc/drbd. It may take some time depending on the size of the device.

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

By now, your DRBD device is fully operational, even before the initial synchronization has completed (albeit with slightly reduced performance). You may now create a filesystem on the device, use it as a raw block device, mount it, and perform any other operation you would with an accessible block device.

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

drbd1:~# cat /proc/drbd 
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 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


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

Do it ONLY in the primary node, will be replicated to the other nodes automatically. You operate with the DRBD block device, forget to use physical device.

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

drbd1#mkfs.ext3 /dev/drbd1

Use is like a standard partition from now, and mount to your disk in primary NODE as follow:

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

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


Now, we check this through the command:

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

df -ah

In the secondary node, passive, we format it and create the setup directory:

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

[root@drbd2 ~]#mkfs.ext3 /dev/drbd1 ; mkdir /mysql

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

Executed from current master node (castor) :

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

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

And from pollux (backup, replicating disk):

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

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

DRBD ディスクでの mysql の設定

We suppose you have all the information about mysql in following directories (may differ depending on Linux distro):

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

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

First, stop the mysql in the primary and secondary nodes.

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

(/etc/init.d/mysqld stop)

In the primary node(drbd1):

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

Move all data to mounted partition in the primary nodes and delete all the relevant mysql information in the secondary node:

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

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

Link new location to original ubication:

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

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

In the secondary node (drbd2):

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

Delete all the mysql information

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

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

Dismount the primary node and change it to the secondary one:

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

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

Convert the secondary into primary and do the set-up:

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

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


And create in this node the symbolic links in the same way:

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

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

After doing this, mysql is configured in both nodes and we can put again the secondary node as main and viceversa doing the previously mentioned but this way backwards.

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

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

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

DRBD detects split brain at the time connectivity becomes available again and the peer nodes exchange the initial DRBD protocol handshake. If DRBD detects that both nodes are (or were at some point, while disconnected) in the primary role, it immediately tears down the replication connection. The tell-tale sign of this is a message like the following appearing in the system log:

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

Split-Brain detected, dropping connection!

After split brain has been detected, one node will always have the resource in a StandAlone connection state. The other might either also be in the StandAlone state (if both nodes detected the split brain simultaneously), or in WFConnection (if the peer tore down the connection before the other node had a chance to detect split brain).

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

In this case, our secondary node (castor) is alone:

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

drbd1:~# cat /proc/drbd 
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 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

On the other node (the split brain survivor), if its connection state is also StandAlone, you would enter:

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

drbdadm connect mysql

See the status:

ステータスを見ます。

 drbd2:~# cat /proc/drbd 
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 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


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

In the current primary

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

1. Stop mysql

1. mysql の停止

/etc/init.d/mysql stop

2. Umount partition

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

umount /dev/drbd1

3. Degrade to secondary

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

drbdadm secondary mysql

In the current secondary

4. Promote to primary

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

drbdadm primary mysql

5. Mount partition

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

mount /dev/drbd1 /mysql

6. Start MySQL

6. MySQL の起動

/etc/init.d/mysql start

Corosync / Pacemaker 設定

Before installing we should check that in the file /etc/hosts both systems are correctly configured:

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

192.168.70.10 	   drbd1
192.168.70.11	   drbd2

You will also need to enable ip_forwarding.

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

sysctl -w net.ipv4.ip_forward=1 

Once this is done, we proceed to install pacemaker, openais and corosync (In both nodes).

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

yum install pacemaker openais corosync

Then, we edit the configuration file /etc/corosync/corosync.conf(main node). By default, it doesn't exist so we do a copy of the file that comes as an example

完了したら、(メインノードの)設定ファイル /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 
}

Add inside service.d folder a new file with the next configuration:

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

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

The file /etc/corosync/corosync.conf should be identical in both nodes so you should copy the file to node 2 to the path /etc/corosync

/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/

Next we create the corosync authentication keygen in the main node executing the command corosync-keygen:

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

[root@drbd1 ~]# corosync-keygen

Once we have executed this command, it will ask we create entropía pressing keys. To do this in a quick way, the better option is that from another terminal you download a huge file.

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

Once it has been generated it will automatically create a file with the key /etc/corosync/authkey, file that should be copied to the second node in /etc/corosync/ in order the keygens would be identical.

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

scp /etc/corosync/authkey root@192.168.70.11:/etc/corosync/authkey

After copying it, give to it permissions 400

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

chmod 400 /etc/corosync/authkey

When these operations are done, the server is started in both nodes:

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

/etc/init.d/corosync start

If the service has started properly corosync, pacemaker started the service (on both nodes)

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

/etc/init.d/pacemaker start

Once they have been started you can see the status of the cluster, where is shown how both nodes are configured and online (it takes a few minutes detecting both nodes):

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

crm_mon -1
[root@drbd2 ~]# 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 ] 
[root@drbd1 ~]# 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

It is very important that before continuing with the installation check that all steps have been implemented correctly and that the services corosync and pacemaker work correctly on both nodes.


Template warning.png

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


Pacemaker リソース設定

Once we have properly functioning Pacemaker (Cluster Resource Manager) on one side and the Corosync (a layer of messaging between its nodes) we add other resources.

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

First of all we must know what will be the order that resources will keep .

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

1.- IP Virtual
2.- DRBD / Filesystem
3.- Apache
4.- Mysql
5.- Pandora Server
6.- Tentacle Server

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

You need to follow this order because without the DRBD filesystem mounted and operating properly can not start the MySQL server, and without the mysql service, Pandora server works.

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

Template warning.png

Depending on your pacemaker version, the 'crm' command may not work properly.


Template warning.png

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


If the execution of the command 'crm configure' displays errors, you can execute the following to fix it (it may be a bit different depending on the version).

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

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

Try executing 'crm configure show' to check if it is now solved.

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

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

First, you should disable stonith:

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

crm configure property stonith-enabled=false

And configure the cluster so it ignores the quorum policies. This will allow the if a node fall down the other execute the resource without problems.

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

crm configure property no-quorum-policy=ignore

At this point you can adda the resources with virtual ip assigned:

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

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

When monitoring the cluster, take into account this later result (crm_mon -1):

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

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

This way when we do ping from a host to the virtual ip, the node which is active in this moment, will answer us, working in a transparent way for the sending host.

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

Apache リソースの作成

Remove the Apache service startup.

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

# chkconfig httpd off (on both)

The next step is enable the apache server-status for Pacemaker monitoring service. We need to uncomment these lines in the Apache config:

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

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

Copy the conf from one node to another:

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

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

Restart apache y check if server-status page is downloadable in both nodes:

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

[root@drbd1 ~]# /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

Add next lines on Pacemaker configuration.

次に、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

Indicate that apache is started after the IP resource

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

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

Execute crm configure show command:

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 

If exist any errors, restart pacemaker and corosync server. Remember that executing crm node standby / crm node online you can convert Slave node in Master node.

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

Do not continue the installation until you can verify that the apache service goes from one node to another correctly and entering a virtual IP in a browser you can see the message that Apache works.

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

[root@drbd2 ~]# 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

[root@drbd2 ~]# crm node standby
[root@drbd1 ~]# 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

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

First we add the drbd_res resource in which the DRBD (drbd_resource) is specified, in this case named mysql and the check time intervals, start and stop.

最初に、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

Then we add the resources that has as main aim to do that drbd_mysql runs only on the node that has been fixed as primary:

そして、プライマリとして設定されているノードでのみ 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

We do a commit of the cib drbd to register changes:

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

crm(drbd)#cib commit drbd

The second resource (fs_res) will mount the drbd devices in the mount point. In this case /dev/drbd0 en /mysql/. To add this resource the following process is done:

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

Enter in the crm and create a new cib named fs:

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

# crm
crm(live)# cib new fs

And then execute the command to add the resource:

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

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

The device should consider that resources should be active always in the node considered as master (colocation) and after the order in which it will be executed (after the main node would be promoted).

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

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

The result is this:

結果は次の通りです。

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

Tried at this point that after passing from one node to another, the /mysql directory containing the mysql files on the Master node.

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

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

Remove the mysql/mysqld service startup (both of the nodes).

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

# chkconfig mysql off

The creation of the next resource is slightly different depending on if we use an standard MySQL database or a Percona version, if we are ussing the CenOS Appliance, we will need to add the Percona kind. So that's what we will explain first. We configure the resource that runs the Percona daemon:

次のリソース作成は、標準の 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"

Indicate to the device that the resource should be active always in the node where the filesystem is set up and after that is will be started after the filesystem has been set up.

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

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

To finish, we execute a cleanup of the error register, just in case that any appears on the first creation

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

crm resource cleanup mysql_res


For a MySQL database, the procedure is quite similar, the only command that differs is the first one:

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"

Then we run the commands to indicate the correct status and order for the resource, same that for the Percona resource

そして、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

And the error cleanup

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

crm resource cleanup mysql_res

Pandora リソースの作成

Remove the pandora_server service startup (both of the nodes).

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

# chkconfig pandora_server off

Pandora resource the controls the pandora server service is added. To do this, the crm configuration is edited using the command:

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

Tentacle リソースの作成

Remove the tentacle_serverd service startup (both of the nodes).

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

# chkconfig tentacle_serverd off

Tentacle resource the controls the tentacle server service is added. To do this, the crm configuration is edited using the command:

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

Pacemaker の最終的な設定

Finally, don't forget to enable the auto-start on system boot for corosync and pacemaker.

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

# chkconfig corosync on
# chkconfig pacemaker on

The final configuration must look like this:

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

#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