個人用ツール

Pandora:Docuemntation ja:DRBD

提供: Pandora FMS Wiki JP

移動先: 案内, 検索

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

DRBD を使った Pandora FMS の 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 DRDB 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 全体のレプリケーションも可能です。

DRDB 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 を参照してください。

DRDB 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.10.101 (castor) -> Master 192.168.10.102 (pollux) -> Slave 192.168.10.100 virtual-ip

192.168.10.101 (castor) -> マスター 192.168.10.102 (pollux) -> スレーブ 192.168.10.100 仮想IP

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

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

192.168.10.1 pandora -> mysql app

Each node, has two harddisks:

それぞれのノードには 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 synchonized between all nodes, this is extremely IMPORTANT, if not, please synchronize it before continue, using ntp or equivalent mechanism.

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

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

Install following packages (debian)

次のパッケージをインストールします。(debianの場合)

apt-get install heartbeat drbd8-utils drbd8-modules-2.6-686 mysql

Install following packages (suse)

次のパッケージをインストールします。(suseの場合)

drbd heartbeat hearbeat-resources resource-agents mysql-server

DRBD の設定

DRBD の初期設定

Edit /etc/drdb.conf

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

global {
  usage-count no;
}

common {
 protocol C;
}

resource mysql {
   on castor {
       device /dev/drbd1;
       disk /dev/sdb1;
       address 192.168.10.101:7789;
       meta-disk internal;
   }
   on pollux {
       device /dev/drbd1;
       disk /dev/sdb1;
       address 192.168.10.102: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タイプ)

fdisk /dev/sdb

Delete all information on it

それの全データを削除します。

dd if=/dev/zero of=/dev/sdb1 bs=1M count=128

(Do it in both nodes)

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

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

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

drbdadm create-md mysql
drbdadm up mysql

(Again, do it 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 commence. 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 デバイスは使えるようになります。ブロックデバイスとして利用できファイルシステムを作ってマウントすることができます。通常のブロックデバイスとして使えます。

castor:/etc# 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 のブロックデバイスに対して操作します。

castor:~# mkfs.ext3 /dev/drbd1

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

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

castor# mkdir /drbd_mysql
castor# mount /dev/drbd1 /drbd_mysql/

You cannot do this (mount) in the secondary, to do it, you before need to promote to primary, and previously, need to degrade primary to secondary:

この操作(マウント)はセカンダリではできません。これを行うには、次のようにプライマリをセカンダリに切り替える必要があります。

In primary (castor):

プライマリ (castor) にて:

castor# drbdadm secondary mysql 

In secondary (pollux):

セカンダリ (pollux) にて:

pollux# drbdadm primary mysql

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

Executed from current master node (castor) :

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

castor:/# drbdadm state mysql
Primary/Secondary
castor:/# drbdadm dstate mysql
UpToDate/UpToDate

And from pollux (backup, replicating disk):

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

pollux:~# drbdadm state mysql
Secondary/Primary
pollux:~# 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 を停止します。

In the primary node:

プライマリノードにて:

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

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

mv /etc/mysql/my.cnf /drbd_mysql/
mv /var/lib/mysql /drbd_mysql/mysql
mv /etc/mysql/debian.cnf /drbd_mysql/

Link new location to original ubication:

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

ln -s /drbd_mysql/mysql/ /var/lib/mysql
ln -s /drbd_mysql/my.cnf /etc/mysql/my.cnf
ln -s /etc/mysql/debian.cnf /drbd_mysql/debian.cnf

Restart mysql.

mysql を再起動します。

In the secondary node:

セカンダリノードにて:

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

rm -Rf /etc/mysql/my.cnf
rm -Rf /var/lib/mysql
ln -s /drbd_mysql/mysql/ /var/lib/mysql
ln -s /drbd_mysql/my.cnf /etc/mysql/my.cnf

Pandora FMS データベースの作成

We assume you have the default SQL files to create the Pandora FMS database files at /tmp

Pandora FMS データベースを作成するためのデフォルトの SQL ファイルが /tmp にあると仮定します。

mysql -u root -p
mysql> create database pandora;
mysql> use pandora;
mysql> source /tmp/pandoradb.sql;
mysql> source /tmp/pandoradb_data.sql;

Set permissions:

アクセス権を設定します。

mysql> grant all privileges on pandora.* to pandora@192.168.10.1 identified by 'pandora';
mysql> flush privileges;

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

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:

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

castor:~# 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:

ステータスを見ます。

 pollux:/# 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 /drbd_mysql

6. Start MySQL

6. MySQL の起動

/etc/init.d/mysql start

Heartbeat の導入

Heartbeat の設定

We suppose you have installed hearbeat packages and the drbd utils, which includes a heartbeat resource file in /etc/ha.d/resource.d/drbddisk

heartbeat のパッケージと、/etc/ha.d/resource.d/drbddisk に heartbeat のリソースファイルを含む、drbd utils をインストールしていると仮定します。

First, you need to enable ip_forwarding.

最初に、ip forwarding を有効にする必要があります。

In DEBIAN systems, edit /etc/sysctl.conf and modify following line:

DEBIAN では、/etc/sysctl.conf を編集し以下の行を変更します。

net.ipv4.ip_forward = 1

In SUSE systems, just use YAST and set forwarding active in the interface for heartbeat (in this documentation is eth1).

SUSE では、YAST を使って heartbeat のインタフェースで forwarding を有効にします。(このドキュメントでは eth1 を想定)

Setup the ip address /etc/hosts in both hosts:

双方のホストの /etc/hosts の IP アドレスを設定します。

192.168.10.101  castor
192.168.10.102  pollux

Heartbeat の設定ファイル: /etc/ha.d/ha.cf

Edit /etc/ha.d/ha.cf file as follows in both nodes:

双方のホストの /etc/ha.d/ha.cf ファイルを編集します。

# Sample file for /etc/ha.d/ha.cf
# (c) Artica ST 2010

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth1
auto_failback on   
# auto_failback on Make the cluster go back to master when master onde gets up.
# auto_failback off Let the master node to secondary when it gets up after a failure.
ping 192.168.10.1  # Gateway de nuestra red que debe responder al ping
apiauth ipfail gid=haclient uid=hacluster #o los que corresponda
node castor
node pollux

HA リソースファイル

Edit /etc/ha.d/haresources in both hosts:

双方のホストの /etc/ha.d/haresources を編集します。

castor drbddisk Filesystem::/dev/drbd1::/drbd_mysql::ext3 mysql 192.168.10.100

This defines the default "master" node. In that lines you defines the default node name, it's resource script to start/stop the node, the filesystem and mount point, the drbd resource (mysql) and the virtual IP address (192.168.10.100).

ここでは、デフォルトの "マスター" ノードを定義します。1行に、デフォルトのノード名、ノードを起動・停止するためのリソーススクリプト、ファイルシステムとマウントポイント、drbd リソース (mysql) および仮想 IP アドレス(192.168.10.100)を定義しています。

認証の設定

Edit /etc/ha.d/authkeys in both hosts:

双方のホストで /etc/ha.d/authkeys を編集します。

auth 2
2 sha1 09c16b57cf08c966768a17417d524cb681a05549

The number "2" means you have two nodes, and the hash is a sha1 HASH.

数字の "2" は 2つのノードがあることを意味し、hash が sha1 HASH であることを意味します。

Do a chmod of /etc/ha.d/authkeys

/etc/ha.d/authkeys を chmod します。

chmod 600 /etc/ha.d/authkeys

Deativate the automatic mysql daemon startup, from now, should be managed by heartbeat.

mysql デーモンの自動起動を無効にします。以降、heartbeat により管理されます。

rm /etc/rc2.d/S??mysql

Heartbeat の最初の起動

First at all, be sure DRDB is ok and running fine, MySQL is working and database is created.

まず最初に、DRBD が正常に稼働していて、MySQL が動作し、データベースが作成されていることを確認します。

Start heartbeat in both systems, but FIRST in the primary node:

双方のシステムで heartbeat を起動します。ただし、最初にプライマリノードで実行します。

In castor:

castor にて:

/etc/init.d/heartbeat start

In pollux:

pollux にて:

/etc/init.d/heartbeat start

Logs in /var/log/ha-log should be enought to know if everything is OK. Master node (castor) should have the virtual IP address. Change pandora configuration files on console and server to use the Virtual IP and restart the Pandora FMS server.

全て問題ないかどうかは、/var/log/ha-log のログを見ることによって判断できます。マスターノード(castor)は、仮想 IP アドレスを持っています。pandora のコンソールとサーバの設定ファイルを仮想 IP を使うように修正し、Pandora FMS server を再起動します。

You need to have a Pandora FMS server watchdog, to detect when the connection is down or use the restart option in pandora_server.conf:

接続が切れたことを検出するために、Pandora FMS server watchdog が必要です。pandora_server.conf にて restart オプションを利用します。

restart 1
restart_delay 60

HA のテスト: 全体障害のテスト

1. Start a web browser and open a session. Put the server view in autorefresh mode with 5 secs of interval:

1. ウェブブラウザを起動しセッションを開始します。サーバビューで自動更新を 5秒にします。

2. Shutdown the primary node:

2. プライマリノードをシャットダウンします。

Push the poweoff button.

電源offボタンを押します。

-or-

-または-

Execute 'halt' on root console

root のコンソールから 'halt' を実行します。

3. Put a tail -f /var/log/ha-log in secondary node to watch how is working the switchover.

3. どのように切り替えが動作するか見るために、セカンダリノードで tail -f /var/log/ha-log を実行します。

4. Switchover can take 3-5 seconds.

4. 3-5秒程度で切り替わります。