Heartbeat+DRBD+Apacheのクラスタ Pacemakerはまた今度

本題の前にちっとだけ復習しよう。

LVMのこと

PV (物理ボリューム)
物理的な記憶媒体を示します。

VG (ボリュームグループ)
複数のPVをまとめるグループで、VGがPVをまとめて1つの大きな記憶領域として認識させているのだ。

LV (論理ボリューム)
ファイルシステムを作る入れ物です。従来のパーティション。

ではDRBDを

以前”落ちない”システム作りにハートビートの検証をしました。その時はApacheだけ監視させたごくごく基本的なものでしたがDRBDというのを今回は追加しようと思います。

参考サイト

CentOSで自宅サーバ構築 HAクラスタシステム構築(Heartbeat+DRBD+Apache)

とりあえずディスクは全部使っているので新規で追加しましょう。
VMwareなんであっというまです。

ではでは、参考サイトを追ってみましょう。

fdisk -l

ディスク /dev/sdb: 21.5 GB, 21474836480 バイト
ヘッド 255, セクタ 63, シリンダ 2610
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

HDDを追加して起動すると、新たに/dev/sdbが認識されました。
ダイジェストでFdisk GOGO

[root@hb03 ~]# fdisk /dev/sdb

コマンドnで新規パーティション作成。

 

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-2610, 初期値 1):
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-2610, 初期値 2610):
初期値 2610 を使います

コマンドtでシステムID設定。

 

コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/sdb: 21.5 GB, 21474836480 バイト
ヘッド 255, セクタ 63, シリンダ 2610
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x222754c6

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1        2610    20964793+  8e  Linux LVM

最後にコマンドwで書き込み。

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

LVMのパーティションが出来上がりました。
出来上がったパーティションをpvcreateで/dev/sdb1とします。

[root@hb02 takeken]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

グループの名前を確認します。

[root@hb02 takeken]# lvdisplay -C
  LV      VG      Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root vg_hb02 -wi-ao---- 17.57g
  lv_swap vg_hb02 -wi-ao----  1.94g

vgextendで作成したLVMの/dev/sdb1をvg_hb02へ追加します。

[root@hb02 takeken]# vgextend vg_hb02 /dev/sdb1
  Volume group "vg_hb02" successfully extended

vg_hb02の空き容量が増えている事が確認できました。

[root@hb02 takeken]# vgdisplay
  --- Volume group ---
  VG Name               vg_hb02
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.50 GiB
  PE Size               4.00 MiB
  Total PE              10112
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               LprJkf-qKFN-o2Qm-yZTX-Aq3C-rk5T-0pvWo7

参考サイトの注意にあるように論理ボリュームの追加まででファイルシステムの作成の手前までやります。

[root@hb02 takeken]# lvcreate -L 19.99Gib /dev/vg_hb02
  Rounding up size to full physical extent 19.99 GiB
  Logical volume "lvol0" created
[root@hb02 takeken]#  lvdisplay -C
  LV      VG      Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root vg_hb02 -wi-ao---- 17.57g
  lv_swap vg_hb02 -wi-ao----  1.94g
  lvol0   vg_hb02 -wi-a----- 19.99g

ここに来て問題が勃発。yumにはDRBDがないらしい・・・orz

Warning: No matches found for: drbd
No Matches found

仕方ないので

参考サイト

AirVergo CentOS6.5でHeartbeat+Pacemaker+DRBDでクラスタリング試してみました

こっちも合わせて見ながら進めることにしました。
8系の最終と思われる8.4.5で進めようと思ったけれど、なぜかMake用のファイルがなかったので8.4.4で進めることにしますた。

[root@hb02 takeken]# cd /tmp
[root@hb02 tmp]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
[root@hb02 drbd-8.4.4]# ./configure -prefix=/usr -localstatedir=/var -sysconfdir=/etc -with-km

conf ファイルはこんな感じだったので

/etc/drbd.conf

[root@hb02 drbd-8.4.4]# cat /etc/drbd.conf
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";
include "drbd.d/*.res";

/etc/drbd.d/drbd.res として、こんな感じにしました。

[root@hb02 drbd-8.4.4]# cat /etc/drbd.d/drbd.res
#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd82/drbd.conf
#
resource r0 {
    protocol C;
    startup {
         degr-wfc-timeout 120;
    }
    net {
         cram-hmac-alg sha1;
         shared-secret "FooFunFactory";
    }
    on hb02 {
         device    /dev/drbd0;
         disk      /dev/vg_hb02/lvol0;
         address   192.168.0.1:7789;
         meta-disk  internal;
    }
    on hb03 {
         device    /dev/drbd0;
         disk      /dev/vg_hb02/lvol0;
         address   192.168.0.2:7789;
         meta-disk  internal;
    }
}

DRBDメタデータ作成を

[root@hb02 drbd-8.4.4]# drbdadm create-md r0
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success

うむ、参考サイトとは何か違うけどサクセスのようだ。
ではここまでをhb03でもやるぞー。

・・・・

カラムーチョを食べつつhb03の方も出来上がりました! では実行すべし。

