タグ

ブックマーク / hirose31.hatenablog.jp (17)

  • マルチスレッドでgetaddrinfo(3)するとたまに Temporary failure in name resolution (EAI_AGAIN) で失敗する件 - (ひ)メモ

    マルチスレッドでgetaddrinfo(3)するとたまにTemporary failure in name resolution (EAI_AGAIN) で失敗します。 自分は↓な環境で確認しました。 CentOS 6.5 glibc-2.12-1.149.el6_6.5 こういうコードで再現します。(ruby 2.1.4で確認) なお、便宜的にrubyで再現コードを書いていますが、該当環境であれば言語問わずマルチスレッド+getaddrinfo(3)の組み合わせで発現する問題です。 対処法は、 glibc glibc-common glibc-devel glibc-headers nscd のrpmをCentOS 6 Updatesにあるバージョン 2.12-1.149.el6_6.9 のに上げればOKです。 ちなみに自分は、Chef実行時にたまにberksのAPIサーバーの名前が引け

    マルチスレッドでgetaddrinfo(3)するとたまに Temporary failure in name resolution (EAI_AGAIN) で失敗する件 - (ひ)メモ
    honeybe
    honeybe 2015/07/09
  • h2o試してみました、もしくはとりあえずサクッと既存のサイトをHTTP/2化する方法 - (ひ)メモ

    先日、HTTP/2が正式な仕様として承認されると同時に、その実装であるH2Oのv1.0.0もリリースされました。 Kazuho's Weblog: H2O, the new HTTP server goes version 1.0.0 as HTTP/2 gets finalized HTTP/2の情報はちょいちょいウォッチはしていたのですが、今までHTTP/2なサーバーを動かしたことはなく、いい機会なので自分のサイトをH2Oを使ってHTTP/2対応してみました。 https://www.irori.org 大したことはやってないのですが、Apacheでサービスしており、認証やアクセス制限、ごにょごにょ黒魔術、CGI(!)やSSI(!!)なども動いているので、ApacheをH2Oにリプレースするのは無理でした。 そこで、H2Oをリバプーとして前段に置き、Apacheを後段に置く構成にしまし

    honeybe
    honeybe 2015/02/23
  • 『Serverspec』を読みました - (ひ)メモ

    『Serverspec』を読んだ(ご恵贈ありがとうございました!)ので感想とかを書いてみたいと思います。 ちなみに、書は1/17発売なので既に書店に並んでいると思いますし、 Serverspec 作者: 宮下剛輔出版社/メーカー: オライリージャパン発売日: 2015/01/17メディア: 単行(ソフトカバー)この商品を含むブログ (6件) を見る 電子書籍版もあるのでお急ぎの向きはそちらを購入するのもいいかと思います。 http://www.oreilly.co.jp/books/9784873117096/ Serverspec, Specinfra を拡張したい、内部を知りたい、使い倒したい人 Serverespec, Specinfraの生みの親であり書の著者でもある mizzy ([twitter:@gosukenator]) さんが自ら、 その代わり、開発に至る経緯や開発

    『Serverspec』を読みました - (ひ)メモ
    honeybe
    honeybe 2015/01/20
  • github:eで管理しているChefのクックブックを、Berkshelf APIサーバーを立てていい感じに依存解決する方法 - (ひ)メモ

    ちょっと前にリリースされた Berkshelf 3から、Berkshelf APIというインデックスサーバーからクックブックの情報を得るようになりました。 https://github.com/berkshelf/berkshelf/wiki/2.x-to-3.0-Upgrade-Guide https://github.com/berkshelf/berkshelf-api Berkshelf APIを使うと、外部に公開していないクックブックをBerksfileで指定する際の記述が簡潔になります。 まだ日が浅いせいか、Berkshelf APIgithub:e の情報が少ないので、備忘録も兼ねて残しておきます。 環境は以下のとおりです。 berkshelf (3.1.3) berkshelf-api (2.0.0) Berkshelf APIが必要な理由 Berksfile で c

    github:eで管理しているChefのクックブックを、Berkshelf APIサーバーを立てていい感じに依存解決する方法 - (ひ)メモ
    honeybe
    honeybe 2014/07/14
  • Nginxでproxy_passにホスト名を書いた時の名前解決のタイミング - (ひ)メモ

    Nginx 1.4.2で試しました。 ネームサーバーは、ローカルのunboundをlocal-zone, local-dataを使って簡易コンテンツサーバーにして試しました。 local-zone: "oreno." static local-data: "api.oreno. 30 IN A 192.0.2.11" # local-data: "api.oreno. 30 IN A 192.0.2.12" proxy_passにホスト名を書くと→名前解決は一度だけ このように Nginx の設定を書いた場合、 location /api { proxy_pass http://api.oreno:9999; } 「api.oreno」の名前解決は、nginxの起動時に行われます 名前解決できない場合は、nginxは起動しません 名前解決できた場合は、ずっとそのIPアドレスにreverse

    Nginxでproxy_passにホスト名を書いた時の名前解決のタイミング - (ひ)メモ
    honeybe
    honeybe 2013/11/13
  • RedisのLuaで時間のかかる処理をするとどうなるか? - (ひ)メモ

    Redis は基的にシングルスレッド、イベントドリブンモデルなので、時間のかかるLua スクリプトを実行したらどうなるかというのは想像に難くないのですが確認してみました。 Redis は 2.6.14 です。 redis-cli eval 'while true do print("hello") end' 0な感じのを実行します。 実行中に、別クライアントから GET, INFO, PING すると全てブロックされて結果が返ってきません。 redis.conf で lua-time-limit 5000 と設定している場合は、5秒後に redis-server のログに [18068] 22 Jul 13:51:23.798 # Lua slow script detected: still in execution after 5000 milliseconds. You can t

    RedisのLuaで時間のかかる処理をするとどうなるか? - (ひ)メモ
    honeybe
    honeybe 2013/07/22
  • unix domain socketでファイル記述子をやりとりするソケットプーリングを書いてみた - (ひ)メモ

    unix domain socket経由でプロセス間でファイル記述子のやりとりができるので、コネクションをプーリングして、unix domain socket経由で別プロセスに貸し出すスクリプトを試しに書いてみました。 https://github.com/hirose31/socket-pooling poold.pl は起動すると 127.0.0.1:11211 へのコネクションを 3 つ作って保持し、unix domain socketをlistenしてクライアントからの貸し出し要求を待ちます。 ちなみに、unix domain socket は名前付きのではなく、abstract namespace のを作っています。これの利点は、パスに依存しないので、chroot内のプロセスと外のプロセスがやりとりできる点です。 client.pl は起動すると、unix domain sock

    unix domain socketでファイル記述子をやりとりするソケットプーリングを書いてみた - (ひ)メモ
    honeybe
    honeybe 2013/05/22
  • プロセス間の期限付き排他ロック - (ひ)メモ

    追記 2013-03-04 [twitter:@dankogai] さんにも言及されてました>< 404 Blog Not Found:perl - soloで任意のコマンドを期限付きで排他実行する 追記 2013-03-01 つづきを書きました。 続・プロセス間の期限付き排他ロック - (ひ)メモ 追記 2013-02-27 コメント欄でのやりとりの通り、穴がある(クリティカルセクションに複数プロセスが突入する可能性がある)のでちょっと出直してきます!! やりたいこと プロセス間の排他的実行を制御したい 一定時間経過したら実行できるようにしたい 例えば、フェイルオーバーを実行するスクリプトは、何度も実行できるとフェイルオーバー/バックを繰り返してフラップするので、一度フェイルオーバーしたら一定時間は実行できないようにしたい 実装 シンボリックリンクを使って排他制御する 期限切れは、シンボ

    プロセス間の期限付き排他ロック - (ひ)メモ
    honeybe
    honeybe 2013/02/27
  • Re: UNIX Command Idioms - (ひ)メモ

    Re: [twitter:@riywo]'s UNIX Command Idioms ps auxwwwwwww number of "w" depends on my mood in that day :D ps auxwwwwwwwww -L netstat -tna / -una / -tnl / -tnap tar xvf tar zxvf / jxvf / Jxvf are boring trailing slash in rsync rsync -av file [file] HOST:dir/ rsync -av dir/ HOST:dir/ tcpdump -i any -nlx strace -s 100 -fFTttt diff -u /path/to/file <(ssh host cat /path/to/file) see also: http://d.haten

    Re: UNIX Command Idioms - (ひ)メモ
    honeybe
    honeybe 2013/02/27
  • dstatの万能感がハンパない - (ひ)メモ

    サーバーのリソースを見るにはグラフ化は重要ですが、推移ではなくリアルタイムな状況、例えば秒単位のスパイキーな負荷を見るには、サーバー上でvmstatやiostatなどの*statファミリーを叩く必要があります。 さて、vmstatはメモリの状況やブロック数単位のI/O状況は見られますが、バイト単位のI/O状況やネットワークの送信、受信バイト数を見ることはできません。 # vmstat 1 procs -----------memory---------- ---swap--- -----io----- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 3 1 0 4724956 355452 726532 0 0 54 484 3 3 1 0 99 0 0 2 0 0 47

    dstatの万能感がハンパない - (ひ)メモ
    honeybe
    honeybe 2012/03/01
  • フロント/バックのreverse proxy構成で、指定秒数以内に必ずレスポンスを返す方法 - (ひ)メモ

    目的 フロントがHTTPリクエストを受けて、バックエンドのアプリケーションサーバにreverse proxyするような構成において、指定秒数以内に何かしらのレスポンスを返したい。 200が返せない場合は、処理を打ち切って500を返したい。 背景 フロントでApacheやNginxをreverse proxyとして使っている場合、バックエンドが無応答になってしまうと、クライアントにレスポンスが返るのはデフォルトで数十〜数百秒後(ApacheのTimeoutのデフォルトは300秒、Nginxのproxy_read_timeoutのデフォルトは60秒)になってしまいます。 通常のWebサービスではこのオーダーのタイムアウトでもいいのかもしれませんが、数秒以内に(エラーでもいいので)レスポンスを返すことが求められる環境も存在します。(最近、特に多いのではないでしょうか:P) もちろんバックエンドが

    フロント/バックのreverse proxy構成で、指定秒数以内に必ずレスポンスを返す方法 - (ひ)メモ
    honeybe
    honeybe 2010/06/23
  • IPアドレスブロックを集中管理する方法と、その活用法 - (ひ)メモ

    やりたいこと 携帯3キャリアのIPアドレスブロックは比較的頻繁に変わるので自動更新したい 自宅やオフィスその他のIPアドレスは、変わることがあまりないので手動管理でいい これらIPアドレスブロックの情報は、後述する通りいろいろなところで使いたい 即ち、いろいろな形式で表現したい このように、頻度の差こそあれ、IPアドレスブロックは増減したり新しいブロックが追加したりするので、簡素な機構で包括的な管理をしたい。 実現方法 スクリプトを2つ書きました。いずれもgithubにあります。 http://github.com/hirose31/cidr-manager 図も用意しました。 update-mobilejp-cidr キャリアのサイトをスクレイピングして、指定されたディレクトリにその情報を書き出します。 その形式は、1行1アドレスブロック、コメントは "#" です。 $ cat plai

    IPアドレスブロックを集中管理する方法と、その活用法 - (ひ)メモ
    honeybe
    honeybe 2010/04/06
  • kumofsの死活監視はこんな感じでNagiosでやってます - (ひ)メモ

    分散Key-Valueストア「kumofs」を公開しました! - 古橋貞之の日記 \(^o^)/ kumofsは、弊社のフォトストレージサービス Ficia で現在大絶賛モリモリ稼働中なんですが、その死活監視は自家製の Nagios プラグインで行っています。 というわけで、kumofsをサービスで使いたい人の一助になればと思い、ぼくが実際に行っている kumofs の監視について紹介したいと思います。 サーバノードとマネージャノード サーバノードとマネージャノードの監視には、それぞれのノードに対してステータスを問い合わせるコマンドを発行して、その応答で死活を判断するスクリプトを書いて使っています。 kumofs公開記念ということでgithubにpushっておきました。 http://github.com/etolabo/nagios-check_kumofs 問い合わせの処理は、管理用コ

    kumofsの死活監視はこんな感じでNagiosでやってます - (ひ)メモ
  • レプリケーションしてるMySQLで、マスタやスレーブが障害停止した場合のリカバリプラン - (ひ)メモ

    MySQLで、レプリケーションベースのHAな構成について考えたメモです。 3台(というか2台+1台)がいいかなぁと思っていて、前半はその理由を、後半では{マスタ,スレーブ}が{再起不能になった,ちょっとダウンしてすぐ復帰した}場合のリカバリプランについて書きます。 今のところはこれがベストかなと思っているのですが、「こうしたほうがいいと思う!」「ここがおかしい!」などなどのご意見はコメント、TBなどでいただけるとうれしいです。 ゴール マスタが落ちてもぐーすか寝ていられるようにしたい リカバリの作業はできるだけ単純に、かつ、短時間で完了するようにしたい めんどくさいのはいや 基構成、方針 2台+1台 サービスで使うのは2台 (db1, db2) もう1台は管理用 (db3) スレーブを多数並べる構成にはしない 台数増えると管理コストが上がる マスタダウン時のフェイルオーバとそのフェイルバ

    レプリケーションしてるMySQLで、マスタやスレーブが障害停止した場合のリカバリプラン - (ひ)メモ
  • DNS NOTIFYを受け取ってくれる無料のセカンダリDNSサービスと、NOTIFYを送るスクリプト - (ひ)メモ

    個人所有のドメインのDNSサーバは、マスタは自宅サーバ(djbdns)でセカンダリはXNameの無料のセカンダリネームサーバのサービスを使っていました。 それなりに動いてくれていたXNameですが、不満な点が1つありました。それは、マスタを変更したときのゾーン情報の伝搬に時間がかかる点です。XNameは数台のセカンダリネームサーバを提供していて、伝搬速度はサーバによってもタイミングによってもばらばらですが、早いときは数十分、遅いときは5,6時間たってようやく更新されることもありました。 XNameもDNS NOTIFY受けてくれたらいいのになーなんて思いつつも、個人所有ドメインでそんなシビアなサービスもしてないので、ま、いっかーと思っていたんですが、先日、EveryDNS.netがダウンして巷でわーぎゃーわーぎゃーな騒ぎになったときに、ちょろっと調べてみたらいくつかDNS NOTIFYを受

    DNS NOTIFYを受け取ってくれる無料のセカンダリDNSサービスと、NOTIFYを送るスクリプト - (ひ)メモ
    honeybe
    honeybe 2009/04/11
  • 慣習を気にせずsyslog-ngの設定をしてみた - (ひ)メモ

    たいていのsyslogのデフォルトの設定だと、 同じログが結構な量、複数のファイルに記録されて(IO負荷的、ディスクサイズ的に)無駄だなぁ 日付のフォーマットが機械処理しづらいなぁ ローテートがめんどいなぁ と思ってたので、今つくってる環境では慣習を気にせずに syslog-ng (v2.0.9) の設定をしてみたのでそのメモです。 不要なログは記録しない options { ... mark_freq(0); stats_freq(0); ... } 日付の形式を変える options { ... ts_format(iso); ... }これで、こんなの Dec 19 16:44:20 HOST ...から、こんなの 2008-12-19T14:07:52+09:00 HOST ...に変わります。 facilityごとにわける facilityごとのfilterを作る。 destic

    慣習を気にせずsyslog-ngの設定をしてみた - (ひ)メモ
  • リモートホストとdiffる - (ひ)メモ

    bashの「Process Substitution」という機能で、コマンドの実行結果を名前つきパイプから読めます。(thx かつみくん) $ cat -n <(date; echo foo) 1 Wed Jan 18 21:38:30 JST 2006 2 fooこれを使って、リモートホストのファイルとdiffを取るシェル関数を作ってみました。 こんな感じで使えます。 $ rdiff -u ~/s.txt REMOTE_HOST:~/d.txtまた-Rオプションで、rsyncの-R, --relativeオプションの様にローカルホストのパスをリモートホストの相対パスとして指定できます。たとえば、ローカルホストの/very/very/long/path/t.txtとリモートホストの同じパスのファイルをdiffるときには次のようにしてリモートホスト側のパス指定を略記することができます。 $

    リモートホストとdiffる - (ひ)メモ
  • 1