はじめに
DB技術本部のDB運用技術チームの齋です。
前回の記事で、「ロードバランシング」を紹介しました。
今回は、OracleRAC構築を行う際に知ってもらいたいもう一つの項目として「サービス接続」について紹介しようと思います。
併せてSCANリスナーについても記載します。SCANリスナーは「接続リスエストをリダイレクト」する機能ですが、負荷分散と通常のリスナーを混同している方がいるため、まとめていきたいと思います。
目次
SCANリスナーとは SCANリスナーのまとめ データベース・サービス接続 |
SCANリスナーとは
SCAN概要
Oracle Database RAC 11g R2以降では、各ノードにOracle Grid Infrastructure(GI)が管理するローカル・リスナー以外に、
クラスタリソースとして、Single Client Access Name(SCAN)リスナーと、SCANリスナーに対応するSCAN Virtual IPアドレス(SCAN VIP)がセットでクラスタのいずれかのノードで起動しています。
SCANリスナーとSCAN VIPは可用性のために複数起動しています。複数あるSCAN VIPのIPアドレスはDNSで1つのホスト名に対応付けられます。
もしSCANリスナーが起動しているノードで障害が発生すると、別の正常ノードにSCANリスナーがSCAN VIPとともにフェイルオーバーします。
SCANリスナーを利用する構成では、Oracleインスタンスはローカル・ノードのOracleリスナーに担当サービスを登録するとともに、SCANリスナーにも登録します。
そのため、SCANリスナーはRACの全インスタンスがどのサービスを担当しているかを把握しています。
※SCANを利用する場合には、「remote_listener」にSCANリスナー名(SCANVIP)を指定する。 通常、「local_listener」は、インスタンス起動後に動的に設定される。
SCANリスナーの役割
●「リダイレクト」と「セッション確立」の役割が分かれている。
●「SCANリスナー」は「リダイレクト専用」
●「ローカル・リスナー」は「セッションの確立」
●Oracleクライアントから複数あるSCAN VIPへの振り分けは、DNS側の機能である「DNSラウンドロビン」で行う。
・DNSラウンドロビン
SCANを利用するためには、 DNSで1つのSCANホスト名に複数のSCAN VIPを対応づける必要があります。
この機能は、DNSの機能で「DNSラウンドロビン」と言います。
SCANリスナーのまとめ
●DNS側の機能のDNSラウンドロビンで、複数のSCAN VIPのいずれかに接続
●SCANリスナーは、リダイレクトを行う機能
●セッション確立は、通常のリスナー(ローカル・リスナー)が行う
●「local_listener」、「remote_listener」の初期化パラメータを設定しているので
サーバサイド・ロード・バランシングが有効になる。
データベース・サービス接続
データベースサービス接続の位置づけ
Oracleクライアントはデータベース・サービス名を指定して接続する
• シングル・インスタンスもRACも同じ
• RACの複数ノードであることをデータベース・サービスが仮想化
デフォルトで存在するサービス
サービスごとにワークロードが区別されている
• V$SERVICE_STATS など
• Oracleリスナーに登録されるサービスとは別に、内部的なサービスがある
• データ・ディクショナリ上でも区別
サービス名 | Oracleリスナーへの登録 | データ・ディクショナリ |
追加したサービス | 登録される | ワークロード分別 |
DB_UNIQUE_NAME(と同じ値) データベ ース名を基にしたデフォルト・サービス |
登録される | ワークロード分別 |
SYS$USERS サービス名を持たないセッション のサービス |
登録されない | ワークロード分別 |
SYS$BACKGROUND バックグラウンド・プロ セスが属するサービス |
登録されない | ワークロード分別 |
Oracleクライアントからの接続
Oracleクライアントからの接続
• RACへの接続記述子は基本的にシングル・インスタンスへの接続と同じ
• Oracleリスナーのホスト名とポート番号を指定
• データベース・サービス名を指定
データベース・サービス接続例
データベース・サービスの利点
サービス毎(用途毎)に使用ノード(インスタンス)を分けることで、OSリソース(CPU、メモリ)を有効活用可能。
業務の用途毎にサービスを分けることにより、Database ResourceManagerでのリソース制御やAWR、EMCCを用いたパフォーマンス分析が容易となる。
・Database ResourceManagerでの利点
※Resource ManagerはEnterprise Editionで利用可能な機能
ResourceManagerで用途毎にリソース制御をしたい場合に、色々な指定の方法がありますが、DBインフラ観点でいうと、データベース・サービス名で絞っておくと設定が楽です。
※ユーザ名などは、入れ替えの可能性が高く、都度メンテナンスしなければならないので、運用管理が煩雑になりやすい。
■リソース制御可能な単位例 Oracle Databaseのユーザー名 Oracle Databaseのサービス名 クライアントが接続元にするコンピュータの名 ログインしたクライアントのオペレーティング・システムのユーザー名 サーバーにログインするために使用したクライアント・プログラムの名 等々 |
Resource Managerにサービス名を登録する例
begin
dbms_resource_manager.set_consumer_group_mapping (
attribute => DBMS_RESOURCE_MANAGER.SERVICE_NAME,
value => 'SERVICE_1',
consumer_group => 'GROUP1');
end;
/begin
dbms_resource_manager.set_consumer_group_mapping (
attribute => DBMS_RESOURCE_MANAGER.SERVICE_NAME,
value => 'AP',
consumer_group => 'GROUP2');
end;
/
・パフォーマンス分析での利点
ワークロード分析が楽になる。前項目で記載したとおり、サービス毎にワークロードが別れるので、以下の例の通り、サービス単位という大きな枠で評価可能
AWRレポート抜粋
Service Statistics DB/Inst: ORCL/orcl1 Snaps: 6948-6949
-> ordered by DB TimePhysical Logical
Service Name DB Time (s) DB CPU (s) Reads (K) Reads (K)
---------------------------- ------------ ------------ ------------ ------------
SERVICE_1 4,192 2,433 5,566 445,638
SYS$USERS 5 5 0 22
SYS$BACKGROUND 1 1 1 2,266
orcl 0 0 0 0
------------------------------------------------------Service Wait Class Stats DB/Inst: ORCL/orcl1 Snaps: 6948-6949
-> Wait Class info for services in the Service Statistics section.
-> Total Waits and Time Waited displayed for the following wait
classes: User I/O, Concurrency, Administrative, Network
-> Time Waited (Wt Time) in secondsService Name
----------------------------------------------------------------
User I/O User I/O Concurcy Concurcy Admin Admin Network Network
Total Wts Wt Time Total Wts Wt Time Total Wts Wt Time Total Wts Wt Time
--------- --------- --------- --------- --------- --------- --------- ---------
SERVICE_1
5570695 1565 715 0 0 0 6158168 6
SYS$USERS
761 0 427 0 0 0 1695 0
SYS$BACKGROUND
7281 5 8546 0 0 0 0 0
orcl
0 0 0 0 0 0 0 0
------------------------------------------------------
以上となります。お役に立てれば幸いです。