Upgrade to Pro — share decks privately, control downloads, hide ads and more …

はてなのインフラ環境を自宅で再現する

5e811ea39e141c433cdd961bbaa03122?s=47 masayoshi
PRO
December 10, 2016

 はてなのインフラ環境を自宅で再現する

YAPC::Hokkaido 2016 SAPPOROでの発表資料です。
今後ネットワーク図とか色々ブログの方に公開していきたいと思っています。

5e811ea39e141c433cdd961bbaa03122?s=128

masayoshi
PRO

December 10, 2016
Tweet

Transcript

  1. ͸ͯͳͷΠϯϑϥ؀ڥ Λࣗ୐Ͱ࠶ݱ͢Δ :"1$)PLLBJEP

  2. ࣗ୐ͷ༷ࢠ

  3. None
  4. ෺ཧαʔό: 3୆ (+1୆) Ծ૝αʔό: 40୆ L3εΠον: 1୆ (+1୆) Քಇதͷ୆਺ ()಺͸ઃఆதͷ୆਺

  5. None
  6. YAPC::Hokkaidoͷൃදه೦ʹ αʔόΛ૿ڧ͠·ͨ͠ (10ສ)

  7. ࣗݾ঺հ

  8. ࣗݾ঺հ • id:masayoshi (yoyogidesaiz) • גࣜձࣾ͸ͯͳ (2016೥4݄ೖࣾ) • YAPC ॳࢀՃͰ͢

    • ֶੜ࣌୅͸αʔό؂ࢹͷΞϧόΠτ • ݱࡏ͸WebΦϖϨʔγϣϯΤϯδχΞͷج൫νʔϜ
  9. ΞδΣϯμ • ॳΊʹ • ࢲͳΓͷߟ͑ํͱษڧํ๏ • ࣗ୐αʔόͷߏ੒঺հ • ·ͱΊ

  10. 1 ॳΊʹ

  11. ৽ଔ࠷ॳͷ3ϲ݄

  12. • 4݄ ݚम
 http://developer.hatenastaff.com/entry/2016-newbie-training-of-web-operation • 5݄ ࣾ಺ͷωοτϫʔΫ֮͑·͔ͨ͠?
 ֎෦τϥϑΟοΫͷଳҬ૿΍͍ͯͩ͘͠͞ • 6݄

    ωοτϫʔΫઃܭ͍͍ײ͡ʹ͓ئ͍͠·͢ • ͦͷޙɺج൫νʔϜ͕ൃ଍͠ϝϯόʔʹ
  13. ج൫νʔϜ(3໊) • ࣗࣾͷΠϯϑϥಛੑΛ೺Ѳ͍͍ͯ͠ײ͡ʹ͢Δ • αʔϏε਺͕ଟ͍(10αʔϏεҎ্) • DC + AWS +

    ͘͞Βͷઐ༻αʔό • 5,10೥ར༻͞ΕΔαʔϏε • ෺ཧ,Ծ૝αʔό͸1000୆Ҏ্
  14. ࠓҎ্ʹษڧ͠ͳ͍ͱϚζΠ

  15. ͱ͍͏͜ͱͰ

  16. ΋͏͜Ε͸ ࣗ୐ͰձࣾͷΠϯϑϥΛ ਅࣅͯΈΔ͔͠ͳ͍ʂ

  17. ͱ͍͏͜ͱʹͳͬͨ

  18. 2 ࢲͳΓͷ ߟ͑ํͱษڧํ๏

  19. ษڧ͸టष͘ ࢓ࣄ͸εϚʔτʹ (΍Γ͍ͨͱࢥ͍ͬͯΔ)

  20. ࢓ࣄ͸… • ॏཁͳ͜ͱ • ϢʔβʹαʔϏε(Ձ஋)Λಧ͚Δ͜ͱ • ࣌ؒత੍໿ • ௅ઓͱ҆ఆͷόϥϯε •

    ͍࣋ͬͯΔٕज़ɺ஌ࣝͰΨϯΨϯԥΔ • ศརɺར༻͞Ε͍ͯΔ΋ͷΛੵۃతʹ࢖͏
  21. ษڧ͸… • ࣌ؒΛֶ͔͚ͯΜͰྑ͍ • Ұͭͷ͜ͱΛஸೡʹਂ۷Γ • ۚ͸ͳ͍ɺ࣌ؒ͸͔͚ͯ΋Α͍ • ஍ཕ͸౿Μͩ਺͚ͩڧ͘ͳΔ •

    ͋ɺʙͰݟͨ͜ͱ͋Δ΍ͭͩ • ஍ཕௐࠪ͸ਂ۷Γ͢Δ͍͍νϟϯε
  22. ࣌ؒΛ͔͚ͯਂ۷Γ

  23. ࡞ΔਅࣅΔ৮Δฉ͘ ಡΉ ೉͍͠ ͔͔࣌ؒΔ Α͘Θ͔Δ ؆୯ ͙͢ग़དྷΔ Α͘Θ͔ΒΜ

  24. ֶ෦3೥ͷࠒͷษڧํ๏ • ਓ͔Βฉ͘ɺٕज़ϒϩάͱ͔ಡΉ • LinuxͷίϚϯυͱ͔ • શવ֮͑ΒΕͳ͍͠ɺΘ͔ΒΜ • ͱΓ͋͑ͣܰ͘৮ͬͯΈΔ •

    ՈͷϊʔτPCΛLinuxʹ͢Δ • wordpressͱ͔Λߏஙͯ͠ΈͨΓ
  25. ৮Δ͚ͩͷݶք • ߏஙखॱΛ֮͑Δ͜ͱ͕ٕज़ྗ? • εΫϦϓτͱ͔ChefͰࣗಈԽग़དྷΔΒ͍͠ • ઃఆ߲໨Λ֮͑Δ͜ͱ͕ॏཁ? • Ͳ͏ͯͦ͠ͷઃఆΛ͢Δͱ଎͘ͳΔͷ͔͕ॏཁ •

    ϛυϧ΢ΣΞ͸Ͳ͏΍ͬͯબ΂͹ྑ͍? • ಓ۩ͷ࢖͍ํ΋ॏཁ͚ͩͲબͼํ΋௒ॏཁ
  26. ܰ͘৮ͬͨΓɺ ฉ͘ɺಡΉఔ౓Ͱ͸ ৽͍͠΋ͷΛ࡞੒ɺઃܭ͸೉͍͠ ౰ͨΓલ͕ͩ

  27. ֶ෦4೥Ҏ߱ͷษڧํ๏ • αʔό؂ࢹͷΞϧόΠτ • ϛυϧ΢ΣΞɺෛՙ෼ࢄɺ৑௕ԽͳͲͷߏ੒ྫ • ਅࣅΔͨΊͷ࣮ྫ • ݚڀ •

    ιϑτ΢ΣΞϧʔλ࡞੒ɺϓϩτίϧͷௐࠪͳͲ • ඞཁͳجૅ஌ࣝͷษڧͱ࣮૷
  28. ਅࣅͯ࡞ͬͨΓมߋͨ͠Γ • ߏ੒ྫͷߏஙࣗಈԽνϟϨϯδ • ৚݅ΛՃ͑ͯɺͦΕʹ͋͏Α͏ʹߏ੒ྫΛมߋ͢Δ • ݸਓతʹ͸”റΓϓϨΠ”ͱݺΜͰ͍Δ (ແఀࢭറΓͱ͔) • େม͚ͩͲҰ͔Β࡞ͬͯΈΔ

    • ϥΠϒϥϦͷ࠶࣮૷ͱ͔ • ϛυϧ΢ΣΞͳͲͷҰ෦Λ؆қ࣮૷ • ιέοτϓϩάϥϛϯάͰpreforkܕͱeventܕͱ͔
  29. ಘΒΕΔ΋ͷ(ͦͷ1) • ఆੴͷϝϦοτɺσϝϦοτֶ͕΂Δ • બ୒ࢶΛ૿΍ͤΔɺ൑அج४͕ग़དྷΔ • ҰͭԼͷϨΠϠʔֶ͕΂Δ (syscall, OS, Network,..)

    • ҧ͏ϛυϧ΢ΣΞͷཧղʹ໾ཱͭ • ஌͕ࣝ޿͕Δ • ෼͔ͬͨ”ͭ΋Γ”෦෼ͷ೺Ѳ • ͳΜ͔ٕज़ϒϩάɺຊͱ͔Ͱ஌ͬͨؾʹͳͬͯͨ • צҧ͍ɺࢥͬͨΑΓ~ͩͬͨ
  30. ಘΒΕΔ΋ͷ(ͦͷ2) • ײ૝ͱٙ໰఺ (ෳࡶ,γϯϓϧ, ଎͍, ஗͍, ָ, ͭΒ ͍, …)

    • ΈΜͳͲ͏͍ͯ͠ΔΜͩΖ͏? • ͭΒ͍ͷ͸૝ఆ͞Εͨ࢖ΘΕํ͡Όͳ͍͔Β͔ ΋ • ͔ͩΒ͜͏͍͏࣮૷ͳͷ͔~ • ݁ہ͕͜͜໰୊ͳΜͩΑͳ͊ • ଞʹ΋ͬͱద࣮ͨ͠૷͕͋ΔͷͰ͸? • ͳ͍ͳΒ࡞Δ͔(ͱݴ͑Δͱ͔͍͍ͬ͜)
  31. ྫ͑͹ ιϑτ΢ΣΞϧʔλ࡞੒

  32. ࡞Δͱ͖ͷֶͼྫ (checksum) • 1ͷิ਺? 2ͷิ਺ͳΒΑ͘࢖͏͚Ͳͳ͊ • L2Ͱ΋L3Ͱ΋L4Ͱ΋νΣοΫαϜܭࢉ͢Μͷ͔Α • ٙࣅϔομΛ͚ͭͯܭࢉ? IPΞυϨε͕͋Δ


    ͱ͍͏͜ͱ͸IPΞυϨεॻ͖׵͑ͨΒL4ܭࢉ͠௚͠? • ͳΜ͔஗͍….γϑτԋࢉͱ͔Ͱ΍ͬͯΔͷʹͳ͊ • kernelͲ͏΍ͬͯΜͩ? ΞηϯϒϦ͔Α… • νΣοΫαϜΦϑϩʔυ? ଎͍! ϋʔυ΢ΣΞ࠷ߴ! • Μ? Ծ૝Ϛγϯ͸ԿʹΦϑϩʔυͯ͠Μͷ? • xenͩͬͨΒxen-netbackͱ͔ʹͦΕͬΆ͍ͷ͋Δͳ͊ʔ
  33. ࡞Δͱ͖ͷֶͼྫ (ͦͷଞ) • ͏΁͐…౸ணύέοτͷฒͼସ͑ΊͬͪΌ஗͍… • TCPͷΦϓγϣϯϑΟʔϧυ?
 Linux͸σϑΥϧτͰtimestamp࢖͍ͬͯΔͷ͔… • ωοτϫʔΫͷ଎౓ײͩͱϝϞϦίϐʔ͸஗͍… •

    CPU͕1ίΞʹுΓ෇͘~ͱ͜ΖͰsoftirqͬͯͳʹ? • kernelͷωοτϫʔΫελοΫ͕ϘτϧωοΫ?͑? • DPDKࢯ~ པΉ~
  34. ࿩Λ໭ͯ͠

  35. ં֯ࣾ಺ͷΠϯϑϥͷத਎͕ݟΕΔͷͰ ՈͰਅࣅͯΈΑ͏

  36. 3 ࣗ୐αʔόͷߏ੒঺հ

  37. ࣾ಺ͷΠϯϑϥΛਅࣅΔϝϦοτ • WebαʔϏεܥͷΠϯϑϥج൫ͷఆੴΛֶ΂Δ • ࠓͰ΋௨༻͢Δےͷྑ͍ઃܭ • ࠓͰ͸ݹ͍ɺطʹഁ୼ͨ͠Ξϯνύλʔϯ • ͪΐ͏ͲΑ͍ن໛ײ •

    খن໛Ϋϥ΢υ, ࣮૷͕௥͍͖ΕΔ • ౰࣌ͷઃܭऀͷҙਤɺؾ͕࣋ͪ෼͔Δ • ࣾ಺ݻ༗ͷࣄ৘(ن໛, ίετ)Λ഑ྀͨ͠ઃܭ • ؆୯ͦ͏Ͱ೉͍͠, ౰࣌͸࢖͑ͳ͔ͬͨ
  38. ਅࣅΔͱ͜Ζ͸ਅࣅ͍͍ͯײ͡ʹ • ศརͳͱ͜Ζ͸ਅࣅ͍ͯ͘ • ҧ͏΋ͷࢼ͍ͨ͠ͱ͜Ζ͸ม͑Δ • ґଘؔ܎ʹ͸஫ҙ͠ͳ͕Βߏங͍ͯ͘͠ • Ոͱձࣾͷن໛ײΛҙࣝ͢Δ •

    ՄೳͳݶΓ৽͍͠όʔδϣϯͰ࡞Δ • ͍͍ײ͡ʹͳͬͨΒࣾ಺ಋೖ • ָ͠Ήʂ
  39. ͱ͍͏͜ͱͰ࣌ؒ͋Δ͔͗Γ঺հ • ωοτϫʔΫߏ੒ • ෺ཧαʔόͷηοτΞοϓ • Ծ૝αʔόͷηοτΞοϓ • ϓϩϏδϣχϯά •

    ෛՙ෼ࢄɺ৑௕Խ • WebΞϓϦέʔγϣϯ
  40. ωοτϫʔΫߏ੒ %PN &BTU )PNF 0QF 0QFSBUJPO CS CS %PN6 %PN6

    %PN %PN6 %PN6 %PN %PN6 %PN6 CS 8FTU &9 +VOPT CS CS CS CS CS 394 %FCJBO YFO 594 7Z04 $PSF
  41. ෺ཧαʔόͷηοτΞοϓ • Debian Stretch + Xen4.6 • ஌Βͳ͍͏ͪʹ࠶ىಈ • Φϑϩʔυ༗ޮʹ͢Δͱ1࣌ؒޙ͙Β͍ʹigb͕Τϥʔ

    • vif͕4ͭ·Ͱ͔͠࡞Εͳ͍ • ηοτΞοϓ͸PXEϒʔτ+Preseed • ϒʔτબ୒ͨ͠ΒࣗಈͰOSΠϯετʔϧ • ࡉ͔͍ͷ͸ىಈޙʹAnsibleͰ੔͑Δ
  42. Ծ૝αʔόͷηοτΞοϓ • ࣾ಺ • Ծ૝CPU਺ɺϝϞϦɺσΟεΫαΠζΛਓ͕ࢦఆ • IP, ϗετ໊؅ཧ͸ߏ੒؅ཧπʔϧ, Mackerelʹొ࿥ •

    ࣗ୐ • NUMAΛҙࣝͨ͠ΠϯελϯελΠϓͷఆٛͱಋೖ • xen 4.5͔Β͍͍ײ͡ͷεέδϡʔϥ • IP,ϗετ໊؅ཧ͸Mackerel • ໊લղܾ͸consul(0.7)ͱPowerDNS(4.0.1)
  43. ϓϩϏδϣχϯάͱ͔ • ࣾ಺ • Chef + Capistrano + Jenkins •

    ࣗ୐ • Ansible + Fabric + Rundeck
  44. ෛՙ෼ࢄɺ৑௕Խ • ࣾ಺ • LVS+keepalived, HAProxy • ࣗ୐ • LVS+keepalivedͱconsul

    • Seesawͱ͔ࢼͯ͠Έ͍ͨ • ࣗ࡞
  45. WebΞϓϦέʔγϣϯ • ISUCONͷ໰୊Λ࢖༻ • ؆қ࣮૷ͳͷͰ৭ʑ֬ೝ͠΍͍͢ • ϕϯνϚʔΫ͕͋Δ • ଞͷํͱൺֱɺ࿩͕ग़དྷΔ •

    ·ͩ࡞Ε͍ͯͳ͍͕ࣗ࡞͍ͨ͠ • PerlͰҰͭԿ͔࡞Γ͍ͨ
  46. ࣗ୐αʔόͷྑ͞ • ؾܰʹෛՙ͔͚ΒΕΔ • ωοτϫʔΫ·ͰݟΕΔ • ୆਺ؾʹ͠ͳ͍ͰݐͯΒΕΔ • 10୆Ҏ্ͳΒίετ҆͘ͳΔ? •

    ෺ཧɺԾ૝ɺίϯςφͳΜͰ΋બ΂Δ • ϋΠύʔόΠβʔͷϩάݟΕΔ • ਂ۷Γ͢Δʹ͸࠷దʂ
  47. None
  48. ࣗ୐αʔόָ͍͠ʂ

  49. 4 ·ͱΊ

  50. ·ͱΊ • ͸͊ʙࣗ୐αʔόͨͷ͌͠ʙ • ؆қͳ΋ͷͰ΋ࣗ෼Ͱ࡞Δͷେࣄ • ΤϯδχΞ͸ϥΠτϢʔβ͡Όବ໨ • ΍Γ͜Έॏཁ •

    ษڧํ๏͸ΞϓϦέʔγϣϯΤϯδχΞͱ͞΄Ͳม ΘΒͳ͍ • ͱʹ͔ࣗ͘෼Ͱ࡞ͬͯΈΑ͏ʂ