機能追加 #541
負荷分散&フェイルオーバー環境構築
ステータス: | 進行中 | 開始日: | 2015/10/28 | |
---|---|---|---|---|
優先度: | 通常 | 期日: | ||
担当者: | 山本 義治 | 進捗 %: | 0% | |
カテゴリ: | サーバ環境構築 | 作業時間の記録: | - | |
対象バージョン: | - |
説明
検討するサービス
・mesos+spark - リソース監視+自動スケールアウト
・nginx proxy - ロードバランス+死活監視
・redis sentinel or redis cluster - API分散
・mongo cluster
履歴
#1 山本 義治 が約9年前に更新
- ステータス を 新規 から 進行中 に変更
- 担当者 を 山本 義治 にセット
ad.i-joji.com¶
nginx¶
参考サイト
http://qiita.com/cubicdaiya/items/235777dc401ec419b14e
http://nodejs.osser.jp/server/nginx-max-performance/
nginx.conf
worker_processes auto; worker_rlimit_nofile 100000; error_log logs/error.log debug; events { worker_connections 2048; #multi_accept on; use epoll; } http { log_format xgeneration '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$x_app_params"'; server { listen 443 ssl; server_name ad.i-joji.com charset utf-8; ssl_certificate /usr/local/openresty/nginx/conf/ssl/ad.i-joji.com.crt; ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/ad.i-joji.com.key; ssl_session_cache shared:SSL:120m; ssl_session_timeout 5m; sendfile on; tcp_nopush on; #tcp_nodelay on; open_file_cache max=100 inactive=20s; keepalive_timeout 65; server_tokens off; access_log /usr/local/openresty/nginx/logs/access.log xgeneration; set $x_app_params '-'; set $template_root /usr/local/openresty/nginx/html/templates; location /nginx_status { stub_status on; access_log off; #allow 127.0.0.1; #deny all; } location / { default_type text/html; content_by_lua ' ngx.say("<p>x-generation-api</p>") '; } location /favicon { access_log off; } location /create_init { content_by_lua_file lua/create_init.lua; } location /app/create { content_by_lua_file lua/app_create.lua; } location /app/update { content_by_lua_file lua/app_update.lua; } location /app/delete { content_by_lua_file lua/app_delete.lua; } location /campaign/create { content_by_lua_file lua/campaign_create.lua; } location /campaign/update { content_by_lua_file lua/campaign_update.lua; } location /campaign/delete { content_by_lua_file lua/campaign_delete.lua; } location /network/create { content_by_lua_file lua/network_create.lua; } location /network/update { content_by_lua_file lua/network_update.lua; } location /network/delete { content_by_lua_file lua/network_delete.lua; } location /click { content_by_lua_file lua/click.lua; } location /install { root html; content_by_lua_file lua/install.lua; } location /event/set { content_by_lua_file lua/event_set.lua; } } }
#2 山本 義治 が約9年前に更新
テストサーバー構成¶
LBサーバー x 2
Webサーバー x 2
APIサーバー x 2
集計サーバー x 2
DBサーバー x 2
テスト項目¶
LBサーバー
・フェイルオーバーテスト
・死活監視
・障害時アラート通知
・障害発生時に自動フェイルオーバー
その他各サーバー
・パフォーマンステスト
・1台あたりのリクエスト処理能力とステータス監視
・フェイルオーバーテスト
・死活監視
・障害時アラート通知
・障害発生時に自動フェイルオーバー
・負荷分散テスト
・正常に負荷が分散されること
・高負荷時のアラート通知
・スケールアウト
・高負荷時にシステム稼働した状態でサーバー増設
・監視ツール
・各サーバーステータス監視
・アラート通知(メール、Slack)
成果物¶
・サーバー構成
・サーバースペック選定(CPU、メモリ、ディスク)
・データセンター選定
#4 山本 義治 が約9年前に更新
API¶
サーバー構成¶
redis sentinel採用
http://redis.io/topics/sentinel
master x 1
slave x 2
※redis clusterは最低6台必要なので不採用
http://redis.io/topics/cluster-tutorial
アプリケーション¶
nginx + lua + redis
(1) read
localhostへ接続
(2) write:
(2-1) masterのIPをsentinelに問い合わせ SENTINEL get-master-addr-by-name <master name> (2-2) masterへ接続
redis-sentinel対応ライブラリを使えば上記アプリケーション側対応は不要!?
https://github.com/pintsized/lua-resty-redis-connector
参考サイト
http://tech.gmo-media.jp/post/48748908427/introduce-redis-sentinel
#6 山本 義治 が約9年前に更新
- ファイル ME-02-Tokyo-Summit-2015.pdf を追加
ドワンゴのライブドアブログ譲渡〜オンプレミス→AWS移行体験記
↓
AWSビギナーが3日でインフラ構築
#8 山本 義治 が約9年前に更新
- ファイル Dev-07d-Tokyo-Summit-2015.pdf を追加
サイバーエージェント~Dynalyst DSP配信システム
・Amazon Kinesisを活用したリアルタイムデータ処理
・RedshiftからSpark on EMRへ
#11 山本 義治 が約9年前に更新
JoJi AWSシステム構成(新)
http://calculator.s3.amazonaws.com/index.html?lng=ja_JP#key=calc-7C77BC68-C5DF-4E95-B442-2876557C721E&r=NRT
#Amazon EC2
API / nginx (ELB) - m4.large x 2
AP / nodejs (ELB) - m4.large x 2
DB / mongoDB - m4.large x 2
AG / kafka - m4.large x 1
AG / zookeeper - m4.large x 1
#Amazon EBS
DB / data - SSD500GB x 2
AG / data - SSD500GB x 1
#Amazon ElastiCache
API / redis - m3.large x 2
#Amazon S3
AG - 1TB
#Amazon EMR
AGG / spark - MapR M3 m3.xlarge x 2
#Amazon Route53
#13 山本 義治 がほぼ9年前に更新
http://www.slideshare.net/GedowFather/gedow-style-aws-spot-instance
スポットインスタンスを併用することで大幅コスト削減
#14 山本 義治 がほぼ9年前に更新
http://dev.classmethod.jp/cloud/apache-jmeter-master-slave-100mil-req-min/
Jmeter+スポットインスタンスで負荷テスト
ELB1台 + EC2: m3.xlarge (4core, 15GB) x 3台
静的PHPで66000req/s
#15 山本 義治 がほぼ9年前に更新
- ファイル JOJIサーバー料金比較.pdf を追加
- ファイル JOJIサーバー構成検証.pdf を追加
#16 山本 義治 がほぼ9年前に更新
「AWSからGCPに切り替えたらコストが1/10になった」
http://engineer.recruit-lifestyle.co.jp/techblog/2015-11-27-yoshida-interview-2/
#17 山本 義治 がほぼ9年前に更新
大規模Redisサーバ縮小化の戦い
http://www.slideshare.net/ssuserf3788f/redis-58419914
・負荷テストでデータ量テストを省いたら台数膨れ上がってコスト増大
・dumpマージで64→8台に縮小化