ライン

ポイント:*

ライン

 はじめに

Pacemaker-1.1系

 使ったことがなかったのですが、機会あって構築を見ることができそうなので、学習用にメモ。
CentOS 6.7系を2つ準備して、MariaDBをリソースグループとして利用する形をつくってみようと思います。

 毎度で、VMware 5,5系でコピペ!で環境は準備しました。HTMLを書いている時間の方が長いかも。
インターコネクトは、スプリット・ブレインを考慮しハートビートを2つ用意した形にしました。

 さて、1.1系でインストールするので、corosync2系との込みあわせになります。

 インストール

 2台のマシンで同様に平行導入を開始します。

# wget -O ./pacemaker-repo-1.1.13-1.1.el6.x86_64.rpm\
 https://osdn.jp/frs/redir.php\?m=iij\&f=%2Flinux-ha%2F63919%2Fpacemaker-repo-1.1.13-1.1.el6.x86_64.rpm
# yum localinstall pacemaker-repo-1.1.13-1.1.el6.x86_64.rpm 読み込んだプラグイン:fastestmirror ローカルパッケージ処理の設定をしています pacemaker-repo-1.1.13-1.1.el6.x86_64.rpm を調べています: pacemaker-repo-1.1.13-1.1.el6.x86_64 pacemaker-repo-1.1.13-1.1.el6.x86_64.rpm をインストール済みとして設定しています Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp * c6-media: * extras: ftp.tsukuba.wide.ad.jp * updates: ftp.tsukuba.wide.ad.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> Package pacemaker-repo.x86_64 0:1.1.13-1.1.el6 will be インストール --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ パッケージ アーキテクチャ バージョン リポジトリー 容量 ================================================================================ インストールしています: pacemaker-repo x86_64 1.1.13-1.1.el6 /pacemaker-repo-1.1.13-1.1.el6.x86_64 22 M トランザクションの要約 ================================================================================ インストール 1 パッケージ 合計容量: 22 M インストール済み容量: 22 M これでいいですか? [y/N]y パッケージをダウンロードしています: rpm_check_debug を実行しています トランザクションのテストを実行しています トランザクションのテストを成功しました トランザクションを実行しています インストールしています : pacemaker-repo-1.1.13-1.1.el6.x86_64 1/1 Verifying : pacemaker-repo-1.1.13-1.1.el6.x86_64 1/1 インストール: pacemaker-repo.x86_64 0:1.1.13-1.1.el6 完了しました! # ls /opt/linux-ha/pacemaker/rpm/ cluster-glue-1.0.12-1.el6.x86_64.rpm cluster-glue-libs-1.0.12-1.el6.x86_64.rpm cluster-glue-libs-devel-1.0.12-1.el6.x86_64.rpm corosync-2.3.4-1.el6.x86_64.rpm corosynclib-2.3.4-1.el6.x86_64.rpm corosynclib-devel-2.3.4-1.el6.x86_64.rpm crmsh-2.1.4-1.el6.x86_64.rpm crmsh-test-2.1.4-1.el6.x86_64.rpm fence-agents-4.0.19-1.el6.x86_64.rpm ldirectord-3.9.6-1.el6.x86_64.rpm libqb-0.17.1-1.el6.x86_64.rpm libqb-devel-0.17.1-1.el6.x86_64.rpm pacemaker-1.1.13-1.el6.x86_64.rpm pacemaker-all-1.1.13-1.1.el6.noarch.rpm pacemaker-cli-1.1.13-1.el6.x86_64.rpm pacemaker-cluster-libs-1.1.13-1.el6.x86_64.rpm pacemaker-cts-1.1.13-1.el6.x86_64.rpm pacemaker-doc-1.1.13-1.el6.x86_64.rpm pacemaker-libs-1.1.13-1.el6.x86_64.rpm pacemaker-libs-devel-1.1.13-1.el6.x86_64.rpm pacemaker-remote-1.1.13-1.el6.x86_64.rpm pcs-0.9.141-1.el6.x86_64.rpm pm_crmgen-2.1-1.el6.noarch.rpm pm_ctl-2.0-1.el6.noarch.rpm pm_diskd-2.1-1.el6.x86_64.rpm pm_extras-2.1-1.el6.x86_64.rpm pm_logconv-cs-2.1-1.el6.noarch.rpm pssh-2.3.1-5.el6.noarch.rpm resource-agents-3.9.6-1.el6.x86_64.rpm # yum install pacemaker-all .. 依存性を解決しました ================================================================================ パッケージ アーキテクチャ バージョン リポジトリー 容量 ================================================================================ インストールしています: pacemaker-all noarch 1.1.13-1.1.el6 linux-ha-ja-pacemaker 2.2 k 依存性関連でのインストールをします。: OpenIPMI-libs x86_64 2.0.16-14.el6 base 473 k cluster-glue x86_64 1.0.12-1.el6 linux-ha-ja-pacemaker 250 k cluster-glue-libs x86_64 1.0.12-1.el6 linux-ha-ja-pacemaker 117 k corosync x86_64 2.3.4-1.el6 linux-ha-ja-pacemaker 160 k corosynclib x86_64 2.3.4-1.el6 linux-ha-ja-pacemaker 85 k crmsh x86_64 2.1.4-1.el6 linux-ha-ja-pacemaker 589 k cvs x86_64 1.11.23-16.el6 base 712 k gettext x86_64 0.17-18.el6 base 1.8 M gnutls x86_64 2.8.5-19.el6_7 updates 347 k ipmitool x86_64 1.8.11-29.el6_7 updates 464 k libgomp x86_64 4.4.7-16.el6 base 134 k libqb x86_64 0.17.1-1.el6 base 71 k libtool-ltdl x86_64 2.2.6-15.5.el6 base 44 k libxslt x86_64 1.1.26-2.el6_3.1 base 452 k lm_sensors-libs x86_64 3.1.1-17.el6 base 38 k net-snmp-libs x86_64 1:5.5-54.el6_7.1 updates 1.5 M openhpi-libs x86_64 2.14.1-6.el6 base 135 k pacemaker x86_64 1.1.13-1.el6 linux-ha-ja-pacemaker 391 k pacemaker-cli x86_64 1.1.13-1.el6 linux-ha-ja-pacemaker 193 k pacemaker-cluster-libs x86_64 1.1.13-1.el6 linux-ha-ja-pacemaker 45 k pacemaker-libs x86_64 1.1.13-1.el6 linux-ha-ja-pacemaker 457 k perl-TimeDate noarch 1:1.16-13.el6 base 37 k pm_crmgen noarch 2.1-1.el6 linux-ha-ja-pacemaker 46 k pm_diskd x86_64 2.1-1.el6 linux-ha-ja-pacemaker 14 k pm_extras x86_64 2.1-1.el6 linux-ha-ja-pacemaker 22 k pm_logconv-cs noarch 2.1-1.el6 linux-ha-ja-pacemaker 27 k pssh noarch 2.3.1-5.el6 linux-ha-ja-pacemaker 50 k python-dateutil noarch 1.4.1-6.el6 base 84 k python-lxml x86_64 2.2.3-1.1.el6 base 2.0 M resource-agents x86_64 3.9.6-1.el6 linux-ha-ja-pacemaker 521 k トランザクションの要約 ================================================================================ インストール 31 パッケージ 総ダウンロード容量: 11 M インストール済み容量: 51 M これでいいですか? [y/N]y ..

 導入はこんな感じで完了。

 設定

