双六工場日誌

平凡な日常を淡々と綴ります。

「ELBからの通信で408が多発する」件で、結局どうすべきか調べたのでまとめた

少し前にQiitaにこんなエントリが載っていました。問題としては、ELB配下に配置したApacheサーバで、レスポンスコード408で中身のないログが数秒おきに出続けるというものです。

AWS - ELBからの通信で408が多発する - Qiita

この現象は、自分のところでも出ていて、このエントリにあるように公式フォーラムを見ても解決せず、原因がわからず困っていました。このエントリを見て、自分でも検証してみましたが、事象の分析としては、このQiitaのエントリにある内容の通りみたいです。

TCPコネクションを張ったあと、HTTPデータが来ないため、mod_reqtimeoutがDoSと判定して、apacheがコネクションを終了させている。

この件をググって見つけたのですが、qpstudyのリーダーこと、@さんも2年前にこれを取り上げていますね。

Cloudpack night03

この問題に当たっている環境

上記のQiitaの情報を元に検証した結果、具体的にこの問題が出る環境は以下の通り。(CentOS6, 7, Ubuntu12.04 LTS, 14.04 LTSで確認)

  • Apache 2.2.15以降で、mod_reqtimeoutが有効化されているもの

    • 2.2.15 からmod_reqtimeoutが入っているが、2.2系ではデフォルト無効のため、CentOS 6 のhttpdパッケージではこの問題に該当せず。
      • ただし、Ubuntu 12.04 LTSのapache2パッケージには、以下の設定が入っているため、問題が発生。
      • /etc/apache2/mods-available/reqtimeout.conf
        • RequestReadTimeout header=20-40,minrate=500
        • RequestReadTimeout body=10,minrate=500
    • 参考: mod_reqtimeout - Apache HTTP Server Version 2.2
  • Apache 2.4系

    • Apache 2.4系では、mod_reqtimeoutがデフォルトで有効になっており、デフォルト値は「header=20-40,MinRate=500 body=20,MinRate=500」となっている。
      • CentOS 7では、httpdパッケージの中身がApache 2.4となっており、デフォルト値が有効になっている。
      • Ubuntu 14.04 LTSは、apache2パッケージの中身がApache 2.4となっており、かつ、上記の12.04と同内容の/etc/apache2/mods-available/reqtimeout.conf が設定されている。
    • 参考: mod_reqtimeout - Apache HTTP Server Version 2.4

問題への対処法

対処法は、Qiitaのエントリにある通り、ELBの設定の「Description」タブから「Connection Settings: Idle Timeout」を「RequestReadTimeout header」の最低値よりも小さくすること。

「RequestReadTimeout header」は、HTTPヘッダ受信のタイムアウトで、モバイル通信で極端に回線状態が悪くなければ通常は数秒もかかりません。これはもともと「slowloris」という攻撃の対策で入ったモジュールで、攻撃を受けやすい環境であれば、20秒よりも短くすることも検討した方がいいパラメータです。そのため、こちらを長くしたり無効化するのはあまりおすすめできません。

一方、ELBの「Connection Settings: Idle Timeout」は、アイドル状態のコネクションを維持する時間の設定なので、パフォーマンスチューニングの範囲の設定変更になります。そもそも、Apache2.2、2.4は「KeepAliveTimeout」のデフォルト値は5秒で、そこで接続を切ってコネクション再接続のコストとサーバ側リソースのバランスをとっているので、こちらを特にいじっていない環境では、「Connection Settings: Idle Timeout」も「5秒」まで短くしても問題ないと思います。ただ、ELBとの接続なので、クライアントとサーバとの関係が1対1とないところが、少し悩ましいですね。。。

とはいえ、特に「KeepAliveTimeout」を長く設定している環境でなければ、「Connection Settings: Idle Timeout」を5秒〜20秒に設定するがFAだと思います。

これからCentOS 7が本格的に使われ始めると、これに当たる人が結構出てきそうですね。数年前からこの問題にぶつかっていた人は、Ubuntuユーザが多そうです。

以上。

海外に行く時に持って行って役に立ったものリスト

海外にいく際に毎回何を持っていったらいいのかわたわたするので、次の出張に備えて、最近持って行っていって役に立ったものをメモ。

「海外旅行 持ち物」とかでググると、いろいろなサイトが見つかりますが、そういうところに載っているものは割愛。ググった結果、以下のようなサイトが見つかりましたが、一般的な準備はこれらを見れば十分だと思います。

長時間フライト対策

ノイズキャンセリング・ヘッドフォン

10時間以上の長時間フライトだと、時差ボケ防止のためにも以下にゆっくり寝られるかが勝負になるので、ノイズキャンセリング・ヘッドフォンを持って行っています。

