DRBD + Heartbeat v3 + Pacemaker CactiサーバのLinux-HA構成

OSの初期設定

1.パーティション設計

DRBD環境を構築する上でパーティション設計は重要な事項となる。
例:)16GB ディスク一本で設計した場合

sda1 /boot 100MB

パーティションタイプは83

  • swapおよび/はLVMで作成する
    swapはメモリの1〜2倍。今回はメモリ2Gでswap4Gを確保。
    DRBD用のパーティションはLVMにて/とは別にとるが初期設定では/としてとり、OSインストール後、fdiskでLVM縮小、分割をする。
sda2 VolGroup 16283MB

パーティションタイプは8e

lv_root 12280MB /
lv_swap 4000MB swap
  • minimal+カスタムパッケージをインストール Base Development Tools

  • 初期状態のパーティション fdisk の結果

fdisk -l
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           2         101      102400   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             102       16384    16673792   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

lvdisplay の結果

lvdisplay
  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_root
  LV Name                lv_root
  VG Name                VolGroup
  LV UUID                2NuFZa-rM7U-Ig0u-B2gE-1f1Y-rN4v-VW0uPU
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-11-26 09:53:18 +0900
  LV Status              available
  # open                 1
  LV Size                11.99 GiB
  Current LE             3070
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_swap
  LV Name                lv_swap
  VG Name                VolGroup
  LV UUID                1sKOpg-gzdO-QEU3-ni8T-zCRO-mzJZ-L81emF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-11-26 09:53:40 +0900
  LV Status              available
  # open                 1
  LV Size                3.91 GiB
  Current LE             1000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1


2.vmware tools インストール

vmware tools を CDROMに読み込む

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/VMwareTools-8.8.4-730257.tar.gz /tmp/VMwareTools.tar.gz
umount /mnt/cdrom/
cd vmware-tools-distrib/
./vmware-install.pl

vmware tools を CDROMから取り外す


3.ネットワーク設定
cp -p /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.org
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=10.211.55.60
NETMASK=255.255.255.0
GATEWAY=10.211.55.1
DNS1=192.168.10.1
vi /etc/selinux/config
SELINUX=disabled
vi /etc/profile.d/proxy.sh
export http_proxy="http://192.168.10.1:6060/"
export ftp_proxy="http://192.168.10.1:6060/"
export https_proxy="http://192.168.10.1:6060/"


OSの起動後

lvmの縮小

lvmの縮小はアンマウントする必要があるが、システム稼働中はルートディレクトリはアンマウント出来ないため、レスキューモードで作業を実施する。

縮小前のディスク領域を確認

df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       61G  1.6G   57G   3% /  ←縮小対象
tmpfs                 497M     0  497M   0% /dev/shm
/dev/sda1              93M   65M   24M  73% /boot
none                  4.0T     0  4.0T   0% /media/psf
lvdisplay /dev/mapper/VolGroup-lv_root
  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_root
  LV Name                lv_root
  VG Name                VolGroup
  LV UUID                hJXa11-nkma-VsRb-un20-nipQ-zZfe-tKzcet
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-11-26 14:14:18 +0900
  LV Status              available
  # open                 1
  LV Size                61.95 GiB
  Current LE             15858
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

レスキューモードはインストールディスクをディスクドライブにセットしてシステムを起動する。 boot順番はディスクドライブを一番にしておく

boot: linux rescue

guiでlanguageが聞かれるので「English」、キーボードを「jp106」を選択 set up networkingは「no」、Rescueを「skip」。 ここで「skip」を選ばないと「/」をマウントしてしまうので、リサイズできない

cliの場合、レスキューモードが起動したら、ファイルシステムをマウントするかどうか聞かれるので、リサイズが目的のため「Continue」および「Read-Only」を選ばず(ルートパーティションをマウントするため)「Skip」を選ぶ。

レスキューモードでは論理ボリュームがアクティブになっていない為、vgchangeでアクティブにします

bash-4.1 # lvscan
  inactive           ‘/dev/VolGroup/lv_root’ [61.95 GiB] inherit
  inactive           ‘/dev/VolGroup/lv_swap’ [1.95 GiB] inherit

