この章では、Oracle Exadata Database MachineとOracle Big Data Applianceの間での通信の最適化に関する情報を提供します。ここでは、インフィニバンド単体、あるいはSDP overインフィニバンドを使用してOracle Big Data Applianceと通信するようOracle Exadata Database Machineを構成する方法を説明しています。
この章は次の項で構成されています:
Oracle Exadata Database MachineとOracle Big Data Applianceはデフォルトではイーサネットを使用しますが、通常はインフィニバンド・ネットワークでも接続されます。イーサネットは、通信速度がインフィニバンドよりはるかに落ちます。Oracle Exadata Database Machineはインフィニバンドを使用して通信するよう構成すると、Oracle Big Data Applianceからデータをこれまでより何倍も速く取り込むことができるようになります。
さらに、Oracle Big Data Appliance上で動作してデータをOracle Databaseへプッシュするクライアント・アプリケーションは、Sockets Direct Protocol (SDP)を使用することでさらにパフォーマンスを向上させることができます。SDPは、クラスタ化されたサーバー環境用の標準の通信プロトコルで、ネットワーク・インタフェース・カードとアプリケーション間のインタフェースを提供します。SDPを使用すると、アプリケーションがメッセージング処理の大部分をネットワーク・インタフェース・カード上に配置できるようになるため、CPUを他のタスクに開放できます。結果として、SDPによりネットワーク・レイテンシとCPU使用率を減らし、パフォーマンスを改善できます。
Oracle SQL Connector for Hadoop Distributed File System (HDFS)は、Oracle Exadata Database Machineにデータをプルするアプリケーションの例です。このコネクタにより、Oracle外部表はHDFSファイルかHive表に格納されたデータにアクセスできるようになります。
外部表で、HDFSデータへのアクセスが可能になります。外部表を使用することで、HDFSデータを問い合せたりOracleデータベース表にロードしたりすることができます。
Oracle SQL Connector for HDFSは、Oracle Exadata Database Machineのデータベース・サーバー上で実行されるHadoopクライアントとして機能します。
Oracle SQL Connector for HDFS、あるいはデータをOracle Exadata Database Machineにプルする他のツールを使用する場合は、パフォーマンスを最適にするために、システムでインフィニバンドを使用するよう構成してください。「Oracle Big Data Applianceへのインフィニバンド接続の指定」を参照してください。
関連項目: 『Oracle Big Data Connectorsユーザーズ・ガイド』のOracle SQL Connector for HDFSに関する詳細 |
Oracle Loader for Hadoopは、Oracle Exadata Database Machineにデータをプッシュするアプリケーションの例です。このコネクタは、HadoopクラスタからOracle Databaseの表にデータをすばやく移動するための効率的でパフォーマンスのよいローダーです。このコネクタを使用して、Oracle Big Data ApplianceからOracle Exadata Database Machineにデータをロードできます。
Oracle Loader for Hadoopは、Oracle Big Data Appliance上で実行されるデータベース・クライアントとして機能します。Oracle Big Data ApplianceからOracle Exadata Database Machineへのデータベース接続をインフィニバンド・ネットワーク上で確立する必要があります。これらのデータベース接続にSockets Direct Protocol (SDP)を使用することで、パフォーマンスがさらに向上します。
Oracle Loader for Hadoop、あるいはデータをOracle Exadata Database Machineにプッシュする他のツールを使用する場合は、パフォーマンスを最適にするために、システムでSDP overインフィニバンドを使用するよう、この章の説明に従って構成してください。
関連項目: 『Oracle Big Data Connectorsユーザーズ・ガイド』のOracle Loader for Hadoopに関する詳細 |
Oracle Big Data ApplianceとOracle Exadata Database Machineのラックは、インフィニバンド・ケーブルを使用して接続する必要があります。IPアドレスは、すべてのラックにわたって一意であり、かつインフィニバンド・ネットワーク用に同じサブネットを使用する必要があります。
関連項目:
|
Oracle Big Data ApplianceサーバーのインフィニバンドIPアドレスを使用するようにOracle Exadata Database Machineを構成できます。構成しない場合、デフォルトのネットワークはEthernetです。インフィニバンド・ネットワークを使用することで、Oracle Big Data ApplianceとOracle Exadata Database Machineの間のすべてのデータ転送のパフォーマンスが向上します。
Oracle Big Data ApplianceのインフィニバンドIPアドレスを識別するには、次の手順に従います。
まだインストールしていない場合は、Oracle Exadata Database MachineにCDHクライアントをインストールします。「CDHへのリモート・クライアント・アクセスの提供」を参照してください。
すべてのOracle Big Data Applianceサーバーについて、プライベート・ホスト名とインフィニバンドIPアドレスのリストを取得します。
1台のOracle Big Data Applianceラックには、6、12または18台のサーバーを搭載できます。
root
権限を使用して、Oracle Exadata Database Machineにログインします。
Oracle Exadata Database Machine上で/etc/hosts
を編集し、Oracle Big Data Applianceのホスト名とインフィニバンドIPアドレスを追加します。次に示すのは、連続したIPナンバリングの例です。
192.168.8.1 bda1node01.example.com bda1node01 192.168.8.2 bda1node02.example.com bda1node02 192.168.8.3 bda1node03.example.com bda1node03 192.168.8.4 bda1node04.example.com bda1node04 192.168.8.5 bda1node05.example.com bda1node05 192.168.8.6 bda1node06.example.com bda1node06
/etc/nsswitch.conf
で、次のような行を探します。
hosts: files dns
この行で、記述の順序が逆(dns files
)になっていないことを確認します。逆になっている場合、/etc/hosts
に追加した記述は使用されません。必要に応じてファイルを編集します。
すべてのOracle Big Data Applianceサーバーをpingします。ping
が完了し、インフィニバンドIPアドレスが表示されたことを確認します。
# ping bda1node01.example.com
PING bda1node01.example.com (192.168.8.1) 56(84) bytes of data.
64 bytes from bda1node01.example.com (192.168.8.1): icmp_seq=1 ttl=50 time=20.2 ms
.
.
.
Oracle Exadata Database Machine上でCDHをローカルに実行し、Oracle Big Data Applianceサーバーにサイズの大きいファイルをアップロードして、HDFSの機能をテストします。ネットワーク監視ツール(sar
など)で、インフィニバンド・デバイス上のI/Oアクティビティが示されることを確認します。
ファイルをアップロードするには、次のような構文を使用します(この例では、localfile.datを、Oracle Big Data Applianceのnode05にあるHDFSのtestdirディレクトリにコピーしています)。
hadoop fs -put localfile.dat hdfs://bda1node05.example.com/testdir/
Exadata Database MachineサーバーのインフィニバンドIPアドレスを使用するようにOracle Big Data Applianceを構成することもできます。この構成は、Oracle Big Data Appliance上でOracle Exadata Database Machineに接続する必要があるアプリケーションに対応します。
Oracle Exadata Database MachineのインフィニバンドIPアドレスを識別するには、次の手順を実行します。
すべてのOracle Exadata Database Machineサーバーについて、プライベート・ホスト名とインフィニバンドIPアドレスのリストを取得します。
root
権限でOracle Big Data Applianceにログインします。
Oracle Big Data Appliance上で/etc/hosts
を編集し、Oracle Exadata Database Machineのホスト名とインフィニバンドIPアドレスを追加します。
/etc/nsswitch.conf
で、次のような行を探します。
hosts: files dns
この行で、記述の順序が逆(dns files
)になっていないことを確認します。逆になっている場合、/etc/hostsに追加した記述は使用されません。必要に応じてファイルを編集します。
# service dnsmasq restart
すべてのOracle Exadata Database Machineサーバーをpingします。ping
が完了し、インフィニバンドIPアドレスが表示されたことを確認します。
サイズの大きいファイルをOracle Exadata Database Machineサーバーにダウンロードし、接続をテストします。ネットワーク監視ツール(sar
など)で、インフィニバンド・デバイス上のI/Oアクティビティが示されることを確認します。
ファイルをダウンロードするには次のような構文を使用します。この例では、mydata.json
という名前のファイルをdm01ce108
ストレージ・サーバーにコピーします。
$ scp mydata.json oracle@dm01cel08-priv.example.com:mybigdata.json oracle@dm01cel08-priv.example.com's password: password
次の手順では、Oracle Linuxを実行しているOracle Exadata Database Machine内のデータベース・ノード上でSDPを有効化する方法について説明します。SDPによって、Oracle Big Data Appliance上で動作してデータをOracle Exadata Database Machineにプッシュするクライアント・アプリケーションのパフォーマンスが向上します。
Oracle Exadata Database Machine上でSDPを有効化するには、次の手順に従います。
テキスト・エディタで/etc/infiniband/openib.conf
ファイルを開いて、次の行を追加します。
set: SDP_LOAD=yes
これらの変更を保存し、ファイルを閉じます。
SDPとTCPの両方を有効にするには、テキスト・エディタで/etc/ofed/libsdp.conf
を開き、use both
ルールを追加します。
use both server * : use both client * :
これらの変更を保存し、ファイルを閉じます。
テキスト・エディタで/etc/modprobe.conf
ファイルを開いて、次の設定を追加します。
options ib_sdp sdp_zcopy_thresh=0 recv_poll=0
これらの変更を保存し、ファイルを閉じます。
これらの変更を、Oracle Exadata Database Machineラック内のすべてのデータベース・ノードにレプリケートします。
すべてのデータベース・ノードを再起動して、変更を有効化します。
Oracle Exadata Database Machineラックが複数ある場合は、すべてのラックでこれらの手順を繰り返します。
この手順では、SDPを使用するためにJDBCクライアントを構成する方法について説明します。
JDBCに対するSDPサポートを有効化するには、次の手順に従います。
『Oracle Database Net Services管理者ガイド』の説明に従って、インフィニバンドをサポートするようにデータベースを構成します。プロトコルは必ずSDPに設定してください。
Java仮想マシンを起動する前に、LD_PRELOAD
環境変数をlibsdp.so
に設定します。この例ではBashシェルを使用します。
export LD_PRELOAD="libsdp.so"
インフィニバンド・ネットワーク上に着信するOracle Big Data Appliance接続に対するリスナーを追加するには、まず仮想IPアドレスを使用してインフィニバンド・ネットワーク用のネットワーク・リソースを追加します。
注意: この例では、Oracle Exadata Database Machineクォータ・ラック用の2つのノードを列挙しています。Oracle Exadata Database Machineのハーフ・ラックまたはフル・ラックを使用している場合は、クラスタ内のノードごとにノード固有の行を繰り返す必要があります。 |
Exadataラック内の各ノードで/etc/hosts
を編集して、インフィニバンド・ネットワーク用の仮想IPアドレスを追加します。IPアドレスが使用中でないことを確認してください。次に例を示します。
# Added for Listener over IB 192.168.10.21 dm01db01-ibvip.example.com dm01db01-ibvip 192.168.10.22 dm01db02-ibvip.example.com dm01db02-ibvip
root
ユーザーとして、インフィニバンド・ネットワーク用に使用する1つのデータベース・ノード上にネットワーク・リソースを作成します。次に例を示します。
# /u01/app/grid/product/12.1.0.1/bin/srvctl add network -k 2 -S 192.168.10.0/255.255.255.0/bondib0
次の例のようなコマンドを使用して、ネットワークが正しく追加されたことを確認します。
# /u01/app/grid/product/12.1.0.1/bin/crsctl stat res -t | grep net
ora.net1.network
ora.net2.network -- Output indicating new Network resource
または
# /u01/app/grid/product/12.1.0.1/bin/srvctl config network -k 2
Network exists: 2/192.168.10.0/255.255.255.0/bondib0, type static -- Output indicating Network resource on the 192.168.10.0 subnet
クラスタ内の各ノードについて、ステップ2で作成したネットワーク上の仮想IPアドレスを追加します。次に例を示します。
# srvctl add vip -n dm01db01 -A dm01db01-ibvip/255.255.255.0/bondib0 -k 2 # # srvctl add vip -n dm01db02 -A dm01db02-ibvip/255.255.255.0/bondib0 -k 2
oracle
ユーザー(Grid Infrastructureホームの所有者)として、ステップ4で作成した仮想IPアドレス用のリスナーを追加します。
# srvctl add listener -l LISTENER_IB -k 2 -p TCP:1522,/SDP:1522
中間層からの接続を受け付ける各データベースについて、listener_networks init
パラメータを変更して、複数のネットワーク(イーサネットとインフィニバンド)にまたがるロード・バランシングとフェイルオーバーを可能にします。初期化パラメータに完全なTNSNAMES
構文を入力することも、$ORACLE_HOME/network/admin
ディレクトリ内のtnsnames.ora
内にエントリを作成することもできます。TNSNAMES.ORA
のエントリは、GRID_HOME
内に存在している必要があります。次の例では、まずtnsnames.ora
を更新します。
クラスタ内の各ノードで、そのノードの正しいIPアドレスを使用して、この手順を実行します。LISTENER_IBREMOTE
では、クラスタ内の他のすべてのノードを列記する必要があります。DBM_IB
では、クラスタ内のすべてのノードを列記する必要があります。
注意: データベース・インスタンスがTNSNAMES を読み込むのは、起動時のみです。したがって、init.ora パラメータ(LISTENER_NETWORKS )によって参照されているエントリを変更した場合は、インスタンスを再起動するか、ALTER SYSTEM SET LISTENER_NETWORKS コマンドを発行し、インスタンスによって変更を有効にする必要があります。 |
DBM = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dm01-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dbm) )) DBM_IB = (DESCRIPTION = (LOAD_BALANCE=on) (ADDRESS = (PROTOCOL = TCP)(HOST = dm01db01-ibvip)(PORT = 1522)) (ADDRESS = (PROTOCOL = TCP)(HOST = dm01db02-ibvip)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dbm) )) LISTENER_IBREMOTE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dm01db02-ibvip.mycompany.com)(PORT = 1522)) )) LISTENER_IBLOCAL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dm01db01-ibvip.mycompany.com)(PORT = 1522)) (ADDRESS = (PROTOCOL = SDP)(HOST = dm01db01-ibvip.mycompany.com)(PORT = 1523)) )) LISTENER_IPLOCAL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dm0101-vip.mycompany.com)(PORT = 1521)) )) LISTENER_IPREMOTE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dm01-scan.mycompany.com)(PORT = 1521)) ))
sysdba
としてデータベース・インスタンスに接続します。
SQLのALTER SYSTEM
コマンドを使用してlistener_networks init
パラメータを変更します。
SQL> alter system set listener_networks= '((NAME=network2) (LOCAL_LISTENER=LISTENER_IBLOCAL) (REMOTE_LISTENER=LISTENER_IBREMOTE))', '((NAME=network1)(LOCAL_LISTENER=LISTENER_IPLOCAL) (REMOTE_LISTENER=LISTENER_IPREMOTE))' scope=both;
Linuxコマンドラインで、srvctl
コマンドを使用してLISTENER_IB
を再起動して、ステップ7の変更を実施します。
# srvctl stop listener -l LISTENER_IB # srvctl start listener -l LISTENER_IB