2008年01月09日
SQLiteはNFS上に置けない
もしかしたら常識かもだけど、知らなかった。
正確には、環境によっては動く場合もあるようだけど、推奨はされないし、動かない環境ではデータベースを開くことすらできなくなる。
情報としてはこの辺。
今動かしてるサービスをSolaris上のSQLiteで組んでるんだけど、DBはNFS上に置いてても普通に動いてた。
で、SolarisをLinuxにリプレースすることになったので、LinuxからNFS上のSQLiteファイルアクセスしてみたら、データベースが全く開けない。
いろいろ調べてみると、別にDBD::SQLiteのインストールに失敗したというわけではなさそうで、ローカルディスク上のSQLiteファイルならいくらでもアクセスできる。
なもんでNFS上に置いてるのが原因かと思って調べてみたら、案の定だった。
これで現行サービスの、Linuxリプレースは無理になった...現行の範囲では全然問題ないのだけど、次期サービスは流石にSQLiteじゃなくちゃんとMySQLなり使いたい。
で、Solaris上でMySQL動かそうとすると、クライアント周りにバグがあるみたいで、うまくDBD::mysqlのテストが通らない。
パッチも報告されてるんだけど、適用してもうまくいかない。
それで、次期サービスのMySQLのためにLinuxにリプレースして、サーバの台数も余裕ないので現行と次期を同じサーバで動かそうと思ってたんだけど...。
現行のNFS上SQLiteはLinuxで動かないし、次期のMySQLはSolaris上で動かない。
こりゃ、現行と次期サーバ分けるしかありまへんな。
うううう、予算が...。
> SQLiteはNFS上に置けない
> 情報としてはこの辺。
より正確に言うと「ファイルのロックができない場所には置けない」ですね。
SQLite を普通に使うと、同じファイルに対して各クライアントがそれぞれ直接読み書きすることになるので、ファイルのロックができない環境では排他制御ができないので使えません。
以前は「NFS ではロックはできない」のが常識だったので、NFS 上ではそもそも無理でした。
今時は NFS でもロックができる実装が増えていますが、ロックが信用できない実装もあるので、その情報のようなことになっています。
逆に言うと、きちんとファイルのロックができるシステムであれば、NFS 上に SQLite のデータベースを置いても問題ありません。
(きちんとロックができるかどうかは、NFS サーバ/クライアントの実装依存です。Linux や Solaris の実装がきちんとしているのかどうかは、私は知りません ← じゃあ役に立たないじゃねーか)
> LinuxからNFS上のSQLiteファイルアクセスしてみたら、データベースが全く開けない。
どのような Linux の環境でしょうか?
NFS サーバ/クライアント共に、Vine Linux 4.1, カーネル 2.6.16-0vl76.3, nfs-utils-1.0.9-0vl3, DBD-SQLite-1.13 の環境で rpc.statd (init スクリプトの名前は nfslock) が動いている状態であれば、NFS 経由で SQLite の読み書きができました。
# 正しく排他制御できるのかどうかまでは不明。
(rpc.statd が動いていない状態の場合、マウントしてファイルの読み書きはできますが、ロックができないため SQLite は使えないので注意。)
あと、Solaris と Linux の NFS のロックの違いとしては、Solaris ではサーバ側だけのデーモンを使ってロックを管理していたような気がしますが、Linux の rpc.statd はサーバ/クライアント双方で動いている必要があるようです。
Posted by: あ at 2008年01月09日 21:27> あさん
> 以前は「NFS ではロックはできない」のが常識だったので、NFS 上ではそもそも無理でした。
> 今時は NFS でもロックができる実装が増えていますが、ロックが信用できない実装もあるので、その情報のようなことになっています。
ご指摘の通りで、後で補足書こうと思ってたのですが、結論としては使えるようになりました。
恥ずかしい話、DBとかロジック以下のレイヤのサーバ構成は運用部門におんぶに抱っこ状態なのですが、本日運用部門担当者と原因調査したところ、nfslockというデーモンが走っていませんでした。
これを走らせたところ、NFS上でも正常にSQLiteが動かせるようになりました。
基礎知識が不足していて恥ずかしい限りです。
Posted by: kokogiko at 2008年01月09日 23:04![[ここギコ!]](http://kokogiko.net/logo.png)



・京都外国人排斥カウンターデモの「反日上等」「日の丸ウンコ」とかについて(名無し)
・京都外国人排斥カウンターデモの「反日上等」「日の丸ウンコ」とかについて(**)
・3Dどきゅめんと…って何?点字文書?(MrSwant)
・3Dどきゅめんと…って何?点字文書?(Ufoceleb)
・コロカの詳細が判りました&店舗誘導における来店検知の方法について(kokogiko)
・コロカの詳細が判りました&店舗誘導における来店検知の方法について(通りすがり)
・可視光通信って自位置特定にも使えるんじゃないか(Light Wire)
・新型インフルエンザでマスクとか(和知父くま)
・気持ちのよいサービス2:タクシーに携帯電話忘れたら届けてくれた(あああ)