カテゴリー別アーカイブ: LAMP[Linux, Apache, MySQL, PHP]

自宅のテープドライブを更新した

 昔から自宅のデータ保管装置としてテープドライブを使ってます。
 DDSからDLT、SDLTと変遷し、今まではLTO(LTO2)を使っていたんだけど、このたび、LTO4に更新しました。
 LTOは最新の6が出始めた感じで、その流れからLTO4の安い中古品が結構で回り始めていて、今回のLTO4購入となりました。

 最近は、テープは過去の遺物的に言われることも多いのですが、諸々考えると十分選択肢となり得るデバイスだと思います。

 手軽なバックアップメディアとしてはBD-Rがあるかと思いますが、LTO4は1本で800GBの保管が可能なので、BD-R1層25GBの32枚分が1本のテープに収まります(BD-Rは2層やXLメディア等もありますが、容量単価、書き込み速度、信頼性などの点では、BD-R1層メディアがベストでしょう)
 また、BD-Rは書き込みエラー率も結構高く、保管中に記録面に傷が付いて読み込み不能という確率も結構あります。 LTOは書き込みエラーはほぼ無く、カートリッジ式で記録面むき出しではないので保管が容易です。
 転送速度的に、BD-Rは最新16倍速で毎秒72MBの転送が可能であるものの対応メディアは価格が高く、信頼出来て容量単価に優れたメディアでは6倍速の毎秒27MBの転送速度です。 LTO4は毎秒100MB以が可能であるのに比べると低速と言わざるを得ません。
 容量単価としては信頼出来る6倍速メディアは30枚で2100円程度です。 LTO4カートリッジは海外から仕入れれば1本20ドル以下なので、容量単価は同等~やや高価な感じです(BD-Rのディスクは怪しいメーカーの製造した物が多々ありますが、LTO4のテープなんてメジャーメーカーしか作っていないため、ブランド不明の物を購入しても、たいていTDKや富士フイルム等が製造した物です)
 BD-Rはランダムアクセスが可能なので、保管したメディアをドライブに入れればすぐ読めるのは利点ですが、バックアップ作業時のメディア交換の手間や、速度・信頼性を考えるとLTO4が有利だと思います。

 大容量・高速と言う意味では、HDDをそのまま保管という方法もありますね。
 速度はLTO4よりも高速、大容量、ランダムアクセス可能であり便利ではありますが、保管の難しさは高く、衝撃や静電気への高い配慮が必要ですね。
 容量単価は1本あたり3TBの物で1万円程度、LTO4カートリッジ4本3.2TBの80ドルと比較するとやや高価です。

 テープはバックアップソフトが必要等という意見もありますが、単純にファイルバックアップであれば、Linux環境でAmanda等のフリーソフトを使用すれば無料で構築可能です。

 今回はドライブを348ドル、PCI-Express接続のSCSIアダプタとケーブルセットを38ドルで購入しました。 同時に、クリーニングカートリッジ5本を17ドル、データカートリッジ50本を950ドルで購入しました。
 約11万5千円で40TBの保管が出来る計算になります。
 そんなに容量なにするねんと言う人もいるかもしれませんが、テレビ録画しまくってて、それを保存したいんです。
 これから年末・年始にかけて10TBくらい開けておかないと番組が保存しきれません。

 今後、熱アシスト記録方式によりHDDは一気に大容量化が進む(最終的に3.5インチ装置で60TB程度まで)と言われていますが、2013年中に一般向け製品が出るかどうかと言うところのようです。 それまでは、現行の垂直磁気記録方式の密度上限で現行の4TB、移行の状況によっては経過的に5TBが出る程度のようです。
 1ドライブ10TBとかのHDDが低価格化してくると、ミラーして同じデータを複数保管等の方法をとって容量単価と信頼性をある程度得られるようになるかなと思いますが、2~3年はLTO4かなと思います。

(1031)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | 1件のコメント

GMOクラウドVPSのSLA返金がきた

 先日のGMOクラウドVPSダウンで、サポートに入れてあった問い合わせに返信メールが来て、SLA適用で月額の10%分をデポジットとしてチャージしたとの事。
 管理画面で確認すると118円がチャージされていた。 しかし、6ヶ月契約してるから、次回の契約更新時にすこし(7080-118)値引きされる感じだね。
 しかし、デポジットだから契約を継続しないと受けられないわけだな。
 まぁ、どこの世界にも絶対に落ちないサーバは無いんだし、一度ミスった方が安全かもしれない? しばらくつきあいますか・・・

(373)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

簡易サーバ監視用シェルスクリプト

 先日のGMOクラウドVPSのダウン時に活躍した簡易スクリプト。
 現在運用しているさくらVPSお名前.com VPSと共に、このバッチを走らせて相互に簡易監視している。

#!/bin/sh
serverlist=(‘server1.hoge.tld’ ‘server2.hoge.tld’ ‘www.piyo.tld’)
mailto=’address@hoge.tld’
date=date '+%Y-%m-%d %H:%M:%S'
for server in ${serverlist[@]}
do
loss=ping -c 1 $server | grep "% packet loss" | sed -e "s/^.* \([0-9]*\)% packet loss.*/\1/"
if test $loss -ne 0; then
echo "[$server] : No responding." | mail -s "Server alert [$server] @ $date" $mailto
fi
done

 HTTP監視とか一切せず、pingを一回打ってみて帰ってこなかったらサーバ名をメールするシェル。
 serverlistに監視対象サーバを列挙して、mailtoに通知先アドレスを入れるだけ。

実行権限をつけてcronで、

*/5 * * * * /home/myhome/bin/pingwatch.sh

