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
230
入門 電気通信事業者
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
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
kurochan
10
3.5k
セキュキャンを卒業してその後
kurochan
0
1.4k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Typedesign – Prime Four
hannesfritz
42
2.7k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
How STYLIGHT went responsive
nonsquared
100
5.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Scaling GitHub
holman
459
140k
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͔͍ͬͯ͠ͳ͍ • ಉ͡Α͏ͳڥͰಉ͡Α͏ͳࣄ͔͍ͯ͠͠ͳ͍ͨΊ