2011年1月29日土曜日

rsyncを高速に

rsyncを高速化するには

rsync -avS -e 'ssh -c blowfish' --progress --stats hogehoge mogemoge

みたいなオプションがいいらしい。(+個人的趣味)

けど、blowfishは実はあんまり速くない。
手元のCore 2 Quadでは、arcfourのほうが断然速い。2~3倍くらい速い。

rsync -avS -e 'ssh -c arcfour' --progress --stats hogehoge mogemoge

メモでした。

makewhatisを止める

chmod 644 /etc/cron.daily/mlocate.cron
chmod 644 /etc/cron.daily/makewhatis.cron
chmod 644 /etc/cron.weekly/makewhatis.cron

2011年1月27日木曜日

kfs01を再構築する

ストレージサーバを再構築します。
OSはコピるもの、という信念の元、FreeBSDをコピって使い続けてきましたが、そろそろ昔いじった内容なんかがあやふやになってきましたので手順を完全に残しながら、改めて再インストールしたいと思います。

■インストール
高品質と言われていて、割と安定して手に入る白芝SDHC8GBを使います。1パーティション全量「/」に割り当てます。SWAPは別途ZFS上に確保します。MBRはStandardを選びます。
ちなみにlabelやfdiskの画面では構成を決定した後、[w]は押してはいけない。writeするとインストール開始後の領域確保でインストーラがエラー出して止まります。これで相当ハマりこみました。
KernDeveloperでインストールします。kernel再構築の予定はないけど、一応。
再起動かかったところでディスクイメージをddで吸い出しておくと、失敗時にやり直ししやすいです。

■SSH rootログイン許可
kfs01# vi /etc/ssh/sshd_config
-#PermitRootLogin=no
+PermitRootLogin=yes
kfs01# service sshd restart
kfs01# /etc/netstart

■設定書き換え
kfs01# vi /etc/motd
※適当に書き換え

kfs01# vi /boot/loader.conf
autoboot_delay="3"
kern.cam.boot_delay=20000
aio_load="YES"
ahci_load="YES"
siis_load="YES"
vm.kmem_size_max="6144M"
vm.kmem_size="6144M"
vfs.zfs.arc_max="3072M"
vfs.zfs.vdev.cache.size="40M"
vfs.zfs.txg.synctime=5
vfs.zfs.txg.timeout=5
vfs.zfs.vdev.max_pending=1
vfs.zfs.zfetch.block_cap=512
vfs.zfs.zfetch.max_streams=16
vfs.zfs.prefetch_disable="1"
#vfs.zfs.zil_disable="1"
cpufreq_load="YES"
#hint.acpi_throttle.0.disabled=1
#hint.acpi_throttle.1.disabled=1
#hint.acpi_throttle.2.disabled=1
#hint.acpi_throttle.3.disabled=1

kfs01# vi /etc/rc.conf
defaultrouter="192.168.0.1"
hostname="kfs01.hoge.com"
ifconfig_em0="inet 192.168.0.251 netmask 255.255.255.0 mtu 1500"
keymap="jp.106"
nfs_client_enable="YES"
nfs_server_enable="YES"
rpcbind_enable="YES"
sshd_enable="YES"
ntpdate_enable="YES"
ntpdate_flags="asia.pool.ntp.org"
mountd_enable="YES"
nfs_server_flags="-u -t -n16"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
samba_enable="YES"
webmin_enable="YES"
nmbd_enable="YES"
smbd_enable="YES"
winbindd_enable="YES"
zfs_enable="YES"
powerd_enable="YES"
#performance_cx_lowest="C2" ←ネットワークパフォーマンスが激しく低下するので却下
#economy_cx_lowest="C2"
istgt_enable="YES"
istgt_flags="-m 1"

■/tmpをメモリ上に確保(SDカード遅いから)
kfs01# echo 'tmpfs /tmp tmpfs rw,nosuid 0 0'>>/etc/fstab
kfs01# mount -a
kfs01# echo 'WRKDIRPREFIX=/tmp' >>/etc/make.conf
kfs01# echo 'TMPDIR=/tmp' >>/etc/make.conf
kfs01# echo 'DISTDIR=/tmp/distfiles' >>/etc/make.conf
kfs01# echo 'WITHOUT_X11=yes' >>/etc/make.conf
kfs01# echo 'WITHOUT_GUI=yes' >>/etc/make.conf
kfs01# echo 'NO_X=true' >>/etc/make.conf
kfs01# echo 'WITHOUT_IPV6=yes' >>/etc/make.conf
kfs01# echo 'WITH_MBSTRING=yes' >>/etc/make.conf
kfs01# echo 'SUPHOST=cvsup2.jp.FreeBSD.org' >>/etc/make.conf
kfs01# echo 'MASTER_SITE_OVERRIDE=ftp://ftp3.jp.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/' >>/etc/make.conf

