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
50
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
53
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
260
入門 電気通信事業者
kurochan
13
5.6k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.8k
GoでTCP Proxyを実装してみよう
kurochan
1
1.2k
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
500
スケールするというのはどういうことなのか
kurochan
14
5k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
52
47k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The World Runs on Bad Software
bkeepers
PRO
71
11k
Navigating Team Friction
lara
189
15k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
970
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
What's in a price? How to price your products and services
michaelherold
246
12k
Building an army of robots
kneath
306
46k
Thoughts on Productivity
jonyablonski
70
4.9k
Fireside Chat
paigeccino
40
3.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.3k
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͔͍ͬͯ͠ͳ͍ • ಉ͡Α͏ͳڥͰಉ͡Α͏ͳࣄ͔͍ͯ͠͠ͳ͍ͨΊ