corosync

 まずは、これから開始。

# cd /etc/corosync/
# ll
合計 12
-rw-r--r-- 1 root root 2881  6月  2 13:01 2015 corosync.conf.example
-rw-r--r-- 1 root root  767  6月  2 13:01 2015 corosync.conf.example.udpu
drwxr-xr-x 2 root root 4096  6月  2 13:01 2015 uidgid.d

サンプルは、小さめの方がありがたいので、udpuの方をベースに準備することにしました。

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

結果、以下のような感じになりました。

totem {
        version: 2

        crypto_cipher: none
        crypto_hash: none

# added 2 lines
        token: 1000
        rrp_mode: active

        interface {
                ringnumber: 0
                bindnetaddr: 10.10.1.0
                mcastaddr: 239.239.1.1
                mcastport: 5405
                ttl: 1
        }
        interface       {
                ringnumber: 1
                bindnetaddr: 10.10.2.0
                mcastaddr: 239.239.2.1
                mcastport: 5405
                ttl: 1
        }
}

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

quorum {
        provider: corosync_votequorum
        expected_votes: 4
}

 to_syslogは noでいいような気がする。

# corosync-keygen -l
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.
# ll /etc/corosync/authkey
-r-------- 1 root root 128  3月 20 11:43 2016 /etc/corosync/authkey

 上記で準備した鍵と設定ファイルを、もう1台にもコピー(SCP)する。

pacemaker

 /etc/sysconfig/pacemakerの設定の変更。

# cd /etc/sysconfig/
# cp -p pacemaker pacemaker_orig
# vi pacemaker

 竹下さんの資料をみつつ、修正箇所は1箇所のようなので、修正。

