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

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

masayoshi
PRO
December 10, 2016

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

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

masayoshi
PRO

December 10, 2016
Tweet

More Decks by masayoshi

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗ୐ͷ༷ࢠ

    View Slide

  3. View Slide

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

    View Slide

  5. View Slide

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

    View Slide

  7. ࣗݾ঺հ

    View Slide

  8. ࣗݾ঺հ
    • id:masayoshi (yoyogidesaiz)
    • גࣜձࣾ͸ͯͳ (2016೥4݄ೖࣾ)
    • YAPC ॳࢀՃͰ͢
    • ֶੜ࣌୅͸αʔό؂ࢹͷΞϧόΠτ
    • ݱࡏ͸WebΦϖϨʔγϣϯΤϯδχΞͷج൫νʔϜ

    View Slide

  9. ΞδΣϯμ
    • ॳΊʹ
    • ࢲͳΓͷߟ͑ํͱษڧํ๏
    • ࣗ୐αʔόͷߏ੒঺հ
    • ·ͱΊ

    View Slide

  10. 1
    ॳΊʹ

    View Slide

  11. ৽ଔ࠷ॳͷ3ϲ݄

    View Slide

  12. • 4݄ ݚम

    http://developer.hatenastaff.com/entry/2016-newbie-training-of-web-operation
    • 5݄ ࣾ಺ͷωοτϫʔΫ֮͑·͔ͨ͠?

    ֎෦τϥϑΟοΫͷଳҬ૿΍͍ͯͩ͘͠͞
    • 6݄ ωοτϫʔΫઃܭ͍͍ײ͡ʹ͓ئ͍͠·͢
    • ͦͷޙɺج൫νʔϜ͕ൃ଍͠ϝϯόʔʹ

    View Slide

  13. ج൫νʔϜ(3໊)
    • ࣗࣾͷΠϯϑϥಛੑΛ೺Ѳ͍͍ͯ͠ײ͡ʹ͢Δ
    • αʔϏε਺͕ଟ͍(10αʔϏεҎ্)
    • DC + AWS + ͘͞Βͷઐ༻αʔό
    • 5,10೥ར༻͞ΕΔαʔϏε
    • ෺ཧ,Ծ૝αʔό͸1000୆Ҏ্

    View Slide

  14. ࠓҎ্ʹษڧ͠ͳ͍ͱϚζΠ

    View Slide

  15. ͱ͍͏͜ͱͰ

    View Slide

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

    View Slide

  17. ͱ͍͏͜ͱʹͳͬͨ

    View Slide

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

    View Slide

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

    View Slide

  20. ࢓ࣄ͸…
    • ॏཁͳ͜ͱ
    • ϢʔβʹαʔϏε(Ձ஋)Λಧ͚Δ͜ͱ
    • ࣌ؒత੍໿
    • ௅ઓͱ҆ఆͷόϥϯε
    • ͍࣋ͬͯΔٕज़ɺ஌ࣝͰΨϯΨϯԥΔ
    • ศརɺར༻͞Ε͍ͯΔ΋ͷΛੵۃతʹ࢖͏

    View Slide

  21. ษڧ͸…
    • ࣌ؒΛֶ͔͚ͯΜͰྑ͍
    • Ұͭͷ͜ͱΛஸೡʹਂ۷Γ
    • ۚ͸ͳ͍ɺ࣌ؒ͸͔͚ͯ΋Α͍
    • ஍ཕ͸౿Μͩ਺͚ͩڧ͘ͳΔ
    • ͋ɺʙͰݟͨ͜ͱ͋Δ΍ͭͩ
    • ஍ཕௐࠪ͸ਂ۷Γ͢Δ͍͍νϟϯε

    View Slide

  22. ࣌ؒΛ͔͚ͯਂ۷Γ

    View Slide

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

    View Slide

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

    View Slide

  25. ৮Δ͚ͩͷݶք
    • ߏஙखॱΛ֮͑Δ͜ͱ͕ٕज़ྗ?
    • εΫϦϓτͱ͔ChefͰࣗಈԽग़དྷΔΒ͍͠
    • ઃఆ߲໨Λ֮͑Δ͜ͱ͕ॏཁ?
    • Ͳ͏ͯͦ͠ͷઃఆΛ͢Δͱ଎͘ͳΔͷ͔͕ॏཁ
    • ϛυϧ΢ΣΞ͸Ͳ͏΍ͬͯબ΂͹ྑ͍?
    • ಓ۩ͷ࢖͍ํ΋ॏཁ͚ͩͲબͼํ΋௒ॏཁ

    View Slide

  26. ܰ͘৮ͬͨΓɺ
    ฉ͘ɺಡΉఔ౓Ͱ͸
    ৽͍͠΋ͷΛ࡞੒ɺઃܭ͸೉͍͠
    ౰ͨΓલ͕ͩ

    View Slide

  27. ֶ෦4೥Ҏ߱ͷษڧํ๏
    • αʔό؂ࢹͷΞϧόΠτ
    • ϛυϧ΢ΣΞɺෛՙ෼ࢄɺ৑௕ԽͳͲͷߏ੒ྫ
    • ਅࣅΔͨΊͷ࣮ྫ
    • ݚڀ
    • ιϑτ΢ΣΞϧʔλ࡞੒ɺϓϩτίϧͷௐࠪͳͲ
    • ඞཁͳجૅ஌ࣝͷษڧͱ࣮૷

    View Slide

  28. ਅࣅͯ࡞ͬͨΓมߋͨ͠Γ
    • ߏ੒ྫͷߏஙࣗಈԽνϟϨϯδ
    • ৚݅ΛՃ͑ͯɺͦΕʹ͋͏Α͏ʹߏ੒ྫΛมߋ͢Δ
    • ݸਓతʹ͸”റΓϓϨΠ”ͱݺΜͰ͍Δ (ແఀࢭറΓͱ͔)
    • େม͚ͩͲҰ͔Β࡞ͬͯΈΔ
    • ϥΠϒϥϦͷ࠶࣮૷ͱ͔
    • ϛυϧ΢ΣΞͳͲͷҰ෦Λ؆қ࣮૷
    • ιέοτϓϩάϥϛϯάͰpreforkܕͱeventܕͱ͔

    View Slide

  29. ಘΒΕΔ΋ͷ(ͦͷ1)
    • ఆੴͷϝϦοτɺσϝϦοτֶ͕΂Δ
    • બ୒ࢶΛ૿΍ͤΔɺ൑அج४͕ग़དྷΔ
    • ҰͭԼͷϨΠϠʔֶ͕΂Δ (syscall, OS, Network,..)
    • ҧ͏ϛυϧ΢ΣΞͷཧղʹ໾ཱͭ
    • ஌͕ࣝ޿͕Δ
    • ෼͔ͬͨ”ͭ΋Γ”෦෼ͷ೺Ѳ
    • ͳΜ͔ٕज़ϒϩάɺຊͱ͔Ͱ஌ͬͨؾʹͳͬͯͨ
    • צҧ͍ɺࢥͬͨΑΓ~ͩͬͨ

    View Slide

  30. ಘΒΕΔ΋ͷ(ͦͷ2)
    • ײ૝ͱٙ໰఺ (ෳࡶ,γϯϓϧ, ଎͍, ஗͍, ָ, ͭΒ
    ͍, …)
    • ΈΜͳͲ͏͍ͯ͠ΔΜͩΖ͏?
    • ͭΒ͍ͷ͸૝ఆ͞Εͨ࢖ΘΕํ͡Όͳ͍͔Β͔
    ΋
    • ͔ͩΒ͜͏͍͏࣮૷ͳͷ͔~
    • ݁ہ͕͜͜໰୊ͳΜͩΑͳ͊
    • ଞʹ΋ͬͱద࣮ͨ͠૷͕͋ΔͷͰ͸?
    • ͳ͍ͳΒ࡞Δ͔(ͱݴ͑Δͱ͔͍͍ͬ͜)

    View Slide

  31. ྫ͑͹
    ιϑτ΢ΣΞϧʔλ࡞੒

    View Slide

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

    ͱ͍͏͜ͱ͸IPΞυϨεॻ͖׵͑ͨΒL4ܭࢉ͠௚͠?
    • ͳΜ͔஗͍….γϑτԋࢉͱ͔Ͱ΍ͬͯΔͷʹͳ͊
    • kernelͲ͏΍ͬͯΜͩ? ΞηϯϒϦ͔Α…
    • νΣοΫαϜΦϑϩʔυ? ଎͍! ϋʔυ΢ΣΞ࠷ߴ!
    • Μ? Ծ૝Ϛγϯ͸ԿʹΦϑϩʔυͯ͠Μͷ?
    • xenͩͬͨΒxen-netbackͱ͔ʹͦΕͬΆ͍ͷ͋Δͳ͊ʔ

    View Slide

  33. ࡞Δͱ͖ͷֶͼྫ (ͦͷଞ)
    • ͏΁͐…౸ணύέοτͷฒͼସ͑ΊͬͪΌ஗͍…
    • TCPͷΦϓγϣϯϑΟʔϧυ?

    Linux͸σϑΥϧτͰtimestamp࢖͍ͬͯΔͷ͔…
    • ωοτϫʔΫͷ଎౓ײͩͱϝϞϦίϐʔ͸஗͍…
    • CPU͕1ίΞʹுΓ෇͘~ͱ͜ΖͰsoftirqͬͯͳʹ?
    • kernelͷωοτϫʔΫελοΫ͕ϘτϧωοΫ?͑?
    • DPDKࢯ~ པΉ~

    View Slide

  34. ࿩Λ໭ͯ͠

    View Slide

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

    View Slide

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

    View Slide

  37. ࣾ಺ͷΠϯϑϥΛਅࣅΔϝϦοτ
    • WebαʔϏεܥͷΠϯϑϥج൫ͷఆੴΛֶ΂Δ
    • ࠓͰ΋௨༻͢Δےͷྑ͍ઃܭ
    • ࠓͰ͸ݹ͍ɺطʹഁ୼ͨ͠Ξϯνύλʔϯ
    • ͪΐ͏ͲΑ͍ن໛ײ
    • খن໛Ϋϥ΢υ, ࣮૷͕௥͍͖ΕΔ
    • ౰࣌ͷઃܭऀͷҙਤɺؾ͕࣋ͪ෼͔Δ
    • ࣾ಺ݻ༗ͷࣄ৘(ن໛, ίετ)Λ഑ྀͨ͠ઃܭ
    • ؆୯ͦ͏Ͱ೉͍͠, ౰࣌͸࢖͑ͳ͔ͬͨ

    View Slide

  38. ਅࣅΔͱ͜Ζ͸ਅࣅ͍͍ͯײ͡ʹ
    • ศརͳͱ͜Ζ͸ਅࣅ͍ͯ͘
    • ҧ͏΋ͷࢼ͍ͨ͠ͱ͜Ζ͸ม͑Δ
    • ґଘؔ܎ʹ͸஫ҙ͠ͳ͕Βߏங͍ͯ͘͠
    • Ոͱձࣾͷن໛ײΛҙࣝ͢Δ
    • ՄೳͳݶΓ৽͍͠όʔδϣϯͰ࡞Δ
    • ͍͍ײ͡ʹͳͬͨΒࣾ಺ಋೖ
    • ָ͠Ήʂ

    View Slide

  39. ͱ͍͏͜ͱͰ࣌ؒ͋Δ͔͗Γ঺հ
    • ωοτϫʔΫߏ੒
    • ෺ཧαʔόͷηοτΞοϓ
    • Ծ૝αʔόͷηοτΞοϓ
    • ϓϩϏδϣχϯά
    • ෛՙ෼ࢄɺ৑௕Խ
    • WebΞϓϦέʔγϣϯ

    View Slide

  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
    %FCJBOYFO

    594 7Z04

    $PSF

    View Slide

  41. ෺ཧαʔόͷηοτΞοϓ
    • Debian Stretch + Xen4.6
    • ஌Βͳ͍͏ͪʹ࠶ىಈ
    • Φϑϩʔυ༗ޮʹ͢Δͱ1࣌ؒޙ͙Β͍ʹigb͕Τϥʔ
    • vif͕4ͭ·Ͱ͔͠࡞Εͳ͍
    • ηοτΞοϓ͸PXEϒʔτ+Preseed
    • ϒʔτબ୒ͨ͠ΒࣗಈͰOSΠϯετʔϧ
    • ࡉ͔͍ͷ͸ىಈޙʹAnsibleͰ੔͑Δ

    View Slide

  42. Ծ૝αʔόͷηοτΞοϓ
    • ࣾ಺
    • Ծ૝CPU਺ɺϝϞϦɺσΟεΫαΠζΛਓ͕ࢦఆ
    • IP, ϗετ໊؅ཧ͸ߏ੒؅ཧπʔϧ, Mackerelʹొ࿥
    • ࣗ୐
    • NUMAΛҙࣝͨ͠ΠϯελϯελΠϓͷఆٛͱಋೖ
    • xen 4.5͔Β͍͍ײ͡ͷεέδϡʔϥ
    • IP,ϗετ໊؅ཧ͸Mackerel
    • ໊લղܾ͸consul(0.7)ͱPowerDNS(4.0.1)

    View Slide

  43. ϓϩϏδϣχϯάͱ͔
    • ࣾ಺
    • Chef + Capistrano + Jenkins
    • ࣗ୐
    • Ansible + Fabric + Rundeck

    View Slide

  44. ෛՙ෼ࢄɺ৑௕Խ
    • ࣾ಺
    • LVS+keepalived, HAProxy
    • ࣗ୐
    • LVS+keepalivedͱconsul
    • Seesawͱ͔ࢼͯ͠Έ͍ͨ
    • ࣗ࡞

    View Slide

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

    View Slide

  46. ࣗ୐αʔόͷྑ͞
    • ؾܰʹෛՙ͔͚ΒΕΔ
    • ωοτϫʔΫ·ͰݟΕΔ
    • ୆਺ؾʹ͠ͳ͍ͰݐͯΒΕΔ
    • 10୆Ҏ্ͳΒίετ҆͘ͳΔ?
    • ෺ཧɺԾ૝ɺίϯςφͳΜͰ΋બ΂Δ
    • ϋΠύʔόΠβʔͷϩάݟΕΔ
    • ਂ۷Γ͢Δʹ͸࠷దʂ

    View Slide

  47. View Slide

  48. ࣗ୐αʔόָ͍͠ʂ

    View Slide

  49. 4
    ·ͱΊ

    View Slide

  50. ·ͱΊ
    • ͸͊ʙࣗ୐αʔόͨͷ͌͠ʙ
    • ؆қͳ΋ͷͰ΋ࣗ෼Ͱ࡞Δͷେࣄ
    • ΤϯδχΞ͸ϥΠτϢʔβ͡Όବ໨
    • ΍Γ͜Έॏཁ
    • ษڧํ๏͸ΞϓϦέʔγϣϯΤϯδχΞͱ͞΄Ͳม
    ΘΒͳ͍
    • ͱʹ͔ࣗ͘෼Ͱ࡞ͬͯΈΑ͏ʂ

    View Slide