ライン

ポイント:冗長にこだわってみた

ライン

 はじめに

Cacti

 引き続き、DRBDを使ってデータ領域をクラスタ化する構成でCacti準備することにしました。
先に準備したMySQLサーバに連動するように作成する予定です。

 動作環境は、VMware 5.5の無料版にCentOS 6.7を2台準備して作成します。

 インストール

 まず1台目を準備します。

# cd /tmp/
# 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
http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm を取得中
準備中...                ########################################### [100%]
   1:elrepo-release         ########################################### [100%]
# cd /etc/yum.repos.d/
# ll
合計 28
-rw-r--r--. 1 root root 1991  8月  4 01:13 2015 CentOS-Base.repo
-rw-r--r--. 1 root root  647  8月  4 01:13 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  644  2月  7 05:57 2016 CentOS-Media.repo
-rw-r--r--. 1 root root 6259  8月  4 01:13 2015 CentOS-Vault.repo
-rw-r--r--. 1 root root  289  8月  4 01:13 2015 CentOS-fasttrack.repo
-rw-r--r--  1 root root 2150  2月 10 08:27 2014 elrepo.repo

 インストールをします。

# yum --enablerepo=elrepo install drbd84-utils 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]

 完了。

 さて、ここでDRBD用のパーティションを準備することにします。
VMwareのハードディスク2を追加で準備(今回仮なので10GB)。

# fdisk -l
...
ディスク /dev/sdb: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
# fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0x0d77cbec で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

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

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

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

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

# fdisk -l
...
ディスク /dev/sdb: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0xd88505d7

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1       10240    10485744   83  Linux
# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0433166 s, 24.2 MB/s

最近やった手順なので、簡単でした。
DRBDの設定ファイルを準備し、続きを行います。

# cd /etc
# ll drbd.*
-rw-r--r-- 1 root root  133  1月 13 03:02 2016 drbd.conf

drbd.d:
合計 4
-rw-r--r-- 1 root root 2062  1月 13 03:02 2016 global_common.conf
# cd /etc/drbd.d
# cp -p global_common.conf global_common.conf_orig
# diff -urN global_common.conf_orig global_common.conf
--- global_common.conf_orig     2016-01-13 03:02:55.000000000 +0900
+++ global_common.conf  2016-12-31 21:25:55.014245064 +0900
@@ -3,7 +3,7 @@
 # feature requests visit http://www.linbit.com

 global {
-       usage-count yes;
+       usage-count no;
        # minor-count dialog-refresh disable-ip-verification
        # cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;
 }

 設定ファイルを新規追加しました。/etc/drbd.d/drbd0.res として準備しました。
protocol Cで同期、ディスクは上記で準備したディスクを指定。
on の後は、該当サーバのホスト名を指定。アドレスは、同期用のIPとポートを指定します。

resource drbd0 {
  protocol C;
  meta-disk internal;
  device /dev/drbd0;
  disk /dev/sdb1;
  net     { max-buffers  1600; }
  on cactisvr1  {
    address 192.168.255.3:7788;
    }
  on cactisvr2  {
    address 192.168.255.4:7788;
    }
}

 メタデータの作成を行います。

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

 起動を実行してみます。

# service drbd start
Starting DRBD resources: [
     create res: drbd0
   prepare disk: drbd0
    adjust disk: drbd0
     adjust net: drbd0
]
..........
***************************************************************
 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 'drbd0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  42]:yes
# drbdadm -- --overwrite-data-of-peer primary drbd0
# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)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
655360 inodes, 2621347 blocks
131067 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 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

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

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# tune2fs -c 0 -i 0 /dev/drbd0
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds
# mkdir /share
# mount /dev/drbd0 /share
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_01-LogVol02
                       16G  1.3G   14G   9% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             283M   38M  231M  15% /boot
/dev/drbd0            9.8G   23M  9.2G   1% /share
# drbd-overview
  0:drbd0/0  WFConnection Primary/Unknown UpToDate/DUnknown /share ext4 9.8G 23M 9.2G 1%

 もう1台も同様を作業します。

…コピーしてホストを準備しました。
2号機側で状態を確認します。※drbdadm invalidate drbd0は、2号機のみで実施

# drbdadm invalidate drbd0
# service drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
m:res    cs          ro                   ds                     p  mounted  fstype
0:drbd0  SyncTarget  Secondary/Secondary  Inconsistent/UpToDate  C
...      sync'ed:    65.6%                (5644/16380)M

 同期はまだ取れていない状態でした。

# service drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
m:res    cs          ro                 ds                     p  mounted  fstype
0:drbd0  SyncTarget  Secondary/Primary  Inconsistent/UpToDate  C
...      sync'ed:    39.0%              (6252/10236)M

 完了。

 HeartbeatとPacemaker

Heartbeat

 次は、Heartbeatです。年始から数日遊んだばかりなので、さくっといれて設定します。

