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
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.2k
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
460
Mackerel Meetup #4 (in Eng)
stanaka
0
640
Mackerel Meetup #4
stanaka
0
3.5k
Monitoring Docker with Mackerel (2015 ver.)
stanaka
1
290
Other Decks in Technology
See All in Technology
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
210
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
480
事業価値と Engineering 2026年度版
recruitengineers
PRO
45
22k
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
200
MIRU 2026 チュートリアル
keisuke198619
0
880
ブラウザ研修 2026
recruitengineers
PRO
5
830
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.6k
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
150
ホームラボ紹介
y_sera15
0
140
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
120
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
340
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Agile that works and the tools we love
rasmusluckow
331
22k
BBQ
matthewcrist
89
10k
エンジニアに許された特別な時間の終わり
watany
108
250k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.3k
A designer walks into a library…
pauljervisheath
211
24k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
630
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Odyssey Design
rkendrick25
PRO
2
750
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
270
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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