bash-4.1 # vgchange -a y
  2 logical volume(s) in volume group “VolGroup” now active

bash-4.1 # lvscan
  ACTIVE             ‘/dev/VolGroup/lv_root’ [61.95 GiB] inherit
  ACTIVE             ‘/dev/VolGroup/lv_swap’ [1.95 GiB] inherit

bash-4.1 # fsck.ext4 -f /dev/VolGroup/lv_root
bash-4.1 # resize2fs /dev/VolGroup/lv_root 40G
bash-4.1 # lvreduce -L 40G /dev/VolGroup/lv_root


lvmの作成

未割り当ての領域が出来ていることを確認します

pvscan
  PV /dev/sda2   VG VolGroup        lvm2 [63.90 GiB / 21.95 GiB free]
  Total: 1 [63.90 GiB] / in use: 1 [63.90 GiB] / in no VG: 0 [0   ]

残りの領域を新しいdrbd用のlvmとして作成します

lvcreate -l 100%FREE -n /dev/VolGroup/lv_data
mkfs.ext4 /dev/VolGroup/lv_data
mkdir /drbd
mount -t ext4 /dev/VolGroup/lv_data /drbd
df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       40G  1.6G   36G   5% /
tmpfs                 497M     0  497M   0% /dev/shm
/dev/sda1              93M   65M   24M  73% /boot
none                  4.0T     0  4.0T   0% /media/psf
/dev/mapper/VolGroup-lv_data
                       22G   44M   21G   1% /drbd
vi /etc/fstab
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=401ad03c-3d32-493c-8f5f-ade4035cabd1 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
/dev/mapper/VolGroup-lv_data /drbd                   ext4    defaults        1 3
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0


パッケージのアップデートを実施しておきます

yum update


pacemaker1.0系 のインストール

centos base のリポジトリにpacemaker1.1系が同梱されている為、excludeしておく

vi /etc/yum.repos.d/CentOS-Base.repo
[base]
exclude=cluster-glue* corosync* heartbeat* ldirectord* libesmtp* pacemaker* pm_crmgen*m pm_diskd* pm_extras* pm_kvm_tools* pm_logconv-hb* resource-agents* vm-ctl*
[update]
exclude=cluster-glue* corosync* heartbeat* ldirectord* libesmtp* pacemaker* pm_crmgen*m pm_diskd* pm_extras* pm_kvm_tools* pm_logconv-hb* resource-agents* vm-ctl*

Linux-HA Japanが配布している1.0系最新の1.0.13-2.1リポジトリパッケージをダウンロード

wget https://ja.osdn.net/dl/linux-ha/pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz
mv pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz /tmp
cd /tmp
tar xzfv pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz

yum -c /tmp/pacemaker-1.0.13-2.1.el6.x86_64.repo/pacemaker.repo install heartbeat corosynclib-1.4.6 pacemaker pm_extras


DRBDのインストール

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
vi /etc/yum.repos.d/elrepo.repo
enabled=0

yum --enablerepo=elrepo install drbd84-utils kmod-drbd84

DRBDの自動起動をoffにしておく

chkconfig drbd off
chkconfig --list


DRBD設定

DRBDの設定後は/dev/mapper/VolGroup-lv_dataではなく、DRBDが管理する/dev/drbd0とするので、アンマウントする必要がある。

umount /dev/mapper/VolGroup-lv_data
vi /etc/fstab
#/dev/mapper/VolGroup-lv_data /drbd                   ext4    defaults        1 3
vi /etc/drbd.d/global_common.conf
global {
        #usage-count yes;  # LINBIT社に利用情報を送信するかどうかの設定 → no
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
        # cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;
}

common {
        net {
                protocol C;
        }

        syncer {
                rate 10M;
        }
}
vi /etc/drbd.d/r0.res
resource r0 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/mapper/VolGroup-lv_data;

        on Linux-HA01 {
                address 10.211.55.60:7788;
        }

        on Linux-HA02 {
                address 10.211.55.61:7788;
        }
}

disk:実際にDRBDが書き込みを行うディスク本体
device:DRBDのデバイス