-# PCMK_fail_fast=no
+# 20160320
+PCMK_fail_fast=yes

 /etc/init/pacemaker.combined.confの設定の変更。

# cd /etc/init
# cp -p pacemaker.combined.conf pacemaker.combined.conf_orig
# vi pacemaker.combined.conf

 同様でコメントを1箇所はずす。

-    #pidof corosync || false
+    # 20160320
+    pidof corosync || false

 では、起動をしてみます。

# initctl start pacemaker.combined
pacemaker.combined start/running, process 3650

まぁ、そんなにスムースには進まないみたいだ。
以下はsyslogの該当する箇所。corosyncでダメ。

# crm_mon -fAD1
Online: [ mariadb1 mariadb2 ]


Node Attributes:
* Node mariadb1:
* Node mariadb2:

Migration summary:
* Node mariadb1:
* Node mariadb2:

オンラインになっていることを確認できました。

 DRBDを利用

DRBD

 さて、DRDBを入れていきます。

# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.EB2AAV: ヘッダ V4 DSA/SHA1 Signature, key ID baadae52: NOKEY
準備中...                ########################################### [100%]
   1:elrepo-release         ########################################### [100%]

リポジトリは、一応無効化。使うときは都度で利用想定だし。

# yum --enablerepo=elrepo install drbd kmod-drbd84
..
依存性を解決しました

=========================================================================================================
 パッケージ               アーキテクチャ     バージョン                         リポジトリー        容量
=========================================================================================================
インストールしています:
 drbd84-utils             x86_64             8.9.5-1.el6.elrepo                 elrepo             387 k
 kmod-drbd84              x86_64             8.4.7-1_1.el6.elrepo               elrepo             197 k

トランザクションの要約
=========================================================================================================
インストール         2 パッケージ

総ダウンロード容量: 584 k
インストール済み容量: 1.7 M
これでいいですか? [y/N]:y
..

 これを両方のサーバに入れたら、パーティションの準備を始めます。
今回まだ準備していないので、VMware上に準備します。
とりあえず、動作確認だし、シンプロ5GBをMariaDB用に準備しました。

みたいな感じで掘り出しをしました。

# fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0x56dc23ab で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

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

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

ディスク /dev/sdb: 5368 MB, 5368709120 バイト
ヘッド 166, セクタ 62, シリンダ 1018
Units = シリンダ数 of 10292 * 512 = 5269504 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x56dc23ab

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1        1018     5238597   83  Linux

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

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1

 続きを設定します。まずは確認。

# 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";

*.resというファイルになれば何でも良さそう。

# cd /etc/drbd.d/
# vi disk.res

設定内容は以下にしました。

resource r0 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/sdb1;

        on mariadb1 {
                address 192.168.255.211:7788;
        }
        on mariadb2 {
                address 192.168.255.212:7788;
        }
}

では作成。

# drbdadm create-md r0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success

サービスを開始。逆側でも投入してあげると同期します。
プライマリに昇格させて、使えるようにしてみます。

# service drbd start
Starting DRBD resources: [
     create res: r0
   prepare disk: r0
    adjust disk: r0
     adjust net: r0
]
..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - If this node was already a degraded cluster before the
   reboot, the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot, the timeout
   is 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  39]:
.
# drbdadm -- --overwrite-data-of-peer primary r0
# cat /proc/drbd
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r-----
    ns:0 nr:0 dw:0 dr:664 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:523840
# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1309600 blocks
65480 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# mount -t ext4 /dev/drbd0 /mnt
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_01-LogVol02
                       16G  1.4G   14G  10% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             283M   38M  231M  15% /boot
/dev/drbd0            4.8G   10M  4.6G   1% /mnt

試しに、/mntにファイルをtouchして、ファイルができたことを確認します。

# umount /mnt
# drbdadm secondary r0

と切り離して置いて、逆側で昇格させて確認してみます。

# drbdadm primary r0
# mount -t ext4 /dev/drbd0 /mnt
# ll /mnt
合計 16
-rw-r--r-- 1 root root     0  3月 20 22:59 2016 aaa
drwx------ 2 root root 16384  3月 20 22:54 2016 lost+found

ちゃんと見えました。
後は、ここにMariaDBのデータを配置すること、Pacemakerで連携できれば一連の動作になることを確認することができそうです。


【改訂履歴】作成:2016/03/20


【参照ページ】

Pacemaker-1.1で始める 高可用クラスタ入門 ~私が落ちても代わりはいるもの~
Pacemaker+Corosync+DRBDを利用したWEBサーバの冗長化 - OSSでLinuxサーバ構築



 
Copyright © 1996,1997-2006,2007- by F.Kimura,