# cd /tmp
# wget -O ./pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz \
https://osdn.jp/frs/redir.php\?m=iij\&f=%2Flinux-ha%2F60151%2Fpacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz
# tar pzxvf  pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz
# cd /tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/rpm
# ll
合計 9292
-rw-r--r-- 1 root root  266856 12月 24 10:43 2013 cluster-glue-1.0.11-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  112256 12月 24 10:43 2013 cluster-glue-libs-1.0.11-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  110624 12月 24 10:43 2013 cluster-glue-libs-devel-1.0.11-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  168788 12月 24 10:45 2013 corosync-1.4.6-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  146228 12月 24 10:45 2013 corosynclib-1.4.6-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  173340 12月 24 10:45 2013 corosynclib-devel-1.4.6-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  165944 12月 24 10:43 2013 heartbeat-3.0.5-1.1.el6.x86_64.rpm
-rw-r--r-- 1 root root  125836 12月 24 10:43 2013 heartbeat-devel-3.0.5-1.1.el6.x86_64.rpm
-rw-r--r-- 1 root root  269176 12月 24 10:43 2013 heartbeat-libs-3.0.5-1.1.el6.x86_64.rpm
-rw-r--r-- 1 root root   61508 12月 24 10:46 2013 ldirectord-3.9.5-1.310.0d443.el6.x86_64.rpm
-rw-r--r-- 1 root root   58112 12月 24 10:43 2013 libesmtp-1.0.4-16.el6.x86_64.rpm
-rw-r--r-- 1 root root   24672 12月 24 10:43 2013 libesmtp-devel-1.0.4-16.el6.x86_64.rpm
-rw-r--r-- 1 root root 5844328 12月 24 10:43 2013 pacemaker-1.0.13-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  268568 12月 24 10:43 2013 pacemaker-libs-1.0.13-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  780272 12月 24 10:43 2013 pacemaker-libs-devel-1.0.13-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   81132 12月 24 10:43 2013 pacemaker-mgmt-2.0.1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  129856 12月 24 10:43 2013 pacemaker-mgmt-client-2.0.1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root    9336 12月 24 10:43 2013 pacemaker-mgmt-devel-2.0.1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   47664 12月 25 09:27 2013 pm_crmgen-1.4-1.el6.noarch.rpm
-rw-r--r-- 1 root root   13800 12月 25 09:26 2013 pm_diskd-1.3-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   25248 12月 25 09:27 2013 pm_extras-1.4-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   45512 12月 25 09:27 2013 pm_kvm_tools-1.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   31968 12月 25 09:27 2013 pm_logconv-hb-1.3-1.el6.noarch.rpm
-rw-r--r-- 1 root root  480156 12月 24 10:46 2013 resource-agents-3.9.5-1.310.0d443.el6.x86_64.rpm
-rw-r--r-- 1 root root   12392 12月 25 09:27 2013 vm-ctl-1.1-2.el6.noarch.rpm

 パッケージが取得できました。
導入します。

# yum install heartbeat-3.0.5-1.1.el6.x86_64.rpm heartbeat-libs-3.0.5-1.1.el6.x86_64.rpm cluster-glue-1.0.11-1.el6.x86_64.rpm \
 cluster-glue-libs-1.0.11-1.el6.x86_64.rpm

 として導入を完了。

Pacepaker

導入の続きです。

# yum install pacemaker-1.0.13-1.el6.x86_64.rpm  pacemaker-libs-1.0.13-1.el6.x86_64.rpm corosync-1.4.6-1.el6.x86_64.rpm\
 corosynclib-1.4.6-1.el6.x86_64.rpm
依存性を解決しました

============================================================================
 パッケージ  アーキテクチャ
                    バージョン        リポジトリー                     容量
============================================================================
インストールしています:
 corosync    x86_64 1.4.6-1.el6       /corosync-1.4.6-1.el6.x86_64    418 k
 corosynclib x86_64 1.4.6-1.el6       /corosynclib-1.4.6-1.el6.x86_64 403 k
 pacemaker   x86_64 1.0.13-1.el6      /pacemaker-1.0.13-1.el6.x86_64  8.6 M
 pacemaker-libs
             x86_64 1.0.13-1.el6      /pacemaker-libs-1.0.13-1.el6.x86_64
                                                                      888 k
依存性関連でのインストールをします。:
 gnutls      x86_64 2.8.5-19.el6_7    base                            347 k
 libesmtp    x86_64 1.0.4-15.el6      base                             57 k
 libxslt     x86_64 1.1.26-2.el6_3.1  base                            452 k

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

合計容量: 11 M
総ダウンロード容量: 856 k
インストール済み容量: 14 M
これでいいですか? [y/N]

 導入完了。

設定(1号機)

 ha.cfの設定です。

# cd /etc/ha.d/
# vi ha.cf

こんな設定にしました。

pacemaker on
autojoin none
logfacility     local1
keepalive 2
auto_failback off
udpport 694
ucast eth1 192.168.255.3
ucast eth1 192.168.255.4
node    cactisvr1 cactisvr2

同様に、authkeysを設定します。

# vi authkeys

こんな設定にしました。

auth 1
1 sha1 cactisync

パーミッションを変更しておきます。

# chmod 600 authkeys

次は、shellfuncsに以下のように設定を加えます。

# cp -p shellfuncs shellfuncs_orig
# diff -urN shellfuncs_orig shellfuncs
--- shellfuncs_orig     2016-05-12 14:12:10.000000000 +0900
+++ shellfuncs  2017-01-09 21:02:42.001696984 +0900
@@ -8,6 +8,8 @@
 : ${HA_SBIN_DIR:=/usr/sbin}
 : ${HA_NOARCHBIN:=/usr/share/heartbeat}
 : ${OCF_AGENTS:=/usr/lib/ocf/resource.d//heartbeat/}
+HA_BIN=/usr/lib64/heartbeat
+

 export HA_DIR HA_RCDIR HA_FIFO HA_BIN
 export HA_DEBUGLOG HA_LOGFILE HA_LOGFACILITY

ログがシスログに出てくるのは、非常に見づらいので、ログを指定します。

# cd /etc
# cp -p rsyslog.conf rsyslog.conf_orig
# vi rsyslog.conf
# diff -urN rsyslog.conf_orig rsyslog.conf
--- rsyslog.conf_orig   2014-12-10 19:05:22.000000000 +0900
+++ rsyslog.conf        2017-01-15 11:35:12.427047422 +0900
@@ -39,7 +39,7 @@

 # Log anything (except mail) of level info or higher.
 # Don't log private authentication messages!
-*.info;mail.none;authpriv.none;cron.none                /var/log/messages
+*.info;mail.none;authpriv.none;cron.none;local1.none   /var/log/messages

 # The authpriv file has restricted access.
 authpriv.*                                              /var/log/secure
@@ -60,6 +60,8 @@
 # Save boot messages also to boot.log
 local7.*                                                /var/log/boot.log

+# 20170115 by fkimura
+local1.*                                               /var/log/ha-log

 # ### begin forwarding rule ###
 # The statement between the begin ... end define a SINGLE forwarding

こんな感じにしました。

# cd /var/log
# touch ha-log
# chown hacluster:haclient ha-log
# service rsyslog restart
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]

 これでスッキリ。