■ZFS作る
kfs01# zpool create kfs01 raidz2 ada0 ada1 ada2 ada3 ada4 ada5 ada6 ada7
kfs01# zfs set atime=off kfs01
kfs01# zfs create -o compression=on -o sharenfs="-network 192.168.0.0 -mask 255.255.255.0 -maproot=root" kfs01/kfs
kfs01# zfs create -o compression=on -o sharenfs="-network 192.168.0.0 -mask 255.255.255.0 -maproot=root" kfs01/xen
kfs01# zfs create kfs01/DVD
kfs01# zfs create -o compression=on kfs01/NAS
kfs01# zfs create kfs01/zvols
kfs01# zfs create -V 16G kfs01/zvols/swap
kfs01# zfs create -V 1T kfs01/zvols/istgt1
kfs01# chmod 777 /kfs01/DVD
kfs01# chmod 777 /kfs01/NAS
kfs01# chmod 777 /kfs01/kfs
kfs01# chmod 777 /kfs01/xen

■SWAP on ZFS
kfs01# zfs create kfs01/zvols
kfs01# zfs create -V 16G kfs01/zvols/swap
kfs01# zfs set org.freebsd:swap=on kfs01/zvols/swap
kfs01# swapon -a /dev/zvol/kfs01/zvols/swap
kfs01# swapinfo

※ここらで一旦再起動

■portsnap初期化
kfs01# mkdir -p /tmp/var/db/portsnap
kfs01# echo 'WORKDIR=/tmp/var/db/portsnap' >>/etc/portsnap.conf
kfs01# echo 'SERVERNAME=portsnap.allbsd.org' >>/etc/portsnap.conf
kfs01# echo 'REFUSE arabic chinese french german hebrew hungarian' >>/etc/portsnap.conf
kfs01# echo 'REFUSE korean polish portuguese russian ukrainian vietnamese' >>/etc/portsnap.conf
kfs01# echo 'REFUSE x11 x11-clocks x11-fm x11-fonts' >>/etc/portsnap.conf
kfs01# echo 'REFUSE x11-servers x11-themes x11-toolkits x11-wm' >>/etc/portsnap.conf
kfs01# portsnap fetch extract update
※2回目以降
kfs01# portsnap fetch update

※WORKDIRについて
作業ディレクトリというものの、インデックスらしきファイルが残ります。
再起動すると消えちゃうtmpfsで大丈夫なのか、ググってもどうも確証が得られません。
まぁ安定稼働しちゃえば頻繁に使うコマンドではないと思うので、ダメだったらfetch extractからやり直すことにします。

■Portsを並列処理で高速化
kfs01# echo '.if ${.CURDIR:M*/usr/ports*}' >>/etc/make.conf
kfs01# echo 'FORCE_MAKE_JOBS=YES' >>/etc/make.conf
kfs01# echo 'MAKE_JOBS_NUMBER=8' >>/etc/make.conf
kfs01# echo '.endif' >>/etc/make.conf

※止まっちゃうportsがあれば以下のように対処する
kfs01# .if ${.CURDIR:M*mail/procmail}
kfs01# .undef FORCE_MAKE_JOBS
kfs01# .endif

■portupgrade導入 ※ディスク足りない、やらない
kfs01# cd /usr/ports/ports-mgmt/portupgrade
kfs01# make install clean
kfs01# rehash
kfs01# portsdb -uU
kfs01# pkgdb -aF

※バージョンアップ
kfs01# portupgrade -r firefox
※全バージョンアップ ←普通使わない容量注意
kfs01# setenv BATCH yes
kfs01# portupgrade -a

※ここから先のportsインストールは、同時に行うと、同じライブラリを使っていたりしてエラー出ることがあるようです。

■smartctl導入
kfs01# cd /usr/ports/sysutils/smartmontools
kfs01# make install clean
※libiconvの設定でEXTRA_PATCHESをONにする
kfs01# service smartd start

■rsyncd導入
kfs01# cd /usr/ports/net/rsync
kfs01# make config
kfs01# make install clean
kfs01# echo 'rsyncd_enable="YES"' >> /etc/rc.conf
kfs01# echo 'uid = root' >>/usr/local/etc/rsyncd.conf
kfs01# echo 'gid = wheel' >>/usr/local/etc/rsyncd.conf
kfs01# echo 'hosts allow=192.168.0.0/24' >>/usr/local/etc/rsyncd.conf
kfs01# service rsyncd start

■samba導入
kfs01# cd /usr/ports/net/samba35
kfs01# make install clean
※samba:LDAPとCUPSとIPV6を切ってAIO_SUPPORTを入れる
※python:デフォルトのまま
※perl:THREADをON
※m4:デフォルト