この設定では、/dev/drbd0というデバイスに対しての書き込みが、DRBDを経由してそれぞれのサーバの/dev/mapper/VolGroup-lv_dataに 書き込まれることになります。
VolGroup-lv_dataデバイスはDRBDの支配下に置かれることになります。
そのため、今までVolGroup-lv_dataをマウントしていた/drbdディレクトリは今後/dev/drbd0をマウントするようにシステムの設定を変更する必要があります。

meta-disk:メタデータ格納用のデータ領域の指定



DRBDの通信の為の7788番ポートの開放
現在のiptablesルールを確認する。

iptables -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
5    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

行数を指定してルールを追加

iptables -I INPUT 5 -m tcp -p tcp --dport 7788 -j ACCEPT
iptables -I INPUT 6 -m tcp -p tcp --sport 7788 -j ACCEPT

iptablesの設定を保存

iptables-save > /etc/sysconfig/iptables


DRBDの設定の為にホスト名を設定する

vi /etc/hosts
10.211.55.60 Linux-HA01
10.211.55.61 Linux-HA02
vi /etc/sysconfig/network
HOSTNAME=Linux-HA01


uname -n の出力と drbd confのノード名と同じであるか確認する。

uname -n


メタデータを作成します。メタデータ用のボリュームを用意することを推奨していますが、今回はデータ用と同じ場所につくります。

drbdadm create-md r0

ボリュームにデータが見つかりdrbdadm create-md r0 が失敗した時は、ゼロクリアします。 デフォルトのディスクの読み込み書き込みでバッファに入れるサイズが512byteなので32Mに変更する。こうすることで効率よく処理を速くすることができる。

dd if=/dev/zero bs=32M count=1 of=/dev/mapper/VolGroup-lv_data


DRBDブロックデバイスの状態を確認する

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/UpToDate C r-----
    ns:23010588 nr:0 dw:0 dr:23011276 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
drbd-overview
 0:r0/0  Connected Primary/Secondary UpToDate/UpToDate


drbdadm コマンド
何も接続していない

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:Unconfigured


attach DRBDリソースにブロックデバイスを接続する

drbdadm attach 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:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:23010588


detach DRBDリソースに接続していたブロックデバイスに接続する

drbdadm detach r0


connect リソースに対応するネットワーク設定を有効にする。 対応する接続先がすでに設定されていれば、2 台の DRBD デバイスは相互に接続される。

drbdadm connect 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:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----s
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:23010588

まだ、対応する接続先が見つからず接続されていない状態。(WFConnection)


disconnect リソースに対するネットワーク設定を無効にする。 デバイスは当然ながらスタンドアローン状態になる。

drbdadm disconnect r0


  • role
drbdadm role r0
Secondary/Unknown
  • cstate
drbdadm cstate r0
WFConnection
  • dstate
drbdadm dstate r0
Inconsistent/DUnknown


primary --force リソースデバイスをプライマリ状態に切り替えて同期を始める

drbdadm primary --force r0

watch -n 1 cat /proc/drbd
Every 1.0s: cat /proc/drbd                                        Sun Dec  4 10:20:43 2016

version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-1
2 13:27:11
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
    ns:123396 nr:0 dw:0 dr:124200 al:8 bm:0 lo:0 pe:2 ua:1 ap:0 ep:1 wo:f oos:22888220
        [>....................] sync'ed:  0.6% (22348/22468)M
        finish: 0:52:58 speed: 7,196 (7,196) K/sec


/dev/drbd0 のファイルシステムをフォーマットしマウントする (片方のノードでよい)

mkfs -t ext4 /dev/drbd0

mount /dev/drbd0 /drbd

これで、df でマウントされている状況が見れます。

df -T
Filesystem           Type    1K-blocks    Used  Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                     ext4     41153856 1627004   37429704   5% /
tmpfs                tmpfs      508080       0     508080   0% /dev/shm
/dev/sda1            ext4        95054   65956      23978  74% /boot
none                 prl_fs 4294967296       0 4294967296   0% /media/psf
/dev/drbd0           ext4     22518232   44980   21322724   1% /drbd