# cd /etc/logrotate.d/
# cp -p  syslog /root/syslog_orig_logrotate.d
# mv heartbeat /root/heartbeat_orig_logrotate.d
# vi syslog
# diff -urN /root/syslog_orig_logrotate.d syslog
--- /root/syslog_orig_logrotate.d       2014-12-10 19:05:22.000000000 +0900
+++ syslog      2017-01-11 22:29:47.996617272 +0900
@@ -3,6 +3,7 @@
 /var/log/messages
 /var/log/secure
 /var/log/spooler
+/var/log/ha-log
 {
     sharedscripts
     postrotate

こんな感じにしました。

導入・設定(2号機)

 同様に導入と設定をします。

双方サーバで heartbeatの起動を入れ、問題なく起動できたら、crm_monを入れてみます。

# service heartbeat start
Starting High-Availability services: Done.
# crm_mon
============
Last updated: Sun Jan 15 11:42:01 2017
Stack: Heartbeat
Current DC: cactisvr2 (-) - partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
0 Resources configured.
============

Online: [ cactisvr1 cactisvr2 ]

VIPは、192.168.1.192を使うことにします。

# crm configure
crm(live)# configure
crm(live)configure# primitive vip_192.168.1.192 ocf:heartbeat:IPaddr2 \
>       params ip="192.168.1.192" cidr_netmask="24" nic="eth0" \
>       op start interval="0s" timeout="30s" on-fail="restart" \
>       op monitor interval="10s" timeout="30s" on-fail="restart" \
>       op stop interval="0s" timeout="30s" on-fail="block" ms ms-drbd drbd
crm(live)configure# property no-quorum-policy="ignore" stonith-enabled="false"
crm(live)configure# commit
crm(live)configure# quit

まずは、ここまで入れて、その後は、crm configure editで編集してしまいました。

node $id="-" cactisvr1
node $id="-" cactisvr2
primitive drbd ocf:linbit:drbd \
        params drbdconf="/etc/drbd.conf" drbd_resource="drbd0" \
        op monitor interval="10" role="Slave" \
        op monitor interval="11" role="Master" \
        op stop on-fail="block" interval="0"
primitive filesystem ocf:heartbeat:Filesystem \
        params run_fsck="no" device="/dev/drbd0" directory="/share" fstype="ext4" \
        op monitor interval="15" \
        op stop on-fail="ignore" interval="0"
primitive vip_192.168.1.192 ocf:heartbeat:IPaddr2 \
        params ip="192.1.1.192" cidr_netmask="24" nic="eth0" \
        op start interval="0s" timeout="30s" on-fail="restart" \
        op monitor interval="10s" timeout="30s" on-fail="restart" \
        op stop interval="0s" timeout="30s" on-fail="block" ms ms-drbd drbd
ms ms-drbd drbd \
        meta notify="true"
location cli-prefer-vip_192.168.1.192 vip_192.168.1.192 \
        rule $id="cli-prefer-rule-vip_192.168.1.192" inf: #uname eq cactisvr2
colocation drbd-fs-colocation inf: filesystem ms-drbd:Master vip_192.168.1.192
order drbd-fs-order inf: ms-drbd:promote filesystem:start
property $id="cib-bootstrap-options" \
        dc-version="1.0.13-30bb726" \
        cluster-infrastructure="Heartbeat" \
        no-quorum-policy="ignore" \
        stonith-enabled="false"

VIPが付いていることを確認します。

============
Last updated: Sun Jan 15 12:31:13 2017
Stack: Heartbeat
Current DC: cactisvr2 (-) - partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
3 Resources configured.
============

Online: [ cactisvr1 cactisvr2 ]

vip_192.168.1.192     (ocf::heartbeat:IPaddr2):       Started cactisvr2
filesystem      (ocf::heartbeat:Filesystem):    Started cactisvr2
 Master/Slave Set: ms-drbd
     Masters: [ cactisvr2 ]
     Slaves: [ cactisvr1 ]

# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:bb:b8:b1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.195/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.192/24 brd 192.168.1.255 scope global secondary eth0

問題なさそうです。

# crm resource move vip_192.168.1.192 cactisvr1

リソースの移動も正常にできることを確認できました。

 Cacti/Apache連動

インストール

 今確認したら、掲載中の現ページの中にCactiというキーワードはなかったので、自分で動作させるのは初めてのようです。
では、やってみようと思います。まずは、Apacheから。

# yum install httpd
依存性を解決しました

===============================================================================
 パッケージ         アーキテクチャ
                                バージョン                  リポジトリー  容量
===============================================================================
インストールしています:
 httpd              x86_64      2.2.15-56.el6.centos.3      updates      834 k
依存性関連でのインストールをします。:
 apr                x86_64      1.3.9-5.el6_2               base         123 k
 apr-util           x86_64      1.3.9-3.el6_0.1             base          87 k
 apr-util-ldap      x86_64      1.3.9-3.el6_0.1             base          15 k
 httpd-tools        x86_64      2.2.15-56.el6.centos.3      updates       79 k
 mailcap            noarch      2.1.31-2.el6                base          27 k

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

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

次は、Cacti。レポジトリが別のようなので、まずは取得から。

# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/epel-release-latest-6.noarch.rpm
# yum install epel-release-latest-6.noarch.rpm
...
依存性を解決しました

============================================================================
パッケージ                      アーキテクチャ            バージョン             リポジトリー                                      容量
============================================================================
インストールしています:
 epel-release                    noarch                    6-8                    /epel-release-latest-6.noarch                     22 k

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

合計容量: 22 k
インストール済み容量: 22 k
これでいいですか? [y/N]

では導入を開始します。

# yum --enablerepo=epel install cacti
...
依存性を解決しました

===============================================================================
 パッケージ                    アーキテクチャ
                                         バージョン           リポジトリー
                                                                          容量
===============================================================================
インストールしています:
 cacti                         noarch    0.8.8h-1.el6         epel       2.5 M
依存性関連でのインストールをします。:
 cairo                         x86_64    1.8.8-6.el6_6        base       309 k
 dejavu-fonts-common           noarch    2.33-1.el6           base        63 k
 dejavu-lgc-sans-mono-fonts    noarch    2.33-1.el6           base       397 k
 dejavu-sans-mono-fonts        noarch    2.33-1.el6           base       474 k
 fontconfig                    x86_64    2.8.0-5.el6          base       186 k
 freetype                      x86_64    2.3.11-17.el6        base       361 k
 libX11                        x86_64    1.6.3-2.el6          base       586 k
 libX11-common                 noarch    1.6.3-2.el6          base       169 k
 libXau                        x86_64    1.0.6-4.el6          base        24 k
 libXft                        x86_64    2.3.2-1.el6          base        55 k
 libXrender                    x86_64    0.9.8-2.1.el6_8.1    updates     24 k
 libpng                        x86_64    2:1.2.49-2.el6_7     base       182 k
 libthai                       x86_64    0.1.12-3.el6         base       183 k
 libxcb                        x86_64    1.11-2.el6           base       142 k
 mysql                         x86_64    5.1.73-7.el6         base       894 k
 net-snmp                      x86_64    1:5.5-57.el6_8.1     updates    309 k
 net-snmp-utils                x86_64    1:5.5-57.el6_8.1     updates    177 k
 pango                         x86_64    1.28.1-11.el6        base       351 k
 php                           x86_64    5.3.3-48.el6_8       updates    1.1 M
 php-cli                       x86_64    5.3.3-48.el6_8       updates    2.2 M
 php-common                    x86_64    5.3.3-48.el6_8       updates    530 k
 php-mysql                     x86_64    5.3.3-48.el6_8       updates     86 k
 php-pdo                       x86_64    5.3.3-48.el6_8       updates     80 k
 php-snmp                      x86_64    5.3.3-48.el6_8       updates     36 k
 pixman                        x86_64    0.32.8-1.el6         base       243 k
 rrdtool                       x86_64    1.3.8-7.el6          base       293 k
依存性関連での更新をします。:
 mysql-libs                    x86_64    5.1.73-7.el6         base       1.2 M

トランザクションの要約
===============================================================================
インストール        27 パッケージ
アップグレード       1 パッケージ

総ダウンロード容量: 13 M
これでいいですか? [y/N]

いろんなものを巻き込んで導入されましたが、まぁいいかなと。

さて、MySQLにデータベースを準備するところに来ました。
準備したDBにアクセスできます。

# mysql -u root -h 192.168.1.232 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

動いて当たり前なのに、何故かうれしいかも。

では、準備を続けていきます。

mysql> create database cacti character set utf8;
Query OK, 1 row affected (0.02 sec)

mysql> grant all privileges on cacti.* to cacti@'localhost' identified by 'PASSWORD';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

さらに続き。

# mysql -u cacti -h 192.168.1.232 -p  < /usr/share/doc/cacti-*/cacti.sql
Enter password:
ERROR 1045 (28000): Access denied for user 'cacti'@'192.168.1.194' (using password: YES)

そういえば、アクセスできるようにはしていないな。
rootで接続しなおして、

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select Host, User from mysql.user;
+---------------+-------+
| Host          | User  |
+---------------+-------+
| 192.168.1.% | root  |
| localhost     | cacti |
| localhost     | root  |
+---------------+-------+
3 rows in set (0.00 sec)

自分でローカルって指定しているのだから当然でした。

mysql> grant all privileges on cacti.* to cacti@'192.168.1.%' identified by 'PASSWORD';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select Host, User from mysql.user;
+---------------+-------+
| Host          | User  |
+---------------+-------+
| 192.168.1.% | cacti |
| 192.168.1.% | root  |
| localhost     | cacti |
| localhost     | root  |
+---------------+-------+
4 rows in set (0.00 sec)

ではもう一度。…の前に、そもそもDB指定していないし、cactiユーザでアクセスしなくても良かったですね。

# mysql -u root -D cacti -h 192.168.1.232 -p < /usr/share/doc/cacti-*/cacti.sql
Enter password:

何事もなかったかのようにプロンプトが返ってきました。

mysql> use cacti;
mysql> show tables ;
+---------------------------+
| Tables_in_cacti           |
+---------------------------+
| cdef                      |
| cdef_items                |
| colors                    |
| data_input                |
| data_input_data           |
| data_input_fields         |
| data_local                |
| data_template             |
| data_template_data        |
| data_template_data_rra    |
| data_template_rrd         |
| graph_local               |
| graph_template_input      |
| graph_template_input_defs |
| graph_templates           |
| graph_templates_gprint    |
| graph_templates_graph     |
| graph_templates_item      |
| graph_tree                |
| graph_tree_items          |
| host                      |
| host_graph                |
| host_snmp_cache           |
| host_snmp_query           |
| host_template             |
| host_template_graph       |
| host_template_snmp_query  |
| plugin_config             |
| plugin_db_changes         |
| plugin_hooks              |
| plugin_realms             |
| poller                    |
| poller_command            |
| poller_item               |
| poller_output             |
| poller_reindex            |
| poller_time               |
| rra                       |
| rra_cf                    |
| settings                  |
| settings_graphs           |
| settings_tree             |
| snmp_query                |
| snmp_query_graph          |
| snmp_query_graph_rrd      |
| snmp_query_graph_rrd_sv   |
| snmp_query_graph_sv       |
| user_auth                 |
| user_auth_perms           |
| user_auth_realm           |
| user_log                  |
| version                   |
+---------------------------+
52 rows in set (0.00 sec)

いろいろテーブルが入っていることを確認できます。

さて、MySQLからCactiの設定に戻り、cronの設定を確認します。
以降の作業は1号機と2号機に設定がそれぞれ必要になります。

5分毎の実行がコメント状態になっています。
後に設定を有効にしようと思います。

# cat /etc/cron.d/cacti
#*/5 * * * *    cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

このPHPファイルの外部ファイルに設定ファイルがあり、これを変更すべき箇所があるようです。

# cat  /usr/share/cacti/include/config.php
<?php
/*
 +-------------------------------------------------------------------------+
 | Copyright (C) 2004-2016 The Cacti Group                                 |
 |                                                                         |
 | This program is free software; you can redistribute it and/or           |
 | modify it under the terms of the GNU General Public License             |
 | as published by the Free Software Foundation; either version 2          |
 | of the License, or (at your option) any later version.                  |
 |                                                                         |
 | This program is distributed in the hope that it will be useful,         |
 | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           |
 | GNU General Public License for more details.                            |
 +-------------------------------------------------------------------------+
 | Cacti: The Complete RRDTool-based Graphing Solution                     |
 +-------------------------------------------------------------------------+
 | This code is designed, written, and maintained by the Cacti Group. See  |
 | about.php and/or the AUTHORS file for specific developer information.   |
 +-------------------------------------------------------------------------+
 | http://www.cacti.net/                                                   |
 +-------------------------------------------------------------------------+
*/

/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactiuser";
$database_port = "3306";
$database_ssl = false;

/*
   Edit this to point to the default URL of your Cacti install
   ex: if your cacti install as at http://serverip/cacti/ this
   would be set to /cacti/
*/
//$url_path = "/cacti/";

/* Default session name - Session name must contain alpha characters */
//$cacti_session_name = "Cacti";

?>

なるほど、ユーザやアクセス元などの情報は変更が必要です。
このファイルの実体は、/etc/cacti/以下にあるので、これを編集します。
※本当は、SSL通信にしたいけど、今回はパスしてそのまま進めます
※/var/log/cacti/って準備されていないと思うので、作成しないと…

# cd  /etc/cacti/
# cp -p db.php db.php_orig
# vi db.php
# diff -urN db.php_orig db.php
--- db.php_orig 2016-02-08 04:26:54.000000000 +0900
+++ db.php      2017-01-15 22:22:59.242070839 +0900
@@ -25,9 +25,9 @@
 /* make sure these values refect your actual database/host/user/password */
 $database_type = "mysql";
 $database_default = "cacti";
-$database_hostname = "localhost";
-$database_username = "cactiuser";
-$database_password = "cactiuser";
+$database_hostname = "192.168.1.232";
+$database_username = "cacti";
+$database_password = "PASSWORD";
 $database_port = "3306";
 $database_ssl = false;

Apacheウェブサーバの用の設定ファイルがあるかを確認します。

# ll /etc/httpd/conf.d/cacti.conf
-rw-r--r-- 1 root root 1505  5月 10 00:20 2016 /etc/httpd/conf.d/cacti.conf
# cat /etc/httpd/conf.d/cacti.conf
#
# Cacti: An rrd based graphing tool
#

# For security reasons, the Cacti web interface is accessible only to
# localhost in the default configuration. If you want to allow other clients
# to access your Cacti installation, change the httpd ACLs below.
# For example:
# On httpd 2.4, change "Require host localhost" to "Require all granted".
# On httpd 2.2, change "Allow from localhost" to "Allow from all".

Alias /cacti    /usr/share/cacti

<Directory /usr/share/cacti/>
        <IfModule mod_authz_core.c>
                # httpd 2.4
                Require host localhost
        </IfModule>
        <IfModule !mod_authz_core.c>
                # httpd 2.2
                Order deny,allow
                Deny from all
                Allow from localhost
        </IfModule>
</Directory>

<Directory /usr/share/cacti/install>
        # mod_security overrides.
        # Uncomment these if you use mod_security.
        # allow POST of application/x-www-form-urlencoded during install
        #SecRuleRemoveById 960010
        # permit the specification of the rrdtool paths during install
        #SecRuleRemoveById 900011
</Directory>


# These sections marked "Require all denied" (or "Deny from all")
# should not be modified.
# These are in place in order to harden Cacti.
<Directory /usr/share/cacti/log>
        <IfModule mod_authz_core.c>
                Require all denied
        </IfModule>
        <IfModule !mod_authz_core.c>
                Order deny,allow
                Deny from all
        </IfModule>
</Directory>
<Directory /usr/share/cacti/rra>
        <IfModule mod_authz_core.c>
                Require all denied
        </IfModule>
        <IfModule !mod_authz_core.c>
                Order deny,allow
                Deny from all
        </IfModule>
</Directory>

アクセス制限がかかっているので、Allow from localhost 192.168.1.0/24 みたく加える必要がありそうです。

# cd /etc/httpd/conf.d/
# cp -p  cacti.conf  cacti.conf_orig
# diff -urN cacti.conf_orig cacti.conf
--- cacti.conf_orig     2016-05-10 00:20:21.000000000 +0900
+++ cacti.conf  2017-01-15 22:28:40.015392016 +0900
@@ -20,7 +20,7 @@
                # httpd 2.2
                Order deny,allow
                Deny from all
-               Allow from localhost
+               Allow from localhost 192.168.1.0/24
        </IfModule>
 </Directory>

 まずは、ウェブを起動してみます。

# service httpd start
httpd を起動中: httpd: apr_sockaddr_info_get() failed for cactisvr1
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]

