前置き
CentOS6.6のLinux-HAでDRBD上にOracleデータベースを構築する
の続きです。
2台のマシンに入れたOracleデータベースを、DRBDがMasterのノードで起動し、Slaveのノードでは停止するよう、pacemakerで管理するように設定します。
設定手順
Oracleリスナー・データベースを停止
まず、Oracleリスナー・データベースを停止しておきます。
仮想IPで接続(Master側のノードに接続)
- oracleユーザで実行
Oracle DBの起動状態を確認し、Oracle DBが起動していたら停止します。
sqlplus /nolog
SQL> conn sys as sysdba
SQL> select STATUS from v$instance;
SQL> shutdown
Oracle リスナーの起動状態を確認し、リスナーが起動していたら停止します。
lsnrctl status
lsnrctl stop
Oracleの設定追加前のconfig確認
- rootで実行
crm configure show
node 740103621: OraSv1 \
attributes standby=off
node 740103622: OraSv2 \
attributes standby=off
primitive VIP1 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
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
primitive fs_ora 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
group grpora fs_ora VIP1
ms ms-drbd_ora drbd_ora \
meta notify=true
colocation coloc-drbd_fs inf: fs_ora ms-drbd_ora:Master
order order-drbd_fs inf: ms-drbd_ora:promote fs_ora:start
property cib-bootstrap-options: \
dc-version=1.1.12-561c4cf \
cluster-infrastructure=corosync \
no-quorum-policy=ignore \
stonith-enabled=false
rsc_defaults rsc-options: \
resource-stickiness=INFINITY \
migration-threshold=1
Oracleの設定追加
Oracleリスナー、データベースを登録します。
【SID】には各自作成したデータベースのSIDを入れてください。
crm configure
primitive OraLSN oralsnr \
params sid=【SID】\
op start interval=0s timeout=60s \
op stop interval=0s timeout=60s \
op monitor interval=30 timeout=60 depth=0
colocation OraLSN-with-FS inf: fs_ora OraLSN
order OraLSN-after-FS inf: fs_ora OraLSN
primitive OraSrv oracle \
params sid=【SID】 home="/u01/app/oracle/product/12.1.0/dbhome_1"
user=oracle \
op start interval=0s timeout=120 \
op stop interval=0s timeout=120 \
op monitor interval=120s timeout=60s
colocation OraLSN-with-OraSrv inf: OraLSN OraSrv
order OraSrv-after-OraLSN inf: OraLSN OraSrv
commit
exit
追加した設定は以下の通りです。
-
Oracleリスナー(OraLSN)を登録
-
DRBDのファイルシステム(fs_ora)とOraLSNは同一ノードで起動すること
-
fs_oraの起動後にOraLSNを起動すること
-
Oracleデータベース(OraSrv)を登録(SID, ORACLE_HOME, ユーザをパタメタで指定)
-
Oracleリスナー(OraLSN)とOraSrvは同一ノードで起動すること
-
OraLSNの起動後にOraSrvを起動すること
どのノードで起動するか、また各リソースの起動順序に気をつけて設定してください。
私の場合、マシンがしょぼかったのでOracleの起動に時間がかかり、120秒のタイムアウトではエラーになってしまったので、タイムアウト秒数を増やして回避しました。
上記の設定でうまく起動しないという時は、タイムアウト秒数を調整してみてください。
pacemaker状態確認
追加したOraLSN, OraSrvが正しく起動するか、確認します。
crm_mon
Online: [ OraSv1 OraSv2 ]
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv1 ]
Slaves: [ OraSv2 ]
OraLSN (ocf::heartbeat:oralsnr): Started OraSv1
OraSrv (ocf::heartbeat:oracle): Started OraSv1
Resource Group: grpora
fs_ora (ocf::heartbeat:Filesystem): Started OraSv1
VIP1 (ocf::heartbeat:IPaddr2): Started OraSv1
このように、OraLSN, OraSrvがfs_oraと同一ノードで起動(Started)になればOKです。
あとは、ノードの切り替えをしながら、crm_monでOraLSN, OraSrvの起動ノードが正しく切り替わるかを確認してください。
crm node standby OraSv1
crm node online OraSv1
crm node standby OraSv2
crm node online OraSv2
Oracleの設定追加後のconfig確認
crm configure show
node 740103621: OraSv1 \
attributes standby=off
node 740103622: OraSv2 \
attributes standby=off
primitive OraLSN oralsnr \
params sid=【SID】 \
op start interval=0s timeout=60s \
op stop interval=0s timeout=60s \
op monitor interval=30 timeout=60 depth=0
primitive OraSrv oracle \
params sid=【SID】 home="/u01/app/oracle/product/12.1.0/dbhome_1"
user=oracle \
op start interval=0s timeout=120 \
op stop interval=0s timeout=120 \
op monitor interval=120s timeout=60s
primitive VIP1 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
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
primitive fs_ora 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
group grpora fs_ora VIP1
ms ms-drbd_ora drbd_ora \
meta notify=true
colocation OraLSN-with-FS inf: grpora OraLSN
colocation OraLSN-with-OraSrv inf: OraLSN OraSrv
colocation coloc-drbd_fs inf: grpora ms-drbd_ora:Master
order OraLSN-after-FS inf: grpora OraLSN
order OraSrv-after-OraLSN inf: OraLSN OraSrv
order order-drbd_fs inf: ms-drbd_ora:promote grpora:start
property cib-bootstrap-options: \
dc-version=1.1.12-561c4cf \
cluster-infrastructure=corosync \
no-quorum-policy=ignore \
stonith-enabled=false
rsc_defaults rsc-options: \
resource-stickiness=INFINITY \
migration-threshold=1
あとがき
そもそもMySQLやPostgreSQLではなく、わざわざOracleを入れたのはOracle APEXを使いたいから、というのが本来の理由でした。
素直にOracleのHA構成を使えばいいんですが、いろいろと事情がありまして今回このような無茶をしてみました。
他にも同じようなことをしようとしている方の参考になれば幸いです。