気ままにインフラエンジニア

渋谷で働くインフラエンジニアの備忘録。 TwitterID: @nakashii_

logrotateで簡単に世代バックアップ(couchdb)

couchDBのデータはreplicationをするか、database fileを適当にバックアップしておいてねという仕様のよう。*1

rsyncやcpのshellを書いてもよいのですが、バックアップの世代管理を手軽に行いたいときはlogrotateを愛用してます。

今回はchefに使われているcouchdbをバックアップしていますが、プロダクトに組み込みの各種DB・ファイル等(pg_dumpだったりその他の普通のtarballだったり)いろいろ使い道はあるかと。

/etc/logrotate.d/couchdb に追記

# 日次バックアップ
/var/backups/couchdb_backup_daily.tar.gz {
  missingok
  nocreate
  daily
  rotate 14
  sharedscripts
  postrotate
    /bin/tar -C /var/lib/ -czf /var/backups/couchdb_backup_daily.tar.gz couchdb
  endscript
}
# 月次バックアップ
/var/backups/couchdb_backup_monthly.tar.gz {
  missingok
  nocreate
  monthly
  rotate 3
  sharedscripts
  postrotate
    /bin/tar -C /var/lib/ -czf /var/backups/couchdb_backup_monthly.tar.gz couchdb
  endscript
}

頻度(rotate)は適当に変えて下さい。

管理するデータ量が多い場合は、postrotateの圧縮後に、couchDBのデータ容量を削減しておきます。(↓chefの場合)

/usr/bin/curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_compact
# 設定のテスト
logrotate -d /etc/logrotate.d/couchdb
# 手動で実行してみて、rotateされることを確認
logrotate -f /etc/logrotate.d/couchdb


logrotate.dの設定自体にはdailyより細かい指定はできないが、-fオプション付きをcronで回すことで、さらに頻繁にバックアップすることも。
(ログならともかくDBのデータでそこまでするのであれば別の方法がよさそうですが)


shを書いてcronを動作確認してという手間が無いのでlogrotateは便利なんですが、バックアップしてることが他人に伝わりにくいのが難点といえば難点でしょうか…

*1: http://wiki.apache.org/couchdb/How_to_make_filesystem_backups