‘Backup’ カテゴリーのアーカイブ

CentOS:Mondo ResqueによるP2Pリストア(実験中)

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社で使っているRedMine,Subversion用のサーバを今より高機能のサーバに移設してもよいよという許可が下りたので、それを楽にするためにMondo Rescueを使ってみることにした。Mondo Resqueは様々なデバイスにバックアップを取ることが可能、かつ、フルバックアップ可能で、しかもハードウェア環境に依存せずにサーバを移動させることができるということだった!ここに惚れた!

インストールについては、日を改めて書くとして、今は、P2P(Physical to Physical)リストアが成功したので、その方法を刻む。

■移動元のサーバ構成
Pen4 1.4G
メモリ 512MB
HDD 40GB

■移動先のサーバ構成
PenD 2.0G
メモリ 2GB
HDD 500GB

【参考URL】
Mondo Rescueを使ってXenServerの仮想ホストへ

KnoppixなどのCDブートLinuxで、移動先サーバのHDDを初期化する。

fdisk /dev/sda
----以下 fdiskコマンド----
Command (m for help): n
Command action: p
Partition number (1-4): 1
First cylinder : enter
Last cylinder: +256M

Command (m for help): n
Command action: p
Partition number (1-4): 2
First cylinder : enter
Last cylinder: enter

Command (m for help): t
Partition number (1-4): 2
Hex Code: 8e

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p
# 構成を確認

Command (m for help): w
----ここまで----

パーティションの作成ができたので、次はLVMで論理ボリュームを作成する。
ボリュームグループ名は、移動元のボリュームグループ名にしておく。

# 物理ボリュームの作成
pvcreate /dev/sda2
pvdisplay /dev/sda2

# ボリュームグループの作成
vgcreate VolGroup00 /dev/sda2
vgdisplay

# 論理ボリュームの作成
lvcreate -L 38912m -n LogVol00 VolGroup00
lvcreate -L 2048m -n LogVol01 VolGroup00
lvdisplay /dev/VolGroup00/LogVol00
lvdisplay /dev/VolGroup00/LogVol01

# 各パーティションのフォーマット
mkfs.ext3 -j /dev/sda1
mkfs.ext3 -j /dev/VolGroup00/LogVol00
mkswap /dev/VolGroup00/LogVol01

以上が、Knoppixでの作業。

次に、mondoarchiveコマンドで作成されたisoファイルをDVDに焼いて、移動先サーバをDVDでブートする。
boot:と表示されたところで、

interactive ramdisk_blocksize=1024 quiet textonly

で起動させる。(別に、expertでも大丈夫だと思うけど。)

DVDからリストアを選択。
mountlistの書き換えを行う。
移動元がhdaだったので、移動先のsdaに書き換えを行う。

Device                    Mountpoint   Format   Size(MB)
/dev/sda2                 lvm          lvm        0
/dev/VolGroup00/LogVol00  /            ext3       0
/dev/sda1                 /boot        ext3       0
/dev/VolGroup00/LogVol01   swap        swap       0
---

Are you sure want to save your mountlist and continue?: yes

Do you want to erase and partition your hard drivers?: no

Do you want to format your hard drivers?: no

Do you want to restore all of your data?: yes

Initiarize the boot loader?: yes

Did you change the mountlist?: yes

# あと何種類かあったが、思い出せない…
# multipath.confを修正しろとか。でも、何も書き換えずにすぐq!で終了。
# mkinitrd -f -v initrd-2.6.x.y.img 2.6.x.yみたいなのをしろとかあった。

# fstabで書き換え
vi /etc/fstab
LABEL=/boot → /dev/sda1

# grubのパスを変える
grub-install --recheck /dev/sda
grub-install /dev/sda

cd /boot
mkinitrd -f -v initrd-2.6.18.164.6.1.el5.centos.plus.img 2.6.18.164.6.1.el5.centos.plus

# 再起動。-fがないと再起動しなかったので、-fを付けた。
reboot -f

走り書きで書いたが、こんな感じだった。
うまくP2Pでサーバの移設ができたっぽい。ハードウェア構造が全く異なるのに、OSが動いて感動。実際は、grubのあたりでいろいろとトラブったんで、すごく感動した。
今回は実験だったので、本番移設はまだだが、この経験を生かしたい。


RedMine:アップグレードに失敗したのちに復旧

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社の開発用サーバに入れているRedMineのバージョンアップを試みたが失敗したので、その軌跡を書いておく。

