#前置き
CentOS+Pacemaker+Corosync+DRBDで以下の図のようなHA構成を作り、そこにOracleデータベースを実装しました。
HA構成をOSSで作っておいてわざわざOracleを使う人は少ないのか、あまり実装例が無いようなので、拙い内容ではありますが書いてみました。
##システム構成
- ノードA ホスト名:OraSv1 eth0:192.168.10.101 eth1:192.168.1.101
- ノードB ホスト名:OraSv2 eth0:192.168.10.102 eth1:192.168.1.102
- サービス用LAN 192.168.10.0/24 仮想IP:192.168.10.100
- 死活監視用LAN 192.168.1.0/24
使ったもの
CentOS 6.6
drbd 8.4
pacemaker 1.1.12
corosync 2.3.4
Oracle 12c Standard Edition One
参考記事
以下の記事を参考にいたしました。
大変勉強になりました。本当にありがとうございます。
Linux-HAの構築
ノード2台に対して以下をインストールします。
- CentOSのインストール
- DRBDのインストール
- Pacemakerのインストール
ここの手順については別の良記事が多数あるので、ここでは省略します。
別ページにざっくりメモ書きしましたので、参考にしてください。
CentOS6.6のLinux-HAでDRBDを構築する手順めも
Oracle 12c のインストール
Oracleインストール、リスナー作成
以下の参考サイトの通りに、リスナーの作成まで実施します。
ノード2台の両方で実施してください。
参考 Server World Oracle 12c
Oracleデータ格納領域の設定(ノードA)
データベース作成の前に、DRBDが管理するディスク領域(以下の例では/ora)にoracleデータを格納するため、以下の設定をします。
ノードA(Primary側)
- rootで実行
/ora以下にoradataとfast_recovery_areaディレクトリを作成します。
df
cd /ora
mkdir oradata
mkdir fast_recovery_area
chown oracle:oinstall oradata fast_recovery_area
- oracleユーザで実行
/ora以下にリンクを張ることで、本来は$ORACLE_BASE以下に保存されるデータファイルの実体を/ora以下に保存するようにします。
ln -s /ora/oradata $ORACLE_BASE
ln -s /ora/fast_recovery_area $ORACLE_BASE
ls -l $ORACLE_BASE
合計 16
drwxr-xr-x. 3 oracle oinstall 4096 2月 8 21:58 2015 product
drwxrwxr-x. 19 oracle oinstall 4096 2月 8 22:00 2015 diag
drwxr-xr-x. 2 oracle oinstall 4096 2月 8 22:02 2015 checkpoints
drwxr-xr-x. 3 oracle oinstall 4096 2月 8 22:03 2015 cfgtoollogs
lrwxrwxrwx. 1 oracle oinstall 12 2月 8 22:07 2015 oradata ->
/ora/oradata
lrwxrwxrwx. 1 oracle oinstall 23 2月 8 22:08 2015
fast_recovery_area -> /ora/fast_recovery_area
ノードB(Secondary側)
ここでは何も設定変更せず、そのままデータベース作成に進みます。
Oracleデータベース作成
引き続き、以下の参考サイトの通りに、データベース作成、自動起動設定を実施
します。
参考 Server World Oracle 12c
なお、自動起動設定は[1]の環境設定のみ実施します。
Oracleの起動・停止はpacemakerで行なうため、[2]の起動スクリプトは不要です。
Oracle接続確認
- oracleユーザで実行
lsnrctl status
リスナーが動いてること。
sqlplus /nolog
SQL> conn sys as sysdba
SQL> select STATUS from v$instance;
STATUS
------------------------------------
OPEN
SQL> exit
STATUSがOPENになっていること。
Oracleデータ格納領域の設定(ノードB)
ここまでで、ノードAは/ora以下、ノードBは$ORACLE_BASE以下にデータファイルを保存したした状態でOracleデータベースが作成されました。
では、ノードBの$ORACLE_BASE以下のデータファイルを捨てて、ノードAが作成した/ora以下のデータファイルをノードBからも共有するように設定します。
まず、両ノードのOracleを停止します。
ノードA(Primary側)、ノードB(Secondary側)
- oracleユーザで実行
Oracle DB停止
sqlplus /nolog
SQL> conn sys as sysdba
SQL> shutdown
ノードB(Secondary側)
- rootで実行
crm_mon
Online: [ OraSv1 OraSv2 ]
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv1 ]
Slaves: [ OraSv2 ]
Resource Group: grpora
fs_ora (ocf::heartbeat:Filesystem): Started OraSv1
VIP1 (ocf::heartbeat:IPaddr2): Started OraSv1
ノードAをいったんstandyにして、ノードBに各リソースを切り替える。
crm node standby OraSv1
切り替わったらonlineに戻しておきます。
crm node online OraSv1
crm_mon
Online: [ OraSv1 OraSv2 ]
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv2 ]
Slaves: [ OraSv1 ]
Resource Group: grpora
fs_ora (ocf::heartbeat:Filesystem): Started OraSv2
VIP1 (ocf::heartbeat:IPaddr2): Started OraSv2
ノードBで/oraがマウントされていることを確認します。
df
- oracleユーザで実行
$ORACLE_BASE以下のデータファイルを削除し、/ora以下へのリンクに変更します。
cd $ORACLE_BASE
rm -rf oradata fast_recovery_area
ln -s /ora/oradata $ORACLE_BASE
ln -s /ora/fast_recovery_area $ORACLE_BASE
ls -ltr
合計 24
drwxr-xr-x. 3 oracle oinstall 4096 2月 8 21:58 2015 product
drwxrwxr-x. 19 oracle oinstall 4096 2月 8 22:13 2015 diag
drwxr-xr-x. 2 oracle oinstall 4096 2月 8 22:14 2015 checkpoints
drwxr-x---. 3 oracle oinstall 4096 2月 8 22:20 2015 admin
drwxr-x---. 3 oracle oinstall 4096 2月 8 22:31 2015 audit
drwxr-xr-x. 5 oracle oinstall 4096 2月 8 22:34 2015 cfgtoollogs
lrwxrwxrwx. 1 oracle oinstall 12 2月 8 23:09 2015 oradata ->
/ora/oradata
lrwxrwxrwx. 1 oracle oinstall 23 2月 8 23:09 2015
fast_recovery_area -> /ora/fast_recovery_area
Oracle DBを起動します。
sqlplus /nolog
SQL> conn sys as sysdba
SQL> startup
SQL> select STATUS from v$instance;
STATUS
------------------------------------
OPEN
これで、OracleデータファイルがDRBDで2重化されました。
ユーザ作成、テーブル作成
Oracleデータベースにユーザ、テーブルを作ってみます。
【SID】には各自作成したデータベースのSIDを入れてください。
SQL> CREATE USER hoge IDENTIFIED BY hoge_pwd;
SQL>ALTER USER hoge QUOTA 10M ON USERS;
SQL> GRANT CONNECT TO hoge;
SQL> GRANT CREATE TABLE TO hoge;
SQL> exit
sqlplus hoge/hoge_pwd@【SID】
SQL> create table hoge_tbl
(
id number,
name varchar(50),
furigana varchar(50),
primary key( id )
);
SQL> insert into hoge_tbl (id, name, furigana) values (1, 'ほげ', 'ホゲ');
SQL> commit;
SQL> select * from hoge_tbl;
ID NAME FURIGANA
-----------------------------
1 ほげ ホゲ
SQL> exit;
Oracle起動ノードを切替
ノードBでOracleを停止し、DRBDを切り替えます。
ノードBで実施
- oracleユーザで実行
Oracle DB停止
sqlplus /nolog
SQL> conn sys as sysdba
SQL> shutdown
DRBDの切り替え
crm_mon
Online: [ OraSv1 OraSv2 ]
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv2 ]
Slaves: [ OraSv1 ]
Resource Group: grpora
fs_ora (ocf::heartbeat:Filesystem): Started OraSv2
VIP1 (ocf::heartbeat:IPaddr2): Started OraSv2
ノードBをstandbyにすると、DRBDが切り替わります。
crm node standby OraSv2
切り替わった後はonlineに戻しておきます。
crm node online OraSv2
crm_mon
Online: [ OraSv1 OraSv2 ]
Master/Slave Set: ms-drbd_ora [drbd_ora]
Masters: [ OraSv1 ]
Slaves: [ OraSv2 ]
Resource Group: grpora
fs_ora (ocf::heartbeat:Filesystem): Started OraSv1
VIP1 (ocf::heartbeat:IPaddr2): Started OraSv1
ノードAで実施
- oracleユーザで実行
ノードAで/oraがマウントされていることを確認します。
df
Oracle DBを起動します。
sqlplus /nolog
SQL> conn sys as sysdba
SQL> startup
SQL> select STATUS from v$instance;
STATUS
------------------------------------
OPEN
ノードBで追加したテーブル・レコードがノードAでも取得できるか確認します。
sqlplus hoge/hoge_pwd@【SID】
SQL> select * from hoge_tbl;
ID NAME FURIGANA
-----------------------------
1 ほげ ホゲ
SQL> exit;
WebブラウザでOracle Enterprise Managerにアクセス
仮想IPでOracle EMにアクセスできることも確認しておきましょう。
https://192.168.10.100:5500/em
あとは、Oracleデータベースの起動・停止をpacemakerで管理するように設定します。
続きはこちらに。
CentOS6.6のLinux-HAでPacemakerによるOracleの起動・停止を制御する