:>/dev/null

ラガードエンジニアの不撓不屈の精神/unlearning/go beyond

MySQL(Q4M) + DRBD + HA(Pacemaker/corosync) 構築手順 (インストール編)

オンプレ環境でMySQL+DRBD+HA構成を検証する機会があり、クラウド全盛のタイミングだが低レイヤーの知見として作業記録メモを残す。
クラウドのマネージドサービスを使用した場合、クラウドベンダー範疇の為意識されてないが参考資料として共有。
基本となる構成は、サービスを提供する「アクティブサーバ」と、いざという時のために予備機として待機している「スタンバイサーバ」の2台で構成される「アクティブ/スタンバイ」型のHA環境です。

  • 以下構築要件
    • OS:CentOS6.9 x86_84
    • クラスタソフト:Pacemaker 1.1.12 / Corosync 2.3.4
    • データ同期:DRBD8.3.16
    • 制御対象:仮想IP / MySQL
    • 監視用インターフェース:eth1 (eth0はサービス用ポート)

◎ 導入〜動作確認までの手順

■ DRBD構成

パーティション確認

[root@drbd01 ~]# fdisk -l

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

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          66      524288   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              66         334     2150400   82  Linux スワップ / Solaris
パーティション 2 は、シリンダ境界で終わっていません。
/dev/sda3             334        3917    28781568   83  Linux

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

●epelレポジトリ追加

[root@drbd01 ~]# yum install http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el6/x86_64/RPMS/elrepo-release-6-8.el6.elrepo.noarch.rpm

● DRBDインストール

[root@drbd01 ~]# yum install --enablerepo=elrepo drbd83 kmod-drbd83
[root@drbd01 ~]# rpm -qa | grep drbd
drbd83-utils-8.3.16-1.el6.elrepo.x86_64
kmod-drbd83-8.3.16-3.el6.elrepo.x86_64

● /etc/hosts設定

[root@drbd01 ~]vi /etc/hosts
10.131.6.1   drbd01
10.131.6.2   drbd02

● /etc/drbd.confの作成

[root@drbd01 ~]# vi /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";

global {
        usage-count yes;
}

common {
    protocol    C;
    startup {
        degr-wfc-timeout    0;
    }

    net {
        cram-hmac-alg   sha1;
        shared-secret   {shared-secret-key};
    }

    disk {
        on-io-error detach;
    }
    syncer {
        rate    50M;
    }
}
resource r0 {
    on drbd01 {
        device      /dev/drbd0;
        disk        /dev/sdb;
        meta-disk   internal;
        address     10.131.6.1:7788;
    }
    on drbd02 {
        device      /dev/drbd0;
        disk        /dev/sdb;
        meta-disk   internal;
        address     10.131.6.2:7788;
    }
}

※hostsで登録した名称とhostnameが一致しない場合、エラーで起動出来たい為、下記設定行う。

[root@localhost ~]# drbdadm create-md r0
'r0' ignored, since this host (localhost.localdomain) is not mentioned with an 'on' keyword.
[root@localhost ~]# hostname drbd01
[root@localhost ~]# logout

● DRBDのメタデータを初期化

[root@drbd01 ~]# drbdadm create-md r0

Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

自動起動ONにする

[root@drbd01 ~]# chkconfig drbd on
[root@drbd01 ~]# chkconfig --list drbd
drbd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

● DRBDサービス起動

[root@drbd01 ~]# /etc/init.d/drbd start
Starting DRBD resources: [ d(r0) s(r0) n(r0) ]..........
***************************************************************
 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 0 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' [  12]:yes

.

● DRBDサービス起動後のステータス確認