では、早速関連を開始します。
http://192.168.1.192/cacti/install/
にアクセスしましょう。

 
 
 
 
 
 admin/admin
 
 

まずは、自ホストに以下のsnmpd.confを準備しました。

# cd /etc/snmp
# cp -p snmpd.conf snmpd.conf_orig
# vi snmpd.conf
# diff -urN snmpd.conf_orig snmpd.conf
--- snmpd.conf_orig     2016-08-24 03:47:52.000000000 +0900
+++ snmpd.conf  2017-01-21 19:23:19.632888884 +0900
@@ -45,7 +45,7 @@

 #       groupName      securityModel securityName
 group   notConfigGroup v1           notConfigUser
-group   notConfigGroup v2c           notConfigUser
+group   notConfigGroup v2c          notConfigUser

 ####
 # Third, create a view for us to let the group have rights to:
@@ -73,16 +73,25 @@
 ##       sec.name  source          community
 #com2sec local     localhost       COMMUNITY
 #com2sec mynetwork NETWORK/24      COMMUNITY
+# 20170121
+com2sec local     localhost            MyNETWORK
+com2sec mynetwork 192.168.1.0/24     MyNETWORK

 ##     group.name sec.model  sec.name
 #group MyRWGroup  any        local
 #group MyROGroup  any        mynetwork
