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
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へのマッピング
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
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
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
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へのマッピング
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
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
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
通信の暗号化方式を指定することができる。
sha1、md5、crcが指定できる。
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のログローテートの設定
以下の条件で設定
- 月一度ローテートする
- ログファイルが存在しなくてもエラーを出さない
- ローテートしたファイルを圧縮する
- 空のログファイルもローテートする
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