見出し画像

FreeBSDサーバ・バックアップ体制構築

今日は仕事のあと職場に残り、サーバーのバックアップ体制を構築してきましたよ。

サーバ構成

メインサーバ

  • 起動はUSBメモリスティック

  • SSDのデバイス名は/dev/ada0p1、この領域を/jailにマウント

  • サービス提供領域はjailに入れる。

バックアップサーバ

  • USBメモリスティック起動、SSDを/jailにマウント、などの構成はメインサーバと同一

  • IPアドレスだけメインサーバとは変えてある。

  • /jail領域を定期的にメインサーバからrsyncしてバックアップ

つまり、起動に使うUSBメモリスティックさえ差し替えれば、バックアップサーバがそのままメインサーバとして使えるという点がミソなのです。

バックアップ体制

メインサーバでスナップショットを作成

crontabで次のような感じで回す。

/etc/rc.d/jail stop www ; /usr/local/bin/rsync -au /jail/www/ /jail/www.snapshot/ ; /etc/rc.d/jail start www

一旦jailをstopし、スナップショットを取れる状態にしてからrsyncを回す点がポイントです。稼働状態のままだと、データベースサーバがデータの不整合を起こして起動しなくなっちゃいますからね。
DBをぶん回していない領域であれば、別にjailを止めなくても大丈夫ではあります。

メインサーバからバックアップサーバにrsync

こちらもcrontabにて次のような感じに。

/usr/local/bin/rsync -auz /jail/www.snapshot/ rsync://192.168.x.x/jail/www/

もちろん192.168.x.xはバックアップサーバのIPaddressです

バックアップサーバ側の設定

こちらの幾つか設定しておかないといけないですね。
まず、jailは止めておきます。別に動かしてても良いんですが、DBを稼働させている場合にrsyncで中途半端にファイルが更新されちゃうと、DBのプロセスがパニックしちゃったりして宜しくないので、snapshotを受け入れる体制にしておくほうが良いでしょう。勿論、負荷分散か何かのためにwebサーバなんかをメインサーバと一緒に並列稼働させたい場合は、rsyncでメインサーバから複製される領域とjailで稼働させる領域を分けておき、rsyncが掛かっていないときにjailをstopして移し替えるなんて方法もアリだと思います。
利便性としては、バックアップサーバ側から定期的にrsyncでsnapshotを取りに行き、そのスクリプトの中でjailを止めて領域をリネームかなんかしてjailを再稼働させればダウンタイムを小さくすることができますが、メインサーバ側にポート873を開けるのがちょっと嫌な気がしまして…。(でも、パケットフィルタリングを掛けつつその構成の方が良いかもしれん。そのように変更したらまた書きます)

こちらは/etc/rsyncd.confを

address = 192.168.xxx.xxx
uid = root
gid = wheel
max connections = 1
read only = no
[jail]
hosts allow = 192.168.xxx.xxx(メインサーバのIPaddress)
path = /jail
comment = jail

こんな感じにすれば良いかな。

ひとまず以上の構成で動かしてますが、ちょくちょく改良を加えていくかもしれません。
何せjail領域そのまんまをやり取りするわけで、セキュリティ的に気を付けつつ、ね。(まぁ通信経路のssh化すればいいという話もありつつ)

今日の所はこんな感じです。

以上。

いいなと思ったら応援しよう!