coreserver.jpにバックアップしてみる。

ブログ | 2009/11/6 01:19
Amazon S3にバックアップしてみる。
http://www.rottel.net/kuwa/book/12/47631

で、Amazon S3を使っていたのだけれど、海外だからかとにかくアップロードが遅い。最初30GBを上げるのに3日以上かかったから、もし何かがあってデータを復旧させたい時に、データを戻してくるのに3日以上かかることになる。

で、最近value-domain(DigiRock)のやってるcoreserverに60GBで990円というのが出てたので、そっちで構築できるか思考錯誤。
http://www.coreserver.jp/

rsyncで可能なのだけれど、いくつかコツがいる。
1) ssh接続の前に、コンパネからホスト情報を登録しなければいけない。
2) 大量にrsyncしてると、接続が切れる。
このあたりをクリアして自動化させる。

まず、ssh接続。
検索するといくつかでてくる。
http://d.hatena.ne.jp/int128/20090113/1231850343

perlのLWPなるものをインストールして、問題なく動いたけれど、自由じゃないサーバーからも使いたいのでPHPで書いてみた。(phpinfo()か何かでopensslが入っているか確認して、入ってなければインストールする必要はあり)

core_conn.php
<?php

$userid = 'ユーザーID';
$pass = 'パスワード';
$server = '**.coreserver.jp';

$ip = file_get_contents('http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip');

$data = array(
 'id' => $userid,
 'pass' => $pass,
 'remote_host'=>$ip,
 'ssh2'=>'SSH登録',
);
$data = http_build_query($data);

$header = array(
 'Content-Type: application/x-www-form-urlencoded',
 'Content-Length: '.strlen($data)
);

$context = array(
 'http' => array(
   'method'  => 'POST',
   'header'  => implode(PHP_EOL, $header),
   'content' => $data
 )
);

$url = 'https://ss1.coressl.jp/www.'.$server.'/jp/admin.cgi';
$html = file_get_contents($url, false, stream_context_create($context));

$html = mb_convert_encoding($html,'UTF-8','SJIS');

echo date('Y/m/d H:i').' ------------------- core_conn.php'.PHP_EOL;
if(preg_match('/データベースに追加しました。反映には5〜10分程度掛かります。/',$html)){
 echo 'データベースに追加しました。反映には5〜10分程度掛かります。'.PHP_EOL;
}else{
 echo 'おそらく失敗。'.PHP_EOL;
}

?>
これをcronで、1日1回でも動かしておく。(説明では「※ 30日間、同じIPアドレスからの接続を許可します。」と書いてある)
/opt/local/bin/php core_conn.php
といった具合。

次、パスワードなしでのSSH接続
http://www.rottel.net/kuwa/book/12/34683
このあたりの要領で、coreserverで、
cd
mkdir .ssh
cd .ssh
touch authorized_keys2
vi authorized_keys2
とかやって、authorized_keys2に鍵を記述。これで繋がると思う。

で、rsync。15分くらいで止まるようなので、そのあたりの処理。

core_sync.sh
#!/bin/sh
rsync -avz --delete /Users/******/*****/backup/ ユーザー名@サーバー:/virtual/ユーザー名/backup/ &sleep 900
pid=`ps ax | grep rsync | grep -v grep | awk '{print $1}'`
kill $pid

exit
途中で止まるとshプロセスがそのまま残り続けてしまうので、15分でrsyncを強制終了して終わらせる。よく分からないけれど、「&」で繋げるとバックグラウンドで処理が動くらしい。

coreserverの利用規約に、ひとつのディレクトリに大量のファイルを置いてはいけないとあるから、なんとかしていかなければと思う今日この頃。
▼追記 2010/2/15 20:48
coreserver、いつの間にかに50万ファイルという制限を導入したらしい。すでにオーバーしているので、ファイルを上げられない。
coreserverは、諦めようかと思ったけれど、アーカイブ化して、もう少し粘ってみる。
縮小 拡大

ログインしておくと、後で編集が可能です。

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close