サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
t-cyrill.hatenablog.jp
前にも似たようなこと書いたなと思ったけどもう一年半も前のことになるのか t-cyrill.hatenablog.jp ご存知の通り昨日 2021/02/19 23:20頃 AWSにて東京リージョンの一つ apne-az1 にて大規模な障害が発生。多くのAWSを利用していたサービスで影響があった。 そんな私はいつものように アラストリリィ アサルトリリィ ラストバレット というゲームを呑気にプレイしていたのだけど、23:25 から緊急メンテに入ってしまった。 どうしたんだろうと思っていたら、社内SlackにてAWSを利用しているサービスがたまに応答しなくなる、Elasticacheが切り替わったなどなどの報告が入り、もしかすると面倒ごとかなと思いながら対応することになった。 起きていたこと 既にAWSからも公開されていることであるが、今回は2019年8月に起きた障害と類似するタイプの障害だっ
AZ障害は受け入れるしかないクラウド時代のインフラ ただの日記。 今日の昼、AWSを利用している人たちは大変だったところもあると思う。 AZの一つが丸々機能しなくなる大きなAWSの障害があり、AWSを利用して運用されていたサービスは多かれ少なかれ影響を受けることになった。 完全に雰囲気で書いてしまうが、今回のAZ障害で影響を受けたサービスは思ったより多かったように感じる。 というのもAWSではアベイラビリティーゾーンの障害は発生するものと考え、本番運用するのであれば、マルチAZ構成を取るのがベストプラクティスとされているので、 マルチAZ構成を取っていれば影響なんてないんじゃないの普通、と思ってしまうと思う。 インフラ屋さんでもそう思ってしまうし、インフラ屋さん以外ならなおさらなんで重くなるのかわからないと思う。 幸い自分の運用しているサービスでは影響が軽微だったので、完全に想像にはなって
普段よく使っているのでリモートからローカルにコピーする場合に使えるように機能拡張した。 ほとんど同じコードなのに共通化できなくて辛い。ifで分岐して二つのシェルスクリプトを一個にしたような作りがイケてないが使い勝手はよい。 細かい話だと rsync の出力がOSXとLinuxで微妙に違うとかそういうところも吸収した。代わりに awk が必要になった。リストの取得に ./ から空行までをawkで出力する。 tail と tac は消えた。 gist.github.com 便利
前略、大きいMySQLのデータベースがあります。すると、大きなデータベースから多くのデータを取得するため、非常に重いクエリが実行されることがあります。 そうするとデータベースが高負荷になるため重い処理を見つけたくなります。 (innodb_query_queued とかが増えて辛くなる) MySQLには SHOW PROCESSLIST というものがあり、実行中のMySQLのプロセス一覧を見ることができ、 クエリの実行状況や実行時間をみることができるのでスロークエリログより便利なことがあります。 (スロークエリログはクエリが完了した場合に出力されるため実行中やクエリを中断した場合に見ることができない) しかし、SHOW PROCESSLIST の出力は多いため毎回見るのは疲れます。そこで以下のようなスクリプトで SHOW FULL PROCESSLIST の出力をフィルターすると便利です。
ので、tarとsshをパイプでつないで並列で圧縮しながら転送する君を作りました。 tar には指定したファイルのみをアーカイブに含める -T オプションがあるので、 rsync -nの結果をリストにして渡すことで、rsyncの対象になるファイルだけを転送できるようにしてます。 現場からは以上です。
AMI生成部分を自動化できたので、ちょっとだけまとめておく。 CodeBuild AWSのDockerで動くCIツール。 CodeBuildの名前の通り、ソースコードをビルドする環境を簡単に作れることをウリにしている CircleCIなどのサービスでビルドしたり、Jenkinsを自前で用意するのと比較してそれほど違いはない 利点があるとすれば、AWS上で動くためサービスロールを使って権限を付与できるところか packerを使う都合上、EC2へのアクセスが必要になるため、外部サービスの場合アクセストークンの発行と管理が必要になる 料金はビルド時間ごとの課金 一応無料枠もある Packer HashiCorp製のマシンイメージ自動生成ツール Goで書かれていて機能が豊富 AWS以外にもいくつかのクラウドサービスに対応している Ansible Python製のプロビジョニングツール シェルスクリ
以前はVagrantを使ってansibleのテスト環境は用意していたんだけど、 vagrantはsnapshotが取れる利点がありつつも、VMを使うのでちょっとというかそれなりに遅くて、 何度も実行するansibleのテスト環境にはちょっと不便だなーと思っていたのですが、 最近Dockerを使ってsshdを起動するだけの環境を用意すれば簡単にテスト環境が作れて便利だったので書いておきます。 Dockerfileを書く ansibleを流す対象のイメージは Dockerfile の FROM に書いておけばよくて、 CentOSとかDebianとか好きなOSを選べばいいと思います。 Dockerfileを置いたディレクトリに id_rsa.pub を置いておくと authorized_keys にコピーされるというソリューションです。 FROM amazonlinux:latest MAIN
年末ですね。更新がおろそかになっていたので、たまにはちゃんとした話をしたいなと思い、前々から書こうと思っていたRedisの話を書いてみました。 検証に使用したRedisは3.2ですので、新しくバージョンが変わると以下の話は変わってくるかもしれませんが今のところそのようなことはしばらくなさそうです。 以下長々とRedisを本当に使えるように設定したり調べたり検証したりした内容を書いていきます。 いまさらですが Redisは構造データを持てるオンメモリデータベースサーバで、RDBとは違いますがHashやListなどのデータ構造を記録することができる高速なストレージサーバです。 オンメモリDBでHashを持つことができるので、KVSのように扱われることもあるのですが、memcachedと比較すると機能は多く、レプリケーションやAtomicなデータ処理なども可能です。 導入の前に Redisに限っ
この辺りはよく使ってる技術なんだけど一回作ってしまうと細かなことは忘れてしまうし、 AWSのようなクラウドサービスを使っていると触れる機会も減ってしまうので、 覚えているうちにまとめておこうと思う。 PXEBOOT ネットワークカードに搭載されているPXE(Preboot eXecution Environment)機能を使ってプログラムを起動する方法。 起動するプログラムはDHCPサーバとTFTPなどのサーバを組み合わせて配布する。 ネットワークカードにPXEBOOTのための機能が搭載されているものがあれば、BIOSのBOOTをネットワークブートに設定すれば使える。 DHCPはBOOTPの上位互換プロトコルなので、BOOTP的な設定はDHCPサーバの設定に書くこともできる。 DHCP設定にTFTPサーバがどのアドレスかなどの情報を書いておき、クライアントに配布できるが、特に指定がない場合
前の話 t-cyrill.hatenablog.jp もう二年近く前の話になりますが、昔の書いた記事のアクセスが地味に多いので、 結局自分はどうしているのかという話を少しだけ書きます。 以下はRuby on Railsな環境ででdotenvを使って本番サーバの設定を切り替えられるようにしようとしても、unicornなどのRackサーバを再起動しないと読み込まれないから微妙な感じがあるから、結局どうしているのかという話です。 1. /etc/environment を使う 物理サーバ固有の設定は /etc/environment に記述します。 サーバ構築時に設定は記述し、ほとんど変更の必要がないパラメータのみこちらに書いています。 私の場合、CPU性能が異なるマシンを使わなければならない場合に、 性能に応じてunicornのworker数を決めるなどの用途に使うことが多いです。 # /et
追記 MySQL 5.7.19か20あたりで取り込まれたパッチにより以下の問題は発生しなくなりました。つまりはバグでした。 InnoDB memcached pluginはMySQL 5.6から搭載された機能で、Memcacheプロトコルを使ってInnoDBにデータを読み書きできる便利機能です。 簡単なプロトコルなためSQLより高速に動作する点、InnoDBに記録できる点、MySQLのレプリケーションが利用できる点など、 うまく使えば便利な仕組みですが、結論を先に書いてしまうと使えなかったという話をします。 使えなかった理由 MySQL memcached pluginを使ったInnoDBへのインターフェイスが使えなかった理由はクラッシュが多発するためです。 高速な動作、レプリケーション機能などはうまく動作しているのですが、 しばらく動作させていると get 操作の際に SIGABRT と
こんにちはの方もはじめましての方もエントリーを読んでいただきありがとうございます。 昨日から開催されている ISUCON6 の予選にてPHP実装のコーディングを担当させていただきました t-cyrill と申します。 日頃はWeb屋さんでインフラのお仕事をやっています。 今回はいつものような適当なエントリーではなく少ししっかりとしたエントリーで担当しましたPHP実装について、いくつか簡単な補足をさせていただきます。 はじめに ISUCON6予選参加者のみなさま、お疲れさまでした。 たくさんのチームの方にPHP実装を触っていただけたようでありがとうございます。 ISUCONということで多くの人に触れていただくコードになるだろうと思い、どのチームの方にも得意不得意の影響があまりないようになるべくよく知られたライブラリを使ったり、元からPHPがうまく動作するような環境を用意できるように準備したつ
重い腰を上げてElasticsearchのメジャーバージョンアップを行うことになったのでメモ。 引き続いてDebianを使っているのでDebian向けの内容になってます。 基本的なところ メジャーバージョンアップになるけど、旧バージョンのインデックスを失うことはない。 注意点としてはクラスタの全ノードを停止する必要があるので、無停止でのアップグレードができない。 アップグレードガイド https://www.elastic.co/guide/en/elasticsearch/reference/current/restart-upgrade.html 後方互換を崩す変更 (2.3) https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-2.3.html よく読んでおく。 elasti
ruby-ffi は 動的にライブラリを呼び出せるRubyの拡張でバインディングライブラリをnative extension で書かなくても良い感じに呼び出せるようになる便利なライブラリ。 Rubyでは libffi を簡単に使えるのでちょっと頑張ればCのコードを呼び出せる。 FFI = foreign function interface、他言語の関数を呼び出すためのインターフェイス Cで書かれたライブラリの関数を native extension をビルドしなくても呼び出せて便利だったりする。 去年書いた記事でlibffiを使って、MP4v2Tagの関数を呼び出してみたけど、あんまり細かいところまで書かなかったので掘り下げて書いてみます。 t-cyrill.hatenablog.jp とりあえずHello World ruby-ffi はgemで用意されているので、bundlerとかで
大田区産業プラザPiOというと同人即売会が頭に浮かびますが、今回はPHPのカンファレンスです。 京急蒲田、完全に即売会のノリね— シリル@ひだまりPHP (@t_cyrill) 2015, 10月 3 Hack言語に賭けたチームの話 Hackを使っているということで、どういう感じなのかなと。 Hack言語、結構がっつり使っても大丈夫でしたという内容でした。でもいまだとPHP7待ってもいいのかなって感じありますね。 ジェネリクスや細かな集合のタイプは、現状PHPだと適当にarrayに突っ込んでなんとかなってるので、使い始めるとまた違った印象になるのかなという感じがあります。Pairはたまにほしいってことありますね。arrayまわりもうちょい何とかならないのかなって感じで作った感を感じますね。 バッチ周りはgolangで書いていて、peclの代用にもgolangで書いた実行ファイルを使っている
先週、箱根へ小旅行した帰りのロマンスカーでぼんやりと話したElasticsearchのshardとreplicaの話です。 どこかに書いたような気もするけど、メモごとどこかになくしたらしいので、忘れないように書きとめることにしました。 shard elasticsearchのshardはluceneの1インスタンスで、 elasticsearchに自動管理されているワーカーと考えてよい。 shardを増やせば並列数があがって1ノードのパフォーマンスがあがるかもしれない。 デフォルトでは5つのshardを作ることになっているけど、設定によって変えることもできるし、インデックスごとにshardsの数を設定することもできる。 ただし、shardの数はインデックス生成後に変更できない。 replica 一方のreplicaはノードのコピー。マスターノードを除いたクラスタ内でのコピー数。 ノードを増
またRubyとかRailsの話になってる。本当はこんな話なんてしたくなくて、スクフェスの話でもしたい。凛ちゃんマジえんじぇー。 Webアプリケーションを書いていると、データベースのユーザ名やパスワード、接続先サーバのIPなどなど、アプリケーションコードとは関係がないけれどもリポジトリ内には含めたくない、動かす環境に合わせて変更する必要のある設定を扱う機会がしばしばある。 こういう設定は環境変数に設定すると便利だよっていう考えがあって、The Twelve Factorsで紹介されていたりする。 The Twelve-Factor App これを実現するには、例えば /etc/environment や ~/.bash_profile みたいなファイルに書けばいいんだけど、開発環境では1台のPC上で複数のアプリケーションを書く機会も少なくないはず。 そういう場合に、/etc/environm
PhantomJSは素敵なツールで、Webサイトのキャプチャを簡単に取ったりできる。 PhantomJSを使ってWebサイトのスナップショットを取る便利なライブラリも既にいくつかあって、例えばnode-webshotとかあったりする。便利。 そんな便利なPhantomJSだけど、Linux上で動かすと日本語フォントが文字化けするケースがしばしばあって、とたんに苦しい感じになる。 先日、Debian Wheezyで動かそうとして大変な思いをしたので、いくつか試してわかったことを残しておきたいと思う。 ただ、完全にうまくいく方法は結局わからなかったのでご容赦願いたい。もっとこうしたほうがいいのではみたいなのがあったら教えてほしいところ。 なお、Macだとだいたいうまくいくけど、1.9.7を使うとWebフォントの描画がおかしな感じになるので、1.9.2とか使うのがよい。 PhantomJSをイン
今回はelasticsearchのバージョンアップ手順をまとめます。 elasticsearch 1.0以降を使っている場合、ダウンタイムなしでアップグレードできます。 ElasticSearchの運用とか (1) - なんかかきたい ElasticSearchの運用とか (2) - なんかかきたい ElasticSearchの運用とか (3) - なんかかきたい NOTE: 1.6以降の追記をしました (2015/10/22) elasticsearchのゼロダウンタイムアップグレード upgrading http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-upgrade.html elasticsearch 1.x 以上のバージョンを使っている場合、ダウンタイムなしでアップグレードするこ
今メインで関わっているプロジェクトでは半年ほどTravisCIを使っていたけど、 TravisCIはそれなりにお金がかかるということで、 CircleCIを検討してくれないかとの依頼を受けました。 それほど時間をかけずに移行もできてよかったので、今思っていることをまとめてみます。 1. Pricing TravisCIはOpen Sourceの場合は無料。StartUpが2並列で$129ドル。SmallBussinessが5並列で$249。 CircleCIはSoloが1コンテナで$19, StartUpが2コンテナで$69。1コンテナごとに$50ドルずつ増える。 追記: 2014年末、$19の値下げがあった。1コンテナなら$0、1コンテナごとに$50 OpenSourceで使うならTravisCIでよいけど、プライベートなリポジトリを使う場合はCircleCIは50ドルくらい安い。 2.
それは半年くらい前のある日のこと。 突然開発マネージャーに呼び出され マネージャ「1ファイルあたり1GiBくらい配信できるファイルサーバを作ってくれ。1ユーザさんあたり5GiBくらいまで使えるようにしたい。納期は2週間くらいで頼むよ。」 私「S3とか使っちゃダメなんですかね...(白目)」 マネージャ「オンプレミスでよろしく。」 私「無茶言わないでくださいよぉ!」 マネージャ「じゃあ、あとよろしく。」 みたいなことを言われ、2週間でファイル配信の仕組みを用意しなければならなくなったので、何がいいのかなー、glusterfsとかどうなんかなー、S3使いたかったなー、そういえばRiakCSってS3っぽいAPIを備えてるんだっけか、みたいなことを考えて、RiakCSを検証、導入することにしてみました。割とタイトなスケジュールでしたが、何とかできたので、構築から運用まで何回かにわけてざっくりとまと
監視周りの情報とかをペタペタと書きました。 ステータス監視 Munin https://github.com/claygregory/munin-elasticsearch 色々あるけど、これが有力そう。 Plugin/HQ https://github.com/royrusso/elasticsearch-HQ headプラグインと機能が被っている気がしなくもない。便利な管理ツール。 Plugin/head http://mobz.github.io/elasticsearch-head/ 色々できるノードステータス監視ツール。便利 Plugin/bigdesk https://github.com/lukas-vlcek/bigdesk HQやheadと似たようなElasticSearchクラスタの状態監視ツール。 HQやheadと比べてモニタリングの機能のみに注力しているイメージ。
先週のある夜のこと。突然NagiosさんからWebサーバのCPU使用率が急増しているとのメールが届きました。 どういうことかと思い、サーバの状態を確認してみるとRailsを動かしているunicornがCPU使用率が100%で張り付いていました。 まあそういうこともあるかなあと最初は軽く考えていて、問題のサーバをリバースプロキシから外して、ログを探してみることに。 ところが、rackのログをみても何も出力されていない。はて?と思いつつstraceでプロセスにアタッチすると、すごい勢いでopen, read, closeを繰り返していました。 と、そうこうしているとまたNagiosからアラートが。同じくCPU使用率が急増しているとの警告。 どうやら問題は一つのサーバでだけ起きていたわけではなくて、たまたま1つのサーバで問題がまとまって起こっていただけのよう。 とりあえず、暴走した子プロセスにS
割と遊びのつもりで書き始めたら意外と注目が集まってしまって遊びじゃない感じになってきましたが、前回の続きでelasticsearchの運用情報を書いていきます。 @johtani さんにTwitterでElasticSearchのアップグレード情報などを色々と教えていただいたので、また後日検証してまとめてみようと思います。ありがとうございました。 今回は設定周りの情報になります。 そういえば後から見直すことを考えるとどの投稿にどういう情報が乗っているか探すのが大変になりそうだから、索引を作る必要がある気がする。そのうち考えるかも。 JVMのバージョンについて java7を使う場合、特定のバージョンでindexが壊れる問題がLuceneで発生するので避ける必要がある。 Apache Lucene - Welcome to Apache Lucene 具体的にはjava7u25以下またはjav
最近のお仕事的なことですが、ElasticSearchの構築・運用を任されるようになりました。 まかされるというか、実際にはいい感じに全文検索ができる仕組みを作って欲しいといういつもの依頼だったんだけども、全く運用の経験の無いプロダクトだったので色々わからないことだらけ。 最近はKibanaと組み合わせて言い感じのグラフを作るのがWeb屋さんの間で流行っているイメージですが、Kibanaを除いたElasticSearchの細かなところに踏み込んだ情報はあまりない感じで(多分感心があまりないのかも)、結局マニュアルを色々読んでわからないところを補完していった感じです。 同じようにElasticSearchを使って検索機能を作っていきたいような人の参考になればいいなー程度にまとめて行こうと思います。そのうち自分でも見直すことになるだろうし。 一応手元にmarkdownでまとめたものもあるんだけ
このページを最初にブックマークしてみませんか?
『t-cyrill.hatenablog.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く