以前に一緒に出張した人がBOSEの通常のヘッドフォンタイプのノイズキャンセリング・ヘッドフォンを持っていて、使わせてもらったところ、飛行機の音が気にならないレベルに軽減されていたので、最近自分でも購入しました。

購入したのは、比較的新しいインイヤータイプのもの。電車で試した限りでは、電車のガタンゴトンという音が注意しないと聞き取れないレベルまで軽減されていました。インイヤータイプは気軽に使えるので、普段電車に乗るときにも使っています。ノイズがなくなると、ストレスがかなり軽減されるので、ちょっとお値段は張りますがおすすめです。

【国内正規流通品】BOSE QuietComfort20 ノイズキャンセリング・ヘッドホン(インイヤータイプ)
【国内正規流通品】BOSE QuietComfort20 ノイズキャンセリング・ヘッドホン(インイヤータイプ)

続きを読む

スマホからガラケーに変えて連絡先がうまく移行できなかったので、Googleの連絡先をガラケーの電話帳に変換するスクリプトを書いた。

先日、ブログにも書いた通り、SIMフリースマホのZTE Blade Vec 4Gを買って、これまでスマホでやっていたことはおおよそそちらに移行を済ませました。

最近話題のSIMフリースマホ「ZTE Blade Vec 4G」を買って、一週間使ってみた。 - 双六工場日誌

結果、これまで使っていたスマホでは、音声電話とメール、おサイフケータイぐらいになったので、これまでのスマホ回線はauガラケー「Gratina」に機種変更。

f:id:sechiro:20141102194709j:plain

左がBefore、右がAfter。

機種変更はあっという間でおサイフケータイの移行もすんなりすみましたが、地味に引っかかったのが電話帳の移行。スマホからガラケーに変える人で同じようなことにハマる人も多いと思うので、移行の際に使ったスクリプトとメモを書いておきます。

続きを読む

Strata + Hadoop World 2014 in NYC に参加してきた。

2014/10/15-17の日程で開催された「Strata + Hadoop World 2014」に参加してきたので、見たセッションとざっくりとした感想をメモ。

発表者の録画ビデオやスライドはこちらにあるので、詳細が知りたい方はこちらへ。現時点では、スライドやビデオがないセッションも結構ありますが。

今回Strata + Hadoop Worldのセッションは、以下のテーマにわかれていました。

  • Business & Industry
  • Data Science
  • Data-Driven Business Day
  • Design & Interfaces
  • Hadoop & Beyond
  • Hadoop in Action
  • Hadoop Platform
  • Hardcore Data Science
  • Law, Ethics & Open Data
  • Security

この中で、自分に取って新鮮だったテーマは「Law, Ethics & Open Data」。2日目のClouderaのChief TechnologistのEli Collins さんのお話などは、このテーマ、ド直球のお話で示唆に富んでいたと思います。

聞いていないセッションの方が多いので、全体は把握しきれないところがありますが、全体的な印象としては事例紹介では単純なHadoop導入事例はなくなって、具体的なビジネスでのデータ分析の活用を中心としたセッションにシフトし、技術的なセッションでは、機械学習など高度分析や処理基盤全体アーキテクチャ、Spark等の新しいプロダクト紹介など、より高度なものが多くなっているように思いました。

個別プロダクトでは、Spark関連のセッションが多く、かつ、どれも人が多く集まっていて関心の高さを感じさせました。YARNの活用事例*1は、Tez + Hiveが注目されていましたね。

自分が参加したセッション

自分が参加したセッションは以下のものです。面白そうなものが多かったので、体がひとつしかないのが悔やまれます。

1日目(午後から)

2日目

3日目

個別のものは、とても感想が書ききれないので、取り急ぎ、見たものリストのみで。

追記

そういえば、ミュージカルを見た後に締めのラーメンを食べようと思って、ニューヨークの一風堂に行ったら激混みでラーメンを食べそこねました。。。

f:id:sechiro:20141024002454j:plain

*1:SparkはYARN上でも動かせますが、一旦別扱いで

最近話題のSIMフリースマホ「ZTE Blade Vec 4G」を買って、一週間使ってみた。

最近、MVNOのSIMが複数リリースされ、それを使うためのSIMフリー端末も充実してきたように思います。僕もその流行に乗って「ZTE Blade Vec 4G」を購入してみたので、簡単に使用レポートを書いてみます。

f:id:sechiro:20141004150137j:plain

写真: 開封の儀の様子

購入の経緯

これまでは、auの回線でHTC Jを使っていました。厳密に言うと、まだこの端末も併用しているので、使っていたというのは語弊がありますが、今はこちらのスマホはほとんど使っていません。鞄から出すのは、おサイフ携帯機能使うときぐらい。

HTC Jに機種変更したのは、ちょうど2年前。3Gのみ対応でLTEは使えない機種です。ただ、IS03からの機種変更だったので、当時はさくさく動くことに感動した記憶があります。

