\n\n表紙に「DevOps」の文字が入ったのが[以前](https://blog.nomadscafe.jp/2012/04/post-13.html)との違いですね。\n\n単に、監視ツールやトラブルシューティングにつかうコマンドの使い方だけではなく、どのようなマインドで運用に取り組むべきなのかまで、広く記事が集められているので、この春からシステム運用に関わるようになった方もそうでない方も、ぜひ手に取って読んで頂けたらと思います。\n\n
わりと長い間悩んでいたんだけど、最近解決したのでメモ。 サービスで利用しているsmalllightの画像変換サーバが、Apacheが使っているメモリ以上のメモリを使用し、Swapしたりメモリ枯渇でサーバがダウンするなどのことが何度かありました。 ↑メモリの動きはこんな感じ いろいろ調べた結果「dentry cache」なるものがメモリ多くを占めていることがわかりました。dentry cacheはディレクトリやファイル名とinodeとを結びつけに使われるキャッシュです。smalllightでは画像を変換する際に一時ファイルを作成するので、その情報が残るようです。 手元で再現させる 本番で使っているサーバはCentOS5系ですが、手元のVagrant上のCentOS6(ファイルシステムはext4)で、再現させてみました。 use Parallel::Prefork; use File::Tem
とあるMySQLのslowlogに残っていたところから見つけたクエリの書き換え。 サービスのどこで使われているものかまで詳しくみていないんだけど CREATE TABLE `category2item` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `category_id` int(10) unsigned NOT NULL, `subcategory_id` int(10) unsigned NOT NULL, `item_id` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `subcategory_id` (`subcategory_id`,`item_id`), KEY `picture_id` (`item_id`), KEY `category_id` (
Nagiosのプラグインで、データ転送速度など、変化量・差分を監視するには、プラグインでどこかファイルに監視結果を保存しておいて比較するという手が使えると2つ前のエントリ書きましたが、 check_snmpでもそれがサポートされていたので試してみました。恥ずかしながら知りませんでした。 check_snmpの「—rate」というオプションがそれ。 --rate Enable rate calculation. See 'Rate Calculation' below --rate-multiplier Converts rate per second. For example, set to 60 to convert to per minute Rate Calculation: In many places, SNMP returns counters that are only me
GrowthForecastをCPANにリリースしました https://metacpan.org/release/GrowthForecast インストールも cpanm GrowthForecast だけで完了します。 それから、このバージョンからインターフェイスやドキュメントのページが英語に変わってます。絶賛添削pullreq募集中です
Apacheを起動するときに使う事もある apachectl の -k restart は stop && start ではないので注意しましょう。 ServerLimitやThreadLimitなどの一部の設定は、restart では適用されず、stop && start が必要になります。 apachectl は実はshellscriptで出来ています。中をのぞくと #!/bin/sh .. HTTPD='../httpd' .. start|stop|restart|graceful|graceful-stop) $HTTPD -k $ARGV ERROR=$? ;; と書かれています。restartはhttpdコマンドにそのまま渡されるようです。 そこでhttpdコマンドのドキュメントを読むと詳しくは Stopping Apache httpd http://httpd.apach
YAPC::Asiaのスライドで予告していた通り、実際に弊社のいくつかのサービスで使っている my.cnf を公開しました。 github: https://github.com/kazeburo/mysetup/tree/master/mysql 今回、公開した理由はMySQl Beginners Talksの発表の中でも触れている通りです。MySQLのソースコード中に含まれるサンプルのmy.cnfが最近のサーバハードウェアや運用に合わなくなって来ているという状況で、自分の設定にイマイチ自信が持てていない人は少なくないはず。そこで各社秘伝のタレ的な my.cnf をOpen & Shareすることで、モダンなmy.cnfを作り上げる事ができるんじゃないかという考えの下、今回 github にて公開しました。 ファイルは4つあり、それぞれ MySQL 4.0、5.1、5.5、そしてテスト中
5.6!5.6!5.6! 今年も無事にYAPC::Asiaに参加と発表させて頂く事が出来ました。牧さん、941さん、JPAの皆様、ボランティアの皆様、参加した全てのPerl Mongersに感謝です。 今年の発表は、去年のこの時期にやっていたlivedoor Blogのサーバ集約作業とその為につくったツールや自動化について紹介させて頂きました。 質問でも出てきた「作成した移行スクリプトの検証」ですが、メンテナンス時間内にデータベースのコピーが完了するかどうかの検証とあわせて、実際に実行して確認していました。今にして思えばdry-runモードを作ってテストケース書いて確認するぐらいやってもよかったかもしれません。次回(があれば)チャレンジしたいです。 もう一つ言い忘れてましたが、mysql40dumpはMySQL 5.1、5.5でも検証済みで弊社でもヘビーにサーバ運用に使っています。自動でm
memcachedに依存するシステムやコードを書く人は大嫌いな訳だけど、スケーラビリティを向上させてレスポンス時間の高速化には必須なmemcachedですが、最近のプロトコル変更には疑問を感じてしまう。 1.4.0では、こちらに書いた通り、いつの間にかdeleteのtimeoutがサポートされなくなった。なので、 delete key timeout noreply というコマンドが無効になって困ることになった。それでも delete key timeout というコマンドは、timeoutにどんなも文字列が入っていてもエラーになることはなかった。timeoutは効かないけど。 ここから1.4.4ではさらに悪化。timeoutが0でないとエラーになるようになった。つまり delete key 0 noreply delete key 0 は有効なんだけど、 delete key 10 がエ
なんかtwitterで書いたらウケたっぽいので cronをつかって外部のAPIに問い合わせる場合は、毎時0分をさけるのオススメ!!!!お兄さんとの約束だ!!! — masahiro nagano (@kazeburo) August 9, 2012 某サービスのAPIへの問い合わせ件数を調べると、毎時 0分台(0秒から59秒)のアクセスは1分から59分までの1分間の平均アクセス数の5倍から8倍にもなります。 これはおそらく、crontabの設定が 0 * * * * /path/to/call_foreign_api になっていることが多いからじゃないかなぁと思うのです。 その結果、サーバのロードアベレージは このように毎時0分だけ跳ね上がってしまいます。サービスを快適に提供できなくなる可能性があるので、APIの利用を制限したり、サーバを追加しなければなりません。これはサービス利用者、サー
MySQLを運用していて特定の時間帯だけ更新クエリが増えているのを見つけたときにバイナリログを探ったりすることはまぁまぁあると思います。最近はmysqlbinlogとperlのワンライナーをつかって調べています mysqlbinlogをつかって特定の時間帯のログを調べるのは $ mysqlbinlog --start-datetime="2012-07-31 09:41:00" --stop-datetime="2012-07-31 09:45:00" mysql-bin.941 こんな感じですね。ちなみにMySQL 4.0.x のmysqlbinlogにはstart-datetime、stop-datetimeのオプションがないので新しいバージョンが入っているサーバに転送するなりして実行しています。 この出力は #120731 09:41:48 server id 9316 end_lo
知っている人多いと思うけど、よく使うイディオム $ .. | sort | uniq -c | sort -nr 「sort | uniq -c」で重複行をカウントでき、さらに「sort -n」で行を数字と見なしてソートすることで重複行のカウントで並べなおすことができます 例えば、Webサーバのaccess_logからよくアクセスしてくるIPアドレスを集計してランキングを表示するには以下のよう書けます $ tail -10000 access_log |cut -f 1 -d ' ' | sort |uniq -c|sort -nr|head -10 209 207.46.204.192 203 59.106.108.114 202 66.249.69.108 171 199.59.149.168 137 78.46.45.35 129 66.249.69.65 120 66.249.69
松信さんが作った Replication Booster for MySQL をデータサイズが大きいデータベースに対して使ってみました。 Yoshinori Matsunobu’s blog: Making slave pre-fetching work better with SSD github - yoshinorim/replication-booster-for-mysql Replication Booster for MySQL をものすごく簡単に説明すると、以下のようになるでしょうか。 MySQL でレプリケーションを設定した場合、マスターのバイナリログをIOスレッドが読み取り、relay-logへ記録します。そしてSQLスレッドがrelay-logから読み取ってテーブルを更新して行きます。Replication Booster を実行するとrelay-logを読み取り、更
この機能欲しかったんだよねー。 CustomLogで、pipeしてrotatelogsを使ってログ分割を行う場合、 CustomLog "|/path/to/rotatelogs /path/to/log/access_log.%Y%m%d%H 7200 540" ログファイルは、 $ ls -1 access_log.2012030116 access_log.2012030118 の様に最新のファイルが変更になります。tail -f で追いかけていた場合は、途中でファイルを手動で切り替えないとならないのでとても不便です。また、fluentdのtail pluginも利用できません。 Apache 2.4.1 のrotatelogsでは、最新のファイルに対してハードリンクを張る機能が追加されたので、とりあえず試してみました。 $ wget http://ftp.riken.jp/net/
slowloris対策として、Apacheの2.1.15から入ったモジュールにmod_reqtimeoutというのがあります。 RequestReadTimeout header=10 body=30 このように設定することで、headerの受信が10秒以内、bodyの受信が30秒以内に完了しない場合、「408」エラーとできます。簡単で便利そうですね 公式ドキュメント http://httpd.apache.org/docs/2.2/en/mod/mod_reqtimeout.html ただし、 Apacheをreverse proxyとして使用している場合はTimeoutにならず、リクエストの一部がproxy先に送られるという問題があるので注意が必要というか、はまったのでその話。 ちなみに、すでにBugzillaには上がっているけど、2.2系ではまだ対応完了してない https://is
みなさん mysqldump は好きですか? 自分はどっちでもありません。 MySQLでよくあるMaster-Slave構成を作る手順は以下のようになると思います MasterからSlaveとなるサーバに一貫性を保った状態のコピーをし、そのデータのバイナリログのファイル・ポジションをメモ。 SLAVEでデータをリストアし、Masterのホスト名、レプリケーションに使うユーザ名・パスワードとメモしたバイナリログのポジションをCHANGE MASTER文に渡し、START SLAVE 一貫性の取れたコピーを作成するためにmysqldumpやxtrabackup、LVMなどでのスナップショットが利用できますが、もっとも簡単な方法がmysqldumpだと思います。 mysqldumpで一貫性のあるデータをとり、その際のバイナリログポジションを記録するには $ mysqldump --single-
nginxやvarnishなどがアツいですが、Apacheもまだまだ実績や安定性から採用されていると思います。ここではデフォルトとは異なる値に変更するサーバ設定を中心に、パフォーマンス改善、安全性向上のためのApacheの設定を紹介します。 mpmの確認 > /path/to/bin/httpd -V Server version: Apache/2.2.19 (Unix) Server built: Jun 23 2011 17:13:13 Server's Module Magic Number: 20051115:28 Server loaded: APR 1.4.5, APR-Util 1.3.12 Compiled using: APR 1.4.5, APR-Util 1.3.12 Architecture: 64-bit Server MPM: Worker PreforkやW
miyagawaさんがjoinしてにわかにアツいdotcloudでnopasteなアプリを動かしてみたよ nonopaste http://www.kazeburo.dotcloud.com/ ソース https://github.com/kazeburo/NoNoPaste-Cloud 元々、ここで紹介したモノで、dotcloud上で展開するにあたりいくつか変更している。主な変更点は psgiをapp.psgiにrename。libへのパスも通す 手軽に動かすためにSQLiteだったのでMySQLに変更 MySQLの設定はホームディレクトリ以下に config.pl を置いてそれを読む込む仕様に サーバの時間がUTCなのでそれにあわせて変更 Makefile.PL に不足がないように inc ディレクトリもgitで管理 です。 だれかが書いていたような気もするけど、dotcloud で
過去に何回か、Webアプリケーションエンジニア向けのインフラ勉強会があったらいいなぁとtwitterにつぶやいたことがありますが、じゃぁ実際どんな内容が良いのか、あまりまとまっていませんでしたので、整理してみました。 まぁ「Webアプリケーションエンジニアに知っていて欲しいインフラの知識」と言いながらWebアプリケーションの運用の仕事をしている自分でも専門にやっている方からみて完璧に答えられる自信はありません。ただ今の世の中ググれば答えは見つかるので「概要は知っている」そして「詳細を調べる方法を知っている」ぐらいで問題ないと思っています。 ネットワークにおけるレイヤ2,3,4,7の概要 TCP/IPの通信開始、通信終了時の状態遷移の把握 IPアドレス、セグメント、スタティックルーティング、NAT CPUのトレンド HDDの構造 RAIDレベル、RAIDカードのBBUの役割 SSDの特徴 ハ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く