Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Blue-Green Deployment with ECS and monitoring
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Shinji Tanaka
September 14, 2015
Technology
660
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Blue-Green Deployment with ECS and monitoring
JAWS コンテナ支部 #2
Shinji Tanaka
September 14, 2015
More Decks by Shinji Tanaka
See All by Shinji Tanaka
Mackerel loves Machine Learnings
stanaka
0
3.2k
How to Contribute Go
stanaka
4
19k
Introduction to Mackerel
stanaka
0
1.1k
Upcoming features in 2016, Mackerel
stanaka
0
3.6k
Mackerel's first year and onward
stanaka
0
3.2k
Mackerel's first year and onward (in English)
stanaka
0
450
Mackerel Meetup #4 (in Eng)
stanaka
0
630
Mackerel Meetup #4
stanaka
0
3.5k
Monitoring Docker with Mackerel (2015 ver.)
stanaka
1
290
Other Decks in Technology
See All in Technology
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2k
自宅LLMの話
jacopen
1
670
手塩にかけりゃいいってもんじゃない
ming_ayami
0
610
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
120
AIチャット検索改善の3週間
kworkdev
PRO
2
140
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
290
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
140
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
170
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
160
人材育成分科会.pdf
_awache
4
300
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
インシデントレスポンス演習 I / Incident Response Exercise I
ks91
PRO
0
100
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
RailsConf 2023
tenderlove
30
1.5k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Believing is Seeing
oripsolob
1
150
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
430
Site-Speed That Sticks
csswizardry
13
1.2k
Between Models and Reality
mayunak
4
340
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Transcript
Blue-Green Deployment with ECS and monitoring Hatena Co., Ltd. Shinji
Tanaka @stanaka
Shinji Tanaka / ాத৻࢘ @stanaka / id:stanaka גࣜձࣾͯͳ ࣥߦһCTO 2
͋͋ ࠷ۙɺిࢠ൛ग़ͨΑ͏Ͱ͢
Agenda • Blue-Green Deployment with AWS ECS • Docker (cgroup)
Statics • Monitoring Docker with Mackerel
1 Blue-Green Deployment with AWS ECS
Immutable Infrastructure http://chadfowler.com/blog/2013/06/23/immutable-‐deployments/
Immutable Infrastructure • Immutable server • Stateless / Disposable •
ઃఆΛมߋ͢Δࡍ࠶࡞͢Δ • ίʔυσϓϩΠؚΉ
Blue-Green Deployment Host Host Host AWS Host Host Host Load
Balancer Dispose Old hosts Create New hosts
Pattern 1 • 2 Autoscaling Group • as ECS Cluster
• Blue / Green • TaskΛ֤άϧʔϓʹσϓϩΠ
Pattern 1 • ελϯόΠʹ৽͍͠AppΛσϓϩΠ • ELBͰάϧʔϓΛΓସ͑ • Ұ࣌తʹ྆ํͷάϧʔϓʹଓ͢Δ
Pattern 2 • 1 Autoscaling Group • 2 ECS Tasks
• Blue / Green Auto Scaling Group
Pattern 2 • ৽͍͠ίʔυΛ৽Taskͱͯ͠σϓϩΠ • Delete/CreateLoadBalancerListeners • Ұॠɺ Listener ͕ͳ͘ͳΔ
{ "containerDefinitions": [ … "portMappings": [ { "containerPort": 80, "hostPort": 80 } … ϙʔτΛͣΒ͢
Pros/Cons of Pattern 1 • ҆શɾ࣮֬ͳΓସ͑ • Ұ࣌తʹ྆ํͷάϧʔϓʹଓ͢Δ • Ϧιʔεޮѱ͍
• Auto Scaling Group͕ཁஆؾ
Pros/Cons of Pattern 2 • Ϧιʔεޮ͕ྑ͍ • ಉ͡ΠϯελϯεͰಈ͔ͤΔ • Delete/CreateLoadBalancerListners
͕ΞτϛοΫͳૢ࡞Ͱͳ͍
Pattern 2’ • ֤ΠϯελϯεʹNginx(HAProxy)Λ ஔ • ϙʔτϑΥϫʔμʔ • ৽چΛΞτϛοΫʹΓସ͑Մ •
શΠϯελϯεʹૢ࡞͕ඞཁ
2 Monitoring ECS with Mackerel
2-a Docker (cgroup) Statistics
DockerͷϞχλϦϯάͷجຊ • cgroupͷ࡞๏ʹै͏ • ίϯςφଆ͔Βɺϗετશମ͔͠ ݟ͑ͳ͍ • /proc/loadavg, /proc/stat
• ݟ͍ͨ߹`-‐v`ͰऔΓࠐΉ
ϗετଆ͔ΒͷϞχλϦϯά • cgroupͷϨϙʔτΛར༻ • /sys/fs/cgroup/ {cpuacct,
memory} • ଞʹblkio, cpu, devicesͳͲͷα ϒγεςϜ͕͋Δ(֤छ੍ݶͳͲͷ੍ ޚ༻) VCVOUVͷ߹ LFSOFMHFOFSJDEPDLFS
CPU༻ • /sys/fs/cgroup/cpuacct/docker/{ίϯςφID}/cpuacct.stat • user … ϢʔβʔϞʔυͷCPU ࣌ؒ • system
… γεςϜϞʔυͷCPU ࣌ؒ • CPU࣌ؒͷ୯Ґ: USER_HZ (σϑΥϧτ10ms) user 480 system 116
cpuacctͷଞͷࢦඪ • cpuacct.usage: ૯CPU࣌ؒ (φϊඵ) echo 0 > /cgroup/cpuacct/cpuacct.usage
ͰϦηοτ • cpuacct.usage_percpu: ֤CPUͷCPU ࣌ؒ (φϊඵ)
ϝϞϦ༻ • /sys/fs/cgroup/memory/docker/{ίϯςφID}/memory.stat cache 761856 rss 25681920 rss_huge
0 mapped_file 16384 pgpgin 12569 … total_cache 761856 total_rss 25681920 … ͍ΘΏΔ344STT NBQQFE@pMF
memory.statৄࡉ • cache • rss • mapped_file
• pgpgin • pgpgout • swap • active_anon • inactive_anon • active_file • inactive_file • unevictable • hierarchical_memory _limit • hierarchical_memsw • total_ࢠάϧʔϓΛ ؚΉ ৄࡉIUUQTXXXLFSOFMPSHEPD%PDVNFOUBUJPODHSPVQTNFNPSZUYU
memoryؔ࿈(ͦͷଞ) memory.usage_in_bytes ϝϞϦ༻ྔ memory.memsw.usage_in_bytes ϝϞϦ༻ྔͱεϫοϓྖҬͷ memory.max_usage_in_bytes ϝϞϦ࠷େ༻ྔ memory.memsw.max_usage_in_bytes εϫοϓ࠷େ༻ྔ memory.limit_in_bytes
ϝϞϦͷ੍ݶ memory.memsw.limit_in_bytes ϝϞϦͱεϫοϓ੍ݶ memory.failcnt ϝϞϦ੍ݶʹୡͨ͠ճ memory.memsw.failcnt ϝϞϦ੍ݶʹୡͨ͠ճ
ڞ௨Ϩϙʔτ • tasks ࣮ߦதͷϓϩηεͷҰཡ(PID) • cgroup.procs ࣮ߦதͷεϨουάϧʔϓͷҰཡ(TGID) % cat /sys/fs/cgroup/memory/docker/…./cgroup.procs
31218 31307 % ps aux | egrep '(31218|31307)' root 31218 0.0 0.0 4408 164 ? Ss 13:15 0:00 /bin/sh -‐ c rackup -‐p4567 root 31307 0.0 5.2 281364 26336 ? Sl 13:15 0:06 ruby1.9.1 /usr/local/bin/rackup -‐p4567
2-b Monitoring Docker with Mackerel
Mackerel https://mackerel.io/
ಛ • ʮׂʯʹΑΔϗετ܈ͷཧ • ΤʔδΣϯτʹΑΔϦιʔεࢹ ϩ ʔ ϧ
ϩʔϧຖͷάϥϑͰՄࢹԽ
mackerel-agent • Go Ͱॻ͔ΕͨެࣜΤʔδΣϯτ • Linux / Windows αϙʔτ •
ϗετεϖοΫͱϝτϦοΫΛऩू mackerelio/mackerel-agent
Blue-green DeploymentରԠ • ϩʔϧ୯ҐͰͷՄࢹԽ • ୀࡁΈίϯςφͷάϥϑอ࣋ Deployment
ΦʔτεέʔϧରԠ • αʔό͕ॖୀͯ͠άϥϑΔ
Raspberry Pi Ͱಈ͖·͢ • Թɾ࣪ηϯα → Slack௨
Docker with Mackerel
mackerel/mackerel-agent on Docker Hub https://registry.hub.docker.com/u/stanaka/mackerel-‐agent/
How to Use • ίϚϯυҰൃ • ඞཁͳύεɾAPIKEYΛ͢ docker run -‐h
`hostname` \ -‐v /var/run/docker.sock:/var/run/docker.sock \ -‐v /var/lib/mackerel-‐agent/:/var/lib/mackerel-‐agent/ \ -‐v /proc/mounts:/host/proc/mounts:ro \ -‐v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -‐e 'apikey=<APIKEY>‘ \ mackerel/mackerel-‐agent
DockerFile(ൈਮ) FROM debian:jessie # setup mackerel-‐agent RUN apt-‐get
update \ .. && apt-‐get -‐y install mackerel-‐agent \ .. # setup docker plugin COPY mackerel-‐plugin-‐docker.rb /mackerel-‐plugin-‐docker.rb RUN echo [plugin.metrics.docker] \ >> /etc/mackerel-‐agent/mackerel-‐agent.conf RUN echo command = \"ruby /mackerel-‐plugin-‐docker.rb\" \ >> /etc/mackerel-‐agent/mackerel-‐agent.conf # boot mackerel-‐agent CMD /startup.sh
֤ίϯςφͷใΛऩू )PTU qVFOUE NBDLFSFM BHFOU "QQ
༷ࢠ(ίϯςφຖͷCPU)
ίϯςφͷதͷ ใΛऩू͍ͨ͠
ίϯςφͷதͷใΛऩू )PTU NBDLFSFM BHFOU "QQ
Memcachedͷྫ % docker run -‐d -‐P \
-‐-‐name memcached -‐p 11211:11211 \ sylvainlasnier/memcached )PTU NBDLFSFM BHFOU NFNDBDIFE
linkΦϓγϣϯͰଓ % docker run -‐i -‐t -‐h `hostname` \
-‐v /var/run/docker.sock:/var/run/docker.sock \ -‐v /proc/mounts:/host/proc/mounts:ro \ -‐v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \ -‐e 'apikey=<APIKEY>' -‐-‐link memcached:memcached \ mackerel-‐agent /bin/bash root@dev:/# env HOSTNAME=develop04.host.h MEMCACHED_PORT_11211_TCP_PORT=11211 MEMCACHED_PORT_11211_TCP_PROTO=tcp MEMCACHED_NAME=/tender_curie/memcached MEMCACHED_PORT=tcp://172.17.0.88:11211 MEMCACHED_PORT_11211_TCP_ADDR=172.17.0.88 MEMCACHED_PORT_11211_TCP=tcp://172.17.0.88:11211 ݱঢ়Pattern2’ͰରԠ
ڥมͰΞυϨεࢦఆ root@dev:/# /usr/local/bin/mackerel-‐plugin-‐memcached \ -‐host=$MEMCACHED_PORT_11211_TCP_ADDR memcached.connections.curr_connections
10 1427507503 memcached.cmd.cmd_get 0 1427507503 memcached.cmd.cmd_set 0 1427507503
ϓϥάΠϯઃఆΛࠐΉ % docker run -‐h `hostname` \ -‐v
/var/run/docker.sock:/var/run/docker.sock \ -‐v /var/lib/mackerel-‐agent/:/var/lib/mackerel-‐agent/ \ -‐v /proc/mounts:/host/proc/mounts:ro \ -‐v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -‐e 'apikey=<APIKEY>‘ \ -‐-‐link memcached:memcached \ -‐v /etc/mackerel-‐agent/conf.d:/etc/mackerel-‐agent/conf.d:ro -‐e ‘include=/etc/mackerel-‐agent/conf.d/*' \ mackerel/mackerel-‐agent % cat /etc/mackerel-‐agent/conf.d/memcached.conf [plugin.metrics.memcached] command = "/usr/local/bin/mackerel-‐plugin-‐memcached -‐ host=$MEMCACHED_PORT_11211_TCP_ADDR"
MemcachedͷϝτϦοΫ
·ͱΊ • ECSͰBlue-Green Deployment • Patten 1, 2, 2’ •
Monitoring Docker with Mackerel