前置き
以下の記事のおまけです。
CentOS6.6のLinux-HAでDRBD上にOracleデータベースを構築する
Oracleをインストールする前までのLinux-HA構築手順をメモしておきます。
CentOSのインストール
ホスト名、IPアドレス設定
- ノードA ホスト名:OraSv1 eth0:192.168.10.101 eth1:192.168.1.101
- ノードB ホスト名:OraSv2 eth0:192.168.10.102 eth1:192.168.1.102
インストール時、DRBDで2重化するパーティション(/ora ext4)を追加する。
/etc/fstabがこうなるように。
/dev/mapper/vg-lv_root / ext4 defaults 1 1
/dev/mapper/vg-lv_home /home ext4 defaults 1 2
/dev/mapper/vg-lv_ora /ora ext4 defaults 1 2
初期設定
DRBDで管理するパーティションをマウントしないよう、/oraをコメントアウトする。
```sh:/etc/fstab`
/dev/mapper/vg-lv_root / ext4 defaults 1 1
/dev/mapper/vg-lv_home /home ext4 defaults 1 2
/dev/mapper/vg-lv_ora /ora ext4 defaults 1 2
/oraをアンマウントする。
`umount /ora`
パーティションの中身を空にする
`dd if=/dev/zero bs=1M count=1 of=/dev/mapper/vg-lv_ora;sync`
ホスト名設定
```sh:/etc/hosts
192.168.10.101 OraSv1
192.168.10.102 OraSv2
HA用のユーザ・グループ作成
groupadd -g 1310 haclient
useradd -u 1310 -g haclient -d /home/haclient -s /bin/bash -m haclient
passwd haclient
iptables設定
iptables -L -n --line-number
iptables -I INPUT 1 -m tcp -p tcp --dport 7788 -j ACCEPT
iptables -I INPUT 2 -m tcp -p tcp --sport 7788 -j ACCEPT
iptables -I OUTPUT 1 -m tcp -p tcp --dport 7788 -j ACCEPT
iptables -I OUTPUT 2 -m tcp -p tcp --sport 7788 -j ACCEPT
iptables -I INPUT 3 -m udp -p udp --dport 5405 -j ACCEPT
iptables -I INPUT 4 -m udp -p udp --sport 5405 -j ACCEPT
iptables -I OUTPUT 3 -m udp -p udp --dport 5405 -j ACCEPT
iptables -I OUTPUT 4 -m udp -p udp --sport 5405 -j ACCEPT
iptables -L -n --line-number
service iptables save
service iptables restart
最新にアップデートしておく
yum update
DRBDのインストール
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
yum install -y drbd84-utils kmod-drbd84
DRBDの設定
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
# include "drbd.d/global_common.conf"; ←コメントアウトする
# include "drbd.d/*.res"; ←コメントアウトする
global {
usage-count no;
}
common {
syncer { rate 50M; }
}
resource r0 {
protocol C;
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
net {
cram-hmac-alg "sha1";
shared-secret "password";
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
}
disk {
on-io-error pass_on;
}
# ノードAのホスト名、IPアドレス、DRBDで2重化するパーティションを定義
on OraSv1 { # uname -n で表示されるホスト名
device /dev/drbd0;
disk /dev/mapper/vg-lv_ora;
address 192.168.10.101:7788;
meta-disk internal;
}
# ノードBのホスト名、IPアドレス、DRBDで2重化するパーティションを定義
on OraSv2 { # uname -n で表示されるホスト名
device /dev/drbd0;
disk /dev/mapper/vg-lv_ora;
address 192.168.10.102:7788;
meta-disk internal;
}
}
自動起動OFFにする
chkconfig --list drbd
chkconfig drbd off
chkconfig --list drbd
DRBDのメタデータを初期化
drbdadm create-md r0
おまじない
drbdadm -- 6::::1 set-gi r0
drbdadm dump-md r0 > /tmp/md
sed -i -r -e 's/0xF{16}/0x0000000000000000/g' /tmp/md
drbdmeta /dev/drbd0 v08 /dev/mapper/vg-lv_ora internal restore-md /tmp/md ; rm -f /tmp/md
DRBD起動(初回のみ)
DRBD起動(Primary, Secondary両方で実行)
service drbd start
service drbd status
drbd driver loaded OK; device status:
version: 8.4.5 (api:1/proto:86-101)
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by
mockbuild@Build64R6, 2014-08-17 19:26:04
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C
両方のノードでこの状態
(Connected Secondary/Secondary Inconsistent/Inconsistent)
になることを確認する。
以下、ノードAをPrimary、ノードBをSecondaryとして設定を進める。
Secondary側(ノードB)で実行
drbdadm invalidate r0
cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by
mockbuild@Build64R6, 2014-08-17 19:26:04
0: cs:SyncSource ro:Secondary/Secondary ds:UpToDate/Inconsistent C r-----
ns:2473212 nr:0 dw:0 dr:2473212 al:0 bm:0 lo:0 pe:4 ua:0 ap:0 ep:1
wo:f oos:23742668
[>...................] sync'ed: 9.5% (23184/25596)M
finish: 0:18:25 speed: 21,444 (21,484) K/sec
同期が終わるまで(sync'ed が100%になるまで)待つ。
同期完了するとこうなる。
- ノードA
# service drbd status
drbd driver loaded OK; device status:
version: 8.4.5 (api:1/proto:86-101)
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by
phil@Build64R6, 2014-10-28 10:32:53
m:res cs ro ds p mounted fstype
0:r0 Connected Primary/Secondary UpToDate/UpToDate C
- ノードB
# service drbd status
drbd driver loaded OK; device status:
version: 8.4.5 (api:1/proto:86-101)
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by
phil@Build64R6, 2014-10-28 10:32:53
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Primary UpToDate/UpToDate C
ノードAで実行
drbdadm primary r0
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /ora
df
/dev/drbd0 25671160 44992 24315492 1% /ora
/dev/drbd0が/oraとして読み書き可能であること。
適当なファイルをノードAで作成してみる。
ノードAで実行
echo "DRBD TEST from Node A" > /ora/test.txt
ls /ora
cat /ora/test.txt
DRBD TEST from Node A
Primary/Secondaryを切り替えてみる。
umount /ora
drbdadm secondary r0
ノードBで実行
drbdadm primary r0
mount /dev/drbd0 /ora
df
/dev/drbd0 25671160 44992 24315492 1% /ora
cat /ora/test.txt
DRBD TEST from Node A
echo "DRBD TEST from Node B" >> /ora/test.txt
Primary/Secondaryを切り替えてみる。
umount /ora
drbdadm secondary r0
ノードAで実行
drbdadm primary r0
mount /dev/drbd0 /ora
cat /ora/test.txt
DRBD TEST from Node A
DRBD TEST from Node B
Pacemakerのインストール
Pacemakerリポジトリを取得、インストール
cd /tmp
wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Flinux-ha%2F62369%2Fpacemaker-repo-1.1.12-1.1.el6.x86_64.rpm"
mv redir.php?m=jaist&f=%2Flinux-ha%2F62369%2Fpacemaker-repo-1.1.12-1.1.el6.x86_64.rpm pacemaker-repo-1.1.12-1.1.el6.x86_64.rpm
rpm -ivh pacemaker-repo-1.1.12-1.1.el6.x86_64.rpm
yum install pacemaker-all
Corosyncの設定
compatibility: whitetank
aisexec {
user: root
group: root
}
service {
name: pacemaker
ver: 0
use_mgmtd: yes
}
amf {
mode: disabled
}
totem {
version: 2
secauth: off
threads: 0
rrp_mode: none
clear_node_high_bit: yes
token: 4000
censensus: 7000
join: 60
interface {
member {
memberaddr: 192.168.1.101 #ノードA
}
member {
memberaddr: 192.168.1.102 #ノードB
}
ringnumber: 0
bindnetaddr: 192.168.1.0 #ネットワークアドレス
mcastport: 5405
ttl: 1
}
transport: udpu
}
logging {
fileline: off
to_logfile: yes
to_syslog: no
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
quorum {
provider: corosync_votequorum
expected_votes: 2
two_node: 1
}
自動起動ONにする
chkconfig pacemaker on
chkconfig --list pacemaker
chkconfig corosync on
chkconfig --list corosync
Pacemaker, Corosync起動(初回のみ)
両方のノードで起動する
service corosync start
service pacemaker start
手動で停止するときはこの順番で停止すること
service pacemaker stop
service corosync stop
起動状態の確認(片方のノードで実行すればよい)
crm_mon -Aro
Last updated: Thu Dec 25 19:27:45 2014
Last change: Thu Dec 25 19:24:22 2014
Stack: corosync
Current DC: OraSv1 (740103615) - partition with quorum
Version: 1.1.12-561c4cf
2 Nodes configured
0 Resources configured
Online: [ OraSv1 OraSv2 ]
Full list of resources:
Node Attributes:
* Node OraSv1:
* Node OraSv2:
Operations:
* Node OraSv1:
* Node OraSv2:
両方がOnlineになってればOK(Ctrl+Cで表示終了)
CRM設定
片方のノードで実行すればよい
crm configure
property no-quorum-policy=ignore stonith-enabled=false
rsc_defaults resource-stickiness=INFINITY migration-threshold=1
commit
exit
DRBDを死活監視対象に設定
念のため、/dev/drbd0 をアンマウントしておく。
umount /ora
crm configure
primitive drbd_ora ocf:linbit:drbd params drbdconf=/etc/drbd.conf \
drbd_resource=r0 \
op start interval=0s timeout=240s \
op monitor interval=10 role=Slave \
op monitor interval=11 role=Master \
op stop interval=0 timeout=100s on-fail=block
ms ms-drbd_ora drbd_ora meta notify=true
primitive fs_ora ocf:heartbeat:Filesystem params run_fsck=no \
device=/dev/drbd0 directory=/ora fstype=ext4 \
op start interval=0s timeout=60s \
op monitor interval=15 timeout=40s \
op stop interval=0 timeout=60s on-fail=ignore
colocation coloc-drbd_fs inf: fs_ora ms-drbd_ora:Master
order order-drbd_fs inf: ms-drbd_ora:promote fs_ora:start
commit
exit
状況確認
crm_mon
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv1 ]
Slaves: [ OraSv2 ]
fs_ora (ocf::heartbeat:Filesystem): Started OraSv1
Mastersになっているノード(OraSv1)で/oraがマウントされていることを確認。
df
cat /ora/test.txt
Master側をリブート
shutdown -r now
Slave側がMasterに昇格すること
crm_mon
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv2 ]
Slaves: [ OraSv1 ]
fs_ora (ocf::heartbeat:Filesystem): Started OraSv2
/oraがマウントされていること
df
再起動した方がSlavesになっていること
仮想IPアドレス作成
仮想IPアドレス 192.168.10.100を作る。
Filesystem(fs_ora)とグループ化し、同一ノードで実行するよう設定する。
crm configure
primitive VIP1 ocf:heartbeat:IPaddr2 \
params ip=192.168.10.100 nic=eth0 cidr_netmask=24 \
op start interval=0s timeout=20s \
op stop interval=0s timeout=20s \
op monitor interval=30s
group grpora fs_ora VIP1
commit
exit
状況確認
crm_mon
VIP1 (ocf::heartbeat:IPaddr2): Started OraSv2
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv2 ]
Slaves: [ OraSv1 ]
fs_ora (ocf::heartbeat:Filesystem): Started OraSv2
fs_oraとVIP1が同一ノードで起動すること。
別マシンから仮想IPに接続し、仮想IPが起動しているノード(上記の例だとOraSv2)に接続すること。
設定は以上です。
ここまで出来たら、元記事に戻ってOracleをインストールします。
CentOS6.6のLinux-HAでDRBD上にOracleデータベースを構築する