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
ロードバランサーって何? / What is the load balancer?
Search
ハトネコエ
July 31, 2017
Technology
0
200
ロードバランサーって何? / What is the load balancer?
「ロードバランサーってよく聞くけど何物?」から始まり、DSRのメリット・デメリットなど。
社内勉強会にて発表。
ハトネコエ
July 31, 2017
Tweet
Share
More Decks by ハトネコエ
See All by ハトネコエ
日経が読める?! 株式市場の基礎 / Stock Market Basics
nekonenene
0
25
プルリクエストレビューを終わらせるためのチーム体制 / The Team for Completing Pull Request Reviews
nekonenene
4
2.8k
今年こそ知るべきセキュリティー入門 / Security Basics 2025
nekonenene
0
56
Godot 4.3 と学ぶインタラクティブミュージック / Interactive Music Basics with Godot 4.3
nekonenene
0
160
Developer Consoleを使い倒そう / Use Web Browser DevTools
nekonenene
0
45
まだまだマイナー?! 未踏事業について教えます / Introduction of Mitou Project
nekonenene
1
140
Docker for Windows/macOS
nekonenene
0
35
技術的負債を防ぐには / What is the Technical Debt
nekonenene
0
340
画像処理の基礎の基礎 / Ultra Basic of Image Processing
nekonenene
0
54
Other Decks in Technology
See All in Technology
役割は変わっても、変わらないもの 〜スクラムマスターからEMへの転身で学んだ信頼構築の本質〜 / How to build trust
shinop
0
150
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
150
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
430
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
30k
Snowflakeの生成AI機能を活用したデータ分析アプリの作成 〜Cortex AnalystとCortex Searchの活用とStreamlitアプリでの利用〜
nayuts
0
140
事業価値と Engineering
recruitengineers
PRO
8
5.4k
生成AI時代に必要な価値ある意思決定を育てる「開発プロセス定義」を用いた中期戦略
kakehashi
PRO
1
240
Automating Web Accessibility Testing with AI Agents
maminami373
0
290
Vault meets Kubernetes
mochizuki875
0
150
iPhone Eye Tracking機能から学ぶやさしいアクセシビリティ
fujiyamaorange
0
190
Figma + Storybook + PlaywrightのMCPを使ったフロントエンド開発
yug1224
10
3.6k
【Grafana Meetup Japan #6】Grafanaをリバプロ配下で動かすときにやること ~ Grafana Liveってなんだ ~
yoshitake945
0
220
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
185
54k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Cult of Friendly URLs
andyhume
79
6.6k
Why Our Code Smells
bkeepers
PRO
339
57k
How to Ace a Technical Interview
jacobian
279
23k
BBQ
matthewcrist
89
9.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Transcript
ϩʔυόϥϯαʔ͕ Θ͔Βͳ͍ ϋτωίΤ @nekonenene 201707݄31
• ϩʔυόϥϯαʔɺௐΕௐΔ΄Ͳ NATSSL௨৴ͳͲલఏͱͳΔωοτϫʔΫ ͕ࣝΓࢁͳ͜ͱ͕Θ͔ͬͯɺ શ෦৮ΕΒΕͳ͍ͷͰɺؾʹͳͬͯͨ ࣍ϖʔδͷ͜ͱͷΈѻ͍·͢ • L4ʢτϥϯεϙʔτɿTCP/UDPʣ • L7ʢΞϓϦέʔγϣϯʣ
ϩʔυόϥϯαʔΘ͔Βͳ͍
• ϩʔυͬͯͳʹʁ ಓʁ • ͲΜͳΈͳͷʁ • σʔλΛͲ͏ͬͯΫϥΠΞϯτʹ͢ͷʁ • ઐ༻ͷػցΛങΘͳ࣮ͯ͘ݱͰ͖Δʁ •
ෳͷϩʔυόϥϯαΛཱͯͨͱ͖ɺ ͦΕͷଓཧͲ͕͓͜͜ͳ͏ͷʁ ͕͜͜Θ͔Βͳ͍
• load ͱ͍͏ͱʮσʔλΛಡΈࠐΉʢಈࢺʣʯ ͷΠϝʔδ͕ڧ͍͚Ͳɺʮॏՙʢ໊ࢺʣʯͷ ҙຯ͕ݩʑɻͭ·Γʮෛՙʯ • ʮՙΛੵΉɾ٧ΊࠐΉʯˠʮర͢Δʯ ˠʮσʔλΛॻ͖ࠐΉɾಡΈࠐΉʯ ͱ͍͏ྲྀΕͰίϯϐϡʔλ༻ޠͱͯ͠Θ ΕΔΑ͏ʹͳͬͨͬΆ͍
1. ϩʔυͬͯͳʹʁ
• load balancing ʮෛՙࢄʯͱ͍͏ҙຯͰ ϩʔυόϥϯαͦΕΛͬͯ͘ΕΔͷ • ͳͷͰɺҙຯ߹͍ͱ͍͚ͯ͠Ͳɺ جຊతʹϩʔυόϥϯγϯά༻ʹ࡞ΒΕͨ ͷΛϩʔυόϥϯαͱͯ͠ޠ͍͖ͬͯ·͢ ϩʔυόϥϯα
• ϩʔυόϥϯα͕ͲͷαʔόʔΛબ͢Δ͔ ͷख๏͍͘Β͔͋Δɻ͓ͳྫˣ • ϥϯυϩϏϯํࣜɿ୯७ʹॱ൪ʹબ • ॏΈ͚ͮɿൺΛఆٛ • ࠷খଓɿݱࡏͷίωΫγϣϯ͕࠷খ͞ ͍αʔόʹసૹ
2. ͲΜͳΈͳͷʁ ࢀߟ : http://www.infraexpert.com/study/loadbalancer4.html
• DNSͷAϨίʔυͰɺಉυϝΠϯʹ ෳͷIPΞυϨεΛׂΓͯΔ͜ͱͰ ϥϯυϩϏϯํࣜΛ࣮ݱ͢Δͷ ʢϩʔυόϥϯα͍Βͣʂ खܰʂʣ • RFC3484ʹͯʮෳׂΓ͕ͯ͋Δ߹ ͬͱ͍ۙαʔόΛબʯͱͳͬͨͷͰݱ ࡏϥϯυϩϏϯʹͳΒͳ͍͜ͱ
DNSϥϯυϩϏϯ
• ϥϯυϩϏϯͰͳ͍Ͱ͕͢ɺ AWS Route53ͰWeightͷࢦఆ͕͓͜ͳ ͑ɺDNSʹΑΔʮॏΈ͚ͮʯͷෛՙࢄ͕Մ ೳͰ͢ DNSʹΑΔෛՙࢄ ࢀߟ : http://qiita.com/nagizero/items/385ed12c60f229a4df9c
• AWSͷυΩϡϝϯτతʹɺELB CLBʢClassic Load Balancerʣ ALBʢApplication Load Balancerʣ ʹ͔Ε·͕͢ɺELBʹCLBͱ͠·͢ •
ͳ͓ɺALBEC2Πϯελϯεͷ Ͳͷίϯςφʹͭͳ͙͔·ͰΛ੍ޚ͢Δɻ ϥϯυϩϏϯϧʔςΟϯάΞϧΰϦζϜisԿ ELBͲͷํࣜʁ
• ʰσϑΥϧτͰɺϩʔυόϥϯαʔɺ ϩʔυόϥϯαʔʹରͯ͠༗ޮʹ͢ΔΞϕΠ ϥϏϦςΟʔκʔϯؒͰۉʹτϥϑΟοΫ Λࢄ͠·͢ʱ ( http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/ introduction.html ) •
ॏΈ͚ͮ 1:1:1:1:1:1:ʢུ ͷࢄํࣜΛऔ͍ͬͯΔΑ͏Ͱ͢Ͷ CLBͲͷํࣜʁ
• αʔόʔ͔ΒͷϨεϙϯε͕ϩʔυόϥϯ αʔΛܦ༝͍ͯͯ͠ɺϩʔυόϥϯαʔͷ ෛՙେ͖͍ΑͶʁ ͱࢥ͍ͬͯͨͷͰɺΫϥΠΞϯτૹΔ ͷͩͱࢲࢥ͍ͬͯͨɻ • ্هํࣜΛDSRʢDirect Server Returnʣߏ
ͱݴ͏ 3. ΫϥΠΞϯτͲ͏ͬͯʁ
• αʔόʔ͔Βฦ͢ใ͕ϩʔυόϥϯαʔ Λ௨Βͳ͍ͷͰɺΞϓϦέʔγϣϯͷใ ಘΒΕͳ͍ • ΞϓϦέʔγϣϯతͳใʹΑΔෛՙࢄ͕ ͓͜ͳ͑ͳ͍ʢ͖ͬ͞ͷ࠷খଓͳͲʣ • CookieΛ༻͍ͨεςΟοΩʔηογϣϯ ʢύʔγεςϯεʣ͓͜ͳ͑ͳ͍
DSRͷσϝϦοτ ࢀߟ : http://knowledge.sakura.ad.jp/tech/527
• HTTPS௨৴Λ͓͜ͳ͏߹ɺ҉߸Խɾ෮߸ʹ ͦΕͳΓͷෛՙ • ϩʔυόϥϯαʔʹ͍ͬͨΜฦ͢͜ͱͰ SSLΞΫηϥϨʔλʢ҉߸Խɾ෮߸͢Δ ͷʣ͖ϩʔυόϥϯαʔͰ͋Εɺ ͦ͜ʹෛՙΛҰͰ͖Δ͠ɺSSLূ໌ॻͦ ͜ʹ͚ͩஔ͍ͯɺαʔόͱHTTP௨৴Մೳ DSRΛΘͳ͍ϝϦοτ
• ಈըετϦʔϛϯά࠶ੜͷΑ͏ʹɺ େྔͷϨεϙϯεΛαʔόʔ͕ฦ͢γεςϜ ͷ߹ɺϩʔυόϥϯαʔͷεϧʔϓοτ ʢσʔλసૹʣੑೳ͕͍͔ͭͳ͍͔Β DSRΛ͏΄͏͕͍͍ɺͱ͍͏߹͋Δ • ͨͩɺௐͯΈͨײ͡DSRΛקΊͳ͍ௐ ͕ଟ͘ײͨ͡ DSRΛ͏΄͏͕͍͍߹
ࢀߟ : http://www.infraexpert.com/study/loadbalancer12.html
• ϩʔυόϥϯαʔΛௐΔͱ F5 Networks.Inc ͷʰBIG-IPʱͷ͕ଟ͍… • ͰɺࣗαʔόͰݐͯΒΕͳ͍͔ʁ • ʰLinux Virtual
Server (LVS)ʱͱ ʰKeepalivedʱΛ༻͍Δ͜ͱͰɺ αʔόʔΛϩʔυόϥϯαʔԽͰ͖Δ 4. ઐ༻ͷػց͕ඞཁʁ
• LVSॏΈ͚ͮʹΑΔࢄΛ͓͜ͳ͑·͢ ʢઃఆํ๏ : http://dsas.blog.klab.org/archives/50664843.html ʣ • Keepalived֤αʔόʔͷࢮ׆ঢ়گΛɺ TCPίωΫγϣϯ͕ுΕΔ͔(TCP_CHECK) HTTPΞΫηεͰ͖Δ͔(HTTP_GET)
ͱ͍ͬͨํ๏Ͱࢹ͠·͢ ʢઃఆํ๏ : http://blog.idcf.jp/entry/cloud/keepalived ʣ LVS + Keepalived
• AWSͷElastic Load Balancingʹ͓͚Δ ϩʔυόϥϯαʔউखʹ૿ݮ͢ΔΒ͍͠ɻ • ͡Ό͋ͲͷϩʔυόϥϯαʔʹৼΔ͔ Ͳ͏͍͏Έʁ • ͜ͷࢿྉ7ϖʔδʹ͋ͬͨDNSϥϯυϩϏϯ
ͱಉ༷ͷํ๏Ͱղܾ͍ͯ͠Δ 5. ϩʔυόϥϯαʔͷόϥϯαʔʁ
ΫϥΠΞϯτ͕ϦΫΤετΛϩʔυόϥϯαʔʹૹ৴͢ΔલʹɺυϝΠϯωʔϜγεςϜ (DNS) αʔόʔΛ༻ͯ͠ϩʔυόϥϯαʔͷυϝΠϯ໊Λղܾ͠·͢ɻ Πϯελϯε amazonaws.com υϝΠϯʹ͋ΔͨΊɺDNS ΤϯτϦ Amazon ʹ Α੍ͬͯޚ͞Ε·͢ɻAmazon
DNS αʔόʔɺ1 ͭҎ্ͷ IP ΞυϨε (ϩʔυόϥϯ αʔ༻ͷϩʔυόϥϯαʔϊʔυͷ IP ΞυϨε) ΛΫϥΠΞϯτʹฦ͠·͢ɻ ΞϓϦέʔγϣϯͷτϥϑΟοΫ͕࣌ؒͷܦաͱͱʹมԽ͢ΔͱɺElastic Load Balancing ϩʔυόϥϯαʔΛεέʔϦϯάͯ͠ DNS ΤϯτϦΛߋ৽͠·͢ɻDNS Τ ϯτϦͰɺ༗ޮظݶ (TTL) 60 ඵʹࢦఆ͞Ε͍ͯΔͨΊɺτϥϑΟοΫͷมԽʹԠ͡ ͯ IP ΞυϨε͕ਝʹ࠶Ϛοϓ͞ΕΔʹҙ͍ͯͩ͘͠͞ɻ AWSυΩϡϝϯτΑΓ Ҿ༻ݩ : http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/ userguide/how-elastic-load-balancing-works.html#request-routing
εοΩϦʂ
ΑΓਂ͘Γͨ͘ͳͬͨํ ͜ͷεϥΠυ͕ྑ͛͞Ͱ͢ ʰϩʔυόϥϯα࠶ೖʱ https://www.slideshare.net/ ryuichitakashima3/ ss-72343772