DBサーバ構成
全体構成
オンラインWebシステムでは「アプリケーション・サーバの処理能力 < DBサーバの処理能力」というのが一般的じゃないかと思います。構築予定のアプリケーション・サーバは2台なのでDBサーバも2台で十分じゃないの? というところですがノード追加やDBサービスの動作検証をいろいろ試したいのでDBサーバは3台構成です。

ネットワーク
ネットワーク/ポートグループ
Oracle RAC環境ではサービス・ネットワークにあたるパブリック・ネットワークとノード間の通信(インターコネクト)用のプライベート・ネットワークが必要です。また、Data GuardのREDO転送に使用するネットワークには管理ネットワークを利用します。
【DBサーバ・ネットワーク一覧】
ネットワーク | 用途 | ポートグループ | ネットワーク・アドレス |
管理ネットワーク | 管理用/DRサイトへのREDO転送 | Production MG Pub Network | 172.16.10.0/24 |
DBネットワーク (パブリック・ネットワーク) | DB接続 | Production DB Pub Network | 192.168.30.0/24 |
インターコネクト (プライベート・ネットワーク) | RACノード間通信 | Production DB Prv Network | 10.10.20.0/24 |
ホスト名/IPアドレス
RAC環境ではDBサーバのIPアドレス、DBインスタンス接続用の仮想IPアドレスに加えて3個以上の単一クライアント・アクセス(SCAN)用IPアドレスが必要です。
DBサーバの各ネットワーク・インターフェースに割り当てるホスト名とIPアドレスはこんな感じで行こうと思います。
【DBサーバ・ホスト名/IPアドレス一覧】
ネットワーク | DBサーバ#1 | DBサーバ#2 | DBサーバ#3 |
ホスト名(system) | prsdb01.exsample.lan | prsdb02.exsample.lan | prsdb03.exsample.lan |
管理ネットワーク | prsdb01-mgt.exsample.lan 172.16.10.21/24 | prsdb02-mgt.exsample.lan 172.16.10.22/24 | prsdb03-mgt.exsample.lan 172.16.10.23/24 |
DBネットワーク | prsdb01.exsample.lan 192.168.30.21/24 | prsdb02.exsample.lan 192.168.30.22/24 | prsdb03.exsample.lan 192.168.30.23/24 |
DBネットワーク | prsdb01-vip.exsample.lan 192.168.30.31/24 | prsdb02-vip.exsample.lan 192.168.30.32/24 | prsdb03-vip.exsample.lan 192.168.30.33/24 |
インターコネクト | prsdb01-prv.exsample.lan 10.10.20.1/24 | prsdb02-prv.exsample.lan 10.10.20.2/24 | prsdb03-prv.exsample.lan 10.10.20.3/24 |
【Oracle RAC環境SCAN IPアドレス】
ネットワーク | SCAN | IPアドレス |
DBネットワーク | prsscan.exsample.lan | 192.168.30.121/24 192.168.30.122/24 192.168.30.123/24 |
名前解決
DNSを使用せずhostsファイルのみを使用してRACを構成することも可能ですが今回はSCANの名前解決にDNS、SCAN以外の名前解決にhostファイルを使用します。なお、DNSにSCANの名前解決を任せる場合はDBサーバのDNS登録も必要です。
ハードウェア
Oracle 21c「Grid Infrastructureインストレーションおよびアップグレード・ガイド」のインストール・チェックリストに記載されたサーバー構成要件を参考にDBサーバには以下のリソースを割り当てます。
【DBサーバ・割り当てリソース】
設定項目 | アップグレードガイド・ サーバー構成要件 | 本番DBサーバ設定値 |
CPU | – | 4 |
メモリ(RAM) | 8 GB | 12 GiB |
SWAP | RAM 16GBまでRAMと同じ | 12 GiB |
OS用ローカル・ディスク | – | 100 GB |
Oracle製品用ローカル・ディスク | Grid Infra 12 GB + Oracle DB 10GB | 50 GiB |
RAC/DB構成
ASMディスク・グループ
ある程度以上の規模のシステムではストレージの高速バックアップ機能(オールフラッシュ・ストレージではスナップショット)を使用してボリューム・セット単位(DBから見ればASMディスク・グループ単位)でDBのバックアップを取得するケースが多いと思います。
今回構築するシステムもトレージのスナップショットを使用したボリューム・セット単位のバックアップを前提にASMのディスク・グループを構成します。
【ASMディスク・グループ一覧】
ディスク・グループ | 用途 | ASMディスク(仮想ディスク) | 冗長性 | 合計サイズ |
DG01 | 投票ディスク&OCR格納用 | storage/prsdb/disk001.vmdk(3 GB) storage/prsdb/disk002.vmdk(3 GB) storage/prsdb/disk003.vmdk(3 GB) | 標準 | 9GB |
DG02 | アーカイブログ格納用 | storage/prsdb/disk011.vmdk(10 GB) storage/prsdb/disk012.vmdk(10 GB) | 外部 | 20 GB |
DG11 | REDOログ、一時ファイル格納用 | storage/prsdb/disk101.vmdk(10 GB) storage/prsdb/disk102.vmdk(10 GB) | 外部 | 20 GB |
DG21 | データファイル格納用 | storage/prsdb/disk201.vmdk(30 GB) storage/prsdb/disk202.vmdk(30 GB) | 外部 | 60 GB |
投票ディスク&OCR格納用ディスク・グループ
外部冗長性のディスク・グループでは単一の投票ディスク、標準冗長性のディスク・グループでは最低3個の投票ディスクが作られます。万一投票ディスクが破損するとクラスタ全体が停止してしまうことから投票ディスク、OCR及びメタデータは標準冗長性のディスク・グループに格納します。
なお、標準冗長のディスク・グループを構成するASMディスクの最低本数は2本ですが、投票ディスクを格納する場合は最低3本のASMディスクが必要です。
アーカイブログ格納用ディスク・グループ
RAC環境のアーカイブログ出力先はすべてのノードからアクセス可能な場所という制約があります。ファイル操作という面では管理サーバのNFSにアーカイブログを出力したいところですが、NFSやネットワークの障害でアーカイブログが出力できなくなるとDB処理も停止してしまいます。そこでアーカイブログの出力先はASMディスク・グループ、アーカイブログ・バックアップの保管場所を管理サーバのNFSとします。
REDOログ、一時ファイル格納用ディスク・グループ
オンライン・バックアップを使用したDBバックアップにリストアの対象外である一時ファイルやREDOログを含めることにはデメリットしかないのでデータファイル格納用のディスク・グループとREDOログ・一時ファイル格納用のディスク・グループを分けて構成します。
データファイル格納用ディスク・グループ
「Oracle Automatic Storage Management 管理者ガイド 21c」によるとディスク・グループあたりの推奨ディスク本数は「アクティブなI/Oパスの少なくとも4倍」となっています。この本数には冗長性その他の前提や具体的な根拠が書かれておらず、HDDのI/O負荷分散を意識したルールのようにも思えます。
シークに伴う待機がなくデータの物理配置も固定しない(ストレージ内のどのSSDに書き込まれるか聞かっていない、一度書き込まれてもデータの変更があれば場所が変わる)オールフラッシュ・ストレージでASMディスクを分けることにどれほど効果があるかが正直疑問だったのです念のためChatGptさんにそこらへんのところを尋ねてみました。
するとChatGptさん曰く、オールフラッシュ・ストレージでもI/OキューはLU単位に持たせているケースが多くキュー分散効果あり、製品によっては優先コントローラを明示的にLUに割り当てることができる(もちろんユーザが指定できない製品もあり)、I/Oパス分散の効果は見込めるとのことでした。
結論を言うとHDDほどではないがオールフラッシュ・ストレージでもASMディスク分散は効果あり、ただし上に挙げた「4倍ルール」はHDDストレージの時ほど厳密に守る必要はなくある程度柔軟性をもたせてOKとのことでした。というかけでデータファイル格納用ディスク・グループを始めとする各ディスク・グループはすべて2本(投票ディスク&OCR格納用は3本)のASMディスクで構成とします。
【補足】
なお、上に書いた複数LUを使用したディスク・グループ構成の効果は本物のオールフラッシュ・ストレージを使用した場合です。今回構築する環境ではストレージ側ではなく仮想マシン側にディスク共有を設定したSCSIコントローラ 1個を持たせるだけ(最大4個まで実装できるがそこまでやりたくない)。またESXiの仕様上仮想マシンにマルチパスを構成することもできないのでまあ、効果はまったくないかと思います。それでも複数LUでのディスク・グループ構成としたのはなるべく本物っぽくやりたいからということで。
OSユーザ及びグループ
Grid Infrastructure及びOracle Databaseで使用するOSグループ及びOSユーザは以下の通りとします。
【Oracle用OSグループ一覧】
グループ | ID | 用途 |
oinstall | 1100 | Oracle製品所有者 |
asmadmin | 1101 | Oracle ASM管理者グループ |
asmdba | 1102 | ASM用OS DBAグループ |
racdba | 1103 | OS RAC DBAグループ |
dba | 1104 | Oracle DB管理者グループ |
【Oracle用OSユーザ一覧】
ユーザ名 | ID | プライマリ・グループ | 所属グループ | 用途 |
grid | 1100 | oinstall | asmadmin,asmdba,racdba,dba | Grid Infrastructureバイナリ所有者 |
oracle | 1101 | oinstall | asmdba,racdba,dba | Oracle Databaseバイナリ所有者 |
DBサービス
DB名及びPDB名
非常に残念なことですがOracle 20c以降、非マルチテナント構成(従来のシングル構成)はサポート対象外となりました。本番DBはマルチテナントで構成します。本番DB名及び本番PDB名は以下の通りです。
【本番DB名・本番PDB名】
DB | DB名 |
本番DB(Production Database) | PRDB |
本番PDB(Production Pluggable Database) | PRPDB |
接続サービス
DB構築時に作成されるデフォルトの接続サービスは管理用に使用するものでありプロパティの変更もできず、「Real Application Clusters管理およびデプロイメント・ガイド」でもRAC環境でアプリケーションのDB接続には使用しないように明記されていることから、本番DBのアプリケーション接続用にDBサービスを追加します。
【接続サービス一覧】
サービス名 | 用途 |
online_srv | オンライン・アプリケーション接続用 |
batch_srv | バッチ・アプリケーション接続用 |
ちなみにデフォルト・サービスを使用したDB接続のフェイルオーバー設定はインスタンスが停止した場合は機能しますが、インスタンスが起動している状態でPDBが停止した場合は機能せず、障害ノードに再接続しようとしてエラーになったりします。
ディスク・レイアウト
本番DBのディスク・レイアウトは以下の通りです。ストレージ機能でDBのオンライン・バックアップを行う場合はディスク・グループ DG21のASMディスク(disk201、disk202)を対象にスナップショットを取得します。