+# 20170121
+group MyROGroup   v2c local
+group MyROGroup   v2c   mynetwork
+
 #
 #group MyRWGroup  any        otherv3user
 #...

 ##           incl/excl subtree                          mask
 #view all    included  .1                               80
+# 20170121
+view all    included  .1                               80

 ## -or just the mib2 tree-

@@ -92,7 +101,8 @@
 ##                context sec.model sec.level prefix read   write  notif
 #access MyROGroup ""      any       noauth    0      all    none   none
 #access MyRWGroup ""      any       noauth    0      all    all    all
-
+# 20170121
+access MyROGroup ""      any       noauth     exact  all    none   none

 ###############################################################################
 # Sample configuration to make net-snmpd RFC 1213.

自動起動に設定をして、

# chkconfig snmpd on;chkconfig --list|grep snmpd
snmpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

サービスを起動しました。
※両サーバが対象

# /etc/init.d/snmpd start
snmpd を起動中:                                            [  OK  ]

しかしながら、少し気になる。シスログに

Duplicate IPv4 address detected, some interfaces may not be visible in IP-MIB

とか出ている。VIPがあるため?

試しにcronで実行される内容を実行すると、

HP Warning:  date(): It is not safe to rely on the system's timezone settings.
 You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
 In case you used any of those methods and you are still getting this warning,
 you most likely misspelled the timezone identifier.
 We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /usr/share/cacti/include/global_arrays.php on line 681

