daily backupサーバーの構築

日々のバックアプを取るサーバーをたてているのですが,どうも調子が悪くて1, 2週間に一回は確実にディスクアクセスができなくなってフリーズしてしまい,バックアップ元のサーバーを道連れにしてnfsが固まるというひどいことになっていました。いよいよ限界だろうということでサーバーを入れ替えねばならないと思いつつやる気が起こらなくてずっとやっていませんでした。

とはいえやらないわけにもいかないので重い腰をあげて,これまでメインのディスクサーバーとして使っていたものを引退させて新しいサーバーに入れ替えたので,旧メインサーバーをバックアップにまわすことにしました。新しいディスクサーバーは8TB x 5をraidz2で使っているので24TBくらいの容量があります。現時点では7TBほどしか消費していませんのでたぶんディスクが事故を起こさない限り,私が定年になるまでは使い続けられると期待しています。

一方,旧メインサーバーは128GB SSD x 2のミラーリングでOSを入れておいて,データは3TBのWester DigitalのRED x 5をraidz2で9TBほどの容量のサーバーとして使っていました。新サーバーの容量には遠く及ばず,現時点のディスク消費量を考えてもこのままでは無理があります。raidz2ではなくstripingでディスク容量をフルに使うということも考えられますが,さすがにかなり長い期間使ったシステムなので多少の冗長性は欲しいところです。

バックアップさえとれればよいのでSSDなんて不要です。そこでSSDに使っていたSATAの2ポートをHDDに置き換えて3TB x 7でraidz1として18TBでOS+データ用として運用することにしました。3TBのWD REDは事故に備えて予備で新品を1個確保していたので,これを投入するとともに,そこらへんに転がっていたWD Green 3TBを一個投入することにしました。これで,HDDの容量は当面は足りると期待されます。

旧メインサーバーはXeon E3-1241 v3 @ 3.5GHz 8 coresのCPUでメモリは32GBでした。2014年頃にリリースされたCPUで既に10年選手ですがバックアップサーバーとしてのスペックには問題ありません。FreeBSD 14.1のDVDを焼いてUSB DVDドライブから起動して普通にインストールしました。zfsの圧縮率を高めるためにFreeBSD 13から使えるようになったというZStandard圧縮を試そうと思ったのですが,自動でパーティションわけをする場合,勝手にデフォルトのlz4圧縮になってしまいます。

あとからでも変更できるらしい,ということがわかったのでとりあえずインストールはデフォルトのままインストールしてしまいました。

再起動後にユーザーを追加して,リモートからログインできるようにしたうえで,以下の作業をします。

1. zpool statusでzpoolを確認
zrootというzpoolで7個のHDDでraidz1が構成されていることがわかります。

2. zfs get compressで圧縮方法を確認
全てのスライスがデフォルトのlz4で圧縮されていることがわかります。

3. zfs get compressratioで圧縮率も確認しておきます。

4. バックアップ用のスライスを作ります。
mkdir /backup
zfs create -o mountpoint=/backup -o compression=zstd-7 zroot/backup
圧縮方法はZStandard-7を設定しています。zstdだけを設定するとzstd-3がデフォルトで設定されるようですが,zstd-3よりも圧縮率が高くて速度もあまり遅くならないらしいのでzstd-7にしてみました。バックアップは別に急がないのでもっと圧縮率が高いものにしてもよいのかもしれませんが,あまりよくわかっていないのでとりあえず程々っぽいところを狙ってみました。

5. 他のスライスも必要に応じて圧縮方法を変えておく。
zfs set compression=zstd-7 zroot/home
zfs set compression=zstd-7 zroot/tmp
zfs set compression=zstd-7 zroot/var
zfs set compression=zstd-7 zroot/usr/ports
zfs set compression=zstd-7 zroot/usr/src
まぁ,ほとんど全部zstd-7にしたわけで,zroot/usr/のなかのsrcとports以外だけをlz4のままにしておいた,という感じです。特にこだわりがあるわけじゃないのでいっそ根こそぎzstd-7にしたほうが簡単だったかもしれません。

これでとりあえずディスクを使うことができるようになりました。あとは最低限の設定をしておきます。

6. もろもろのアプデート
freebsd-update fetch
freebsd-update install
pkg update
pkg upgrade

7. NFSの設定
/etc/rc.confに
rpcbind_enable="YES"
mountd_enable="YES"
nfs_server_enable="YES"
nfs_client_enable="YES"
を追記。/etc/exportsに
/backup -maproot=root -alldirs 192.168.xxx.yyy 192.168.xxx.zzz
を追記

8. postfixのインストール
pkg install postfix
/etc/rc.confに
postfix_enable="YES"
sendmail_enable="NONE"
を追記。インストーラの指示にしたがって,
install -d /usr/local/etc/mail
install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf
/etc/periodic.confを作って以下を記入。
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
/etc/alieasesを編集してroot宛のメールが自分に届くようにしてnewaliasesを走らせる。

9. ntpクライアントのインストール
pkg install chrony
cd /usr/local/etc
mv chrony.conf chrony.conf.org
vi chrony.confとして
makestep 1000 10
rtcsync
server 192.168.xxx.yyy
を記入。
/etc/rc.confに
ntpdate_enable="YES"
ntpdate_flags="-b 192.168.xxx.yyy"
chronyd_enable="YES"
を追記。

10. その他のツール類のインストール
pkg install で以下のものをインストール
gtar, gzip, lhasa, unzip, zip, sharutils
dosunix, base64, iconv, mpack, unix2dos
rsync, wol, apcupsd
iperf3, bind-tools
gmake
wput, wget
ja-a2ps, ja-kon2-14dot, ja-less, mtools, ja-nkf, ja-w3m

ここまで設定したらOSごと再起動。

この記事へのコメント