みたいにして回す。

 ちょっと書き足して、wgetとかcurlを使うようにすればHTTP等の監視も出来るけど、これくらいがコンパクトで良いかと。

(214)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP], サーバ設定 | コメントをどうぞ

GMOクラウドのサーバ障害を食らった

 昨日(2012/10/18 20:47)からこのブログを入れているGMOクラウドVPSで障害が発生、結局、今日2時7分頃になってやっとサーバが立ち上がった。
 ダウンタイムは5時間強、SLAで返金があるのかな。
 会社から帰宅途中に監視のアラートメールがケータイに飛んできてなかなか慌てた(GMOクラウドとさくらで相互に監視している)

 当初2時間近くアナウンスもなく公式サイトにも接続できず、ユーザのTwitterや掲示板で状況確認する羽目になった。
結局、得られた公式情報は22:30の公式Twitterが最初だった。 障害情報すら得られないのは困りものだ。
 メールがバックアップサーバに飛んでいるからマスタサーバに統合しなきゃなぁ・・・

(334)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

攻撃が激しいのでiptablesで中国・韓国からのアクセスを遮断する

 最近、島問題の影響のようでさくらVPSお名前.com VPS(KVM)のホストにも大陸や半島方面からのDoS的なアクセスがままあってそのたびにホスト制限していたのですが、面倒くさいので、アドレス割り当て情報から大陸と半島からのアクセスを制限するためのiptables設定をしました。

 -Aじゃなくて-Iなのは、許可ルール以前にこのIPを拒否したいため。
 シェル実行してから /etc/init.d/iptables save で保存できる。

 ドロップしたパケットを記録したい場合は、

-N LOGDROP
-A LOGDROP -j LOG –log-prefix “[iptables drop]”
-A LOGDROP -j DROP

みたいに、新しい挙動LOGDROPを定義して、LOGDROP挙同時にはLOGってDROPする動きにする。
 で、従来の-j DROPの代わりに-j LOGDROPにしてやると、messagesログファイルにドロップした情報が記録されるようになる。
 LOGDROPを定義せずにLOGって、DROPしてを繰り返し書いても良いけど、数が多いときはこの方が楽。

(1042)

カテゴリー: サーバ設定 | タグ: , | コメントをどうぞ

MySQLチューニング:ソートやグルーピングするテーブルが大きいときはサブクエリを挟んだ方が速かった

 MySQLの便利機能でGROUP_CONCATってのがある。

SELECT primary_id, GROUP_CONCAT(item_id) AS item_id_list FROM stock GROUP BY primary_id ORDER BY primary_id ASC LIMIT 50

みたいにすると、stockテーブルのprimary_idでグループ化して、そのグループ内のitem_idをカンマ区切りで返してくれる。
 このとき、item_id_listはBLOBになったりする。
 こんな感じでもっと複雑なテーブルについてきたとき、ORDERやLIMITの関係でtmpテーブルでの作業が発生するんだけど、BLOBがMEMORYエンジンに乗らないのでボトルネックになっていた。
 さくらVPSお名前.com VPS(KVM)では、物理マシンに比べてディスクI/Oが弱いのでTmp to Diskになると著しく遅くなるので改善したい。
 ORDERやLIMITがINDEXで直ちに確定できない場合に、巨大なデータセットがtmpになるので、とりあえずこれをサブクエリにして

SELECT s.*, GROUP_CONCAT(item_id) AS item_id_list FROM (SELECT primary_id FROM stock GROUP BY primary_id ORDER BY primary_id ASC LIMIT 50) p LEFT JOIN stock s ON s.primary_id = p.primary_id GROUP BY s.primary_id ORDER BY s.primary_id ASC

みたいにした方が高速になった。
 この場合は、外のクエリは結局tmpの処理があるんだけど、LIMIT処理がサブクエリ中でかかっているから、JOINの段階でデータサイズが小さくなってCopy to Tmp Tableの時間が短縮できる。
 中間処理テーブルが大きくてLIMITが小さい場合ほど効果的。
 まぁ、根本を直した方が良いんだけど、とりあえず、簡単な修正で処理時間を短縮できるメモ。

(1265)

カテゴリー: MySQL | コメントをどうぞ

MySQLで過去x日間と言う条件を書く

 MySQLで指定日数前の日付を取得する場合、

DATE(DATE_ADD(NOW(), INTERVAL -日数 DAY))

で取得出来る。

createdateに日付を入れていて、最近7日以内に作られたレコードを求める場合、

SELECT * FROM my_table WHERE createdate >= DATE(DATE_ADD(NOW(), INTERVAL -7 DAY))

みたいになる。 ちなみに -0 DAYなら今日になる。

 関連して、日付の曜日を取得する場合、

WEEKDAY(日付)

で取得する。 0が月曜で始まる。

 今週の月曜日の日付は、

DATE(DATE_ADD(NOW(), INTERVAL -WEEKDAY(NOW()) DAY))

で取得出来る。

 今週の月曜日からの記録を切り出す場合、

createdate >= DATE(DATE_ADD(NOW(), INTERVAL -WEEKDAY(NOW()) DAY))

で取得。

 先週の月曜から金曜までの記録を切り出す場合、

createdate >= DATE(DATE_ADD(NOW(), INTERVAL -WEEKDAY(NOW())-7 DAY)) AND createdate < DATE(DATE_ADD(NOW(), INTERVAL -WEEKDAY(NOW())-3 DAY))

※BETWEENは以上以下。 時刻なしのDATEは0時0分0秒扱いだから1秒減算する必要がある。

(956)

カテゴリー: MySQL | コメントをどうぞ