その他、細かい事項については構築の各段階に記述ことにして、まずはDBサーバの構築から
参考情報
「DBサーバ構築」を書くにあたり、以下の情報を参考にさせていただきました。
【Device Mapper Multipath】
Device Mapper Multipath の設定 | Red Hat Product Documentation
【Grid Infrastructure】
Oracle Grid Infrastructure Grid Infrastructureインストレーションおよびアップグレード・ガイド 21c for Linux
Oracle ASMストレージに関する考慮事項の確認
Oracle Real Application Clusters Real Application Clusters管理およびデプロイメント・ガイド, 21c
動的データベース・サービスによるワークロード管理
Oracle Real Application Clusters管理およびデプロイメント・ガイド12c リリース1 (12.1)
Oracle Databaseデータベース・インストレーション・ガイド, 21c for Linux
avahi-daemon サービスとは何ですか? これを無効にすることはできますか? – Red Hat Customer Portal
仮想化環境での時間管理入門
【HugePages計算スクリプト】
hugepages_settings.sh · GitHub
また、このページを書くにあたり、ChatGptさんに大変助けていただきました。具体的には以下の事項でご支援いただいています。
- オールフラッシュ・ストレージのデータ管理及びアクセス制御の仕様的傾向
- オールフラッシュ・ストレージ主要製品のアクセス制御方法
- ESXi ゲストOSの仮想ディスクを対象としたストレージ・スナップショットのシミュレート
- 投票ディスク格納ディスク・グループの冗長性
- サーバ、クライアントのDB接続役割分担とサーバ・サイドの設定
厚くお礼申し上げます。
コメント