kfs01# mv /usr/local/etc/smb.conf /usr/local/etc/smb.conf.org
kfs01# vi /usr/local/etc/smb.conf
[global]
encrypt passwords = yes
map to guest = Bad User
workgroup = WORKGROUP
server string = hogehoge storage
hosta allow = 192.168.0.
load printers = no
display charset = utf-8
unix charset = utf-8
dos charset = cp932
aio read size = 0
aio write size = 16384
socket options = IPTOS_LOWDELAY TCP_NODELAY
write cache size = 262144

[DVD]
path = /kfs01/DVD
public = yes
writable = yes
printable = no
guest ok = yes
only guest = yes
browseable = yes

[NAS]
path = /kfs01/NAS
public = yes
writable = yes
printable = no
guest ok = yes
only guest = yes
browseable = yes

kfs01# service samba start

■iSCSIターゲット:istgt導入
kfs01# cd /usr/ports/net/istgt
kfs01# make install clean
kfs01# vi /usr/local/etc/istgt/auth.conf
[AuthGroup1]
Comment "Auth Group1"
Auth "iqn.1991-05.com.microsoft:yggdrasill" "abcdefghijklmnop"

※「MutualUser」「MutualSecret」は双方向で認証する場合に使用します。

kfs01# vi /usr/local/etc/istgt/istgt.conf
[Global]
NodeBase "iqn.com.hoge.istgt"
PidFile /var/run/istgt.pid
AuthFile /usr/local/etc/istgt/auth.conf
MediaDirectory /var/istgt
LogFacility "local7"
Timeout 30
NopInInterval 20
DiscoveryAuthMethod Auto
MaxSessions 16
MaxConnections 4
MaxR2T 32
MaxOutstandingR2T 16
DefaultTime2Wait 2
DefaultTime2Retain 60
FirstBurstLength 262144
MaxBurstLength 1048576
MaxRecvDataSegmentLength 262144
InitialR2T Yes
ImmediateData Yes
DataPDUInOrder Yes
DataSequenceInOrder Yes
ErrorRecoveryLevel 0

[UnitControl]
Comment "Internal Logical Unit Controller"
AuthMethod CHAP
AuthGroup AuthGroup1
Portal UC1 127.0.0.1:3261
Netmask 127.0.0.1

[PortalGroup1]
Comment "Portal Group 1"
Portal DA1 192.168.0.251:3260

[InitiatorGroup1]
Comment "Initiator Group1"
InitiatorName "ALL"
Netmask 192.168.0.0/24

[LogicalUnit1]
TargetName disk1
Mapping PortalGroup1 InitiatorGroup1
AuthMethod CHAP
AuthGroup AuthGroup1
UnitType Disk
QueueDepth 64
LUN0 Storage /dev/zvol/kfs01/volumes/xen1 Auto

[LogicalUnit2]
TargetName disk2
Mapping PortalGroup1 InitiatorGroup1
AuthMethod CHAP
AuthGroup AuthGroup1
UnitType Disk
QueueDepth 64
LUN0 Storage /dev/zvol/kfs01/volumes/xen2 Auto

kfs01# service istgt start
※istgtcontrol.conf は存在しなくても動くみたい…
ターゲットに向けてリムーバブルメディアを出し入れしたりする命令を発行するistgtcontrolコマンドを使わない限りは。
よくわかんないんですけど、UnitTypeでisoとかtapeとか指定した時に活用できるのかしらん?

■webmin導入
kfs01# cd /usr/ports/sysutils/webmin
kfs01# make install clean
kfs01# /usr/local/lib/webmin/setup.sh
kfs01# service webmin start

■netperf導入
kfs01# cd /usr/ports/benchmarks/netperf
kfs01# make install
kfs01# rehash

○サーバ起動
kfs01# netserver

○テスト
netperf -H kfs01.hoge.com -fM


■HPN-SSH(マルチスレッド版SSH)のためにopenssh-portableを導入
kfs01# cd /usr/ports/security/openssh-portable
kfs01# make config
※HPN有効、OVERWRITE_BASE有効(既存のsshを置き換える)
kfs01# make install clean

○バージョン確認
kfs01# ssh -v
(前)OpenSSH_5.4p1 FreeBSD-20100308, OpenSSL 0.9.8n 24 Mar 2010
(後)OpenSSH_5.2p1-hpn13v6 FreeBSD-openssh-portable-overwrite-base-5.2.p1_3,1, OpenSSL 0.9.8n 24 Mar 2010

※ここまででディスクイメージ化しておく。


■ZFSの自動スナップショット作成
kfs01# crontab -e
@daily /kfs01/kfs/backup/cron/zfs_snapshot.sh kfs01 days_later 7 recursive
@weekly /kfs01/kfs/backup/cron/zfs_snapshot.sh kfs01 weeks_later 5 recursive
@monthly /kfs01/kfs/backup/cron/zfs_snapshot.sh kfs01 months_later 12 recursive
@yearly /kfs01/kfs/backup/cron/zfs_snapshot.sh kfs01 years_later 10 recursive