5years-history-of-heteml

 5years-history-of-heteml

運用しているヘテムルでのサービス改善の歴史

D7df6557c6b98f29ac546911e2b1a4d4?s=128

Shinya Tsunematsu

November 12, 2013
Tweet

Transcript

  1. 2013/11/9 Shinya Tsunematsu @tnmt ๻ͱαʔϏεͷ5೥ͷาΈ Πϯϑϥվળͷྺ࢙

  2. 5೥ଓ͘αʔϏεͷӡ༻ͬͯ

  3. ௕͘ଓ͘αʔϏεʹ͖ͭ·ͱ͏ ✤ ୔ࢁ͋ΔαʔόؒͰͷඍົͳ࢓༷ࠩ! ✤ ن໛͕େ͖͍৔߹ͷมߋͷखؒ! ✤ ΦϯϓϨϛεͷ৔߹ͷεϖοΫΞοϓʹ͍͍͚ͭͯͳ͍ॊೈੑͷແ ͞! ✤ ϧʔνϯԽ͞Εͨ࡞ۀ͕লྗ͞Ε͍ͯͳ͍͜ͱʹΑΔӡ༻ίετ૿!

    ✤ Կ͕ى͖͍ͯΔ͔೺Ѳग़དྷ͍ͯͳ͍αʔϏεϔϧενΣοΫ඼࣭ͷ ྼԽ
  4. paperboy&co. ϔςϜϧνʔϜ

  5. None
  6. heteml (ϔςϜϧ) ✤ ϩϦϙοϓʂͱฒͿϨϯλϧαʔόͷϥΠϯφοϓ! ✤ 2005೥ϦϦʔε! ✤ 2013೥10݄ݱࡏαʔό400୆ऑ! ✤ ৗদ͸2009೥͔ΒδϣΠϯ

  7. ٕज़తෛ࠴

  8. ෛ࠴ͱ͍͏ͱωΨςΟϒͳҹ৅ʁ ✤ ͔͠͠ඞͣ෇ਵ͢Δ໰୊Ͱࣗવͳ΋ͷ! ✤ ະવʹ๷͙ɺൃੜͨ͠৔߹ʹ͸ରॲ͍ͯ͘͠ͷΛ͓Ζ ͔ͦʹ͢Δͱޙʑࣗ෼ͱपΓʹৼΓ͔͔Δ

  9. ΞδΣϯμ ✤ ఏڙ͍ͯ͠ΔαʔϏε͸͢΂ͯόʔδϣϯ؅ཧԽͰ؅ཧ͢Δ! ✤ σϓϩΠ΍αʔόʹର͢ΔมߋπʔϧΛ੔උɺଐਓԽ΍൥ࡶ͞ Λഉআ! ✤ OSηοτΞοϓΛলྗԽ! ✤ γεςϜߏ੒؅ཧπʔϧΛ༻͍ͯαʔόߏஙͷলྗԽɾ࢓༷Խ

    Λߦ͏! ✤ ؂ࢹγεςϜઃఆͷϨϏϡʔɺ؂ࢹઃఆͷࣗಈੜ੒
  10. ͢΂ͯΛόʔδϣϯ؅ཧԼʹ

  11. ԿΛόʔδϣϯ؅ཧ͢Δ͔ ✤ جຊతʹ͸ʮ͢΂ͯʯ

  12. ͱ͸͍͍͖͑ͳΓશ෦͸ແཧ ✤ ༏ઌ౓Λ͚ͭΔ! ✤ OSϨΠϠɺηΩϡϦςΟपΓ! ✤ ϛυϧ΢ΣΞઃఆ! ✤ cron, ӡ༻εΫϦϓτ!

    ✤ ؂ࢹιϑτ΢ΣΞઃఆ
  13. ΑΓԼͷϨΠϠ͔Β؅ཧ͢Δ ✤ ҙຯͷॏෳΛආ͚ΒΕΔͨΊͦͷ͋ͱͷϝϯςφϯε ੑ΋ߴ͘ͳΔ! ✤ ϛυϧ΢ΣΞͷηΩϡΞͳઃఆΛܾఆ͢Δ͜ͱ͕༰қ ʹͳΔ! ✤ ҙ֎ͱ͜Ε͕͞Εͯͳ͍έʔε͕ଟ͍

  14. ࠷ॳ͸શવ؅ཧग़དྷͯͳ͔ͬͨ… ✤ ߏங࣌ظʹΑͬͯઃఆ͕ҧ͏! ✤ ͋Γ·ͤΜ͔ʁ! ✤ iptablesͱtcp_wrapperͰಉ͡ϧʔϧॻ͍ͯΔ! ✤ ϦϓϨΠεΛܦͯɺ΋͸΍ଘࡏ͍ͯ͠ͳ͍ϗετ͔ ΒͷڐՄઃఆ

  15. όʔδϣϯ؅ཧԽʹೖΕ࢓༷Խ ✤ Ұ୴ݱߦಈ͍͍ͯΔαʔόϕʔεͰ΋ͱΓ͋͑ͣϦϙ δτϦʹಥͬࠐΉ! ✤ ๬·͍͠ઃఆͷݟ௚͠͸ͦͷޙ੔ཧ͢Δ! ✤ มߋ౳͸τϨʔεՄೳʹͳΔͨΊޙͰݟฦͤΔ

  16. ΦϖϨʔγϣϯπʔϧͷݟ௚͠

  17. ෳ਺αʔόʹมߋΛՃ͑Δखஈ ✤ όʔδϣϯ؅ཧ͕ग़དྷͨΒͦΕΛల։͢Δज़͕ཁΔ! ✤ ୆਺͕૿͑Δͱมߋͷख͕ؒେม! ✤ ख͕ؒ૿͑Δͱαʔόؒͷဃ཭͕૿͑Δѱ॥؀

  18. 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
  19. Archerظ ✤ Perl੡ͷσϓϩΠπʔϧ! ✤ YAMLͰఆٛ͞Εͨઃఆʹ΋ͱ͖ͮγΣϧίϚϯυ΍ ϑΝΠϧͷσϓϩΠ͕ߦ͑Δ

  20. Archerظ ✤ Pluggable! ✤ Archer::Plugin::RoleLoader! ✤ roles.yaml! ✤ ࢦఆͨ͠ϩʔϧʹ! ✤

    ίϚϯυ࣮ߦ! ✤ ϑΝΠϧσϓϩΠ …! ! web:! - web001.heteml.lan! - web002.heteml.lan! mail:! - mail001.heteml.lan! - mail002.heteml.lan! - mail003.heteml.lan! ! …
  21. Archerظ ✤ େྔϗετʹͳΔͱίϚϯυ࣮ߦ݁Ռͷ֬ೝ͕͠ΜͲ ͍! ✤ جຊతʹઃఆϑΝΠϧʹॻ͍ͨ಺༰Λ࣮ߦ͢ΔͨΊɺ ࡉ͔ͳಈత࡞ۀͷ༻్ʹ͙ͦΘͳ͔ͬͨ! ✤ ಛʹ2ͭΊͷཧ༝͕େมɺಥൃ͢ΔλεΫʹରԠ͖͠ Εͳ͍

  22. ࣗ࡞πʔϧheteloyظ ✤ ༻్ಛԽʢίϚϯυ࣮ߦɺϑΝΠϧσϓϩΠʣ! ✤ ࣗ੡ͷPerlπʔϧ! ✤ ʮϔςϜϧʯʹʮσϓϩΠʯ! ✤ σϓϩΠपΓ͸ޙड़͢ΔPuppetͱͷ਌࿨ੑΛߴΊͨ! ✤

    PuppetͷϦϙδτϦͰ؅ཧ͞Ε͍ͯΔϑΝΠϧΛ഑෍͠ ΍͘͢ͳ͍ͬͯΔ
  23. ࣗ࡞πʔϧ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’!
  24. ࣗ࡞πʔϧ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!
  25. ࣗ࡞πʔϧheteloyظ ✤ ؀ڥґଘΛڐ༰͠൚༻ੑΛࣺͯͨ! ✤ ͷͰެ։͸ͯ͠ͳ͍Ͱ͢…! ✤ ೔ʑͷӡ༻ͷதͰߦ͏ཻ౓͸খ͍͕͞εϐʔυΛٻΊ ΒΕΔ࡞ۀʹ޲͍͍ͯΔ! ✤ PuppetͰͷߏ੒؅ཧ͸࣠ʹͦΕΛαϙʔτ͢Δҝͷ

    πʔϧ͕͋Δͱศར
  26. OSηοτΞοϓࣗಈԽ

  27. ৽͍͠ϕϯμͷαʔόΛߪೖ ✤ εϖοΫΞοϓ͕ओ؟! ✤ औΓճ͕͠͠΍͍͢Α͏IPMIΛ౥ࡌ͠ɺԕִ஍ʢΦ ϑΟεʣ͔Βͷ࡞ۀ͕ߦ͑ΔΑ͏ʹͨ͠

  28. OSͷΠϯετʔϧ͸DC೚ͤͩͬͨ ✤ IPMI͕࢖͑ΔΑ͏ʹͳΓɺࣗ෼ͨͪͰΦϖϨʔγϣϯ Մೳʹ! ✤ ͱ͸͍͑ɺҰ୆ͣͭΠϯετʔϧ͢Δͷ͸େมख͕ؒ ͔͔Δ

  29. Cobbler ✤ http://cobbler.github.com! ✤ ωοτϫʔΫϒʔτͰOSΛΠϯετʔϧ͢Δࡍʹඞཁ ͳίϯϙʔωϯτ͕ͦΖ͍ͬͯΔ! ✤ ݸผͷαʔόͷઃఆ৘ใΛதԝͰूத؅ཧՄೳ! ✤ RedHat

    Enterprise Linux͓ΑͼͦͷΫϩʔϯOSͰར ༻Մೳ
  30. Cobbler ✤ ૉͷPXEϒʔτͰؤுΕͳ͘͸ͳ͍͕! ✤ Cobbler͸dhcpd, pxe, tftp, httpdͳͲΛݸผʹηοτ Ξοϓ͢Δख͕ؒେ෼ল͚Δ! ✤

    ूத؅ཧ͕༏लɺαʔόઃఆ৘ใ (system) ͰIPॏෳ͕ ͋ΔͱΤϥʔʹͳΔͳͲ
  31. CobblerͱPuppetͷॅΈ෼͚ ✤ Cobbler͸ςϯϓϨʔτ΍εχϖοτ͕࢖͑Δ! ✤ ͜ΕΒΛར༻ͯ͠ɺෳ਺ϩʔϧ͋ΔαʔόΛΠϯετʔ ϧ׬ྃޙଈαʔϏε౤ೖͱ͍ͬͨ͜ͱ΋ՄೳͩΖ͏! ✤ kickstartϑΝΠϧ͸ϝϯς͠ʹ͍͘! ✤ OSΠϯετʔϧ͑͞ग़དྷΕ͹ޙ͸Puppetʹ೚ͤΔ

  32. 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
  33. γεςϜߏ੒؅ཧπʔϧͷಋೖ

  34. ಋೖͷඞཁੑ ✤ αʔόಋೖϖʔε͕Ճ଎! ✤ ߏஙͷख͕ؒϘτϧωοΫʹ

  35. طଘαʔϏε΁ͷPuppetಋೖ ✤ खॱॻΛಡΈղ͘! ✤ ඞཁͳ৔߹͸खॱॻͷ੔ཧ΋! ✤ ͖ͪΜͱඥղ͖ɺߏ੒؅ཧπʔϧͷઃఆϑΝΠϧʹམͱ ͨ࣌͠ʹͦΕ͕αʔόͷ”࢓༷”ͱͳΔ! ✤ Ұ࣌ظΛࢧ͑ͨൿ఻ͷλϨ͸ܾͯ͠ѱͷΈͰ͸ͳ͍!

    ✤ ݱ࣮ੈքͷͦΕͱҟͳΔͷ͸֧፩ʢ͔͘͸Μʣ͠ͳ͍ҝ
  36. ݕূ͢Δ؀ڥ ✤ ࢼͯ͠ഁغͯ͠΍Γ௚͕͠ग़དྷΔVMϕʔεͰߦ͏ͷ ͕΍͸Γ΍Γ΍͍͢! ✤ ϔςϜϧͰ͸ϖύϘࣾ಺؀ڥͷKVM؅ཧπʔϧ MaglicaΛ࢖ͬͯखܰʹVM࡞੒ɺഁغΛߦͳͬͨ! ✤ ݱࡏͳΒVagrantͳͲ͕͋ΔͨΊͦΕΛར༻͢Δͱ༗ ༻ͦ͏

  37. ·ͣ͸৽ن௥Ճϗετ͔Βಋೖ ✤ ৽نϗετ͸طଘαʔόͱͷ͕͠ΒΈ͕ͳ͍! ✤ ೺Ѳ͍ͯ͠ͳ͍࢓༷࿙ΕͳͲ͕͋ΔՄೳੑ΋͋Γطଘ αʔό͸৻ॏʹߦ͏ඞཁ͕͋Δ! ✤ طଘϗετ΁ͷద༻͸noop(dry-run)࣮ߦ͠ɺࠩ෼֬ ೝɺඞཁ͕͋Ε͹मਖ਼ͳͲ΋ߦ͍ͭͭॱ࣍ಋೖΛਐΊ ͍ͯΔ

  38. ಋೖ͕׬ྃͨ͠ޙ΋ଓ͘ ✤ ߏ੒؅ཧπʔϧͷهड़ํࣜɺϕετϓϥΫςΟε͕ม ΘΔ͜ͱ΍ɺӡ༻͍ͯ͘͠தͰෆཁͳهࡌͳͲ΋ग़ͯ ͘Δ! ✤ ࣺͯΔ༐ؾ! ✤ ఆظతʹݟ௚͠Λ͢Δඞཁ͕͋Δ

  39. ಋೖ͕׬ྃͨ͠ޙ΋ଓ͘ ✤ ඞཁͳઃఆ͸όʔδϣϯ؅ཧ͞Ε͍ͯΔ! ✤ ࢓༷ͷมߋ΍ݟ௚͠͸ઃఆϑΝΠϧϕʔεͰٞ࿦͢Δ! ✤ ϖύϘͰ͸GH:EΛར༻͍ͯ͠ΔͨΊɺPull Requestϕʔ εͰ্هΛߦͳ͍ͬͯΔ! ✤

    ϨϏϡʔͯ͠΋Β͑Δͱਫ਼౓͕͕͋Δ! ✤ ͋ͱ҆৺͢Δ
  40. ؂ࢹγεςϜͷӡ༻վળ

  41. ؂ࢹ͕ἧͬͯͳ͍ ✤ ؂ࢹ߲໨͕ࡏΔ΋ͷͱແ͍΋ͷ͕͋Δ! ✤ ϗετΛ௥Ճ͢Δ͝ͱʹख௥Ճ! ✤ ͦ΋ͦ΋؂ࢹ͞Ε͍ͯͳ͍ϗετ΋…ʁ

  42. αʔόͷҰཡ͸࣋ͬͯΔ ✤ લड़ͷroles.yaml! ✤ ͜͜ʹ؅ཧ͍ͯ͠Δαʔό͸໢ཏ͞Ε͍ͯΔ

  43. ؂ࢹઃఆͷࣗಈੜ੒ ✤ Nagios! ✤ munin! ✤ roles.yaml Λ΋ͱʹ conf Λࣗಈੜ੒͢Δ!

    ✤ શαʔόڞ௨ͷ؂ࢹ (σΟεΫI/O, L/A)! ✤ ϩʔϧݻ༗ͷ؂ࢹ (webͩͬͨΒHTTPૄ௨౳)! ✤ ϗετݻ༗ͷઃఆ (ಛఆαʔό͸αʔό্Ͱύϥϝʔλ্ॻ͖ʣ
  44. มߋ࣌ ✤ طଘͷ؂ࢹγεςϜʢखಈ௥Ճʣͱ৽؂ࢹγεςϜʢઃ ఆࣗಈੜ੒ʣΛฒߦͯ͠Քಇͤ͞Δ! ✤ Nagios৽؂ࢹγεςϜ͸Ξϥʔτඈ͹͞ͳ͍! ✤ े෼ʹ֬ೝ͔ͯ͠Β͍͑΍Ͱ੾Γସ͑

  45. ৼΓฦͬͯ

  46. ྺ࢙͕௕͍ͷͰτϨϯυ΋มΘΔ ✤ Puppet͸master agentܕͰ΍ͬͯΔ͚Ͳɺ࠷ۙ͸ελ ϯυΞϩϯܕ͕ྲྀߦͬͯΔʢςετۦಈΠϯϑϥߏஙʣ ✤ SerfͳͲʹΑΔࣗ཯తʢಈతʣͳϊʔυ௥Ճɾઃఆ௥ ՃͳͲ! ✤ ͳͲͳͲ

  47. ౎౓΍Δ͔͠ͳ͍ ✤ WebͷαʔϏεͳݶΓ׬੒͕ͳ͍ɺӡ༻ʹ΋ऴΘΓ͕ ͳ͍! ✤ ͚Ͳޮ཰తʹɺָ͘͢͠Δ͜ͱ͸ग़དྷΔ! ✤ Ұ൪ϘτϧωοΫʢ൥ࡶɺ͕͔͔࣌ؒΔʣ࡞ۀ͔Βૣ ΊʹऔΓ૊Ή! ✤

    ஍ಓʹ΍Δ
  48. ྫ ✤ ࠷ۙϝϯς͕ଟ͍! ✤ ର৅ϗετ͕ҧ͏͚ͩͰखॱ͸࢖͍ಓ͕ฉ͘! ✤ खॱॻ΋ੜ੒ʢςϯϓϨʔτԽʣ͠Α͏ʂ

  49. खॱΛςϯϓϨʔτԽ 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!
  50. खॱΛςϯϓϨʔτԽ 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
  51. ͋Δఔ౓ͷ౓ڳ͸ඞཁ ✤ ৽͍͠΋ͷͷಋೖ΍Կ͔ͷ࡮৽͸༐ؾ͕ཁΔ! ✤ Ͱ΋΍Δ࣌ʹ͸΍Βͳ͍ͱ͍͚ͳ͍! ✤ ཪ෇͚Ͱ͋Δ֬ೝ͸ςετͳͲͰཪ෇͚Λͯ҆͠৺ ͢Δ

  52. ࠓճͷ಺༰ɺ͞Βʹৄ͍͠಺༰͸ ✤ WEB+DB PRESS Vol.75! ✤ ʙෳࡶੑͷ૿େͱ؀ڥͷมԽʹରԠ͢Δʙ ܧଓతWebαʔϏεվ ળΨΠυ! ✤

    ΞϓϦɺνʔϜϏϧσΟϯάͷվળͳͲଞͷτϐοΫ΋߹Θͤͯࡌͬ ͯ·͢
  53. Ұॹʹಇ͘ϝϯόʔΛืू͍ͯ͠· ͢ ✤ http://www.paperboy.co.jp/recruit/engineer_career/! ✤ ϔςϜϧνʔϜͷΠϯϑϥΤϯδχΞ΋ืूதͰ͢

  54. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