ただ、この機種はアプリをインストールできる領域に制約があり、最近ではその制約のためにアプリのアップデートが止まることもしばしば。また、常駐しているアプリが増えてくると、プチフリーズみたいに操作が固まったり、電池がすぐに切れてしまったりと、そのほかにもいろいろつらみが溜まっていました。

仕方がないので機種変更を検討。当初はHTCの最新機種、HTC J butterfly HTL23への機種変更も検討したのですが、月々の支払いが高くなるので躊躇していました。良いイヤホンがついてきたり、スペック的な魅力はあるんですが、自分の場合はAndroidで音楽を聞くことはないので、いろいろオーバースペックなんですよね。

また、SIMロックされている端末だと海外に行った時に格安の現地のSIMが使えないんですよね。旅行中、同行者とLINEで連絡を取ることが多いのですが、現地SIMなら1000円以下で済むところが、現地で使えるWi-Fiをレンタルするか国際ローミングをするとなると、数千円の出費。海外に行った際には、着信用にはメイン回線が必要ですが、ガンガン使うにはやはり現地SIMを入れたSIMフリー端末がベスト。

こういう上でSIMフリー端末を調べてみて、たまたまキャンペーンで特別価格になっていた「ZTE Blade Vec 4G」の購入を決めました。

続きを読む

AWS CLIで最新のAmazon LinuxのAMI IDを取得する

アニメを消化しつつ、コマンドラインから最新のAMI IDを取得を試して、Amazon Linuxの分はできたのでメモ。

ID取得からインスタンスの作成まで一発でやってしまおうと思ったけど、describe-imagesはAPIのレスポンスが遅かったので、とりあえず、一覧だけ出力するところまで作成。APIのレスポンスが遅いのは、キャッシュファイルを入れて緩和。

最後に載せているスクリプトは、キャッシュファイル対応のために長くなっていますが、本質的なポイントは以下の2つ。

自分とamazonがオーナーになっているAMIのうち、以下に該当するものを取得

  • 仮想化方式 → HVM(完全仮想化)
  • 起動ディスク → EBS
  • アーキテクチャ → x86-64
  • ボリュームタイプ → 磁気ディスク(standard)
aws ec2 describe-images \
    --owners self amazon \
    --filters \
      Name=virtualization-type,Values=hvm \
      Name=root-device-type,Values=ebs \
      Name=architecture,Values=x86_64 \
      Name=block-device-mapping.volume-type,Values=standard

取得したJSONをjqで以下のように整形

  • Imageのリストを名前順にソート
  • Platformが"windows"となっているものを除外(Platformは値が"windows"のみしかない属性)
  • NameとImageId(AMI ID)を文字列結合して出力
jq -r '.Images | sort_by(.Name)| .[] | select(.Platform != "windows") | .Name + ": " + .ImageId'

これらをまとめて一つのスクリプトにしたのが以下。ほかの条件でAMI IDを取得したい場合は、最後に参考文献に載せたドキュメントを見つつ改変してください。

続きを読む

自分が訪れた香港は、世界中から人と物と歴史が流れ込む混沌とした美しい街だった

ここ最近、香港で大規模デモが起きていて、デモの写真や映像を見ることが多いのですが、ちょうどそのデモが始まる一週間前の連休に、その香港の街を旅行してきました。

自分が見た香港は、世界各国からいろんな人や物が流れ込んでくる混沌とした街で、一方、中国の伝統文化も併せ持つ魅力的な街でした。

デモのニュースだと、そういったところはなかなか出てこないので、自分が印象に残った場所を写真で紹介したいと思います。あくまで自分の旅の非常に個人的な記録で、観光客がスマホで取った旅行写真ではありますが、香港に興味を持つ人が増えるきっかけになれば。

ちなみに、最近、羽田ー香港間のLCC香港エクスプレス」の直通便が出ていて、自分たちが行った時は燃料サーチャージ込で往復40,300円ぽっきりの格安価格で羽田から直接香港に行くことができました。チケットの取り方にも寄りますが、国内便に乗るような感覚。ただ、早朝便で時間が早くて、始発では間に合わない可能性が高かったので、前日に羽田の「First Cabin」に宿泊。早朝便は使い勝手は微妙ではありますが、着いたら一日フルに使えるのがメリットです。

出発前

これが前日泊した羽田の「First Cabin」の個室。

f:id:sechiro:20140920003832j:plain

香港到着後

ここから香港の写真。これは、香港空港から都市部に移動するバスの中で取ったもの。これが「Docker」ですね。まさにアジアの流通拠点という感じ。

f:id:sechiro:20140920112310j:plain

f:id:sechiro:20140920112442j:plain

行く途中にはイオンもありました(真ん中の赤紫の看板)。日本では見られない、超高層ビルを背負ったやたら強そうなイオン。

f:id:sechiro:20140920112640j:plain

続きを読む