…のようなメッセージが出ていました。とりあえずは、この状態でもグラフはできているようです。

# cd /etc
# cp -p  php.ini  php.ini_orig
# vi php.ini

修正して、

# diff  php.ini_orig php.ini
946a947,948
> ;20170121
> date.timezone = "Asia/Tokyo"

と変更して、該当のエラーは出力されないようになりました。

さて、RRDファイルは、どこに?

# ll /var/lib/cacti/rra/
合計 332
-rw-r--r-- 1 cacti cacti 141640  1月 21 19:40 2017 localhost_load_1min_5.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 21 19:40 2017 localhost_mem_buffers_3.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 21 19:40 2017 localhost_mem_swap_4.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 21 19:40 2017 localhost_proc_7.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 21 19:40 2017 localhost_users_6.rrd

ここにいました。

このタイミングでサーバがおかしな状態となり、(スナップショットを切り忘れていたために)OSからやり直しとなり、半日復習する日となりました。
#結構、同じ作業をするのは根気が必要(涙)。
Apacheの設定に設定を加えます。

# cd /etc/httpd/conf
# cp -p httpd.conf httpd.conf_orig
# vi httpd.conf
   2016-12-13 18:27:11.000000000 +0900
+++ httpd.conf  2017-01-22 17:03:11.648683382 +0900
@@ -62,7 +62,8 @@
 # /etc/sysconfig/httpd must be set appropriately if this location is
 # changed.
 #
-PidFile run/httpd.pid
+##PidFile run/httpd.pid
+PidFile /var/run/httpd.pid

 #
 # Timeout: The number of seconds before receives and sends time out.
@@ -226,6 +227,8 @@
 # Off) when the "server-status" handler is called. The default is Off.
 #
 #ExtendedStatus On
+# 20170122
+ExtendedStatus On

 #
 # If you wish httpd to run as a different user or group, you must run
@@ -273,7 +276,7 @@
 # You will have to access it by its address anyway, and this will make
 # redirections work in a sensible way.
 #
-#ServerName www.example.com:80
+ServerName cactisvr2:80

 #
 # UseCanonicalName: Determines how Apache constructs self-referencing
@@ -918,12 +921,12 @@
 # with the URL of http://servername/server-status
 # Change the ".example.com" to match your domain to enable.
 #
-#<Location /server-status>
-#    SetHandler server-status
-#    Order deny,allow
-#    Deny from all
-#    Allow from .example.com
-#</Location>
+<Location /server-status>
+    SetHandler server-status
+    Order deny,allow
+    Deny from all
+    Allow from 127.0.0.1 192.168.1
+</Location>

 #
 # Allow remote server configuration reports, with the URL of

