お問い合わせ事例1
お問い合わせ内容
回答
前提 [1] 4つのイーサネットワークポート(NICポート)を持つ サーバーがあります。 [2] eth0とeth2をbonding致しました。(デバイス 名:bond0) [3] 3台の同環境のサーバーがあります。 状況 [1] それぞれ3台サーバーの/etc/modprobe.confに差異が あります。 [2] それぞれ3台サーバー /etc/sysconfig/network-scriptsのifcfg-eth1とifcfg-eth3 に差異が生じました。 質問内容 kudzuサービスもしくはsetupコマンドにてbond0のipアド レスを変更した場合/etc/modprobe.confが差異が現れる ことはありますか? kudzuサービスもしくはsetupコマンドにてbond0のipアド レスを変更した場合に/etc/modprobe.confの設定に差異が 発生する可能性があると考えます。 VMware上にRHEL5.2の仮想環境を最初はNIC1枚の状況で 作成し、VMware側でNICを3枚追加し、立ち上げ直したと ころで、bondingの設定を行いbondingの動作確認を行いま した。その後、再起動しましたが、/etc/modprobe.confが 書き換えられることはありませんでした。 <略> したがってsetup コマンドでbond0 のアドレスを変更した 場合には設定ファイル/etc/sysconfig/network-script/ifcfg-bond0 が書き換えられ、その後のkudzuの動 作にも影響します。3台目でmodprobe.conf からbonding の設定部分がなくなったのはsetupコマンドによるアドレス 変更を行った可能性があると考えます。お問い合わせ事例2
お問い合わせ内容
回答
PostgreSQL の設定で、当方の環境(メモリ512MB)では、 shared_buffers のデフォルト設定が28MB となっていま した。 マニュアル等の内容を見ていると、デフォルト設定は 32MB と書かれていました。initdb 時にこの値が決められ るようですが、何を基準に決められているのでしょうか。 環境設定に問題があるのでしょうか。 initdb コマンドは、データベースクラスタを作成する際に、 max_connectionsとshared_buffers の値をデフォルト値 (それぞれ、"100" と"32MB") に設定し、実際にテストモー ドでのデータベースサーバの起動を試みて、設定が可能かど うかを確認します。 メモリ不足や、共有メモリの上限を超える等の理由でテスト 起動に失敗すると、initdb は、徐々にmax_connections と shared_buffersの値を下げながら、起動可能な値を探りま す。 該当コードは、 src/bin/initdb/initdb.c:test_config_settings() になります。 下記のように、max_connections の候補となる数字と shared_buffers の候補となるサイズ(ブロック数単位) が羅 列されています。 <略> ※ソースコード内部での説明 値が絞られた原因としましては、メモリは512MB と、それ ほど少なくはありませんので、共有メモリの上限設定が小さ い(/etc/sysctl.conf の"kernel.shmmax") のではないかと 推測されます。生成された設定ファイルの max_connections とshared_buffers の値をデフォルト値 に修正してから起動を試みれば、おそらく起動に失敗して、 その原因がログに出力されますので、それをご参考に環境設 定を修正していただくことを推奨します。お問い合わせ事例3
お問い合わせ内容
回答
アプリケーションがsyslog-ngへログを出力する流れを確認させてください。 1. 1syslog-ngを使用してログを出力したいアプリケーションがsyslog-ngへデータ(ログ)の転送を行う。 2. データ(ログ)を受け取ったsyslog-ngが、一旦connect をコールし、/dev/logへ接続し対応するログ を処理するためのソケットを作成する。 3. その後で、現在の接続数と最大接続数を比較して接続数が最大接続数以上になる場合には、2. 作成し たソケットをクローズする。(最大でなければ、このソケットを対応するログを処理するハンドラに割 り付ける)最大接続数以下の場合は、データ(ログ)を出力し、書き込み完了後2.で作成したソケットを クローズする。 4. 3.で最大接続数を超えた場合、データ(ログ)はログファイルへは書き込まれない。 5. main_loop のio_iter の中で、処理が完了してソケットのに空きが出来れば、コネクションが開放さ れ、3. の( )内の処理でログが処理される。 【確認1】 アプリケーション→syslog-ng→ログファイルへのデータの流れは上記でよいでしょうか。 【確認2】 1のアプリケーションからsyslog-ngへのデータを受け渡すさいはどのような流れになるのでしょうか。 【確認3】 上記の流れで5のリトライが行われる前にアプリケーション側のタイムアウトが発生した場合、結果として このときにログ消失となる場合が稀にあるということでよろしいでしょうか。 【確認4】 上記内5でのsyslog-ng内部でのリトライは、どのような間隔で実施されるものでしょうか。 <略>お問い合わせ事例4
お問い合わせ内容
回答
1. ブラウザからWebサーバーへの要求は「https」である。 2. SSLはApacheで終端している。
3. Webサーバ(Apache)とAPサーバ(JBoss EAP xxxxxxx)はmod_jkにより連携し、mod_jkに よるロードバランスを行っている。 4. ロードバランサでは、ソースIPでのパーシステンスを行っている。 5. workers.propertiesには以下の通りに設定している。 上記の動作環境において、以下の事象が発生しました。 [1]ブラウザからの最初のリクエストはAPサーバー1で処理された。 [2]何回かアクセスしているうちに、mod_jkがAPサーバー1に対して接続エラーを検知し、APサー バー2へフェイルオーバーされた。 [3]再度ログインして、何回かアクセスしたが、そのリクエストはAPサーバー2で処理された。 [4]約1分後、ブラウザからアクセスしたところ、APサーバー1に接続された。 [質問1] 事象[3]で再度ログインをすることで、APサーバー2のJBossにより新しいセッションIDが生成され、 それ以降は「sticky_session=1」の設定により、APサーバー2に接続され続けることを想定していま したが、そのような動作とはなりませんでした。sticky_sessionの値が「true」であることから、[4] の際にブラウザから送信されたクッキー内のセッションIDが[1]で生成されたものと同じだったと考 えていますが、そのような事象となる可能性はあるでしょうか。 [質問2] 質問1がyesの場合...<略> <略>