[root@drbd01 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                   ds                         p  mounted  fstype
0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

● Primary 昇格と DRBD 同期(drbd01) drbd01 を一時的に Primary へ昇格させます。

[root@drbd01 ~]# drbdadm -- --overwrite-data-of-peer primary r0

● DRBDのステータス確認

[root@drbd01 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs          ro                 ds                     p  mounted  fstype
0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C
...    sync'ed:    0.3%               (102116/102396)M

drbd01は"SyncSource"になっていることがわかる。

● DRBDのステータス確認(drbd02)

[root@drbd02 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs          ro                 ds                     p  mounted  fstype
0:r0   SyncTarget  Secondary/Primary  Inconsistent/UpToDate  C
...    sync'ed:    0.6%               (101856/102396)M

drbd02は"SyncTarget"になっていることがわかる。

● 同期完了後の状態確認
sync'ed: **% が同期の進捗状況。「Inconsistent/UpToDate」ステータスになってる。
同期完了後の状態「UpToDate/UpToDate」が表示される。

[root@drbd03 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C

● DRBD ボリュームのマウント(drbd01)
DRBD ボリュームにファイルシステムを作成します。

[root@drbd01 ~]# 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
6553600 inodes, 26213591 blocks
1310679 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 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, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872

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

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

● DRBDマウントポイント作成(drbd01)

[root@drbd01 ~]# mkdir /data
[root@drbd01 ~]# mount -t ext4 /dev/drbd0 /data/
[root@drbd01 ~]# df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4    27G  2.7G   23G  11% /
tmpfs          tmpfs  1.9G     0  1.9G   0% /dev/shm
/dev/sda1      ext4   488M   39M  425M   9% /boot
/dev/drbd0     ext4    99G   60M   94G   1% /data

● DRBDのステータス確認

[root@drbd01 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /data    ext4
■ 動作確認

● 適当なファイルをノードAで作成(primary(drbd01))

[root@drbd01 ~]# echo "DRBD TEST from Node A" > /data/test.txt
[root@drbd01 ~]# cat /data/test.txt
DRBD TEST from Node A

● 一旦、primary→secondaryへ切替

[root@drbd01 ~]# umount /data
[root@drbd01 ~]# drbdadm secondary r0

● drbdのステータス確認

[root@drbd01 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                   ds                 p  mounted  fstype
0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C

※ここで、一旦ノードB(secondary(drbd02))で作業に切り替える

● ノードBでステータス確認(secondary(drbd02))の為、マウントする

[root@drbd02 ~]# mkdir /data
[root@drbd02 ~]# mount -t ext4 /dev/drbd0 /data/

● drbdのステータス確認(primary側を停止(secondaryへ切替)した為、primaryへ昇格してる)

[root@drbd02 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /data    ext4

● ノードA(旧primary(drbd01))で書き込みしたデータの同期確認

[root@drbd02 ~]# cat /data/test.txt
DRBD TEST from Node A

● データ同期確認用にデータ書き込み

[root@drbd02 ~]# echo "DRBD TEST from Node B" >> /data/test.txt

● ノードBをsecondaryへ切替

[root@drbd02 ~]# umount /data
[root@drbd02 ~]# drbdadm secondary r0

● drbdのステータス確認

[root@drbd02 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                   ds                 p  mounted  fstype
0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C

※ここで、ノードA(primary(drbd01))へ作業を切り替える

● secondary→primaryへ切替

[root@drbd01 ~]# drbdadm primary r0
[root@drbd01 ~]# mount -t ext4 /dev/drbd0 /data/

● ノードB(secondary(drbd02))で書き込みしたデータが正常に同期してるか確認

[root@drbd01 ~]# cat /data/test.txt
DRBD TEST from Node A
DRBD TEST from Node B

● drbdのステータス確認(primaryへ切替してる事を確認)

[root@drbd01 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /data    ext4

※ここで、ノードB(secondary(drbd02))へ作業を切り替える

● drbdのステータス確認(primaryが復旧した為、「Secondary/Primary」へ切替済みを確認)

[root@drbd02 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C

● 同期パーティション設定のmountポイントが解除されているか確認

[root@drbd02 ~]# df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4    27G  2.7G   23G  11% /
tmpfs          tmpfs  1.9G     0  1.9G   0% /dev/shm
/dev/sda1      ext4   488M   39M  425M   9% /boot

■ HA構成

● Pacemakerリポジトリを取得、インストール

[root@drbd01 tmp]# wget https://ja.osdn.net/projects/linux-ha/downloads/62369/pacemaker-repo-1.1.12-1.1.el6.x86_64.rpm
[root@drbd01 tmp]# rpm -ivh pacemaker-repo-1.1.12-1.1.el6.x86_64.rpm
[root@drbd01 tmp]# yum install pacemaker-all

● /etc/corosync/corosync.conf設定

[root@drbd01 tmp]# /etc/corosync/corosync.conf

● /etc/corosync/corosync.conf設定

compatibility: whitetank

aisexec {
       user: root
       group: root
}

service {
       name: pacemaker
       ver: 0
       use_mgmtd: yes
}

amf {
       mode: disabled
}

totem {
       version: 2
       secauth: off
       threads: 0
       rrp_mode: none
       clear_node_high_bit: yes
       token: 4000
       censensus: 7000
       join: 60
       interface {
               member {
                       memberaddr: 10.131.6.103    #ノードA
               }
               member {
                       memberaddr: 10.131.6.175    #ノードB
               }
               ringnumber: 0
               bindnetaddr: 10.131.0.0         #ネットワークアドレス
               mcastport: 5405
               ttl: 1
       }
       transport: udpu
}

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

quorum {
       provider: corosync_votequorum
       expected_votes: 2
       two_node: 1
}

※ Pacemaker/Corosync の設定値について
https://www.sraoss.co.jp/tech-blog/pacemaker/pacemaker-config-values/

自動起動ONにする

[root@drbd01 tmp]# chkconfig pacemaker on
[root@drbd01 tmp]# chkconfig corosync on

● サービス起動
Pacemaker, Corosync起動(初回のみ)
両方のノードで起動する

[root@drbd01 tmp]# /etc/init.d/corosync start
[root@drbd01 tmp]# /etc/init.d/pacemaker start

※ 手動で停止するときはこの順番で停止すること

[root@drbd01 tmp]# /etc/init.d/pacemaker stop
[root@drbd01 tmp]# /etc/init.d/corosync stop

● Pacemakerの起動状態確認(片方のノードで実行すればよい)

[root@drbd01 tmp]# crm_mon -Aro

Last updated: Fri Jun 21 14:49:37 2019
Last change: Fri Jun 21 14:43:01 2019
Stack: corosync
Current DC: drbd03 (176359015) - partition with quorum
Version: 1.1.12-561c4cf
2 Nodes configured
0 Resources configured


Online: [ drbd01 drbd02 ]

Full list of resources:


Node Attributes:
* Node drbd01:
* Node drbd02:

Operations:
* Node drbd01:
* Node drbd02:

CRM設定
片方のノードで実行すればよい

[root@drbd01 tmp]# crm configure
crm(live)configure#
crm(live)configure# property no-quorum-policy=ignore stonith-enabled=false
crm(live)configure# rsc_defaults resource-stickiness=INFINITY migration-threshold=1
crm(live)configure# commit
crm(live)configure# exit

● DRBDを死活監視対象に設定

[root@drbd01 tmp]# crm configure
crm(live)configure# primitive drbd_data ocf:linbit:drbd params drbdconf=/etc/drbd.conf drbd_resource=r0 \
op start interval=0s timeout=240s \
op monitor interval=10 role=Slave \
op monitor interval=11 role=Master \
op stop interval=0 timeout=100s on-fail=block

crm(live)configure# ms ms-drbd_data drbd_data meta notify=true
crm(live)configure# primitive fs_data ocf:heartbeat:Filesystem params run_fsck=no device=/dev/drbd0 directory=/data fstype=ext4 \
op start interval=0s timeout=60s \
op monitor interval=15 timeout=40s \
op stop interval=0 timeout=60s on-fail=ignore

crm(live)configure# colocation coloc-drbd_fs inf: fs_data ms-drbd_data:Master
crm(live)configure# order order-drbd_fs inf: ms-drbd_data:promote fs_data:start

● 設定反映 上記を実行すると設定のみ追加され、まだ登録されていません。
次の内容を実行して、設定を登録反映します。

crm(live)configure# commit
crm(live)configure# exit

● 設定の確認

[root@drbd01 ~]# crm config
crm(live)configure# show
node 176359015: drbd01
node 176359087: drbd02
primitive drbd_data ocf:linbit:drbd \
    params drbdconf="/etc/drbd.conf" drbd_resource=r0 \
    op start interval=0s timeout=240s \
    op monitor interval=10 role=Slave \
    op monitor interval=11 role=Master \
    op stop interval=0 timeout=100s on-fail=block
primitive fs_data Filesystem \
    params run_fsck=no device="/dev/drbd0" directory="/data" fstype=ext4 \
    op start interval=0s timeout=60s \
    op monitor interval=15 timeout=40s \
    op stop interval=0 timeout=60s on-fail=ignore
ms ms-drbd_data drbd_data \
    meta notify=true
colocation coloc-drbd_fs inf: fs_data ms-drbd_data:Master
order order-drbd_fs inf: ms-drbd_data:promote fs_data:start
property cib-bootstrap-options: \
    dc-version=1.1.12-561c4cf \
    cluster-infrastructure=corosync \
    no-quorum-policy=ignore \
    stonith-enabled=false \
    last-lrm-refresh=1561106859
rsc_defaults rsc-options: \
    resource-stickiness=INFINITY \
    migration-threshold=1

● Pacemakerステータス確認

[root@drbd01 tmp]# crm_mon

Last updated: Fri Jun 21 15:46:29 2019
Last change: Fri Jun 21 15:44:25 2019
Stack: corosync
Current DC: drbd01 (176359015) - partition with quorum
Version: 1.1.12-561c4cf
2 Nodes configured
3 Resources configured


Online: [ drbd01 drbd02 ]

 Master/Slave Set: ms-drbd_data [drbd_data]
     Masters: [ drbd01 ]
     Slaves: [ drbd02 ]
fs_data (ocf::heartbeat:Filesystem):    Started drbd01

● 仮想IP作成/ha resources設定
MySQLのリソースの追加
primitive mysqld lsb:mysqld
→「lsb」というのは、Linux Standard Baseの略。Linux標準で提供される/etc/init.d以下にある起動スクリプトのこと

◆ リソースのグループ、リソース間の制約・順序の設定
最後に、リソースのグループ、リソース間の制約(colocation(関連性)・順序の設定する。

group mysql fs_mysql ip_mysql mysqld
colocation mysql_on_drbd inf: mysql ms_drbd_mysql:Master
order mysql_after_drbd inf: ms_drbd_mysql:promote mysql:start

設定の意味は、
1行目は「ファイルシステムと共有IPとMySQLをグループ『mysql』に指定」
2行目は「mysqlグループとDRBDのマスターは同時に存在しなくてはならない」
3行目は「DRBDのマスターが起動した後に、mysqlグループが起動しなくてはならない」

ref)
https://qiita.com/fetaro/items/9a836ed0922c82f53a25

◆ 実際の追加手順

[root@drbd04 ~]# crm config

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 \
params ip=10.131.xxx.xxx nic=eth1 cidr_netmask=24 \
op start interval=0s timeout=20s \
op stop interval=0s timeout=20s \
op monitor interval=30s
crm(live)configure# primitive q4m lsb:q4m
crm(live)configure# group grpora fs_data vip1 q4m
INFO: resource references in colocation:coloc-drbd_fs updated
INFO: resource references in order:order-drbd_fs updated
crm(live)configure# commit
crm(live)configure# exit
  • crm(live)configure# group {グループ名} fs_data vip1 q4m ← groupを作成しリソース追加
  • INFO: resource references in colocation:coloc-drbd_fs updated ← 既存のcolocationに追加
  • INFO: resource references in order:order-drbd_fs updated ← 既存のorderに追加

colocation制約は複数のリソースを同一ノードで起動させる制約として用い、order制約はリソース同士のアクション(起動及び停止など)の順序を指定します。リソースグループは上記の制約を合わせたようなもので、同じリソースグループに指定したリソースは同一ノードで起動され、起動順序も指定されます。

● Pacemakerステータス確認

[root@drbd01 ~]# crm_mon

Last updated: Tue Jun 25 14:14:14 2019
Last change: Tue Jun 25 14:13:47 2019
Stack: corosync
Current DC: drbd01 (176359015) - partition with quorum
Version: 1.1.12-561c4cf
2 Nodes configured
5 Resources configured


Online: [ drbd01 drbd02 ]

 Master/Slave Set: ms-drbd_data [drbd_data]
     Masters: [ drbd01 ]
     Slaves: [ drbd02 ]
 Resource Group: {グループ名}
     fs_data    (ocf::heartbeat:Filesystem):    Started drbd01
     vip1   (ocf::heartbeat:IPaddr2):   Started drbd01
     q4m        (lsb:q4m):  Started drbd01
[lsb経由でのサービス起動に関して]

lsb経由でのリソース起動は下記仕様に準拠し作成する必要がある。

lsb:initスクリプト名 /etc/init.d/initスクリプト名 に配置されたスクリプトをRAとして使用します。 Linuxに付属のinitスクリプトをRAとして使用することができます。 ただし、initスクリプトがLSBと呼ばれる仕様に準拠している必要があります。

▲例:q4mをlsb経由で管理出来るようにinitd起動スクリプト修正
変更前)

...
condrestart(){
    [ -e /var/lock/subsys/q4m ] && restart || :
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status mysqld
    ;;
  restart)
    restart
    ;;
  condrestart)
    condrestart
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|condrestart|restart}"
    exit 1
esac

exit $?  

変更後)

...
condrestart(){
    [ -e /var/lock/subsys/q4m ] && restart || :
}


function stop_q4m() {
         stop
         return 0
}

function status_q4m() {
        ps -p `cat $mypidfile` > /dev/null 2>&1
        RETVAL=$?
         if [ $RETVAL -eq 0 ] ; then
          return 0
         else
          return 3
         fi
}

function monitor_q4m() {
        ps -p `cat $mypidfile` > /dev/null 2>&1
        RETVAL=$?
         if [ $RETVAL -eq 0 ] ; then
          return 0
         else
          return 3
         fi
}

case $1 in
        start ) start ;;
        stop ) stop_q4m ;;
        status ) status_q4m ;;
        monitor ) monitor_q4m ;;
esac

exit $?

ref)
●インストール方法
http://infra.blog.shinobi.jp/Entry/44/ https://www39.atwiki.jp/th0901/pages/20.html https://hogem.hatenablog.com/entry/20080706/1215341445 https://qiita.com/hkajikawa/items/b911a92365e4a7b70164#%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%8C%E5%A3%8A%E3%82%8C%E3%81%9F%E6%99%82%E3%81%AE%E5%AF%BE%E5%BF%9C%E3%81%A8%E5%A3%8A%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E5%8B%95%E4%BD%9C%E3%82%92%E7%A2%BA%E8%AA%8D

●pcs を用いたインストール方法
https://knowledge.sakura.ad.jp/19690/
https://centossrv.com/pacemaker_drbd.shtml

crmコマンドに関しては下記サイトがわかりやすい
https://dexlab.net/pukiwiki/index.php?Memo/Linux/Pacemaker

●DRBDエンジニアサイ
https://blog.3ware.co.jp/

crm リソースのメタオプション
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/configuring_the_red_hat_high_availability_add-on_with_pacemaker/s1-resourceopts-haar

●lsbに関して
https://linux-ha.osdn.jp/wp/archives/3855#lsb
http://www.kurobuti.com/blog/?p=4667
http://server-helper.doorblog.jp/archives/4142815.html