いや、マジにこの設定が重要ということがわからず、エラーというだけのメッセージに泣かされました。
Apache on Pacemaker でハマる - とあるサーバ管理者 & PG & SEのメモ帳の情報を公開していただけていなかったら、絶対にたどり着けていないと思います。
PIDファイルの指定が結構分からなかったですね。

現状は、DRBDとの連携はまだですし、VIPとの連動はしていないので、個別のリソースとして動作しています。

primitive drbd ocf:linbit:drbd \
        params drbdconf="/etc/drbd.conf" drbd_resource="drbd0" \
        op monitor interval="10" role="Slave" \
        op monitor interval="11" role="Master" \
        op stop on-fail="block" interval="0"
primitive filesystem ocf:heartbeat:Filesystem \
        params run_fsck="no" device="/dev/drbd0" directory="/share" fstype="ext4" \
        op monitor interval="15" \
        op stop on-fail="ignore" interval="0"
primitive p-apache ocf:heartbeat:apache \
        params configfile="/etc/httpd/conf/httpd.conf" port="80" statusurl="http://127.0.0.1/server-status" \
        op start interval="0s" timeout="90s" on-fail="restart" \
        op monitor interval="10s" timeout="60s" on-fail="restart" \
        op stop interval="0s" timeout="300s" on-fail="block"
primitive vip_192.168.1.192 ocf:heartbeat:IPaddr2 \
        params ip="192.168.1.192" cidr_netmask="24" nic="eth0" \
        op start interval="0s" timeout="30s" on-fail="restart" \
        op monitor interval="10s" timeout="30s" on-fail="restart" \
        op stop interval="0s" timeout="30s" on-fail="block" ms ms-drbd drbd
ms ms-drbd drbd \
        meta notify="true"
location cli-prefer-p-apache p-apache \
        rule $id="cli-prefer-rule-p-apache" inf: #uname eq cactisvr1 and #uname eq cactisvr1 and #uname eq cactisvr1
location cli-prefer-vip_192.168.1.192 vip_192.168.1.192 \
        rule $id="cli-prefer-rule-vip_192.168.1.192" inf: #uname eq cactisvr1
colocation drbd-fs-colocation inf: filesystem ms-drbd:Master vip_192.168.1.192
order drbd-fs-order inf: ms-drbd:promote filesystem:start
property $id="cib-bootstrap-options" \
        dc-version="1.0.13-30bb726" \
        cluster-infrastructure="Heartbeat" \
        no-quorum-policy="ignore" \
        stonith-enabled="false"

さて、続きを再開。
数日ぶりに4台のホスト(Cacti冗長+MySQL冗長)を起動しました。
リソースは1号機側に寄っていました。

まず、RRA(RRDファイル群)をDRBD配下の位置に移動しますが、現状はこんな場所に出力されています。

# ll /usr/share/cacti/rra
lrwxrwxrwx 1 root root 18  1月 22 11:32 2017 /usr/share/cacti/rra -> /var/lib/cacti/rra

でも、残念なことにこれまで2号機側しかcronのコメント外していないので、中身は空。
とりあえず、両方ともに /etc/cron.d/cactiはコメントされた状態に戻しました。

これまでに取得されたものはとりあえず棄てます。いらないし。
両方のサーバで実施します。

# cd /var/lib/cacti
# mv rra rra_OLD

次は、リソース持っている側で実施。

# mkdir /share/cacti-rra
# ln -s /share/cacti-rra /var/lib/cacti/rra
# chown cacti /var/lib/cacti/rra

リソースを持っていない側は

# ln -s /share/cacti-rra /var/lib/cacti/rra

だけです。
これでDRBD連動で共有するファイル部分が移動するようになりました。

次は、PacemakerでCactiのcron動作が動作する側を切り替える設定を加えます。
まず、双方のサーバに動作するための(コメントをはずした)ファイルを準備します。

# cp -p /etc/cron.d/cacti /etc/cron-cacti.enable
# vi /etc/cron-cacti.enable
# cat /etc/cron-cacti.enable
*/5 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

こんな感じ。

【以下は過去の記載】
OCF Cron Symlink Resource Agent [IT Admins Group]のページにあるスクリプトをいただいて、
/etc/ha.d/resource.d/symlink として配置しました。実行権限は付与しましょう。
※ちなみに /usr/lib/ocf/resource.d/heartbeat/symlink もバージョン違いで同じものがあるので、これを利用するで良いみたいです
※通常この手をRA(Resource Agent)スクリプトと呼ぶみたいです。OCF RAとHeartbeat RAとの使い分けはまだ理解できていません。
※/etc/ha.d/以下の物は、/etc/init.d以下と同様のスクリプトに見えます。今回わざわざ配置したものの、ocf:heartbeat:symlink と書いたので
※そっちを参照するものと考えていますが、前者に配置しないとエラーになっていました。少し理由は確認しようと思っています
【過去の記載はここまで】

元々あったsymlink単体で動作しました。上記はメモ程度で消さずに残しました。
この状態で、Pacemakerの設定を以下のようにします。

primitive p-cron-cacti ocf:heartbeat:symlink \
        params target="/etc/cron-cacti.enable" link="/etc/cron.d/cacti " \
        backup_suffix=".disable"

これで思った動きになるはず。
リソース持っている側は、

# ll  /etc/cron.d/cacti*
lrwxrwxrwx 1 root root 22  1月 25 21:42 2017 /etc/cron.d/cacti -> /etc/cron-cacti.enable
-rw-r--r-- 1 root root 77  5月 10 00:18 2016 /etc/cron.d/cacti.disable

元々のファイルをリネームし、準備しておいたファイルにシンボリックリンクを張ってくれるようになりました。

# ll /share/cacti-rra/
合計 332
-rw-r--r-- 1 cacti cacti 141640  1月 25 21:50 2017 localhost_load_1min_5.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 25 21:50 2017 localhost_mem_buffers_3.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 25 21:50 2017 localhost_mem_swap_4.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 25 21:50 2017 localhost_proc_7.rrd
-rw-r--r-- 1 cacti cacti  47992  1月 25 21:50 2017 localhost_users_6.rrd

