WindowsServer2003とかのAD環境があって、ドメイン所属のPC群がアクセスするファイル鯖をLinux+Samba3で作るには、という長年いろんにゃ手法が出てるぽい話を。
まずは脳内構想を練ってみる・・・も、端から忘れるのでメモ。
安サーバにHDD4台でRAID10。mdのfarとかnearとかoffsetの設定を考えてみる。
LVMでスナップショットを取れるように。これをsambaで公開し直してクライアントから過去のファイルを参照できるように。
FSはXFSかReiserFSだろうか。XFSはヘッドシークが多い気がするんだがデフラグやスナップショットその他の安心感が。ReiserFSは細かいファイルに強いイメージがあるので実験してみたい。スナップショットはどーしようか・・・とはいえsambaさえ落とせば基本的にバックアップはどのタイミングで取っても大丈夫だろう。
1パーテーションを小さくしてあまりファイル数が多くにゃりすぎにゃいようにしよう。
バックアップはrdiff-backupだろうか。LVMと合わせればいつでも取れるはず。
sambaのゴミ箱も公開する。ファイルが堆積するだろうから定期的にcronで消せばよい。
複数ファイル鯖を短期間で同期させて予備にしたいところ。rsyncすればいいだけって気はするが、リアルタイムでレプリケーションする方法はあるのかにゃ。
DFSで何とにゃくリダイレクトとかしたら負荷分散用に細分化できるかにゃ。
samba3でsecurity = ADSにゃ方法が有るらしいのでこれを採用。何が違うのかよく分からにゃい。
Winbindは使った方がいいのだろうか。ユーザ増えてくると使った方がいいんだろうにゃぁ。
uidとかの同期はさせたほうがいいのかしら。レプリケーションとかするにゃらしにゃいとまずいかも。
ドメイン環境ってことは時刻同期は重要だよね。ntpか何かで常にクロックがずれにゃいように。
sambaのチューニングがよく分からにゃい。oplockってカーネル対応してるの??
キャッシュ周りのkernelチューニングはどうにゃんだろう。flush間隔を広げた方がトータルのパフォーマンスは上がると思うんだけど定期的にすごく重くにゃる瞬間が発生するようにゃ・・・
ディレクトリエントリを常時キャッシュしてるだけでずいぶん違うようにゃ気はする。cronでfindでも回してみよう。
mdの警告メールとかとか、LAN内にsmtp鯖が必要。
syslogは沢山吐かせるとディスク負荷ににゃるねえ。RAID10で4台だからシステムも同じディスクににゃらざるを得にゃい。やはり別のsyslog鯖へ吐くべきだろう。とにゃるとsyslog-ngやmultilogを採用した方が良さそうだ。
ログ周りを考えるに、NIC2枚で別のネットワークへ繋がっていた方がよさそうだ。
sambaに必要にゃメモリとCPUが分からにゃい。Winと違って結構必要にゃ気がする。
もうWin鯖でいいや(ぉぃ
ML115に
debianでNASっぽいものを作ってみる話で、
アクセスの無いときはHDD電源を落とすとかがんばって
それにゃりに出来たのだが、ちょっと改良。
HDD回転停止させて出てくる不満点は何たって初回アクセス時の起動待ち。致し方にゃいとはいえやはりおもしろくにゃい。
で、そういやNTFSでも似たようにゃことしたにゃぁ、という、ディレクトリエントリのキャッシュをやってみる。
方法は単純に find / >/dev/null を定期的に動かすだけ〜
といいたいがいらんディレクトリまで見させるとディスク書き込みが発生したりとかややこしいので、今回はsambaで公開してる/homeのみを巡回。さらにファイル属性その他も拾っとくべきにゃので-printf "%a%A@%c%f%F%g%h%i%m%n%s%t%u%Y"とかにゃんとか適度に。sambaからのアクセスを装ってmount -t cifs //localhost/homes /home/tmp -o iocharset=utf8とかしたディレクトリ相手に。
これで、sambaから見た範囲ではどのディレクトリを見に行ってもHDDアクセスはにゃくにゃり、HDD起動無しの快速レスポンスとにゃる。ACL? それは拾えてにゃいようにゃ・・・
さらにreiserfsのおまけ機能のおかげか、.md5のようにゃ微細にゃファイルがキャッシュされてることがある。もちろんHDD稼働時においてもエントリのリストアップは瞬時に帰ってくるようににゃる。
〜 memo 〜
umount /mnt/preread
rmdir /mnt/preread
mkdir /mnt/preread
chmod 777 /mnt/preread
mount -t cifs //localhost/homes /mnt/preread -o iocharset=utf8,username=neko
echo start.
while : ; do
nice -19 find /mnt/preread -printf "%a%A@%c%f%F%g%h%i%m%n%s%t%u%Y\n" ;
sleep 10
done|
nice -19 perl -e 'use Time::HiRes qw(sleep);while(<>){sleep(0.001)}'