[root@hb03 ~]# /etc/rc.d/init.d/drbd start
Starting DRBD resources: [
     create res: r0
   prepare disk: r0
    adjust disk: r0
     adjust net: r0
]
outdated-wfc-timeout has to be shorter than degr-wfc-timeout
outdated-wfc-timeout implicitly set to degr-wfc-timeout (120s)
..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 120 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  16]: yes
[root@hb02 ~]# /etc/rc.d/init.d/drbd start
Starting DRBD resources: [
     create res: r0
   prepare disk: r0
    adjust disk: r0
     adjust net: r0
]
outdated-wfc-timeout has to be shorter than degr-wfc-timeout
outdated-wfc-timeout implicitly set to degr-wfc-timeout (120s)
..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 120 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  13]: yes

では同期させてみよう。

[root@hb02 ~]# drbdadm -- --overwrite-data-of-peer primary all

プライマリ hb02

[root@hb02 ~]# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@hb02, 2014-09-30 10:00:16
m:res  cs          ro                 ds                     p  mounted  fstype
0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C
...    sync'ed:    3.2%               (19760/20404)M

セカンダリ hb03

[root@hb03 ~]# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@hb03, 2014-09-30 10:47:41
m:res  cs          ro                 ds                     p  mounted  fstype
0:r0   SyncTarget  Secondary/Primary  Inconsistent/UpToDate  C
...    sync'ed:    33.7%              (13548/20404)M

まだ同期中だけど、問題なしっぽ。
実際はいろいろと紆余曲折はあったのだけれど、ここまではまずOKだ。
まぁまぁ、1回で成功するよりも失敗した事柄からの方が理解が深まることは多々ある。だけど仕事では失敗はできないから、すぐに出来る人はいいと思うけど、自分のようにあまり要領がよくない人にはこういう遊びって結構いいと思うんだよね。
などと、供述しております。

ではファイルシステムを作成しよう。

[root@hb02 ~]# mkfs -t ext3 /dev/drbd0
[root@hb02 ~]# mount /dev/drbd0 /mnt
/dev/drbd0            20633560  176196  19409232   1% /mnt

ではプライマリとセカンダリを入れ替えて確認してみよう。
手順は省いてlsでファイル確認の結果だけ。

[root@hb02 ~]# ls -l /mnt
合計 16
drwx------ 2 root root 16384  9月 30 11:30 2014 lost+found

[root@hb03 ~]# ls -l /mnt
合計 16
drwx------ 2 root root 16384  9月 30 11:30 2014 lost+found

うまくいったようです。

ではハートビートへ

ハートビートのインストールと簡単な検証は以前に終わっているので、次の段階から。なんだけれど、どうやらcrm_monは未来に帰っていたようだ。

[root@hb02 ~]# which crm_mon
/usr/bin/which: no crm_mon in (/sbin:/bin:/usr/sbin:/usr/bin)

どうも、ナウいハートビートはPacemakerなるものを使うようだ。
今回にリソース管理のPacemakerまでやっちゃうと長くなりすぎてしまうので、今回はとりあえず/etc/ha.d/haresourcesにDRBDのことを記述しておいて、うまくフェールオーバーしてくれるかどうかの実験で完了する。

[root@hb02 ~]# tail -4 /etc/ha.d/haresources
#
hb02  192.168.24.80/24 httpd \
drbddisk::r0 \
Filesystem::/dev/drbd0::/mnt

テストの方法は前回と同じ。まずはキル。

[root@hb02 ~]# /usr/lib64/heartbeat/heartbeat -k
[root@hb02 ~]#

セカンダリの確認

[root@hb03 ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:4f:89:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.24.71/24 brd 192.168.24.255 scope global eth1
    inet 192.168.24.80/24 brd 192.168.24.255 scope global secondary eth1:0
[root@hb03 ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_hb03-lv_root
                      18134344 1427532  15785624   9% /
tmpfs                   506172       0    506172   0% /dev/shm
/dev/sda1               495844   55928    414316  12% /boot
/dev/drbd0            20633560  176196  19409232   1% /mnt

無事に入れ替わったようだね。
では、戻そう。

[root@hb02 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.

[root@hb02 ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:5c:c4:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.24.70/24 brd 192.168.24.255 scope global eth1
    inet 192.168.24.80/24 brd 192.168.24.255 scope global secondary eth1:0
[root@hb02 ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_hb02-lv_root
                      18134344 1444600  15768556   9% /
tmpfs                   506172       0    506172   0% /dev/shm
/dev/sda1               495844   55971    414273  12% /boot
/dev/drbd0            20633560  176196  19409232   1% /mnt

うむ、OKのようだ。

ここまではOKだけど、やっぱりここまでやったらPacemakerもやろうかなと思うわな。

だが最近というと、Tripwireがおかしくなっててそれを治したりしてたし、LpicのLV3をぼちぼちやろうかなぁなどと考えて本だけは買ってたりするし、プログラムも夏頃からやるやる詐欺だし、急にあごが痛いし、サークルに呼ばれてなかったりするし、テレキャスターが欲しいなあなどと考えてたり、まぁPacemakerもそのうちやるにゃん。

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です