Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
5years-history-of-heteml
Search
Shinya Tsunematsu
November 12, 2013
Technology
710
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5years-history-of-heteml
運用しているヘテムルでのサービス改善の歴史
Shinya Tsunematsu
November 12, 2013
More Decks by Shinya Tsunematsu
See All by Shinya Tsunematsu
GMOペパボでのSREの実践 / SRE Practices of GMO Pepabo, Inc.
tnmt
3
5.1k
ペパボサービスインフラの今までこれから / pepabo infra past and future
tnmt
3
750
知らなかった、時に困るWebサービスのセキュリティ対策 / Where Do We Start With Information Security?
tnmt
19
9.7k
IaaSをいじっている人が PaaSについて考えたこと / Should We Prepare Own PaaS?
tnmt
5
2.4k
成長を支援する “ふりかえり”の技術 / How to lockback using "furik"
tnmt
7
1.9k
こんにちわ福岡 / hello-fukuoka
tnmt
0
1.4k
Inside Nyah & Future - A case of "Private Cloud" using OpenStack -
tnmt
0
310
OpenStackクラスタ間マイグレーション事例 Havana to Mitaka / OpenStack Migration Case (Shift from Havana to Mitaka)
tnmt
1
1.2k
ペパボのプライベートクラウド "Nyah" その後 / Pepabo's PrivateCloud "Nyah" After That
tnmt
8
13k
Other Decks in Technology
See All in Technology
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
1
140
Essential architectural thinking (revised edition)
ufried
0
110
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
120
ゲームのリアルタイム通信から見た QUIC と MoQ
segadevtech
0
110
go-sqletch
moznion
0
130
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
940
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
5.8k
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
1.1k
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
220
メルペイ 会計システム概要と歴史
mewuto
0
210
パッチ更新でterraform initが落ちた日
grimoh
1
120
hackers_champloo_2026_tidb
makocchi
0
110
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
WCS-LA-2024
lcolladotor
0
870
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Google's AI Overviews - The New Search
badams
0
1.6k
Abbi's Birthday
coloredviolet
4
10k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Transcript
2013/11/9 Shinya Tsunematsu @tnmt ͱαʔϏεͷ5ͷาΈ Πϯϑϥվળͷྺ࢙
5ଓ͘αʔϏεͷӡ༻ͬͯ
͘ଓ͘αʔϏεʹ͖ͭ·ͱ͏ ✤ ࢁ͋ΔαʔόؒͰͷඍົͳ༷ࠩ! ✤ ن͕େ͖͍߹ͷมߋͷखؒ! ✤ ΦϯϓϨϛεͷ߹ͷεϖοΫΞοϓʹ͍͍͚ͭͯͳ͍ॊೈੑͷແ ͞! ✤ ϧʔνϯԽ͞Εͨ࡞ۀ͕লྗ͞Ε͍ͯͳ͍͜ͱʹΑΔӡ༻ίετ૿!
✤ Կ͕ى͖͍ͯΔ͔Ѳग़དྷ͍ͯͳ͍αʔϏεϔϧενΣοΫ࣭ͷ ྼԽ
paperboy&co. ϔςϜϧνʔϜ
None
heteml (ϔςϜϧ) ✤ ϩϦϙοϓʂͱฒͿϨϯλϧαʔόͷϥΠϯφοϓ! ✤ 2005ϦϦʔε! ✤ 201310݄ݱࡏαʔό400ऑ! ✤ ৗদ2009͔ΒδϣΠϯ
ٕज़తෛ࠴
ෛ࠴ͱ͍͏ͱωΨςΟϒͳҹʁ ✤ ͔͠͠ඞͣਵ͢ΔͰࣗવͳͷ! ✤ ະવʹ͙ɺൃੜͨ͠߹ʹରॲ͍ͯ͘͠ͷΛ͓Ζ ͔ͦʹ͢ΔͱޙʑࣗͱपΓʹৼΓ͔͔Δ
ΞδΣϯμ ✤ ఏڙ͍ͯ͠ΔαʔϏεͯ͢όʔδϣϯཧԽͰཧ͢Δ! ✤ σϓϩΠαʔόʹର͢ΔมߋπʔϧΛඋɺଐਓԽࡶ͞ Λഉআ! ✤ OSηοτΞοϓΛলྗԽ! ✤ γεςϜߏཧπʔϧΛ༻͍ͯαʔόߏஙͷলྗԽɾ༷Խ
Λߦ͏! ✤ ࢹγεςϜઃఆͷϨϏϡʔɺࢹઃఆͷࣗಈੜ
ͯ͢ΛόʔδϣϯཧԼʹ
ԿΛόʔδϣϯཧ͢Δ͔ ✤ جຊతʹʮͯ͢ʯ
ͱ͍͍͖͑ͳΓશ෦ແཧ ✤ ༏ઌΛ͚ͭΔ! ✤ OSϨΠϠɺηΩϡϦςΟपΓ! ✤ ϛυϧΣΞઃఆ! ✤ cron, ӡ༻εΫϦϓτ!
✤ ࢹιϑτΣΞઃఆ
ΑΓԼͷϨΠϠ͔Βཧ͢Δ ✤ ҙຯͷॏෳΛආ͚ΒΕΔͨΊͦͷ͋ͱͷϝϯςφϯε ੑߴ͘ͳΔ! ✤ ϛυϧΣΞͷηΩϡΞͳઃఆΛܾఆ͢Δ͜ͱ͕༰қ ʹͳΔ! ✤ ҙ֎ͱ͜Ε͕͞Εͯͳ͍έʔε͕ଟ͍
࠷ॳશવཧग़དྷͯͳ͔ͬͨ… ✤ ߏங࣌ظʹΑͬͯઃఆ͕ҧ͏! ✤ ͋Γ·ͤΜ͔ʁ! ✤ iptablesͱtcp_wrapperͰಉ͡ϧʔϧॻ͍ͯΔ! ✤ ϦϓϨΠεΛܦͯɺଘࡏ͍ͯ͠ͳ͍ϗετ͔ ΒͷڐՄઃఆ
όʔδϣϯཧԽʹೖΕ༷Խ ✤ Ұ୴ݱߦಈ͍͍ͯΔαʔόϕʔεͰͱΓ͋͑ͣϦϙ δτϦʹಥͬࠐΉ! ✤ ·͍͠ઃఆͷݟͦ͠ͷޙཧ͢Δ! ✤ มߋτϨʔεՄೳʹͳΔͨΊޙͰݟฦͤΔ
ΦϖϨʔγϣϯπʔϧͷݟ͠
ෳαʔόʹมߋΛՃ͑Δखஈ ✤ όʔδϣϯཧ͕ग़དྷͨΒͦΕΛల։͢Δज़͕ཁΔ! ✤ ͕૿͑Δͱมߋͷख͕ؒେม! ✤ ख͕ؒ૿͑Δͱαʔόؒͷဃ͕૿͑Δѱ॥
sshϧʔϓظ ✤ ຖճଧͭͷ໘ɺઈରϛε͢Δ! ✤ 1ຖ࣮ߦͰγʔέϯγϟϧɺ͕͔͔࣌ؒΔ for host in web{1..100}.heteml.lan;! do!
echo ${host}! ssh ${host} ‘perl -pi -e “s/foo/var/g” /path/to/file’! done
Archerظ ✤ PerlͷσϓϩΠπʔϧ! ✤ YAMLͰఆٛ͞Εͨઃఆʹͱ͖ͮγΣϧίϚϯυ ϑΝΠϧͷσϓϩΠ͕ߦ͑Δ
Archerظ ✤ Pluggable! ✤ Archer::Plugin::RoleLoader! ✤ roles.yaml! ✤ ࢦఆͨ͠ϩʔϧʹ! ✤
ίϚϯυ࣮ߦ! ✤ ϑΝΠϧσϓϩΠ …! ! web:! - web001.heteml.lan! - web002.heteml.lan! mail:! - mail001.heteml.lan! - mail002.heteml.lan! - mail003.heteml.lan! ! …
Archerظ ✤ େྔϗετʹͳΔͱίϚϯυ࣮ߦ݁Ռͷ֬ೝ͕͠ΜͲ ͍! ✤ جຊతʹઃఆϑΝΠϧʹॻ͍ͨ༰Λ࣮ߦ͢ΔͨΊɺ ࡉ͔ͳಈత࡞ۀͷ༻్ʹ͙ͦΘͳ͔ͬͨ! ✤ ಛʹ2ͭΊͷཧ༝͕େมɺಥൃ͢ΔλεΫʹରԠ͖͠ Εͳ͍
ࣗ࡞πʔϧheteloyظ ✤ ༻్ಛԽʢίϚϯυ࣮ߦɺϑΝΠϧσϓϩΠʣ! ✤ ࣗͷPerlπʔϧ! ✤ ʮϔςϜϧʯʹʮσϓϩΠʯ! ✤ σϓϩΠपΓޙड़͢ΔPuppetͱͷੑΛߴΊͨ! ✤
PuppetͷϦϙδτϦͰཧ͞Ε͍ͯΔϑΝΠϧΛ͠ ͘͢ͳ͍ͬͯΔ
ࣗ࡞πʔϧheteloyظ ✤ /var/lib/puppet/data/ ͕ PuppetϦϙδτϦͱͯ͋͠Δ! ✤ /var/lib/puppet/data/modules/web/files/etc/httpd/httpd.conf Λ! ✤ webϩʔϧʢલड़ͷroles.yaml)
ͷϗετʹ͠! ✤ Apache ͷ configtest ͯ͠ OK ͳ߹͚ͩ restart ɺNG ͳ߹ϑΝΠϧϩʔϧόο Ϋ sudo heteloy.pl --role web \! --dist /etc/httpd/httpd.conf \! --mode 644 \! --exec ‘service httpd configtest’ \! --exec ‘service httpd restart’!
ࣗ࡞πʔϧheteloyظ ✤ Α࣮͘ߦ͢ΔλεΫλεΫΛyamlܗࣜʹdump! ✤ Ҏ߱ͦͷyamlΛࢦఆͯ͠ಉ͡ॲཧΛ࣮ߦՄೳ sudo heteloy.pl --role web \!
! --dist /etc/httpd/httpd.conf \! --mode 644 \! --exec ‘service httpd configtest’ \! --exec ‘service httpd restart’ \! --configdump > httpd_task.yaml! sudo heteloy.pl --configloada httpd_task.yaml!
ࣗ࡞πʔϧheteloyظ ✤ ڥґଘΛڐ༰͠൚༻ੑΛࣺͯͨ! ✤ ͷͰެ։ͯ͠ͳ͍Ͱ͢…! ✤ ʑͷӡ༻ͷதͰߦ͏ཻখ͍͕͞εϐʔυΛٻΊ ΒΕΔ࡞ۀʹ͍͍ͯΔ! ✤ PuppetͰͷߏཧ࣠ʹͦΕΛαϙʔτ͢Δҝͷ
πʔϧ͕͋Δͱศར
OSηοτΞοϓࣗಈԽ
৽͍͠ϕϯμͷαʔόΛߪೖ ✤ εϖοΫΞοϓ͕ओ؟! ✤ औΓճ͕͍͢͠͠Α͏IPMIΛࡌ͠ɺԕִʢΦ ϑΟεʣ͔Βͷ࡞ۀ͕ߦ͑ΔΑ͏ʹͨ͠
OSͷΠϯετʔϧDCͤͩͬͨ ✤ IPMI͕͑ΔΑ͏ʹͳΓɺࣗͨͪͰΦϖϨʔγϣϯ Մೳʹ! ✤ ͱ͍͑ɺҰͣͭΠϯετʔϧ͢Δͷେมख͕ؒ ͔͔Δ
Cobbler ✤ http://cobbler.github.com! ✤ ωοτϫʔΫϒʔτͰOSΛΠϯετʔϧ͢Δࡍʹඞཁ ͳίϯϙʔωϯτ͕ͦΖ͍ͬͯΔ! ✤ ݸผͷαʔόͷઃఆใΛதԝͰूதཧՄೳ! ✤ RedHat
Enterprise Linux͓ΑͼͦͷΫϩʔϯOSͰར ༻Մೳ
Cobbler ✤ ૉͷPXEϒʔτͰؤுΕͳ͘ͳ͍͕! ✤ Cobblerdhcpd, pxe, tftp, httpdͳͲΛݸผʹηοτ Ξοϓ͢Δख͕ؒେল͚Δ! ✤
ूதཧ͕༏लɺαʔόઃఆใ (system) ͰIPॏෳ͕ ͋ΔͱΤϥʔʹͳΔͳͲ
CobblerͱPuppetͷॅΈ͚ ✤ CobblerςϯϓϨʔτεχϖοτ͕͑Δ! ✤ ͜ΕΒΛར༻ͯ͠ɺෳϩʔϧ͋ΔαʔόΛΠϯετʔ ϧྃޙଈαʔϏεೖͱ͍ͬͨ͜ͱՄೳͩΖ͏! ✤ kickstartϑΝΠϧϝϯς͠ʹ͍͘! ✤ OSΠϯετʔϧ͑͞ग़དྷΕޙPuppetʹͤΔ
Cobbler ✤ ϗετՃ࣌ɺ͜ͷॲཧޙαʔόΛىಈ͢ΔͱOS ͕Πϯετʔϧ͞ΕΔ ʢωοτϫʔΫ෦ׂѪʣ cobbler system add \! --name
web001.heteml.lan \! --hostname web001.heteml.lan \! --profile CentOS6.4-x86_64 \! --kopts “ksdevide=XX:XX:XX:XX:XX syslog=192.168.X.X” \! --kickstart /var/lib/cobbler/kickstarts/CentOS6-base.ks! ! cobbler sync
γεςϜߏཧπʔϧͷಋೖ
ಋೖͷඞཁੑ ✤ αʔόಋೖϖʔε͕Ճ! ✤ ߏஙͷख͕ؒϘτϧωοΫʹ
طଘαʔϏεͷPuppetಋೖ ✤ खॱॻΛಡΈղ͘! ✤ ඞཁͳ߹खॱॻͷཧ! ✤ ͖ͪΜͱඥղ͖ɺߏཧπʔϧͷઃఆϑΝΠϧʹམͱ ͨ࣌͠ʹͦΕ͕αʔόͷ”༷”ͱͳΔ! ✤ Ұ࣌ظΛࢧ͑ͨൿͷλϨܾͯ͠ѱͷΈͰͳ͍!
✤ ݱ࣮ੈքͷͦΕͱҟͳΔͷ֧፩ʢ͔͘Μʣ͠ͳ͍ҝ
ݕূ͢Δڥ ✤ ࢼͯ͠ഁغͯ͠Γ͕͠ग़དྷΔVMϕʔεͰߦ͏ͷ ͕ΓΓ͍͢! ✤ ϔςϜϧͰϖύϘࣾڥͷKVMཧπʔϧ MaglicaΛͬͯखܰʹVM࡞ɺഁغΛߦͳͬͨ! ✤ ݱࡏͳΒVagrantͳͲ͕͋ΔͨΊͦΕΛར༻͢Δͱ༗ ༻ͦ͏
·ͣ৽نՃϗετ͔Βಋೖ ✤ ৽نϗετطଘαʔόͱͷ͕͠ΒΈ͕ͳ͍! ✤ Ѳ͍ͯ͠ͳ͍༷࿙ΕͳͲ͕͋ΔՄೳੑ͋Γطଘ αʔό৻ॏʹߦ͏ඞཁ͕͋Δ! ✤ طଘϗετͷద༻noop(dry-run)࣮ߦ͠ɺࠩ֬ ೝɺඞཁ͕͋Εमਖ਼ͳͲߦ͍ͭͭॱ࣍ಋೖΛਐΊ ͍ͯΔ
ಋೖ͕ྃͨ͠ޙଓ͘ ✤ ߏཧπʔϧͷهड़ํࣜɺϕετϓϥΫςΟε͕ม ΘΔ͜ͱɺӡ༻͍ͯ͘͠தͰෆཁͳهࡌͳͲग़ͯ ͘Δ! ✤ ࣺͯΔ༐ؾ! ✤ ఆظతʹݟ͠Λ͢Δඞཁ͕͋Δ
ಋೖ͕ྃͨ͠ޙଓ͘ ✤ ඞཁͳઃఆόʔδϣϯཧ͞Ε͍ͯΔ! ✤ ༷ͷมߋݟ͠ઃఆϑΝΠϧϕʔεͰٞ͢Δ! ✤ ϖύϘͰGH:EΛར༻͍ͯ͠ΔͨΊɺPull Requestϕʔ εͰ্هΛߦͳ͍ͬͯΔ! ✤
ϨϏϡʔͯ͠Β͑Δͱਫ਼͕͕͋Δ! ✤ ͋ͱ҆৺͢Δ
ࢹγεςϜͷӡ༻վળ
ࢹ͕ἧͬͯͳ͍ ✤ ࢹ߲͕ࡏΔͷͱແ͍ͷ͕͋Δ! ✤ ϗετΛՃ͢Δ͝ͱʹखՃ! ✤ ͦͦࢹ͞Ε͍ͯͳ͍ϗετ…ʁ
αʔόͷҰཡ࣋ͬͯΔ ✤ લड़ͷroles.yaml! ✤ ͜͜ʹཧ͍ͯ͠Δαʔόཏ͞Ε͍ͯΔ
ࢹઃఆͷࣗಈੜ ✤ Nagios! ✤ munin! ✤ roles.yaml Λͱʹ conf Λࣗಈੜ͢Δ!
✤ શαʔόڞ௨ͷࢹ (σΟεΫI/O, L/A)! ✤ ϩʔϧݻ༗ͷࢹ (webͩͬͨΒHTTPૄ௨)! ✤ ϗετݻ༗ͷઃఆ (ಛఆαʔόαʔό্Ͱύϥϝʔλ্ॻ͖ʣ
มߋ࣌ ✤ طଘͷࢹγεςϜʢखಈՃʣͱ৽ࢹγεςϜʢઃ ఆࣗಈੜʣΛฒߦͯ͠Քಇͤ͞Δ! ✤ Nagios৽ࢹγεςϜΞϥʔτඈ͞ͳ͍! ✤ ेʹ֬ೝ͔ͯ͠Β͍͑ͰΓସ͑
ৼΓฦͬͯ
ྺ࢙͕͍ͷͰτϨϯυมΘΔ ✤ Puppetmaster agentܕͰͬͯΔ͚Ͳɺ࠷ۙελ ϯυΞϩϯܕ͕ྲྀߦͬͯΔʢςετۦಈΠϯϑϥߏஙʣ ✤ SerfͳͲʹΑΔࣗతʢಈతʣͳϊʔυՃɾઃఆ ՃͳͲ! ✤ ͳͲͳͲ
Δ͔͠ͳ͍ ✤ WebͷαʔϏεͳݶΓ͕ͳ͍ɺӡ༻ʹऴΘΓ͕ ͳ͍! ✤ ͚Ͳޮతʹɺָ͘͢͠Δ͜ͱग़དྷΔ! ✤ Ұ൪ϘτϧωοΫʢࡶɺ͕͔͔࣌ؒΔʣ࡞ۀ͔Βૣ ΊʹऔΓΉ! ✤
ಓʹΔ
ྫ ✤ ࠷ۙϝϯς͕ଟ͍! ✤ ରϗετ͕ҧ͏͚ͩͰखॱ͍ಓ͕ฉ͘! ✤ खॱॻੜʢςϯϓϨʔτԽʣ͠Α͏ʂ
खॱΛςϯϓϨʔτԽ export OLDHOST=<%= @config['src1_hostname'] %>! export NEWHOST=<%= @config['dst_lan_ip'] %>! rsync
-rlptDv /data/backup/heteml/$OLDHOST/path/from/ $NEWHOST::data_to/ src1_hostname : web001! src1_lan_ip : 192.168.1.10! ! dst_hostname : web002! dst_lan_ip : 192.168.1.11!
खॱΛςϯϓϨʔτԽ genecon -t README.md -c config.yaml > web001maintenance.md export OLDHOST=web001!
export NEWHOST=192.168.1.11! rsync -rlptDv /data/backup/heteml/$OLDHOST/path/from/ $NEWHOST::data_to/ ✤ genecon https://github.com/glidenote/genecon
͋Δఔͷڳඞཁ ✤ ৽͍͠ͷͷಋೖԿ͔ͷ৽༐ؾ͕ཁΔ! ✤ ͰΔ࣌ʹΒͳ͍ͱ͍͚ͳ͍! ✤ ཪ͚Ͱ͋Δ֬ೝςετͳͲͰཪ͚Λͯ҆͠৺ ͢Δ
ࠓճͷ༰ɺ͞Βʹৄ͍͠༰ ✤ WEB+DB PRESS Vol.75! ✤ ʙෳࡶੑͷ૿େͱڥͷมԽʹରԠ͢Δʙ ܧଓతWebαʔϏεվ ળΨΠυ! ✤
ΞϓϦɺνʔϜϏϧσΟϯάͷվળͳͲଞͷτϐοΫ߹Θͤͯࡌͬ ͯ·͢
Ұॹʹಇ͘ϝϯόʔΛืू͍ͯ͠· ͢ ✤ http://www.paperboy.co.jp/recruit/engineer_career/! ✤ ϔςϜϧνʔϜͷΠϯϑϥΤϯδχΞืूதͰ͢
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