Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
mruby-ipvs
Search
rrreeeyyy
May 08, 2014
Research
750
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mruby-ipvs
卒業研究発表
rrreeeyyy
May 08, 2014
More Decks by rrreeeyyy
See All by rrreeeyyy
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
6
1.3k
Reliability in the Age of AI: Engineering for AI Velocity
rrreeeyyy
0
230
Rethinking Incident Response: Context-Aware AI in Practice - Incident Buddy Edition -
rrreeeyyy
0
290
Rethinking Incident Response: Context-Aware AI in Practice
rrreeeyyy
3
2.6k
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
350
An Efficient Incident Response Training with AI / SRE NEXT 2024 Sponsor Session
rrreeeyyy
1
6.3k
カンファレンスから見る SRE トレンド 2024 / SRE Trends from Conferences in 2024 #SRE_Findy
rrreeeyyy
4
2.7k
信頼性の育て方 / mackerel-meetup-15
rrreeeyyy
10
3.1k
SRE の歩き方・進め方 / sre-walk-through-procedure
rrreeeyyy
0
9.1k
Other Decks in Research
See All in Research
研究室単位での自律的 IPv6接続性確立に向けたAS共同運用モデルの提案と実証
reokashiwa
PRO
0
230
生成AIなんでも展示会vol6 LT登壇資料 NexteraBERT
rikkabotan7
0
200
Easy to Guess, Hard to Verify: Lessons from AIMO 3 for Olympiad-Level AI Mathematics
corochann
0
130
OWASP AISVS - C7
shiell
2
840
実例から見るLLMのマンガ理解:実務VQAタスクによる長期的文脈と視覚情報の定性評価
kzmssk
0
190
Santé et fertilité des sols : ce que nous disent les pratiques dans les systèmes de polyculture-élevage
institutdelelevage
PRO
0
140
CDCL を用いた MILP の厳密解法
imai448
0
310
SAM3を用いたコマ・吹き出しの 領域検出と分割構造からの読み順推定
kzmssk
0
190
ros2-perf-multihost: Automated Coordination Framework for Objective Architecture Evaluation in Distributed Systems
takasehideki
0
150
論文読み会 SNLP2026 Tau2-Bench: Evaluating Conversational Agents in a Dual-Control Environment
s_mizuki_nlp
0
310
Empreinte carbone des ovins : une approche globale (technique, économique, environnementale) – 4 années de résultats avec LIFE GREEN SHEEP
institutdelelevage
PRO
0
110
Karkada さんの論文 × 2 の紹介: (1) Closed-Form Training Dynamics Reveal Learned Features and Linear Structure in Word2Vec-like Models, (2) Symmetry in language statistics shapes the geometry of model representations
eumesy
PRO
1
870
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
600
Accessibility Awareness
sabderemane
1
250
Making Projects Easy
brettharned
120
6.8k
Scaling GitHub
holman
464
140k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
Darren the Foodie - Storyboard
khoart
PRO
4
4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Transcript
mruby を用いた Linux ロードバランサ インタフェースの実装 卒業研究最終発表 ! 中野研究室 吉川竜太 2014/2/6
背景 - ロードバランサ • サーバの負荷を分散させるシステム • クライアントからのリクエストを 複数のサーバに振り分ける • サービスの可用性・拡張性の需要の高まりに
伴い普及 • 振り分け先のサーバを定期的に確認し, 異常があれば振り分けをやめる (ヘルスチェック)
ロードバランサによる振り分け
ヘルスチェック
• Linux のロードバランサ • Linux カーネル 2.6 以降に組み込まれている • 振り分けの設定として,次のような方法がある
• C 言語のライブラリである libipvs を用いる方法 • 設定用のソフトウェアである Keepalived を用いる方法 • Keepalived を用いる方法が一般的である IP Virtual Server (IPVS)
IPVS 設定用のインタフェース • libipvs • C 言語を用いるため記述力は高い • メモリ管理や文字列操作が煩雑 •
ヘルスチェックの機能を記述するのが煩雑 • Keepalived • 設定ファイルで簡潔に記述することが可能 • 複雑な操作は出来ず,記述力が低い • ヘルスチェックの機能が限定的である
インタフェースごとの比較 記述力 ヘルスチェック 簡潔性 libipvs ◯ △ ✕ Keepalived ✕
△ ◯
目的と方針 • 目的 • IPVS の記述力・簡潔性の高いインタフェースの実装 • 方針 • 組込み向けで軽量な
Ruby である mruby を採用 • libipvs のラッパーを mruby に実装する • 実装したラッパーを使い,より簡単な構文で書ける モジュールを mruby を用いて実装
ラッパーの実装 lb = IPVS::Service.new({ 'addr' => '10.0.0.1', 'port' => 80})
web1 = IPVS::Dest.new({ 'addr' => '192.168.0.1', 'port' => 80}) lb.add_service lb.add_dest(web1) • ロードバランサ・振り分け先をインスタンスとして生成 • libipvs の関数名を mruby のメソッドとして提供 • libipvs の主な構造体の関数がほとんど利用可能
モジュールの実装 • mruby の記述力の高さを利用し,設定ファイル風の 構文で書けるモジュールを実装 • 設定ファイルの構文中に mruby
のコードを挿入可能 • 外部ライブラリを用いることで自由なヘルスチェック が可能 • 例として,Keepalived 風の構文を実装し,比較する
Keepalived の記述例 virtual_server 192.168.0.1 80 { real_server 192.168.0.2 80 {
HTTP_GET { url { path / } } } real_server 192.168.0.3 80 { } } 192.168.0.1の80番ポートに来た接続を 192.168.0.2, 192.168.0.3の80番ポートへ 振り分ける設定 HTTPのGETを用いたヘルスチェック
Keepalived の問題点 (1) virtual_server 192.168.0.1 80 { real_server 192.168.0.2 80
{ HTTP_GET { url { path / } } } real_server 192.168.0.3 80 { } } ヘルスチェックの方法が限定的 動的なサーバ追加等は出来ない Keepalivedで定められたヘルスチェックしか出来ない 状況に応じた動的なサーバ追加などは出来ない
Keepalived の問題点 (2) virtual_server 192.168.0.1 80 { real_server 192.168.0.2 80
{ HTTP_GET { url { path / } ! } real_server 192.168.0.3 80 { } } 上記設定をそのまま記述すると、 192.168.0.1を192.168.0.2に 振り分ける設定と解釈し動作 ブレースが足りないがエラーは出ない 意図しない設定で動作してしまう
本実装による記述例 (1) 192.168.0.1の80番ポートに来た接続を 192.168.0.2, 192.168.0.3の80番ポートへ 振り分ける設定 virtual_server("192.168.0.1:80") { web1 =
real_server ("192.168.0.2:80") { healthcheck {|lvs, dests| if Curl::get(web1.addr).body == nil lvs.del_dest(web1) end } } real_server("192.168.0.3:80") { } }
本実装による記述例 (2) virtual_server("192.168.0.1:80"){ web1 = real_server("192.168.0.1:80"){ healthcheck {|lvs, dests| if
Curl::get(web1.addr).body == nil lvs.del_dest(web1) end if dests.length < 2 real_server("192.168.0.4:80"){} end } } real_server("192.168.0.3:80"){ } } 外部ライブラリを使った HTTPのGETによるヘルスチェック 振り分け先が2つ未満 になったらサーバ追加 mruby のコードが そのまま書けるため 自由なヘルスチェック定義・ 動的なサーバ追加などが可能 mruby が構文チェックを行うため、 ブレースが欠けてしまった場合は実行されない
まとめ • Linuxのロードバランサである IPVS を mruby を用いて操作できるインタフェースを実装 • 記述力の高い mruby
でインタフェースを実装することに より様々な構文を定義することが可能 • 例としてKeepalived風の構文を実装し,問題点を解決 • 近日公開予定
関連研究 • ipvsadm • Linux のコマンドとして提供される IPVS のインタ フェース •
ldirectord • Keepalived と同様,設定ファイルを用いて IPVS の操 作を行うソフトウェア • mod_mruby [松本ら ’12] • mruby を用いて Web サーバ Apache の機能拡張を行 える機構を実装
なぜmrubyを使うのか • mruby • 組込み開発でも利用できる軽量 Ruby • 既存の C/C++ アプリケーションと共存可能
• ロードバランサのようなリアルタイム処理に 向いている • サーバエンジニアの業界で Ruby が流行 • Chef/Vagrant などの自動化ソフトウェアが活躍