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
450
学生に2500台サーバ構築させようとした
Kurochan
December 27, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
220
入門 電気通信事業者
kurochan
13
5.6k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.6k
GoでTCP Proxyを実装してみよう
kurochan
1
1.1k
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
490
スケールするというのはどういうことなのか
kurochan
14
4.9k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
52
46k
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
kurochan
10
3.5k
セキュキャンを卒業してその後
kurochan
0
1.4k
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Become a Pro
speakerdeck
PRO
28
5.4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Documentation Writing (for coders)
carmenintech
71
4.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Thoughts on Productivity
jonyablonski
69
4.7k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
920
How to train your dragon (web standard)
notwaldorf
92
6.1k
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͔͍ͬͯ͠ͳ͍ • ಉ͡Α͏ͳڥͰಉ͡Α͏ͳࣄ͔͍ͯ͠͠ͳ͍ͨΊ