LoginSignup
12
12

More than 5 years have passed since last update.

CentOS6.6のLinux-HAでDRBD上にOracleデータベースを構築する

Last updated at Posted at 2015-02-08

前置き

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

Linux-HA Oracle構成.png

使ったもの

CentOS 6.6
drbd 8.4
pacemaker 1.1.12
corosync 2.3.4
Oracle 12c Standard Edition One

参考記事

以下の記事を参考にいたしました。
大変勉強になりました。本当にありがとうございます。

CentOS6.5でDRBD8.4を使ってみる

Server World Oracle 12c

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の起動・停止を制御する

12
12
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
12
12