IBM の LDAP サーバをインストールしていました。こいつはデータストアに DB2 を使うようになってます。で設定してたら DB2 に繋がらないわけですよ。LDAP サーバが起動できないわけですよ。困ったときにはログを見ろ。近頃の若いのは「わからない、わからない」と試行錯誤するばかりでログを見ないので本当に困ります。困ったときの DB2 のログといえば db2diag.log です。
2012-12-11-xx.xx.xx.xxxxxx+xxx I17804A306 LEVEL: Error PID : 12582964 TID : 1 PROC : ibmslapd INSTANCE: ldapdb2 NODE : 000 FUNCTION: DB2 UDB, common communication, sqlcctcpconnr, probe:110 MESSAGE : DIA3202C The TCP/IP call "connect" returned an errno="78".
TCP/IP 接続で connect のときに接続失敗している。なるほどネットワーク繋がっていますか?と言いたいところですがコレ同一OS内に入れてるんですよ。ローカルだから繋がらないとかそもそも関係ないでしょう。そう思っていた時期が僕にもありました。TCP/IP などと言われているので念のためにノード情報を確認です。
db2 => LIST NODE DIRECTORY Node Directory Number of entries in the directory = 2 Node 1 entry: Node name = IDSINODE Comment = Directory entry type = LOCAL Protocol = LOCAL Instance name = ldapdb2 Node 2 entry: Node name = LDAPDB2N Comment = Directory entry type = LOCAL Protocol = TCPIP Hostname = localhost Service name = ldapdb2svcids
今回問題なのは TCP/IP 接続とのことですから Protocol が TCPIP のところを見てみましたら Hostname = localhost です。だよね localhost だよね、繋がらない方がおかしいよね。どう考えたって、ping だって届くし。そう思っていた時代もありました。
$ ping -c 4 localhost PING localhost.example.com: (172.16.12.14): 56 data bytes --- localhost.example.com ping statistics --- 4 packets transmitted, 0 packets received, 100% packet loss
おまえ誰やー!なんでそんなヤツが返事するのん!そりゃ繋がらないわ。localhost 言いつつよそのホスト行ってるしこれはおかしいわ。調べてみたらうちのネットワークの DNS に localhost って名前のホストが居るのよ。まじか。そういうのアリなのか。
しかしですよ、/etc/hosts に localhost を 127.0.0.1 で登録しているのに何故に DNS を先に引きに行くのだ?と思っていたらリゾルバの問い合わせ順の話でした。
今回AIXで試してたんですけど、問い合わせ順を定義してあるファイル /etc/netsvc.conf に何も記述されていなくて、そのおかげか DNS の優先順位が高くて hosts 見る前に DNS に行ってたようです。 hosts = local,bind と登録しておけば、ローカルの hosts ファイルを先に見てくれます。
いやいやしかしまさか localhost が別の場所を向いてるなんて思いもしませんでしたわ。先入観というのは怖いなあ。