デフォルトのシステム設定でディレクトリサービスのパフォーマンスが最高になるとはかぎりません。この節では、最高のパフォーマンスを実現するにはオペレーティングシステムをどのようにチューニングすればよいかについて説明します。
サポートされるオペレーティングシステムの一覧の最新情報は、『Sun Java System Directory Server Enterprise Edition 6.3 リリースノート』を参照してください。
システムの全体的なセキュリティーを維持する必要があります。また、Directory Server の正常な動作を保証する必要もあります。したがって、推奨される最新のシステムパッチ、サービスパック、またはバグフィックスをインストールします。使用するプラットフォームで適用すべき最新パッチの一覧の最新情報については、『Sun Java System Directory Server Enterprise Edition 6.3 リリースノート』を参照してください。
この節の推奨事項を実施しても、すべてのリスクを回避できるわけではありません。これらの推奨事項の目的は、典型的なセキュリティー上の危険に歯止めをかけるための簡易チェックリストを提供することです。
ファイアウォールを使ってシステムを隔離する:可能であれば、Directory Server が稼働するシステムを、ネットワークファイアウォールを使って公的なインターネットから隔離してください。
デュアルブートを許可しない:本番用の Directory Server が稼働するシステム上でほかのオペレーティングシステムを実行しないでください。アクセスを許可すべきでないファイルへのアクセスを、ほかのシステムが許可する可能性があります。
強いパスワードを使用する:少なくとも 8 文字の長さの root パスワードを使用します。パスワードには、コンマ、ピリオドなど、アルファベット以外の文字も含めるようにしてください。
「パスワード強度チェック」サーバープラグインを使えば、弱いパスワードを拒否できます。dsconf でサーバープロパティー pwd-strong-check-enabled を使えば、このプラグインを有効にできます。
より長いオペレーティングシステムパスワードを使用することにした場合、システムによるパスワードの処理方法を設定しなければいけない可能性があります。その手順については、オペレーティングシステムのマニュアルを参照してください。
安全なユーザーおよびグループ ID をサーバーに使用する: セキュリティー上の理由により、スーパーユーザー特権を使って Directory Server を実行しないでください。
たとえば、UNIX コマンド groupadd と useradd を使えば、ログイン特権を持たないユーザーとグループを作成できます。次に、このユーザーとグループとしてサーバーを実行できます。
たとえば、servers という名前のグループを追加するには、次のようにします。
# groupadd servers |
server1 という名前のユーザーをグループ servers のメンバーとして追加するには、次のコマンドを使用します。
# useradd -g servers -s /bin/false -c "server1" |
ある特定の配備で、メッセージングサーバーなどのほかのサーバーと Directory Server ファイルを共有する必要が生じる可能性があります。そのような配備では、同じユーザーおよびグループ ID を使ってそれらのサーバーを実行してください。
コア機能を使用する:デバッグを支援するために、このユーザーおよびグループ ID で実行されているプロセスにコアダンプを許可できます。Solaris コマンド coreadm などのユーティリティーを使用します。たとえば、Directory Server がコアファイルを生成できるようにするには、setuid プロセスにその処理を許可したあと、coreadm の設定を更新します。
# coreadm -e proc-setid # coreadm -u |
サーバーを起動するスクリプトを作成するとき、その起動スクリプトに次の行を追加できます。この行を追加すると、core.ns-slapd.pid という形式のコアファイルを Directory Server が生成できるようになります。ここで、pid はプロセス ID です。
coreadm -p core.%f.%p $$
不要なサービスを無効にする:より少ないリスクで最高のパフォーマンスを実現するには、システムを Directory Server 専用にします。このガイドの別のところで説明したように、同じマシン上で Directory Service Control Center を実行しないでください。別のサービス、特にネットワークサービスを実行すると、サーバーのパフォーマンスとスケーラビリティーに悪影響が及びます。また、それにより、セキュリティー上の危険も増大します。
できるだけ多くのネットワークサービスを無効にしてください。Directory Server はファイル共有やその他のサービスを必要としません。IP Routing、Mail、NetBIOS、NFS、RAS、Web Publishing、Windows Network Client などのサービスを無効にしてください。telnet と ftpを無効にすることを検討してください。
telnet と ftp はほかの多くのネットワークサービスと同じく、セキュリティー上の危険を増大させます。これら 2 つのサービスは特に危険です。なぜなら、これらのコマンドはネットワーク経由でユーザーのパスワードを平文として送信するからです。telnet や ftp を使用する必要に迫られた場合には、セキュリティー保護されたシェルである ssh やセキュリティー保護された FTP である sftp などのクライアントを代わりに使用してください。ネットワークサービスを無効にする方法の詳細については、オペレーティングシステムのマニュアルを参照してください。
Directory Server インスタンスがネットワークに対してネームサービスを提供しない場合、システムのネームサービスを有効にすることを検討してください。その場合、Directory Server は、ACI を解決する場合などにそのネームサービスを使用します。
システムクロックがほかのシステムとほぼ同期が取れていることを確認してください。クロックの同期がとれていれば、レプリケーションも正常に行えます。また、ログファイル内の日付やタイムスタンプのシステム間での対応関係も把握しやすくなります。時間情報プロトコル (NTP、Network Time Protocol) クライアントを使って正しいシステム時刻を設定することを検討してください。
dsadm コマンドを使えば、システムブート時にサーバーインスタンスを再起動させることができます。たとえば、Solaris 10 および Windows システムでは dsadm enable-service コマンドを使用します。ほかのシステムでは dsadm autostart コマンドを使用します。ネイティブパッケージからインストールしなかった場合には、オペレーティングシステムのマニュアルを参照して、システムブート時にサーバーを起動させる方法を確認してください。
可能であれば、dsadm コマンド、DSCC のいずれかを使って Directory Server を停止します。システムの停止中に Directory Server が突然停止されると、すべてのデータがディスクに正しく書き込まれたことが保証されなくなります。したがって、Directory Server は再起動時に、データベースの完全性を確認する必要があります。このプロセスにはある程度の時間がかかる可能性があります。
さらに、ファイルシステムのロギングオプションの使用を検討してください。ファイルシステムのロギングは一般に、書き込み時のパフォーマンスを改善すると同時に、ファイルシステムチェックの実行に必要な時間を短縮します。クラッシュ時にファイルシステムが正常にマウント解除されなかった場合には、システムはファイルシステムをチェックする必要があります。また、RAID をストレージとして使用することも検討してください。
製品に付属する idsktune(1M) ユーティリティーを使えば、基本的なシステム設定の問題を診断するのに役立つかもしれません。このユーティリティーは、高いパフォーマンスを示すディレクトリサービスをサポートするようにシステムをチューニングするための推奨事項を提示します。このユーティリティーは、推奨事項を示すだけで、実際には何の操作も行いません。適切な権限を持ったシステム管理者が提示された推奨事項に基づいて必要な操作を行なってください。
ユーティリティーを root として実行すると、idsktune はシステムに関する情報を収集します。ユーティリティーは、注意、警告、およびエラーを推奨の対処法とともに表示します。idsktune コマンドがチェックする内容は、次のとおりです。
オペレーティングシステムとカーネルのバージョンが、このリリースでサポートされている。
利用可能なメモリーと利用可能なディスク容量が、通常用途の最小要件を満たしている。
システムリソースの限度が通常用途の最小要件を満たしている。
必須パッチがインストールされている。
Directory Server ソフトウェアを本番用のシステムにインストールする前に、少なくともすべての ERROR 状態を解決してください。
個々の配備要件が最小要件を上回る可能性があります。idsktune ユーティリティーによって最小システム要件として指摘されたリソースよりも多くのリソースを提供することができます。
特定の推奨事項を実施する前に、ローカルネットワークの状態やその他のアプリケーションを考慮してください。ネットワーク設定のチューニングに関する追加のヒントについては、オペレーティングシステムのマニュアルを参照してください。
Directory Server は、同時クライアント接続を処理する際にファイル記述子を使用します。したがって、サーバープロセスから利用可能なファイル記述子の最大数が小さければ、同時接続数が制限される可能性があります。したがって、ファイル記述子の数に関する推奨事項は、Directory Server が処理可能な同時接続数に関係します。
Solaris システムの場合、利用可能なファイル記述子の数を設定するには rlim_fd_max パラメータを使用します。利用可能なファイル記述子の数を変更するための詳細な手順については、オペレーティングシステムのマニュアルを参照してください。
具体的なネットワーク設定はプラットフォームに依存します。一部のシステムでは、TCP 設定を変更することで Directory Server のパフォーマンスを向上させることができます。
まずディレクトリサービスを配備し、次にそれらのパラメータのチューニングを必要に応じて検討します。
この節では、idsktune による TCP 設定関連の推奨事項の背景にある根拠について説明したあと、Solaris 10 システム上でそれらの設定をチューニングする方法を示します。
一部のシステムでは、keepalive パケットの送信間隔を設定できます。この設定によって、アクティブでない、場合によっては切断されている TCP 接続を、どのくらいの期間維持するかを決めることができます。keepalive 間隔の設定値が大きすぎると、すでに切断されたクライアント接続を維持するためにシステムが不要なリソースを使用してしまう可能性があります。大部分の配備では、このパラメータの値を 600 秒に設定します。この値を 600,000 ミリ秒すなわち 10 分に設定することで、Directory Server への同時接続数を増やすことができます。
一方、keepalive 間隔の設定値が小さすぎると、ネットワークの一時的な停止時にもシステムが接続を切断してしまう可能性があります。
Solaris システムでこの時間間隔を設定するには、tcp_keepalive_interval パラメータを使用します。
一部のシステムでは、送信接続が確立されるのをシステムがどのくらいの期間待つかを設定できます。設定値が大きすぎると、すぐに応答しないレプリカなどの送信先サーバーとの送信接続を確立する際に、大きな遅延が生じる可能性があります。高速で信頼性の高いネットワーク上のイントラネット配備の場合、このパラメータの値を 10 秒に設定すれば、パフォーマンスの改善が期待できます。一方、低速、低信頼、または WAN 型の接続を含むネットワーク上では、そうした小さな値を使用しないでください。
Solaris システムでこの時間間隔を設定するには、tcp_ip_abort_cinterval パラメータを使用します。
一部のシステムでは、パケットの再送信間の初期時間間隔を設定できます。この設定は、確認応答のなかったパケットが再送信されるまでの待機時間に影響を与えます。設定値が大きすぎると、失われたパケットのためにクライアントが待たされる可能性があります。高速で信頼性の高いネットワーク上のイントラネット配備の場合、このパラメータの値を 500 ミリ秒に設定すれば、パフォーマンスの改善が期待できます。一方、往復時間が 250 ミリ秒を超えるようなネットワークでは、そうした小さな値を使用しないでください。
Solaris システムでこの時間間隔を設定するには、tcp_rexmit_interval_initial パラメータを使用します。
一部のシステムでは、システムが初期シーケンス番号の生成を処理する方法を設定できます。エクストラネットおよびインターネット配備では、シーケンス番号攻撃を避けるため、初期シーケンス番号の生成が RFC 1948 に基づいて行われるようにこのパラメータを設定してください。そうした環境では、ここで説明したほかの TCP チューニング設定は役に立ちません。
Solaris システムでこの動作を設定するには、tcp_strong_iss パラメータを使用します。
Solaris 10 システム上で TCP 設定をチューニングするもっとも単純な方法は、単純な SMF サービスを次のようにして作成することです。
Directory Server チューニング用の SMF プロファイルを作成します。
次の xml ファイルを環境に従って編集し、そのファイルを /var/svc/manifest/site/ndd-nettune.xml として保存します。
<?xml version="1.0"?> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/ service_bundle.dtd.1"> <!-- ident "@(#)ndd-nettune.xml 1.0 04/09/21 SMI" --> <service_bundle type='manifest' name='SUNWcsr:ndd'> <service name='network/ndd-nettune' type='service' version='1'> <create_default_instance enabled='true' /> <single_instance /> <dependency name='fs-minimal' type='service' grouping='require_all' restart_on='none'> <service_fmri value='svc:/system/filesystem/minimal' /> </dependency> <dependency name='loopback-network' grouping='require_any' restart_on='none' type='service'> <service_fmri value='svc:/network/loopback' /> </dependency> <dependency name='physical-network' grouping='optional_all' restart_on='none' type='service'> <service_fmri value='svc:/network/physical' /> </dependency> <exec_method type='method' name='start' exec='/lib/svc/method/ndd-nettune' timeout_seconds='3' /> </exec_method> <exec_method type='method' name='stop' exec=':true' timeout_seconds='3' > </exec_method> <property_group name='startd' type='framework'> <propval name='duration' type='astring' value='transient' /> </property_group> <stability value='Unstable' /> <template> <common_name> <loctext xml:lang='C'> ndd network tuning </loctext> </common_name> <documentation> <manpage title='ndd' section='1M' manpath='/usr/share/man' /> </documentation> </template> </service> </service_bundle>
ndd-nettune.xml の設定内容をインポートする前に、その構文が正しいことを確認します。それには次のコマンドを実行します。
$ svccfg validate /var/svc/manifest/site/ndd-nettune.xml |
次のコマンドを実行して設定をインポートします。
$ svccfg import /var/svc/manifest/site/ndd-nettune.xml |
詳細については、svccfg(1M) のマニュアルページを参照してください。
次のシェルスクリプトを /lib/svc/method/ndd-nettune 内にコピーします。
#!/sbin/sh # # ident "@(#)ndd-nettune.xml 1.0 01/08/06 SMI" . /lib/svc/share/smf_include.sh . /lib/svc/share/net_include.sh # Make sure that the libraries essential to this stage of booting can be found. LD_LIBRARY_PATH=/lib; export LD_LIBRARY_PATH echo "Performing Directory Server Tuning..." >> /tmp/smf.out /usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 1024 /usr/sbin/ndd -set /dev/tcp tcp_keepalive_interval 600000 /usr/sbin/ndd -set /dev/tcp tcp_ip_abort_cinterval 10000 /usr/sbin/ndd -set /dev/tcp tcp_ip_abort_interval 60000 # Reset the library path now that we are past the critical stage unset LD_LIBRARY_PATH
svcadm を実行して nettune (詳細は svcadm(1M) のマニュアルページを参照) を有効にします。
svcs -x (詳細は svcs(1) のマニュアルページを参照) を実行します。