上記のようなRAC構成をVirtualBoxで構築します
RAC(Real Application Cluster)って何だっけ?という疑問に端的に答えるなら、
複数のマシンでデータベースを構築することです
複数のマシンでつくることの利点としては、"高可用性"と"拡張性"が提供されることです
ではでは作っていきましょー
なお、備忘録に近いので、雑です
ホストOS(パソコン)
名称 | バージョン情報 | 備考 |
---|---|---|
OS | Windows 10 Pro | リソースに余裕があるパソコンが望ましい |
仮想化ソフトウェア | Oracle VM VirtualBox 6.1 | 仮想環境を構築する |
ゲストOS
仮想マシン概要
仮想マシン名 | ホスト名OS | liunxバージョン | メモリ | ディスク領域 | CPU数 | 備考 |
---|---|---|---|---|---|---|
rac1 | rac1.oracle19c.jp | Oracle Linux 7.9 | 10G | 100G | 4 | 推奨としては4GB以上 |
rac2 | rac2.oracle19c.jp | Oracle Linux 7.9 | 10G | 100G | 4 | 推奨としては4GB以上 |
dns | dns.oracle19c.jp | Oracle Linux 7.9 | 8G | 100G | 4 | 快適に操作したい為、メモリとCPUは多めにしているが、メモリ:1G、CPU:2程度で問題なし |
ネットワーク構成
ホスト名OS | 接続名 | IPアドレス | ネットワーク | 用途 | 備考 |
---|---|---|---|---|---|
rac1.oracle19c.jp | enp0s8 | 192.168.56.101 | パブリック | 外部通信 | |
enp0s9 | 192.168.100.101 | プライベート | ノード間通信 | ||
enp0s10 | 192.168.200.101 | プライベート | ノード間通信 | ||
rac2.oracle19c.jp | enp0s8 | 192.168.56.102 | パブリック | 外部通信 | |
enp0s9 | 192.168.100.102 | プライベート | ノード間通信 | ||
enp0s10 | 192.168.200.102 | プライベート | ノード間通信 | ||
dns.oracle19c.jp | enp0s8 | 192.168.56.254 | パブリック | 外部通信 |
scan構成
SCAN名 | IPアドレス | 用途 |
---|---|---|
scan.oracle19c.jp | 192.168.56.201 | SCAN用VIP |
192.168.56.202 | SCAN用VIP | |
192.168.56.203 | SCAN用VIP |
仮想マシン作成
まずはコピー元(クローン元)用の仮想マシン(ゲストOS)を1つ作成します
そもそもゲストOSどうやって作るんだっけ?の人は以下記事を参考に構築下さい
※OSの設定完了まで行って下さい
※ディスクサイズは一度設定したら変更が手間なので100Gで作っておくこと推奨
※メモリ・CPUは後で容易に変更可能
https://qiita.com/FiftyStorm/items/9d4c2142b7aa0c212afc
ゲストOS作成完了しましたか?
できたらそのゲストOSをクローンして、"rac1"、"rac2"、"dns"を作成しましょー
コピーしたい仮想マシンを選択した上で"クローン"ボタンを押下
"名前"を入力、"MACアドレスのポリシー"は"すべてのネットワークアダプターでMACアドレスを生成"を選択
そして"次へ"を押下
VirtualBoxの諸々の設定を実施
"rac1","rac2"を以下の画像のように設定をする
※OSはシャッドダウンしないと設定できません
※"rac1","rac2"の内部ネットワークのアダプター3の名前は同じ名前にして下さい
※"rac1","rac2"の内部ネットワークのアダプター4の名前は同じ名前にして下さい
共有フォルダ設定
"rac1"のみを以下の画像のように設定をする
※"Oracle Grid Infrastructure"と"Oracle Database"のモジュール配置先
共有ストレージ追加
仮想マシン(rac1、rac2)で使用可能な共有ストレージを追加
下記の内容の通りホストOS上に仮想ディスクを作成し、ゲストOSに対応させる
配置先(ホストOS) | 仮想ディスク名(ホストOS) | デバイス名(ゲストOS) | サイズ |
---|---|---|---|
D:\VBox\SharedDisk | SharedDisk1.vdi | sdb | 50G |
SharedDisk2.vdi | sdc | 50G | |
SharedDisk3.vdi | sdd | 50G | |
SharedDisk4.vdi | sde | 50G | |
SharedDisk5.vdi | sdf | 50G | |
SharedDisk6.vdi | sdg | 50G |
"rac1"で仮想ディスクの作成と設定を行い、"rac2"では設定のみ行う
"rac1"のストレージ設定から"ハードディスクの追加"を押下
"作成"を押下
"VDI"を選択し"次へ"を押下
"固定サイズ"を選択し"次へ"を押下
"D:\VirtualBox\SharedDisk\SharedDisk1.vdi"と"50.00GB"を入力し"作成"を押下
同様の手順で以下を作成
D:\VirtualBox\SharedDisk\SharedDisk2.vdi
D:\VirtualBox\SharedDisk\SharedDisk3.vdi
D:\VirtualBox\SharedDisk\SharedDisk4.vdi
D:\VirtualBox\SharedDisk\SharedDisk5.vdi
D:\VirtualBox\SharedDisk\SharedDisk6.vdi
仮想メディアマネージャーを選択
"SharedDisk1.vdi"に対して"タイプ:共有可能"を選択し、"適用"を押下
同様の手順で以下に対しても"タイプ:共有可能"を選択し、"適用"を押下
SharedDisk2.vdi
SharedDisk3.vdi
SharedDisk4.vdi
SharedDisk5.vdi
SharedDisk6.vdi
"rac1"のストレージ設定で"共有可能"に変更されていることを確認し、変更を反映させるため"OK"を押下
"rac2"のハードディスクで以下を選択する
SharedDisk1.vdi
SharedDisk2.vdi
SharedDisk3.vdi
SharedDisk4.vdi
SharedDisk5.vdi
SharedDisk6.vdi
"rac2"のストレージ設定から"ハードディスクの追加"を押下
"SharedDisk1.vdi"~"SharedDisk6.vdi"を選択し、"選択"を押下
※複数選択できません
"OK"を押下
DNSサーバー設定
仮想マシン(dns)にて、DNSサーバーの設定を行います
作業は、rootユーザーで行います
ホスト名OS | デバイス名 | メソッド | アドレス | ネットマスク | ゲートウェイ | 自動接続 | 用途 |
---|---|---|---|---|---|---|---|
dns.oracle19c.jp | enp0s8 | 手動 | 192.168.56.254 | 255.255.255.0 | - | ON | DNSサーバー |
ホスト名を変更する
vi /etc/hostname
dns.oracle19c.jp
nmcliコマンドでenp0s8のネットワーク設定を変更する
nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.254/24 connection.autoconnect yes
設定内容を確認
nmcli d show enp0s8
GENERAL.DEVICE: enp0s8
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 08:00:27:9B:87:C8
GENERAL.MTU: 1500
GENERAL.STATE: 100 (接続済み)
GENERAL.CONNECTION: enp0s8
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER: オン
IP4.ADDRESS[1]: 192.168.56.254/24
IP4.GATEWAY: --
IP4.ROUTE[1]: dst = 192.168.56.0/24, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]: fe80::c986:31cd:7d66:d7c8/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 101
IP6.ROUTE[2]: dst = ff00::/8, nh = ::, mt = 256, table=255
hostsファイルを修正
vi /etc/hosts
以下を追記
192.168.56.101 rac1.oracle19c.jp rac1
192.168.56.102 rac2.oracle19c.jp rac2
192.168.56.111 rac1-vip.oracle19c.jp rac1-vip
192.168.56.112 rac2-vip.oracle19c.jp rac2-vip
192.168.56.201 scan.oracle19c.jp scan
192.168.56.202 scan.oracle19c.jp scan
192.168.56.203 scan.oracle19c.jp scan
192.168.56.254 dns.oracle19c.jp dns
enp0s3は不要なので、自動起動OFFにして、停止
nmcli c modify enp0s3 connection.autoconnect no
nmcli c down enp0s3
設定反映の為、再起動
reboot
dnsmasq を使用して DNS サーバーを構築
自動起動を有効化して、dnsmasqを起動
また、再起動します
systemctl enable dnsmasq.service
systemctl start dnsmasq.service
reboot
常に起動していることと自動起動が有効化されていることを確認
[root@dns ~]# systemctl status dnsmasq.service
● dnsmasq.service - DNS caching server.
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
Active: active (running) since 水 2021-07-14 21:21:18 JST; 1min 29s ago
Main PID: 1234 (dnsmasq)
Tasks: 1
CGroup: /system.slice/dnsmasq.service
└─1234 /usr/sbin/dnsmasq -k
7月 14 21:21:18 dns.oracle19c.jp systemd[1]: Started DNS caching server..
7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: started, version 2.76 cachesize 150
7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth nettlehash no-DNSSEC ...ect inotify
7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: no servers found in /etc/resolv.conf, will retry
7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: read /etc/hosts - 10 addresses
Hint: Some lines were ellipsized, use -l to show in full.
Oracle Preinstallation RPMのインストール
rac1、rac2にて、rootユーザーで作業を行う
以下を実行
yum install oracle-database-preinstall-19c
oracle-database-preinstall-19c-verify を実行
export LANG=C
oracle-database-preinstall-19c-verify
OSユーザー構成
rac1、rac2にて、rootユーザーで作業を行う
必要な OS グループを作成
※oinstall、dba、oper、backupdba、dgdba、kmdba、racdba は「Oracle Preinstallation RPM」で作成されている
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
gridユーザー作成と oracleユーザー修正
useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,racdba grid
usermod -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle
oracleユーザーと gridユーザーのパスワードを設定
passwd oracle
passwd grid
必要なディレクトリを作成
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01
oracleユーザーとgridユーザーの.bash_profileを設定
# vi /home/oracle/.bash_profile
~下記を追記~
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
# vi /home/grid/.bash_profile
~下記を追記~
umask 022
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
oracleユーザーとgridユーザーのリソース制限を設定
# vi /etc/security/limits.conf
~下記を追記~
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
ログインしたときにリソース制限が有効になるように、PAM認証の設定ファイルを修正
# vi /etc/pam.d/login
~下記を追記~
session required pam_limits.so
システム時刻同期設定
chrony.confをリネーム
mv /etc/chrony.conf /etc/chrony.conf.org
ネットワーク構成
ホスト名OS | デバイス名 | IPアドレス | メソッド | ネットマスク | ゲートウェイ | 自動接続 | DNSサーバー | 用途 |
---|---|---|---|---|---|---|---|---|
rac1.oracle19c.jp | enp0s8 | 192.168.56.101 | 手動 | 255.255.255.0 | - | ON | 192.168.56.254 | 外部通信 |
enp0s9 | 192.168.100.101 | 手動 | 255.255.255.0 | - | ON | - | ノード間通信 | |
enp0s10 | 192.168.200.101 | 手動 | 255.255.255.0 | - | ON | - | ノード間通信 | |
rac2.oracle19c.jp | enp0s8 | 192.168.56.102 | 手動 | 255.255.255.0 | - | ON | 192.168.56.254 | 外部通信 |
enp0s9 | 192.168.100.102 | 手動 | 255.255.255.0 | - | ON | - | ノード間通信 | |
enp0s10 | 192.168.200.102 | 手動 | 255.255.255.0 | - | ON | - | ノード間通信 |
rac1用のnmcliコマンド
nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.101/24 ipv4.dns 192.168.56.254 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s9 con-name enp0s9 ipv4.method manual ipv4.addresses 192.168.100.101/24 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s10 con-name enp0s10 ipv4.method manual ipv4.addresses 192.168.200.101/24 connection.autoconnect yes
rac2用のnmcliコマンド
nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.102/24 ipv4.dns 192.168.56.254 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s9 con-name enp0s9 ipv4.method manual ipv4.addresses 192.168.100.102/24 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s10 con-name enp0s10 ipv4.method manual ipv4.addresses 192.168.200.102/24 connection.autoconnect yes
設定を確認したい場合は以下コマンドを実行
nmcli c show
nmcli d show "デバイス名"
複数プライベート・ネットワークを使用する場合、rp_filterパラメータの設定が必要
2(緩慢モード)に設定
※rac1,rac2共通
# vi /etc/sysctl.d/99-sysctl.conf
~下記を記載~
net.ipv4.conf.enp0s9.rp_filter = 2
net.ipv4.conf.enp0s10.rp_filter = 2
変更した値を反映
※rac1,rac2共通
sysctl --system
hosts ファイルを修正
※rac1,rac2共通
# vi /etc/hosts
~下記を記載~
192.168.56.101 rac1.oracle19c.jp rac1
192.168.56.102 rac2.oracle19c.jp rac2
192.168.56.111 rac1-vip.oracle19c.jp rac1-vip
192.168.56.112 rac2-vip.oracle19c.jp rac2-vip
enp0s3は不要なので、自動起動OFFにして、停止
※rac1,rac2共通
nmcli c modify enp0s3 connection.autoconnect no
nmcli c down enp0s3
Oracle Grid Infrastructureのインストール
"rac1"を起動し、gridユーザーでログイン
共有フォルダー(前述したvirtualboxの設定が必要)をマウントするので、rootユーザーに切り替え
マウント先ディレクトリを作成して、共有フォルダーをマウント
mkdir /opt/image
mount -t vboxsf oracle19c /opt/image
Oracleソフトウェアが配置されているディレクトリに移動し、ファイルを確認
gridユーザーに戻る
cd /opt/image
ll
※virtualboxで共有フォルダで設定したホスト(パソコン)のディレクトリ(D:\Software\oracle19c
)に"LINUX.X64_193000_db_home.zip"と"LINUX.X64_193000_grid_home.zip"を配置しておく必要あり
※zipファイルは以下からダウンロード可能(オラクルID必要)
https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html
"rac1"にて、gridユーザーでインストール開始
env|grep ORA
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/19.3.0/grid
cd $ORACLE_HOME
pwd
/u01/app/19.3.0/grid
unzip /opt/image/LINUX.X64_193000_grid_home.zip
セットアップ起動
/u01/app/19.3.0/grid/gridSetup.sh
以下の画像の通り、設定していく
「修正および再チェック」をクリック
生成される修正スクリプトを実行する
スワップサイズとRPMは今回は無視する為、"すべて無視"をチェック
Oracle Databaseのインストール
"rac1"にて、oracleユーザーでインストール
env|grep ORA
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
cd $ORACLE_HOME
pwd
/u01/app/oracle/product/19.3.0/dbhome_1
unzip /opt/image/LINUX.X64_193000_db_home.zip
インストーラー起動
./runInstaller
以下の画像の通り実行していく
ASMディスク・グループ作成
gridユーザーでASMCAを起動
/u01/app/19.3.0/grid/bin/asmca
以下の画像の通り実行していく
データベース作成
oracleユーザーでDBCAを起動
/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbca
以下の画像の通り設定していく
環境変数の設定
gridユーザーとoracleユーザーの環境変数を設定
"rac1"、"rac2"それぞれで設定
tmpディレクトリ作成
su - grid
mkdir $HOME/tmp
PMONより、ORACLE_SIDに設定する値を確認
ps -ef | grep pmon
grid 4585 1 0 14:44 ? 00:00:00 asm_pmon_+ASM1
oracle 8845 1 0 17:05 ? 00:00:00 ora_pmon_orcl_2
grid 22001 20168 0 17:30 pts/0 00:00:00 grep --color=auto pmon
.bash_profileを修正
vi .bash_profile
~下記を追記~
export TMPDIR=$HOME/tmp
export TEMP=$HOME/tmp
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=JAPANESE_JAPAN.UTF8
export LANG=ja_JP.UTF-8
export ORACLE_SID=+ASM1
.bash_profileの修正を反映
. .bash_profile
tmpディレクトリ作成
su - oracle
mkdir $HOME/tmp
PMONより、ORACLE_SIDに設定する値を確認
$ ps -ef | grep pmon
grid 4585 1 0 14:44 ? 00:00:00 asm_pmon_+ASM1
oracle 8845 1 0 17:05 ? 00:00:00 ora_pmon_orcl_2
grid 22001 20168 0 17:30 pts/0 00:00:00 grep --color=auto pmon
.bash_profileを修正
$ vi .bash_profile
~下記を追記~
export TMPDIR=$HOME/tmp
export TEMP=$HOME/tmp
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=JAPANESE_JAPAN.UTF8
export LANG=ja_JP.UTF-8
export ORACLE_SID=orcl_2
.bash_profileの修正を反映
同様にもう一方のノードでも環境変数の設定を行う
データベースの稼働確認
以下の状態なら問題なし
接続
sqlplus / as sysdba
show con_name
CON_NAME
------------------------------
CDB$ROOT
SELECT inst_id, con_id, name, open_mode FROM gv$database ORDER BY inst_id, con_id
INST_ID CON_ID NAME OPEN_MODE
---------- ---------- -------------------- ------------
1 0 ORCL READ WRITE
2 0 ORCL READ WRITE
SELECT inst_id, con_id, instance_name, status FROM gv$instance ORDER BY inst_id, con_id;
INST_ID CON_ID INSTANCE_NAME STATUS
---------- ---------- -------------------- ---------
1 0 orcl_1 OPEN
2 0 orcl_2 OPEN
SELECT inst_id, con_id, name, open_mode FROM gv$pdbs ORDER BY inst_id, con_id;
INST_ID CON_ID NAME OPEN_MODE
---------- ---------- -------------------- ----------------
1 2 PDB$SEED READ ONLY
1 3 PDB1 READ WRITE
2 2 PDB$SEED READ ONLY
2 3 PDB1 READ WRITE
SCANを使用したPDB1への接続確認
sqlplus system/[PASSWORD]@scan.oracle19c.jp:1521/pdb1.oracle19c.jp
SCANを使用したORCLへの接続確認
$ sqlplus system/[PASSWORD]@scan.oracle19c.jp:1521/orcl.oracle19c.jp
コマンド集
DBの停止(全ノードのリソース操作) ※rac1(root)で実行
/u01/app/19.3.0/grid/bin/srvctl stop database -d ORCL
CRSの停止(全ノードのリソース操作)※rac1(root)で実行
/u01/app/19.3.0/grid/bin/crsctl stop cluster -all
CRSリソースの状態確認(全ノードのリソース操作) ※rac1(root)で実行
/u01/app/19.3.0/grid/bin/crsctl stat res -t
CRSリソースの状態確認 ※rac1&rac2(root)で実行
/u01/app/19.3.0/grid/bin/crsctl check crs
crsが自動的に起動するようになっているか確認
cat /etc/oracle/scls_scr/rac1/root/crsstart
データベース起動&状態確認 ※rac1(root)で実施
/u01/app/19.3.0/grid/bin/srvctl start database -d ORCL
/u01/app/19.3.0/grid/bin/crsctl stat res -t
PDB起動
[rac1]
alter pluggable database all open;
[rac2]
shutdown immediate ←うまく起動しなかったので、一度落とした
startup
alter pluggable database all open;
その他
set lin 1000
set pages 100
col name for a20
SELECT inst_id, con_id, name, open_mode FROM gv$pdbs ORDER BY inst_id, con_id;
CREATE TABLE test (test VARCHAR2(10) NOT NULL);
usermod -aG wheel ユーザー名
systemctl disable avahi-daemon.service
systemctl stop avahi-daemon.service
参考サイト
Oracle LinuxにOracle Real Application Clusters 19c Enterprise Editionをインストールする
https://dbalone.com/oracle-rac-19c-ee-install
Oracle VM VirtualBox を用いた Oracle Real Application Clusters (RAC) 12c Release 1 環境の構築
https://www.oracle.com/a/tech/docs/raconvbox-db12101onol6u4-2080481-ja.pdf