LoginSignup
6
5

More than 5 years have passed since last update.

CentOS6.6のLinux-HAでPacemakerによるOracleの起動・停止を制御する

Posted at

前置き

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構成を使えばいいんですが、いろいろと事情がありまして今回このような無茶をしてみました。

他にも同じようなことをしようとしている方の参考になれば幸いです。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5