yumでインストールしたMySQLを複数起動する

yumでインストールしたMySQLを複数起動する起動スクリプトを書いたのでメモ。 CentOS 5.2, MySQL 5.0.45 で動作確認しました。 いろいろと細かく修正する必要があって、なんだかなー、といった感じです。 /etc/rc.d/init.d/mysqld-second とかそういう名前で作ってます。 ↓長いので本体は続きで。

[Read More]
MySQL  Linux 

IDManagerからKeepassXにデータ移行するxslt

はてな田中さん(@stanaka)がruby製の変換ツール書いてくれました。
独自項目が保存できるのでこちらを利用するのをお勧めします!
https://gist.github.com/3263705

ruby 1.9.2-p290, 1.9.3-p194で使えました。

使い方はこんな感じ。
https://gist.github.com/3282820

sed 's/encoding="shift-jis"/encoding="cp932"/' in.xml  | idm2keepassx.rb >out.xml

以降は「XSLTでやってみたい!」という方向けのエントリ
Linux Desktopで業務を回そう計画の一環として、IDManagerをKeepassXへ移行する予定です。 アプリを変えるためにはデータ移行! ということで、IDManagerでエクスポートしたXMLを、KeepassXでインポートできるXMLに変換するXSLTを書きました。 XSLTヨクワカラナイのでいろいろ参考にさせてもらいました。 特に助かったのはここでした。改行置換はまるっと使わせてもらってます。 ⇒FAQ的なXSLTのサンプル ちゃんとXMLで出力するようにxsl:element使って書いたけど、すごく読みにくく。。 なんちゃってXMLで、HTMLっぽく書いてた時のほうが読みやすかったなぁ。 ※使用上の注意 IDManagerでエクスポートしたXMLのエンコーディング指定を書き換えないとうまく動かない場合があります!

before

<?xml version="1.0" encoding="shift-jis" standalone="yes"?><idmData>

after

<?xml version="1.0" encoding="CP932" standalone="yes"?><idmData>
本体はかなり長いので、つづきに書いておきます。 [Read More]
Linux 

sendmail / qmail / postfix の接続元制限

特に、DNS関連(正引きできないと...、逆引きできないと...というケース)について確認した内容をメモしておきます

sendmailの場合

  • 接続元IPアドレスを逆引きし、逆引きできたホスト名に対して正引きを行ったが、答えが一致しない場合にreject
    ⇒mcのLOCAL_RULESETSのRFORGEDで設定
qmailの場合
  • 接続元IPアドレスを逆引きし、逆引きできたホスト名に対して正引きを行ったが、答えが一致しない場合にreject
    ⇒tcpserverの-p(小文字)オプションで設定
postfixの場合
  • 接続元IPアドレスの逆引きができない場合、または接続元IPアドレスを逆引きした結果を正引きした時にAレコードが存在しない場合にreject
    ⇒main.cfのreject_unknown_clientで設定
  • HELO/EHLOのFQDNを正引きした時、そのホスト名がAレコード・MXレコードのいずれでもない場合にreject
    ⇒main.cfのreject_unknown_hostnameで設定
  • Envelope Fromのドメイン部分がAレコード・MXレコードのいずれでもない場合にreject
    ⇒main.cfのreject_unknown_sender_domainで設定
  • ルール:RCPTのドメイン部分がAレコード・MXレコードのいずれでもない場合にreject
    ⇒main.cfのreject_unknown_recipient_domainで設定

と、いうわけで
  • sendmailとqmailの制限は一緒。postfixは微妙に違います。
  • 「HELO/EHLOのFQDNの正引き結果」と「接続元IPアドレス」をマッチさせるルールはないみたい。
  • 「MAIL From:のFQDNの正引き結果」と「接続元IPアドレス」をマッチさせるルールはないみたい。


DNS逆引きチェックを入れちゃった場合に問題になりそう(だと言われている)ケースは
  • 共有ホスティングの場合
  • NAT構成の場合
  • 逆引きが自分で設定できない場合
だと思うんですが

[Read More]

PHPでSessionの生成が遅い場合の注意点

webサーバのパフォーマンスについて、PHPでセッション生成が遅い場合、
php.iniの設定を確認してみてください。

session.entropy_file = /dev/random
となっている場合、この/dev/randomからの読み取りの遅延が原因で動作が遅くなっている可能性が高いです。
⇒使うのであれば /dev/urandom を使いましょう。

/dev/randomからの読み込みが遅くなる原因は、
  • /dev/randomは、十分なエントロピーが得られない場合には応答をwaitすること
  • エントロピーの素として「人間の利用するキーボードなどの入力デバイスのタイミングの「ぶれ」などを活用」していること
    ⇒iDC設置のサーバ機器だとエントロピーがたまらない!
だそうです。
from: Linusのクリスマスプレゼントが引き起こした問題 - @IT

この場合、サーバの負荷は高くないものの応答が遅い状態になります。
みなさまご注意ください。

[Read More]

webサーバをチューニング

webサーバのチューニングのポイントをまとめておきます。

TIME_WAIT待機時間を短くする
アクセスが多いシステムだと、
ソケットの開放が追い付かなくなって
ポートを使いきってしまいます。
⇒特にKeep Alive OFFのwebサーバなど

RedHat系Linuxの場合、この待機時間は
net.ipv4.tcp_fin_timeout
の値になります。(単位は秒)
net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycleを有効にすることで再利用を促進します。
オンラインで変更する場合、sysctlを使って調整します。

設定値の表示
# sysctl -a
設定値の書き換え
# sysctl -w net.ipv4.tcp_fin_timeout=30
# sysctl -w net.ipv4.tcp_tw_reuse=1
# sysctl -w net.ipv4.tcp_tw_recycle=0

↑なんか勘違いしていた可能性があるので修正。現状では大きな問題は起きていないですが、tcp_tw_recycleはNATで問題が起きることがあるようなので最終手段です。
@2008/12/11追記

↑tcp_tw_recycleを1にすると問題が多くて地雷祭りなので、基本0にしておきます。
@2010/10/29追記

いまさらですけど、tcp_fin_timeoutはtime_waitの数と関係ありません(60秒でハードコードされているとのこと)。tcp_fin_timeoutが関係あるのはFIN_WAIT_2の数で、FIN_WAIT_2が多い場合はtcp_fin_timeoutを短くすると改善するかもしれません。

また、起動時に設定されるように
/etc/sysctl.conf
を編集して設定しておきましょう。

参考図書

[Read More]