まず、RedMine 0.8.4 にしようとして、svn updateをしてRedMineのソースを最新版にした後に、rubyのバージョンが1.8.7でないといけないことに気付いた。CentOS5.3でyumを使ってrubyをインストールすると1.8.5が入ってしまい、バージョンアップが必要となった。そこで、rubyのバージョンアップを行った。

参考にしたサイト:http://d.hatena.ne.jp/amacou/20090409/1239245934

まず、yumで必要なものをインストール

yum install gcc
yum install zlib-devel
yum install rpm-build
yum install openssl-devel
yum install readline-devel
yum install nkf
yum install mysql-devel

次に、今まで使っていたrubyとおさらばする。

yum remove ruby

次に、ruby-1.8.7をインストールする

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.bz2
tar xfj ruby-1.8.7-p174.tar.bz2
cd ruby-1.8.7-p174
./configure --prefix=/usr --with-install-readline
make
checkinstall --fstrans=no

バージョン違いのものが残っていたらいけないからだと思うが、rubyにまつわるものを消しとく。

rm -rf /usr/bin/ruby
rm -rf /usr/lib/ruby

で、さっき作ったrubyのRPMをインストールする。

rpm -ivh /usr/src/redhat/RPMS/i386/ruby-1.8.7-p174-1.i386.rpm

次に、RubyGemsをインストール。最新版の1.3.5にした。

wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.5.tgz
tar xfz rubygems-1.3.5.tgz
cd rubygems-1.3.5
checkinstall -R "ruby setup.rb"
rpm -ivh /usr/src/redhat/RPMS/i386/rubygems-1.3.5-1.i386.rpm

ここで、Railsのインストール。バージョンを指定しないと、最新版が入ってしまうので注意。RedMine 0.8.4は、2.2.2が指定されているので、とりあえずそれを入れてみた。

gem install rails -v=2.2.2

ここで、ようやくRedMineのアップグレードを行う。
データベースのバックアップは必須!!私は毎日自動でバックアップをするシェルスクリプトを組んでたので、今回は助かった。
svnからチェックアウトしている前提です。

参考にしたのは、RedMine.JPのアップグレード方法です。

svn update
rake db:migrate RAILS_ENV=“production”
rake tmp:cache:clear
rake tmp:sessions:clear

アプリケーションを再起動後、権限のあたりを修正ということだったので、Apacheを再起動したら、RedMineがInternal Server Errorになった…。ここからが悲劇の始まりだった。(いろいろやって記憶が曖昧なので、情報が違う可能性がありますがご容赦ください)

まず、何が悪いのかわからない。.htaccessを見る限り、俺がRedMineをインストールしたのはFastCGIを使っている状態で、Passengerを使ってなかったので、それが原因かなぁと思った。入門RedMineに、よほどのことがない限りはPassengerのほうがいいよと書いてあったので、Passengerに変更しようとした。

Passengerをインストールした。

gem install passenger

その後、Passengerモジュールをインストール。

passenger-install-apache2-module

Passenger用にApacheのconfファイルを作成しておく。
/etc/httpd/conf.d/passenger.confを作成。conf.dにある*.confは自動的に読み込まれるようにしてあるのが前提。

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4
PassengerRuby /usr/bin/ruby

RedMineはサブディレクトリで運用していたので、/etc/httpd/conf.d/redmine.confに以下を追加した(redmine.confは私が作成しただけで、普通にあるわけではない。しかも、FastCGI用の設定を書いていた)。

# PassengerでサブディレクトリのRedMineを動かすため
RailsBaseURI /redmine

# その後、FastCGIで設定していたものなどをコメントアウト
# ただし、それらがあっていたかはわからない。

Apacheを再起動したが、駄目。RedMineのpublicディレクトリの.htaccessを修正しても、駄目。1日かけて作業をしたのだが、RedMineのアップグレードができなかったので、元に戻すことにした…。

まず、既存のRedMineディレクトリをバックアップしておく。
その後、svnで自分が使っていたRedMineのバージョンをチェックアウトする。自分が使ってたのは、RedMine-0.7.0。
バックアップしていたRedMineから設定ファイル(database.yml, email.ymlなど)をコピーする。
データベースからテーブルを削除して、バックアップデータから復元する。(phpmyadmin経由で)
ruby-1.8.7, RubyGems-1.3.5を削除する。

rpm -e rubygems
rpm -e ruby-1.8.7
rm -rf /usr/lib/ruby