DRBDの切り替え手順
ノード1で/dev/drbd0をアンマウントする。
(mysqlディレクトリをマウントしている場合は以下も実施)

/etc/init.d/mysqld stop
umount /drbd/mysql

umount /dev/drbd0

ノード1でDRBD status を secondary に変更する。

drbdadm secondary r0

ノード2でDRBD status を primary に変更する。

drbdadm primary r0

ノード2で/dev/drbd0をマウントする。

mount /dev/drbd0 /drbd

(mysqlのディレクトリをマウントしている場合は以下も実施)
mount -o bind /drbd/mysql /var/lib/mysql
/etc/init.d/mysqld start


DRBDのsplit brainからの復旧方法
ネットワークダウン中に両方のノードがprimaryになっていて、再度その状態でネットワークが回復した時などにsplit brainが 発生して、両ノードがstandaloneになって同期がされなくなる。
手動で回復させる必要がある。

スレーブとなるノードで以下のコマンドを実施

drbdadm secondary r0
drbdadm -- --discard-my-data connect r0
実行したノードのデータの変更を破棄する

プライマリのノードで以下のコマンドを実施

drbdadm connect r0


cactiのインストール

net-snmpインストール

yum install net-snmp net-snmp-utils

communityの設定などをする

/etc/init.d/snmpd start
chkconfig snmpd on


mysqlのインストール

yum install mysql-server
chkconfig mysqld on

DRBD管理下にmysql用のディレクトリを作成しマウントする

mkdir /drbd/mysql
chown mysql.mysql /drbd/mysql
mount -o /drbd/mysql /var/lib/mysql
/etc/init.d/mysqld start


cactiインストール

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
vi /etc/yum.repos.d/epel.repo
enabled = 0
yum --enablerepo=epel install rrdtool cacti

mysqlcactiのデータベースとユーザをつくる

mysql -uroot
update mysql.user set password=password('root任意パスワード') where user = 'root';
flush privileges;
create database cacti;
grant all privileges on cacti.* to cactiuser@localhost identified by '任意のパスワード';
exit
vi /etc/cacti/db.php
$database_password = "cactiuserのパスワード";
mysql -ucactiuser -p cacti < /usr/share/doc/cacti-0.8.8h/cacti.sql
[cactiuserのパスワードを入力]

cactiのポーリングを有効にする

vi /etc/cron.d/cacti
*/5 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
/etc/init.d/crond restart

apacheのチューニングを実施

vi /etc/httpd/conf.d/cacti.config
Allow from all
/etc/init.d/httpd restart

httpのiptables設定

iptables -I INPUT 5 -m state --sate NEW -p tcp --dport 80 -j ACCEPT
iptables-save > /etc/sysconfig/iptables

webアクセス時のphpエラー出力が出ないようにする

vi /etc/php.ini
date.timezone = 'Asia/Tokyo'

/etc/init.d/httpd restart

http://ww.xx.yy.zz/cacti にアクセスし初期設定をする
Next >> Next >> cactiに必要なコマンドがあるかチェック。問題なければ Finish
初期パスワード admin/admin

cactiのログファイルがなかったので作成

mkdir /var/log/cacti
touch /var/log/cacti/cacti.log


spineのインストール
公式サイトからspineのソースからインストールする

wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.8h.tar.gz

mv cacti-spine-0.8.8h.tar.gz /usr/local/src/
cd /usr/local/src
tar xzfv cacti-spine-0.8.8h.tar.gz
cd cacti-spine-0.8.8h

./configure
以下のようなエラーが発生したので、調べてみるとopenssl-develが必要らしい
/usr/bin/ld: cannot find -lssl
collect2: ld returned 1 exit status

