本題の前にちっとだけ復習しよう。
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もそのうちやるにゃん。