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
学生に2500台サーバ構築させようとした
Search
Kurochan
December 27, 2017
0
460
学生に2500台サーバ構築させようとした
Kurochan
December 27, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
AWS Elemental MediaPackageと格闘🤼
kurochan
2
29
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
39
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
240
入門 電気通信事業者
kurochan
13
5.6k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.7k
GoでTCP Proxyを実装してみよう
kurochan
1
1.1k
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
490
スケールするというのはどういうことなのか
kurochan
14
4.9k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
52
46k
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
760
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Become a Pro
speakerdeck
PRO
29
5.4k
Statistics for Hackers
jakevdp
799
220k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
GraphQLとの向き合い方2022年版
quramy
49
14k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
A Modern Web Designer's Workflow
chriscoyier
695
190k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Transcript
ֶੜʹαʔόΛ2500ߏங ͤ͞Α͏ͱͨ͠
ICTτϥϒϧγϡʔςΟϯάίϯςετ • ֶੜ͚ͷL1ʙL7ͷίϯςετ • ӡӦΛ͍ͯ͠ΔֶੜͷϨϕϧ͕ҟৗʹߴ͍ • ༧બ • ࣾձਓ͕࡞ •
ຊઓӡӦΛ͢Δֶੜ͕ͯ͢ग़/ߏங
ग़ͨ͠ • Linuxαʔόʹsshͯ͠nginxΛೖΕͯΒ͏ • +ࢦఆͨ͠ݻఆͷJSONΛฦͯ͠Β͏ • ↑ͷߏΛ100ʹରͯ͠࡞ۀͯ͠Β͏ • ༧બͷҰͩͬͨͷͰ •
sshͯ͠ίϚϯυ͕ଧͯΔ͔ • ؆୯ͳࣗಈԽ͕Ͱ͖Δ͔ • Λݟ͔ͨͬͨ • 100ʹssh͢Δܦݧͳ͔ͳ͔ͳ͍ͩΖ͏ • 25νʔϜ x 100 = 2500ʂ
ճঢ়گ • จ: https://gist.github.com/kurochan/0100c43de27c953d18b9dfca290f7b77 • νϡʔτϦΞϧͲ͓Γ1ߏஙͰ͖ͨνʔϜ • 25νʔϜ (શνʔϜnginxͷΠϯετʔϧͰ͖ͨʂ) •
ແ͔͠͠Βͷํ๏ͰߏஙΛࣗಈԽͨ͠νʔϜ • 16νʔϜ (64%ʂ) • खಈͰͻͨ͢ΒίϚϯυΛଧͬͯ࠳ંͨ͠νʔϜ • 1νʔϜ • sudo apt install yumͯ͠yumΛ͑ΔΑ͏ʹ͠Α͏ͱͨ͠νʔϜ • 1νʔϜ
ղྫ • ౿Έαʔό͔ΒγΣϧεΫϦϓτͰϧʔϓΛ ճ͢νʔϜ͕΄ͱΜͲ • 1νʔϜ͚ͩansibleΛͬͯஸೡʹߏங͍ͯͨ͠
ग़ڥ • 2500Ͳ͏ͬͯ༻ҙ͢Δͷ͔ • 2500VMݐͯΔͷඇݱ࣮త • ແঈఏڙͱ͍͑͘͞Β͞Μʹਃ͠༁ͳ͍ • ssh͕Ͱ͖ͯίϚϯυ͕ଧͯΕͳΜͰ͍͍ •
ίϯςφʂ • LXD (Linux Container Daemon) • Docker͕ΞϓϦέʔγϣϯίϯςφ ͳΒLXDγεςϜίϯςφ
LXDίϯςφͷத͔Βݟͨܠ৭ • ී௨ͷVMͱ΄ͱΜͲ͍ͬ͠ΐ(Լखͨ͠Βؾ͔ͮͳ͍)
͔ͤͬ͘ͳͷͰઓ • 1ίϯςφ͋ͨΓ0.1CPU x 256MB Memory x 256MB Disk •
36ίΞCPU x 224GB MemoryͷVM x 2Ͱϗετ͢Δ • 1VM͋ͨΓ1500ϗετ(ίϯςφ)ऩ༰͍ͨ͠ • ίϯςφεέʔϧ͢Δͷ͔ࢼ͔ͨͬͨ͠
ݕূ • VM: 36ίΞCPU x 224GB Memory • OS: Ubuntu16.04
• LXD: 2.21 • 1500ίϯςφੜ͍ͨ͠ • Storage: ZFS • Solaris͕ݩɺ*BSDLinuxʹҠ২͞Ε͍ͯΔ • ϑΝΠϧγεςϜࣗମ͕RAIDػೳΛ࣋ͭ(RAID-Z) • Copy on Write͕͋Δ • ॏෳഉআ͕Ͱ͖Δ (༗ޮʹ͢Δͱ͖ϝϞϦফඅʹҙ)
16ϗετੜͨ͠ॴͰΤϥʔ͕ग़Δ • Failed to allocate directory watch: Too many open
files • ϗετ()ଆͷsystemdͷϦιʔε੍ݶʹҾ͔͔ͬΔ • nofile(ϑΝΠϧΦʔϓϯ)ͷ্ݶΛ্͛Δ • inotify(ϑΝΠϧࢹ)ͷ্ݶΛ্͛Δ • vm.max_map_count(ϝϞϦϚοϓ)ͷ্ݶΛ্͛Δ • ຊ൪ӡ༻͚ͷυΩϡϝϯτ: https://github.com/lxc/lxd/blob/master/doc/production-setup.md
600ϗετੜͨ͠ͱ͜ΖͰΤϥʔ͕ग़Δ • failed to create new OS thread
LinuxͷPIDͷ্ݶ • ID͕ৼΕͳ͍͍ͤͰ32768ݸ͔͠ϓϩηεཱ͕ͨͳ͍ • ௨ৗʹͳΒͳ͍ͷͰ࢝Ίͯͬͨ • 6ܻͷPIDͳΜͯΈͨ͜ͱͳ͍ • 60ສݸʹͨ͠(pid_max, thread-max)
1300ίϯςφੜͨ͠ͱ͜ΖͰΤϥʔ͕ग़ͨ • cgroup͕࡞Εͳ͘ͳͬͨ • syslogΛಡΉͱ…
ఘΊͨ • ༧બ։࠵લ(ฏ)ʹLinuxΧʔωϧͷΤϥʔ͖͍ͭ • ͵ΔΆ & Linux kernel oops •
1300ίϯςφ & ΞΠυϧঢ়ଶͰϩʔυΞϕϨʔδ600 • 16ίΞCPU x 196GB VM x 4ʹସ • 1300ίϯςφ·ͰՔಇͤ͞ΔݟΛಘͨͷͰ • 800ίϯςφ x 4Ͱ3200ϗετ(ίϯςφ)ੜͨ͠
ຊ൪ӡ༻ • ΘΓͱ༨༟Ͱಈ͍ͯ͠·ͬͨ
ײ • (ίϯςφ͋ͨΓͷෛՙ͕͍ͨͨ͜͠ͱͳ͍͚Ͳ) 3200ίϯςφӡ༻͢ΔݟΛಘͨͷͰ͔͍(?) • ίϯςφແݶʹεέʔϧ͢ΔΘ͚Ͱͳ͍(ctx switch) • ZFSͷCoW x
ॏෳഉআ͍͢͝ • 256MB(limit) x 800ϗετ = 205GBফඅΛ֮ޛ͍ͯͨ͠ • ࣮ࡍ3.11GB͔͍ͬͯ͠ͳ͍ • ಉ͡Α͏ͳڥͰಉ͡Α͏ͳࣄ͔͍ͯ͠͠ͳ͍ͨΊ