後は、作成したp-cron-cacti がグループとして一緒に移動して動作するようになれば、手動で一発切り替えができるようになりそうです。
※ここで念のためにスナップショット入れて、戻れるように準備中
終わりました。

group設定を加えて、対象にしました。
ここでできあがっている内容を確認しておきます。

node $id="-" cactisvr2
node $id="" cactisvr1
primitive drbd ocf:linbit:drbd \
        params drbdconf="/etc/drbd.conf" drbd_resource="drbd0" \
        op monitor interval="10" role="Slave" \
        op monitor interval="11" role="Master" \
        op stop on-fail="block" interval="0"
primitive filesystem ocf:heartbeat:Filesystem \
        params run_fsck="no" device="/dev/drbd0" directory="/share" fstype="ext4" \
        op monitor interval="15" \
        op stop on-fail="ignore" interval="0"
primitive p-apache ocf:heartbeat:apache \
        params configfile="/etc/httpd/conf/httpd.conf" port="80" statusurl="http://127.0.0.1/server-status" \
        op start interval="0s" timeout="90s" on-fail="restart" \
        op monitor interval="10s" timeout="60s" on-fail="restart" \
        op stop interval="0s" timeout="90s" on-fail="block"
primitive p-cron-cacti ocf:heartbeat:symlink \
        params target="/etc/cron-cacti.enable" link="/etc/cron.d/cacti" backup_suffix=".disable"
primitive vip_192.168.1.192 ocf:heartbeat:IPaddr2 \
        params ip="192.168.1.192" cidr_netmask="24" nic="eth0" \
        op start interval="0s" timeout="30s" on-fail="restart" \
        op monitor interval="10s" timeout="30s" on-fail="restart" \
        op stop interval="0s" timeout="30s" on-fail="block" ms ms-drbd drbd
group group-cacti filesystem p-apache p-cron-cacti vip_192.168.1.192
ms ms-drbd drbd \
        meta notify="true"
location cli-prefer-group-cacti group-cacti \
        rule $id="cli-prefer-rule-group-cacti" inf: #uname eq cactisvr1
location cli-prefer-p-apache p-apache \
        rule $id="cli-prefer-rule-p-apache" inf: #uname eq cactisvr1
location cli-prefer-p-cron-cacti p-cron-cacti \
        rule $id="cli-prefer-rule-p-cron-cacti" inf: #uname eq cactisvr1
location cli-prefer-vip_192.168.1.192 vip_192.168.1.192 \
        rule $id="cli-prefer-rule-vip_192.168.1.192" inf: #uname eq cactisvr1
colocation drbd-fs-colocation inf: group-cacti ms-drbd:Master
order drbd-fs-order inf: ms-drbd:promote group-cacti:start
property $id="cib-bootstrap-options" \
        dc-version="1.0.13-30bb726" \
        cluster-infrastructure="Heartbeat" \
        no-quorum-policy="ignore" \
        stonith-enabled="false"

こんな感じになりました。

現状、リソースは1号機にあります。

============
Last updated: Wed Jan 25 23:13:13 2017
Stack: Heartbeat
Current DC: cactisvr2 (63ea3038-5699-4f1c-a7d9-c3b7323d99c6) - partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
2 Resources configured.
============

Online: [ cactisvr1 cactisvr2 ]

Full list of resources:

 Master/Slave Set: ms-drbd
     Masters: [ cactisvr1 ]
     Slaves: [ cactisvr2 ]
 Resource Group: group-cacti
     filesystem (ocf::heartbeat:Filesystem):    Started cactisvr1
     p-apache   (ocf::heartbeat:apache):        Started cactisvr1
     p-cron-cacti       (ocf::heartbeat:symlink):       Started cactisvr1
     vip_192.168.1.192        (ocf::heartbeat:IPaddr2):       Started cactisvr1

Node Attributes:
* Node cactisvr1:
    + master-drbd:1                     : 10000
* Node cactisvr2:
    + master-drbd:0                     : 1000

試しに、VIPを1号機に動かしてみます。

# crm resource move vip_192.168.1.192 cactisvr2 force

すると、以下のようにフェイルオーバーされました。

============
Last updated: Wed Jan 25 23:16:02 2017
Stack: Heartbeat
Current DC: cactisvr2 (63ea3038-5699-4f1c-a7d9-c3b7323d99c6) - partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
2 Resources configured.
============

Online: [ cactisvr1 cactisvr2 ]

Full list of resources:

 Master/Slave Set: ms-drbd
     Masters: [ cactisvr2 ]
     Slaves: [ cactisvr1 ]
 Resource Group: group-cacti
     filesystem (ocf::heartbeat:Filesystem):    Started cactisvr2
     p-apache   (ocf::heartbeat:apache):        Started cactisvr2
     p-cron-cacti       (ocf::heartbeat:symlink):       Started cactisvr2
     vip_192.168.1.192        (ocf::heartbeat:IPaddr2):       Started cactisvr2

Node Attributes:
* Node cactisvr1:
    + master-drbd:1                     : 1000
* Node cactisvr2:
    + master-drbd:0                     : 10000

ハートビートを停止しても同様の動作をすることを確認できました。


【改訂履歴】作成:2017/01/15 更新:2017/02/21


【参照ページ】

HAクラスタシステム構築(Heartbeat+DRBD+Apache) - CentOSで自宅サーバー構築
CentOS 6 Cacti インストール : Server World
Apache on Pacemaker でハマる - とあるサーバ管理者 & PG & SEのメモ帳
DRBD for MySQL HA - Proof of Concept
モニタリングツール「Cacti」でのリソース監視 - さくらのナレッジ

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