※2号機で実施した時は以下のようなエラーで停止。openssl-develを入れたら進んだ。
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gawk... (cached) gawk
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/usr/local/src/cacti-spine-0.8.8h':
configure: error: C compiler cannot create executables
See `config.log' for more details
yum install openssl-devel
./configure
再度以下のようなエラーが発生した。今度はmysql-develが必要らしい
mysql header files under

※2号機で実施した時は以下のようなエラーで停止mysql-develを入れたら進んだ。
checking for strerror... yes
checking for strtoll... yes
checking priv.h usability... no
checking priv.h presence... no
checking for priv.h... no
checking whether we are using Solaris privileges... no
checking sys/capability.h usability... no
checking sys/capability.h presence... no
checking for sys/capability.h... no
checking whether we are using Linux Capabilities... no
configure: error: Cannot find MySQL headers.  Use --with-mysql= to specify non-default path.
yum install mysql-devel
./configure
正常に終了
configure: exit 0
make
snmp関連のエラーが発生。net-snmp-develが必要
gcc -DHAVE_CONFIG_H -I. -I./config     -I/usr/include/mysql -g -O2 -MT sql.o -MD -MP -MF .deps/sql.Tpo -c -o sql.o sql.c
In file included from sql.c:34:
common.h:133:38: error: net-snmp/net-snmp-config.h: No such file or directory
common.h:134:32: error: net-snmp/utilities.h: No such file or directory
common.h:135:40: error: net-snmp/net-snmp-includes.h: No such file or directory
common.h:136:33: error: net-snmp/config_api.h: No such file or directory
common.h:137:30: error: net-snmp/mib_api.h: No such file or directory
In file included from spine.h:505,
                 from sql.c:35:
                 snmp.h:42: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
                 make: *** [sql.o] Error 1
yum install net-snmp-devel

もう一度configureから実施する

./configure
make
make install
cp -p /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf
vi /usr/local/spine/etc/spine.conf
DB_Pass        = "cactiuserのパスワード";

spineの設定ファイルは/etc/spine.confを読みに行くので、リンクを貼っておく

ln -s /usr/local/spine/etc/spine.conf /etc/spine.conf

spineの実行パスにもリンクを貼っておく

ln -s /usr/local/spine/bin/spine /usr/bin/spine

spineが実行できるか確認

spine -V=5 -R
実行結果が表示されればOK

pollingにspineを使用するようcactiにログインし設定を変更
Settings > Paths > Alternate Poller Path > /usr/bin/spine
Settings > Poller > Poller Type > spine

DRBDへのマッピング

cactiのコンフィグのマッピング

mkdir /drbd/etc
cp -a /etc/cacti/ /drbd/etc/
mv /etc/cacti{,.org}
ln -s /drbd/etc/cacti /etc/cacti

mkdir -p /drbd/var/lib
※データを移行する前にリンクを削除しておく
unlink /var/lib/cacti/include
unlink /var/lib/cacti/lib
cp -a /var/lib/cacti/ /drbd/var/lib/
mv /var/lib/cacti{,.org}
ln -s /drbd/var/lib/cacti /var/lib/cacti
ln -s /usr/share/cacti/include /drbd/var/lib/cacti/include
ln -s /usr/share/cacti/lib /drbd/var/lib/cacti/lib

cacti用のクーロン設定のマッピング

mkdir /drbd/etc/cron.d
cp -a /etc/cron.d/cron /drbd/etc/cron.d/
mv /etc/cron.d/cacti{,.org}
ln -s /drbd/etc/cron.d/cacti /etc/cron.d/cacti

apacheマッピング

cp -a /etc/httpd/ /drbd/etc/
mv /etc/httpd{,.org}
ln -s /drbd/etc/httpd /etc/httpd
※もともと貼られているシンボリックリンクのパスが変わるので、リンクを貼り直す。
unlink /etc/httpd/modules
ln -s /usr/lib64/httpd/modules /etc/httpd/modules
unlink /etc/httpd/logs
ln -s /var/log/httpd /etc/httpd/logs
unlink /etc/httpd/run
ln -s /var/run/httpd/ /etc/httpd/run

phpマッピング

cp -a /etc/php.ini /drbd/etc/
mv /etc/php.ini{,.org}
ln -s /drbd/etc/php.ini /etc/php.ini


2号機側の設定

  • ネットワークの設定
  • vmware toolsのインストール
  • yumアップデート
  • pacemakerリポジトリのダウンロード
  • pacemkaerインストール、chkconfigの無効化
  • lvmの設定
  • elrepoのダウンロード
  • drbdのインストール
  • drbdのコンフィグ設定
  • hostの設定
  • iptables drbdの通信許可
  • net-snmpのインストール
  • net-snmpのコンフィグ設定
  • mysql-serverのインストール
  • epelレポジトリのダウンロード
  • cacti rrdtoolのインストール
  • iptables(http)の設定
  • drbdへのマッピング

cactiマッピング

mv /etc/cacti{,.org}
ln -s /dbd/etc/cacti /etc/cacti

unlink /var/lib/cacti/include
unlink /var/lib/cacti/lib
 mv /var/lib/cacti{,.org}
ln -s /drbd/var/lib/cacti /var/lib/cacti
ln -s /usr/share/cacti/include /drbd/var/lib/cacti/include
ln -s /usr/share/cacti/lib /drbd/var/lib/cacti/lib

apacheマッピング

mv /etc/httpd{,.org}
ln -s /drbd/etc/httpd /etc/httpd
※もともと貼られているシンボリックリンクのパスが変わるので、
リンクを貼り直す。
unlink /etc/httpd/modules
ln -s /usr/lib64/httpd/modules /etc/httpd/modules
unlink /etc/httpd/logs
ln -s /var/log/httpd /etc/httpd/logs
unlink /etc/httpd/run
ln -s /var/run/httpd/ /etc/httpd/run

phpマッピング

mv /etc/php.ini{,.org}
ln -s /drbd/etc/php.ini /etc/php.ini

cronのマッピング

mv /etc/cron.d/cacti{,.org}
ln -s /drbd/etc/cron.d/cacti /etc/cron.d/cacti
  • cactiのログファイルがなかったので作成
mkdir /var/log/cacti
touch /var/log/cacti/cacti.log
  • spineのインストール
wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.8h.tar.gz
mv cacti-spine-0.8.8h.tar.gz /usr/local/src/
cd /usr/local/src
tar xzfv cacti-spine-0.8.8h.tar.gz
cd cacti-spine-0.8.8h
yum install openssl-devel
yum install mysql-devel
yum install net-snmp-devel
./configure
make 
make install
cp -p /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf
vi /usr//local/spine/etc/spine.conf
DB_Pass        = "cactiuserのパスワード";
ln -s /usr/local/spine/etc/spine.conf /etc/spine.conf
ln -s /usr/local/spine/bin/spine /usr/bin/spine


heartbeatの設定

ログファイル用のディレクトリの作成

mkdir /var/log/ha


/etc/ha.d/ha.cfの設定
※ha.cfには設定値に use_logd というheartbeatのlog daemonを動かす為のディレクティブがあるが、heartbeat3ではこのlog daemonは使用できない。
ログの出力はsyslogに出力させるかプロセスが直接ログを出力させる方法がある。
syslogに出力させる場合は、別途syslogの設定も必要。

pacemaker on
debugfile /var/log/ha/ha-debug  # デバッグレベルのlogの出力先
logfile /var/log/ha/ha-log  # logの出力先(デバッグレベルは含まない)
logfacility none  # syslogへの出力をしない
udpport 694
node Linux-HA01
node Linux-HA02
ucast eth0 10.211.55.61  # 対向との通信をユニキャストで指定する
# bcast eth0  # 対向との通信をブロードキャストで実施することもできるが、余計な通信が発生する


/etc/ha.d/authkeys
通信の暗号化方式を指定することができる。
sha1md5crcが指定できる。

auth 1
1 sha1 123qwe


authkeysの権限の設定

chmod 600 /etc/ha.d/authkeys


heartbeatに使うポートをiptablesで許可

iptables -L --line-number
iptables -I INPUT 8 -m state --state NEW -p udp --dport 694 -j ACCEPT
iptables-save > /etc/sysconfig/iptables


heartbeatのログローテートの設定

以下の条件で設定

  1. 月一度ローテートする
  2. ログファイルが存在しなくてもエラーを出さない
  3. ローテートしたファイルを圧縮する
  4. 空のログファイルもローテートする
vi /etc/logrotate.d/heartbeat
/var/log/ha/ha-debug {
    monthly
    missingok
    compress
    ifempty
}

/var/log/ha/ha-log {
    monthly
    missingok
    compress
    ifempty
}


pacemakerのリソースエージェントの設定

  • drbdサービスのraの設定 drbd_resource="r0"
    drbdのリソースに"r0"を指定
    op monitor interval="11" role="Slave" timeout="20"
    Slaveで動作している場合、11秒間隔で監視、20秒間監視ができない場合失敗と判断
    op monitor interval="10" role="Master" timeout="20"
    Masterで動作している場合、10秒間隔で状態監視、20秒間監視ができない場合失敗と判断
    サービスのスタートを実施、240秒間スタートが完了しない場合失敗と判断
    サービスのストップを実施、100秒間ストップが完了しない場合失敗と判断
    opにon-failが設定されていない場合、デフォルト動作のrestartが実施される
primitive res_drbd_r0 ocf:linbit:drbd \
    params drbd_resource="r0" \
    op start interval="0" timeout="240" \
    op monitor interval="11" role="Slave" timeout="20" \
    op monitor interval="10" role="Master" timeout="20" \
    op promote interval="0" timeout="90" \
    op demote interval="0" timeout="90" \
    op stop interval="0" timeout="100"


  • msでmaster/slaveモードで動作するよう設定
    master-max masterになれるリソース数
    clone-max 生成するインスタンス
    clone-node-max 1つのノードで同時に起動するインスタンス
    notify "true"に設定するとMaster/Slaveリソースの各アクション時にms_drbd_r0リソースに判断させる
ms ms_drbd_r0 res_drbd_r0 \
    meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
primitive res_httpd ocf:heartbeat:apache \
        params configfile="/etc/httpd/conf/httpd.conf" \
        op start interval="0" timeout="40" \
        op stop interval="0" timeout="120" \
        op monitor interval="30" timeout="30"
primitive res_ip ocf:heartbeat:IPaddr2 \
        params ip="10.211.55.62" cidr_netmask="24" \
        op monitor interval="50" timeout="30"
primitive res_mount ocf:heartbeat:Filesystem \
        params device="/dev/drbd0" fstype="ext4" directory="/drbd" \
        op monitor interval="10" timeout="60" \
        op start interval="0" timeout="60" \
        op stop interval="0" timeout="60"
primitive res_mount_mysql ocf:heartbeat:Filesystem \
        params device="/drbd/mysql" fstype="ext4" directory="/var/lib/mysql" options="bind" \
        op monitor interval="10" timeout="60" \
        op start interval="0" timeout="60" \
        op stop interval="0" timeout="60"
primitive res_mysqld ocf:heartbeat:mysql \
        params binary="/usr/bin/mysqld_safe" pid="/var/run/mysqld/mysqld.pid" \
        op start interval="0" timeout="120" \
        op stop interval="0" timeout="120" \
        op monitor interval="30" timeout="30"
primitive res_srcaddr ocf:heartbeat:IPsrcaddr \
        params ipaddress="10.211.55.62" \
        op monitor interval="50" timeout="30"
group cacti res_mount res_mount_mysql res_ip res_srcaddr res_httpd res_mysqld
ms ms_drbd_r0 res_drbd_r0 \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
location l_cacti cacti 100: Linux-HA01

colocation 同居制約 group cacti は ms_drbd_r0 が必ず(inf:)Masterである必要がある

colocation c_cacti inf: cacti ms_drbd_r0:Master

order 起動順序 必ず(inf:) ms_drbd_r0 リソースを昇格させ group cacti を起動します

order o_cacti inf: ms_drbd_r0:promote cacti:start


参考にさせて頂いたページ
http://yomon.hatenablog.com/entry/2016/04/13/110035
https://www.miraclelinux.com/online-service/download/docs-products-service/zabbix_and_linux-ha
https://www.drbd.jp/files/drbd_doc/drbdadm.pdf
https://blog.3ware.co.jp/drbd-users-guide-8.4/drbd-users-guide.html
https://centossrv.com/lvm-reduce.shtml
http://linux-ha.osdn.jp/wp/archives/3868