yumで、ruby-1.8.5を再インストールする。

yum -y install ruby ruby-devel ruby-irb ruby-rdoc ruby-ri

RubyGems-1.3.5を再インストールする。

cd rubygems-1.3.5
checkinstall -R "ruby setup.rb"
rpm -ivh /usr/src/redhat/RPMS/i386/rubygems-1.3.5-1.i386.rpm

Railsのインストール。0.7.0では、Rails 2.0.2を指定する。
あと、fcgiも入れとく。

gem install rails -v=2.0.2
gem install fcgi

以前のredmine.confとpublicディレクトリ以下の.htaccessを以前のものに戻して、Apacheの再起動をしたら、見事に復旧した。とりあえず、ほっとした。ただ、1日何やってたんだろうという徒労感だけは半端なかったけど、データのバックアップって大事だなぁと痛感されられた。アップグレードできなかった原因はまた後日、余裕があるときにやろうと思う。


WinSCPでバッチ処理を行う

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社で使ってるプロジェクト管理ツールのRedMineのバックアップを全然やってなかったので、さすがにそろそろバックアップしとくかということで、シェルスクリプトを書いた。あんまりシェルスクリプト書かないので、こういう書き方が正しいのかはわからないが、一応動いているので、メモとして残しておく。ちなみに、運用として、日付でバックアップしていくとどんどん増殖していくので、7日分もあれば十分だろうと思われるので、曜日で管理する。また、ファイルサイズも大したことなかったので、非圧縮である。

まずは、シェルスクリプトを書く。

vi redmine-backup.sh
#!/bin/bash

#Apacheの停止
service httpd stop > /dev/null

# RedMineのファイルディレクトリを指定
ATTATCHDIR=/path/to/files

# バックアップ先ディレクトリを指定
BACKDIR=/path/to/backup

# MySQLrootパスワード
ROOTPASS=********

# 曜日を取得
int_youbi=`date +%w`

case "$int_youbi" in
# 日曜日
0)
        youbi="sun"
        ;;
# 月曜日
1)
        youbi="mon"
        ;;
# 火曜日
2)
        youbi="tue"
        ;;
# 水曜日
3)
        youbi="wed"
        ;;
# 木曜日
4)
        youbi="thu"
        ;;
# 金曜日
5)
        youbi="fri"
        ;;
# 土曜日
6)
        youbi="sut"
        ;;
esac

# MySQLのredmineデータベースのバックアップ
mysqldump -u root -p$ROOTPASS redmine > $BACKDIR"/redmine_"$youbi".dump"
# RedMineのファイルディレクトリのバックアップ
rsync -a $ATTACHDIR $BACKDIR > /dev/null

# ファイルの持ち主をWinSCP接続するユーザに変更
chown -R hoge. $BACKDIR
# Apacheの起動
service httpd start

これで、RedMineのバックアップを取るシェルスクリプトが出来た。
次に、rootのみの権限に変更した。

chmod 700 redmine-backup.sh

これを、cronに登録する。

echo "0 5 * * * root /root/redmine-backup.sh" > /etc/cron.d/backup

ここからWindows側の作業。
さきほどのシェルスクリプトで保存したデータをWindows側に自動に保存する。
通信方法はSSH。SSHクライアントとしてWinSCPを使う。

参考情報はこちら:WinScpをWindowsバッチで自動的に動かす方法

まずは、バッチファイルを作成する。ファイル名は、redmine.batとでもする。
ユーザ名とホスト名は、事前にWinSCP側に登録しておくこと。
/scriptで指定するファイルに、WinSCPに行わせる作業を記述する。

"C:\Program Files\WinSCP\WinSCP.exe" username@hostname /console /script=.\redmine.scr

次に、redmine.scrを記述する。
バッチ処理なので、上書き確認などはしないようにする。
バックアップ先は、E:\backup\redmineとする。

option batch on
option confirm off
option transfer binary
cd /path/to/backup/
lcd "E:\backup\redmine"
get -preservetime * .\
close
exit

redmine.batを実行してみて、ちゃんとダウンロードできたか確認する。
バックアップがダウンロードできているようだったら、
コントロールパネル > タスク > スケジュールされたタスクの追加
より、RedMineバックアップ用のタスクを作成する。基本的に1日1回だろうから、システム起動時に自動的にDLさせるようにしておいた。これで、RedMineサーバが故障してもデータの心配はなくなったと思われる。(サーバと俺のPCが同時にお亡くなりになったら終了だが。。。)