新しい案件の話しがあり、インフラ構成、デプロイ周りをどうしようかと考えていました。 前までクラウドはAWS一択でしたが最近はGCPなどにも興味があり、 「とりあえずDockerが動くクラウドならうちらが作るアプリも動くだろう」 というスタンスでDockerを積…
AWSのElasticCacheのredisが2.8.19になりHyperLogLogというのをサポートしたとのことなので、どんなものか試してみました。 HyperLogLogの利用法としてユニークユーザの推移に便利と記事でよく紹介されているようで、 今回のお試しでもwebサイトに訪問した人…
サイトの50xエラー発生時になるべくリアルタイムで社内に周知する。 運用しているサイトで50xエラーが発生した際に、なるべくリアルタイムで社内に周知したいと考えていました。 nginxのログはcapped属性でmongodbにも集約しているので、これを常時tail監視…
hubot hipchat やりたいこと チャットアプリのhipchatとボットとして動くhubotを使って、下記の事をしてみようと思い、設定してみました。 社内にあるubuntuでhubotを起動して、hipchat上にボットとして常駐させるようにします。 運用するサイトに対する問い…
作業確認流れ プライベートなDocker registry(S3 backed)を用意する。 registryのWEBUIを用意する。 手元のmacでdockerが動くようにする。 既存のrailsアプリをDockerイメージ化してregistryにpushする。 Dockerまで動く状態の別の端末からRailsアプリのイメ…
AWS S3の設定 アクセスキー、アクセスシークレットキーの作成 S3でバケットexample-owncloudを作成。 IAMでuser owncloud作成。AmazonS3FullAccessの権限を付ける。 アクセスキー、アクセスシークレットキー作成 ポリシーを下記に変更 { "Version": "2012-10…
レプリカ作成した後、全テーブルをプライマリキーで検索してテーブルデータをメモリにロードしておきます。 #!/bin/sh stage=$1 stty -echo echo -n "password for ${stage} ?> " read pass stty echo SLAVE="${stage}-db-slave-1.xxxxxxxxxxx.ap-northeast-…
nginxのアクセスログをfluentdを経由してElasticsearchに保存します。 ログの視覚化にはkibanaを使います。 こんな感じで500系のエラーの発生具合を時系列のグラフで見れるようにします。 仕組みについてはこちらの記事が参考になります 設定 Elasticsearch…
WEBサーバのアクセスログ、アプリのアクティビティログをmongodbで保存することにしました。 アクセスログの追跡をできるようにrockmongoというWEBユーザーインタフェイスも入れておきます。 レプリカセットを作る PRIMARY,SECONDARY,ARBITERで3つのインス…
POSTのデータもログにとっておいたほうが後の調査にも役立つだろうと思い、設定をしておきます。nginxの場合、プロキシしている前提になりますが、location内にもaccess_logを書くことで$request_bodyからPOSTデータが拾えるようです。一応リクエストのボデ…
画像、音声、css、jsなど静的コンテンツをAWS CloudFront経由で配信してwebサーバの負荷を軽減するようにします。 CloudFrontはリバースプロキシ型のキャッシュサーバのように動作します。 CloudFrontを試していたところ一つ問題を確認しています。クライア…
時間帯やイベント開催中かどうかによってアクセス数が変動すると思われるので、appsサーバのインスタンス増減をスケジューリングできるようにします。以下の想定でスケジュールを設定してみます。 スケジュールの例 イベント非開催時の通常時 深夜過疎(1:00-…
ピークタイムやイベント開催中かどうかによってWEBサイトの負荷が大きく変動するのが予想されるので、オートスケーリングを使用してインスタンスを必要な時に必要な台数だけ確保するようにしてサーバ費用を抑えるようにします。 どのサーバにオートスケーリ…
AWS Cloudwatchで監視を行っていてしきい値超えを検知した場合に、AWS SNSで設定されている通知を行う事ができます。 SNSでの通知としては・メールを送信・指定のURLにアクセスする・APNsにPush通知を行うなどがありますが、今回は指定のメールアドレスにメ…
RDSを使ってmysqlをmaster,slaveのレプリケーション構成で立ち上げます。 redisと同じようにスクリプトでセットアップできるようにします。パラメータは初期パラメータとしてとりあえずの設定をしています。 MultiAZでマスタを立ち上げるとactiveがap-northe…
Redisを使用するのでelasticacheのredisでmaster-slaveのレプリケーション構成を作ります。 手順は以下のようになります。 パラメータグループを新規作成、一部のパラメータを変更する(aof,timeout) このパラメータグループを使うノードを作成する(マスタ…
インターネットからのHTTPリクエストを受けるproxyサーバとRailsが動くアプリケーションサーバの間にロードバランサであるELBを挟んで複数のアプリケーションサーバにリクエストを振るようにします。ちなみにELBはZeus製と聞いたことがあります。 AWS Mamage…
node.jsで作られたredisマネジメントツールredis-commanderをインストールします。 GUIでredisの操作できます。 手順 $sudo yum install nodejs $sudo yum install npm $sudo npm install -g redis-commander haproxy redis-commanderからはローカルのhaprox…
unicorn,resqueのプロセス管理に今回はeyeを使うことにします。 はじめBluepillで設定していたのですが、Ruby2.0環境だとBluepillのプロセスがゾンビで溜まりまくるという問題があり、代替をさがしていたところeyeというのがありました。God、Bluepillを参考…
以下の状況の場合はnginxでエラーハンドリングを行います。 リバースプロキシしてappsサーバからの応答が一定以上ない場合のタイムアウト appsサーバからのステータスコードが40x,50xの場合 nginxが40X,50Xのステータスコードでレスポンスを返すと、プラット…
アラート通知の続きです。 サービスダウン検知 MSPに運用を手伝ってもらっていればサービスダウンが発生した場合でも電話で障害連絡してくれたり一次対応をやってくれたりするのですが、今回はスモールスタートでの運用ということもありMSPを使うことを勘定…
前に書いた記事がデプロイの話で、WEBサイト環境構築というよりかは運用的な記事でした。今回はさらに脱線してアラートの通知について書きます。 デプロイの設定作業の時に色々参考記事を漁ってたのですが、デプロイ開始、終了を音声で通知したりJenkinsのビ…
AWS内のステージング環境をセットアップしているとアプリが動くところを早く確認したくなり、過去の案件で使われてたCapistranoの設定を流用してさっさとデプロイしようとしたところ、最近はバージョンが3らしく、書き方も大きく変わっているようです。 Capi…
appサーバ(Rails)周りの準備 アプリそのものはプログラマーさんが制作していて、私のほうでは作ったアプリをサーバ上で動かす環境とデプロイ周りを担当します。 以前にもRails環境のサーバをいくつか構築したことがあり、過去を思い出してみると、 Lighttpd+…
nginxに来たアクセスをインターナルなELBにフォワードしてappサーバ群に振り分けてもらいます。 インターネット | nginx | ELB | appサーバ群 nginxのプロキシ先にELBを指定している場合このような問題がおきますので、参考記事のように設定しておきます。 h…
nginxが出力するアクセスログをfluentdで取り込み、それをElasticSearchやMongoDBに集約する予定なので、取り込みやすいようにログフォーマットをltsv形式にします。 必要そうな項目を一通り羅列しました。 upstream_statusはappsサーバからのステータスコー…
メンテ中のメンテ画面 Capistranoでのメンテナンス切り替えはmaintenance.htmlファイルを配置するかどうかというものなので、nginx側で下記のように設定してメンテ画面を表示するのが一般的かと思います。 こういう感じ if (-f $document_root/system/mainte…
連打対策してるのをユーザにわかってもらえる程度の制限 今回運用するWEBサイトではユーザがほぼ同タイミングでPOSTのボタンを数回連打したり、もしくはツールなどを使って一定期間同じリクエストを延々と飛ばしてきたりする可能性が普通にあるらしく、ある…
物理サーバでインフラ環境を作っていた時は、サーバに固定IPをつけたりネットワークアドレスも「10.1.1.0/24がAPPSセグメントで10.1.2.0/24がDBセグメントで・・・」と設計することがほとんどでした。 EC2を試した時はデフォルトでDHCPな環境だったので、AWS…
WEBサーバ(web)とアプリケーションサーバ(apps)をリバースプロキシ構成にします。WEBサーバは今回nginxを採用します。 WEBサイトの構築運用にあたってWEBサーバ側で行いたい要件が以下のようにあり、nginxに設定していきます。 nginxがどれくらい負荷に強い…