この記事はQiitaで公開されていました
Plan 9のventiバックアップ用に、Windows Azure上でventiサーバを立てます。
plan9portのインストール
あらかじめplan9portを/usr/local/plan9にインストールしておく。
ventiディスクの作成
- Windows AzureポータルでHDDを追加
- Linuxサーバを再起動
ブートが終わったら、新しいディスクにパーティションを切る。
$ sudo grep SCSI /var/log/messages Apr 1 xxxxx kernel: sd z:z:z:z: [sdc] Attached SCSI disk $ sudo fdisk /dev/sdc n p (primary partition) 1 (partition number) enter enter w (上記の順に入力してプライマリパーティションをひとつだけ作成)
ディスクを/mnt/ventiにマウント。
$ sudo mkfs -t ext4 /dev/sdc1 $ sudo mkdir /mnt/venti $ sudo mount /dev/sdc1 /mnt/venti
venti用のファイルを作成。今回はファイルにしているけど、パーティションをそのまま使うこともできる。
$ cd /mnt/venti $ sudo dd if=/dev/zero of=isect0 bs=8192 count=1000000 $ sudo dd if=/dev/zero of=arenas0 bs=8192 count=4000000 $ cat /mnt/venti/venti.conf index main isect /mnt/venti/isect0 arenas /mnt/venti/arenas0
isectの容量は、arenasの5%程度が良いとされる。
ventiディスクをフォーマット。plan9portをインストールして、PLAN9環境変数を設定しておく。
$ v=$PLAN9/bin/venti $ sudo $v/fmtisect isect0 /mnt/venti/isect0 $ sudo $v/fmtarenas arenas0 /mnt/venti/arenas0 $ sudo $v/fmtindex /mnt/venti/venti.conf
venti動作確認。
$ v=$PLAN9/bin/venti $ venti=127.1 $ sudo $v/venti -c /mnt/venti/venti.conf
以上で、tcp17034がListenしていれば動作している。
設定反映
plan9portの環境変数をシステム全体に反映。
$ cat /etc/profile.d/plan9port.sh export PLAN9=/usr/local/plan9 export PATH=$PATH:$PLAN9/bin
venti用ディスクを起動時にマウントさせる。
$ blkid /dev/sdc1: UUID="xxxxxx" $ sudo vi /etc/fstab # 以下の行を追加 UUID=xxxxxx /mnt/venti ext4 defaults 0 2
upstartでventiを起動させる。
$ cat /etc/init/venti.conf description "venti server" env venti=127.1 env PLAN9=/usr/local/plan9 export venti PLAN9 start on runlevel [345] stop on runlevel [0126] exec /usr/local/plan9/bin/venti/venti -c /mnt/venti/venti.conf >>/var/log/venti.log respawn $ sudo initctl reload-configuration $ sudo initctl start venti
バックアップ用なので、特定のサーバからしかventiにアクセスできないように、AzureのエンドポイントACLを使って設定。具体的にはTCP 17034にコピー元のIPアドレスを追加するだけ。
内容確認
$ sudo yum install fuse
vacfsで特定のスコアを指定して読む(readonly)。
$ cat current.vac vac:xxxxxxxxxxxxxxxxxxxxxxxx $ vacfs -h localhost -m mtpt current.vac
vacスコアを調べる
ventiが持っているルートのvacスコアを調べるためにはventiへhttpでアクセスできるようにしておかなければならない。以下は:8000でhttpサービスを有効にする例。
$ grep http venti.conf httpaddr tcp!127.1!8000 (venti/ventiの-hオプションでも同様)
これで再起動すればよい。再起動が終わったら以下のスクリプトを動かす。これはPlan 9配布物に/sys/src/cmd/venti/words/dumpvacrootsとして存在しているものを若干変更した。rcやhgetを使っているので$PLAN9/binへPATHを通しておくこと。
$ cat dumpvacroots #!/usr/bin/env rc ventihttp=127.1:8000 hget http://$ventihttp/index | awk ' /^index=/ { blockSize = 0 + substr($3, 11) } /^arena=/ { arena = substr($1, 7) } /^\tarena=/ { start = (0 + substr($5, 2)) - blockSize printf("venti/printarena -o %.0f %s\n", start, $3 "") } ' | rc | awk '$3 == 16 { printf("vac:%s\n", $2 "") }' $ rc ./dumpvacroots | tail -3
CentOS 7の場合
firewalld
/etc/firewalld/services/venti.xmlを作成。
<?xml version="1.0" encoding="utf-8"?> <service> <short>venti</short> <description>venti is an archival storage server.</description> <port port="17034" protocol="tcp"/> </service>
設定をリロードしてからventiを通す。 permanentで設定した場合、reloadしないと反映されない。
# firewall-cmd --reload # firewall-cmd --zone=public --add-service=venti --permanent # firewall-cmd --reload # firewall-cmd --zone=public --list-services
systemd
/etc/sysconfig/venti:
venti=127.1 PLAN9=/usr/local/plan9
/etc/systemd/system/venti.service:
[Unit] Description=venti server Requires=NetworkManager-wait-online.service After=NetworkManager-wait-online.service [Service] EnvironmentFile=/etc/sysconfig/venti Type=forking Restart=always ExecStart=/usr/local/plan9/bin/venti/venti -c /mnt/venti/venti.conf [Install] WantedBy=multi-user.target
ここでは、ExecStartで>>が使えないためログ出力を外しているが、ログはsystemctl status venti.service -lで読める。
サービス起動。
# systemctl start venti.service
問題なければサービスを有効にする。
# chmod +x /etc/systemd/system/venti.service # systemctl enable venti.service