ブックマーク / sfujiwara.hatenablog.com (16)

  • Consulクラスタ内でファイルを分散配布する tuggle を書いた - 酒日記 はてな支店

    github.com これはなに? HTTPを使って、ファイルを Consul クラスタ内で分散配布する daemon です。Go で書かれています。読みかたは「たぐる」です。 開発動機とユースケース 拙作の Stretcher というデプロイツールがあります。嬉しいことに、自分が勤務しているカヤックだけではなく、他社さんでも使われているようです。 先日、某社の Stretcher をお使いのかたに話を伺う機会があり、デプロイアーカイブの取得時のネットワーク負荷が問題になっているということを聞きました。 カヤックではサーバは基 AWS にあり、S3 からデプロイアーカイブ(200〜300MB程度)を取得しています。S3はちょっと意味が分からないぐらい堅牢で、stretcherの -random-delay 5 (開始を平均2.5秒、最大5秒ずらす) を設定した状態で100台程度から一斉に

    Consulクラスタ内でファイルを分散配布する tuggle を書いた - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2017/02/14
  • ISUCON 6 予選通過しました - 酒日記 はてな支店

    ISUCON 6 にチーム「morimoto組」で参加して、予選を通過して決勝進出することになりました。 ISUCONは過去5回のうち優勝3回、3位1回、出題1回、ということでもう引退(勝ち逃げ)しようかな…とも思ったのですが、今年は出題にも関わっていないので参加しないと完全に縁が切れてしまうし、それも寂しい。ということで。 チームメンバーは直前まで決まらなかったのですが、結局会社の新卒1,2年目( id:amusan , id:moshisora ) と組むことにしました。若いとはいえ去年と今年の社内ISUCON優勝メンバーです。(歳の差何歳だろう) 当日やったこと 設営完了 #isucon pic.twitter.com/Beu4lLiYnC— fujiwara (@fujiwara) 2016年9月18日 天気は悪いが見晴らしはいい会議室を確保して万全の体制 (まぶしいのですぐブライ

    ISUCON 6 予選通過しました - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2016/09/20
  • Consul 0.4.x から 0.5.2 へのバージョンアップ - 酒日記 はてな支店

    このエントリは HashiCorp Advent Calendar 2015 - Qiita 1日目の記事です。 Consul クラスタは一度稼働を始めたら基的に落とせないため、いわゆるローリングアップグレードによってクラスタ全体を停止せずにバージョンを上げることが考慮されています。 consul.io ということで基的には上記のURLを参照して、順番にagentを新しいバイナリで起動し直すことによって新しいバージョンに切り替えられるわけですが、Consul 0.5.0, 0.5.1 についてはいくつか留意点がありますので記録しておきます。 consul.io 0.5.0 未満から 0.5.0 以上にする場合 acl 機能を使っている場合、あらかじめ acl_policy を設定してからアップグレードする必要があります が、自分は使用していなかったのでスルー Leader が Cons

    Consul 0.4.x から 0.5.2 へのバージョンアップ - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/12/01
  • Norikraのクエリをテキストファイルで管理する - 酒日記 はてな支店

    Norikra に登録されているクエリが大量にある場合、WebUIで登録、編集をしていると複数人での共同作業で管理しきれなくなるため、クエリをファイルにしておいてリポジトリで管理したくなります。 norikra-clientには query add, remove, suspend, resume などの機能が従来からありますが、add, removeは冪等でないため登録されているクエリに対して再度実行するとエラーになるので状態管理は難しい。 ということで、norikra-client に query dump query sync という機能を追加して 1.3.1 で取り込んでもらいました。これで JSON によってクエリを管理し、Norikraと同期することができます。 $ norikra-client query dump > dump.json [ { "name": "test"

    Norikraのクエリをテキストファイルで管理する - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/11/25
  • nginxでメソッドごとにリクエスト数制限を掛けたい - 酒日記 はてな支店

    アプリケーションでどうしても捌けない量のリクエストが一時的に押し寄せてしまう場合、アプリケーションサーバが死ぬのを避けるために GET は制限を掛けたいが、POST はリトライが面倒なのでなるべく通してあげたい、というような要求を nginx で処理できるかどうか。 実装として一番望ましいのは GET は 100 req/sec で制限 (超えたら503) POST は無制限 のようにメソッドごとに別々の制限を掛けることだったのですが、とりあえず HttpLimitReqModule を使うことで、メソッドごとに同一の上限を設定することはできました。 http { limit_req_zone $request_method zone=method:1m rate=100r/s; server { listen 80; location / { limit_req zone=method;

    nginxでメソッドごとにリクエスト数制限を掛けたい - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/11/10
  • ISUCON5 で優勝しました - 酒日記 はてな支店

    ISUCON5、予選を無事通過して10/31(土)に開催された選に参加し、優勝しました。 チームは ISUCON 1 の時の初代「fujiwara組」再結成ということで、@songmu, @sugyan とのカヤックの元同僚メンバーです。 最初に、毎回素晴らしいイベントを開催、運営していただいている @941 さんをはじめとした運営チームの皆様、出題の @tagomoris さん、@kamipo さん、他すべての協力いただいた皆様に感謝を申し上げます。当にありがとうございました! 競技開始からベンチ実行まで 作った #isucon pic.twitter.com/5RZkPUsaPu— fujiwara (@fujiwara) 2015, 10月 31 ロゴがなかったので作った。 競技開始、まずは3台で相互にsshできるようにするのに一瞬戸惑う。port 22は開いていて、会場からは接

    ISUCON5 で優勝しました - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/11/02
  • RedisをKeepalivedでフェイルオーバーする構成案 - 酒日記 はてな支店

    master slave 構成を取っている Redis で、master が落ちた場合に slave を昇格させてフェイルオーバーしたいという要件がありまして、Keepalived と組み合わせて構成してみました。Redis の運用経験がないのでご意見などいただければありがたいです。 Scientific Linux 6.2 keepalived-1.2.2-3 redis-2.4.10 前提 Redis のレプリケーションではマルチマスター構成を取ることができない Redis の slave は起動時に master に接続し、全データを取得してコピーを取る その後は順次 master で更新されたデータをコピーする redis-cli で slaveof コマンドを実行することで、動的に master, slave を切り替えることが可能 このような作りになっているため、2ホスト間で

    RedisをKeepalivedでフェイルオーバーする構成案 - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/10/23
  • YAPC::Asia 2015で発表してきました & ConsulとStretcherについて - 酒日記 はてな支店

    YAPC::Asia 2015 でトークを採用していただいたので、発表してきました。 YAPC::Asiaは自分は2006年から10回皆勤で、トークは2009年LT、2010〜2013, 2015は編で計6回もしてるんですね…YAPC::Asiaにはここまでのエンジニア人生の半分以上を支えてもらっていて、(ひとまず)最後の回でもトークできて感無量です。 1年ぶりにYAPCでしか顔を合わせない人もいた懇親会は、皆さん言うように同窓会のよう、というか当の同窓会よりも現在の話題を共有している分濃密でしたね。 Consulと自作OSSを活用した100台規模のWebサービス運用 1日目午後一の激戦枠に放り込まれたのでどれぐらい会場が埋まるか心配でしたが、200人以上入る会場でほぼ満員だったようで、聞きに来ていただいた皆様ありがとうございます。 ここ1年程度で番運用してきたConsulと周辺に関

    YAPC::Asia 2015で発表してきました & ConsulとStretcherについて - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/08/24
  • Norikraでwebサービスを守る話をしてきた - 酒日記 はてな支店

    Norikra meetup #2でLTをしてきました。LTといいつつ時間に余裕があったので15分以上しゃべっていたような… atnd.org 発表資料はこちらです。 speakerdeck.com Norikraで不正アクセスの兆候があるアクセスログを検知して、検知次第IPアドレスをmemcachedに突っ込んでそれをもとにアクセスをブロックする、というネタでした。 ログの流し込みが詰まった場合に誤爆しないように、結果のtimestampに1分以上の間隔があった場合は max(time) - min(time) で補正するとか、クエリに後処理で使うための定数を埋め込んでおくことでクエリごとに挙動を調整しやすくするとか、そんなかんじの細かい工夫をしています。 あと皆さん気になっていたNorikraの冗長化ですが、active-standby構成であればすぐできる気はします。 うちはいまst

    Norikraでwebサービスを守る話をしてきた - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/06/04
  • 標準入力から読んでFluentdに送信するにはfluent-agent-liteが便利 - 酒日記 はてな支店

    標準入力から受けたログを syslog に送信する場合に使えるのが logger(1) コマンドです。 $ echo "log message" | logger -t myapp -p local0.info自分のところではバッチ処理の出力や、daemontools で起動したコマンドの出力を log/run で logger に渡して syslog に集約するなどしていました。 これを syslog ではなく、Fluentd に送りたい場合にどうするか。 Fluentd 体には fluent-cat というコマンドが同梱されていますが、これは入力に JSON 形式を要求するので単純に代替はできません。 何か適当なワンライナーで wrap する手もありますが…… $ echo "log message" | perl -MJSON -nE 'say JSON::encode_json(

    標準入力から読んでFluentdに送信するにはfluent-agent-liteが便利 - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/02/27
  • Consul の情報を Chef / Ohai から使う ohai-plugin-consul を作ったのとその周辺の話 - 酒日記 はてな支店

    先日とあるサービスに Consul を入れました。 内部 DNS と、たとえば nginx からアプリケーションサーバに振り分ける定義をするために service を使用しています。 そこで使うために、ohai-plugin-consul を書きました。Github にあります。 fujiwara/ohai-plugin-consul · GitHub Ohai の version 6 と 7 で plugin の interface が変わっており、ohai-plugin-consul は Ohai 7 向けなので、Chefから使う場合は Chef-11.12.0 以上、または 11.10.4.ohai7.0 が必要です。 【参考】 Ohai, new Ohai plugins! - O'Reilly Radar 使用方法 ohai コマンドから使う場合は -d で plugin (co

    Consul の情報を Chef / Ohai から使う ohai-plugin-consul を作ったのとその周辺の話 - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/02/04
  • Consul KVSをバックエンドにしたリアルタイムダッシュボード #monitoringcasual - 酒日記 はてな支店

    最近悩んでいることを解決する小さいアプリケーションを書いたので、monitoring casual talks #7 で発表してきました。 モニカジは毎回全員発表で濃い話がいろいろできて楽しいですね! Consul KV Dashboard // Speaker Deck GitHub - fujiwara/consul-kv-dashboard: Consul KVS based dashboard web application. 概要はスライドにありますが、Consul KVS に保存された値をいい感じにまとめて(リアルタイム更新で)見せることのできる、Go + React.js でできた小さな Web application です。 ConsulのREST APIに値を送る(curlで十分)だけで、現在の各ホストで発生した値を画面でリアルタイムに更新しつつ閲覧できます。 Consu

    Consul KVSをバックエンドにしたリアルタイムダッシュボード #monitoringcasual - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2015/01/31
  • クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた - 酒日記 はてな支店

    カジュアル!(挨拶) このエントリは MySQL Casual Advent Calendar 2011 の18日目の記事です。 昔、専ら PostgreSQL を使っていた頃、MySQL のクエリキャッシュって簡単に性能上がるしみたいだし羨ましいなあ、と思っていました。そのため、1年ほど前から業務で MySQL を使うようになっても、クエリキャッシュは当然のごとく有効にしておりました。 ところが先日 DSAS開発者の部屋:クエリキャッシュは切ったほうがいいんじゃなイカ? というエントリを読みまして、クエリキャッシュはグローバルロックを獲得するとのこと。これはちょっと検証してみなければなるまい、ということでベンチマークをしてみました。 ベンチマーク結果 結果は別ページにまとめました benchmark script と my.cnf ざっくりと説明しますと、 平均 260 byte/行、1

    クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2014/10/16
  • MHAをAWSで使うための支援ツールMHA::AWSをアップデートしてCPANに上げた - 酒日記 はてな支店

    以前に作って、プロダクションでもいくつかのサービスに導入している MHA::AWS ですが、failover 方法を ENI 付け替えの他に VPC Route Table の書き換えもサポートしました。 ENI付け替えでは同一 Availability Zone 内での failover しかできませんが、VPC Route Table の書き換えによる方法では Multi-AZ 環境での failover も可能になります。 CPANにも上げましたので、 cpanm MHA::AWS でインストール可能です。 MHA::AWS - A support script for "MySQL Master HA" running on AWS - metacpan.org fujiwara/MHA-AWS · GitHub 以前の紹介記事 → #11 MySQL Master HA を AW

    MHAをAWSで使うための支援ツールMHA::AWSをアップデートしてCPANに上げた - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2014/08/18
  • zabbix-agent で取得できる値を Mackerel の custom metrics として送り込む - 酒日記 はてな支店

    Mackerel Meetup #1 Tokyo に行ってきました。鯖サンド美味しかったです。 Mackerel では custom metrics を sensu plugin 形式で出力するコマンドから送り込める (ドキュメント)、ということなので、思いついて拙作の go-zabbix-get に sensu plugin format 出力機能をつけてみました。 実行例はこんなかんじで、-f sensu をつけると key, value, unixtime をタブ区切りで出力します。 $ go-zabbix-get -k system.uptime -f sensu system.uptime 2546472 1403230104 $ go-zabbix-get -k system.users.num -f sensu system.users.num 1 1403230155という

    zabbix-agent で取得できる値を Mackerel の custom metrics として送り込む - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2014/06/20
  • MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店

    前回の記事 MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか の続きです。 master : slave = 1 : 1 で参照を slave に分散してもまったく美味しくないわけですが、では参照の負荷分散を行いたい場合の slave は何台で構成するとよいのか考察してみます。具体的には slave 2台の場合と 3台の場合でどちらがお得か。 台数を増やすということは、どこかに障害が発生する確率が高まる、ということです。1台の slave に障害が発生してダウンした場合のことを考えてみます。 slave * 2 → 残り 1台で処理継続 生き残った1台あたりの処理が 2倍になる slave * 3 → 残り 2台で処理継続 生き残った1台あたりの処理が 1.5倍になる たとえば 1台あたり最大 1000qps の処理能力があるとします。sla

    MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店
    rrreeeyyy
    rrreeeyyy 2013/04/23
  • 1