社内で LVS 勉強会を開催しました

システムプラットフォーム部で SRE をやっています id:nabeop です。

以前ご紹介した通り、はてなでは定期的に勉強会を実施していますが、この勉強会とは別枠で LVS の勉強会を突発で開催しました。

speakerdeck.com

きっかけ

年末年始でまったりしていたある日、同僚の分報チャンネルで LVS について苦手意識がある、とのつぶやきを目にしました。LVS については LVS-HOWTO など良質なドキュメントが揃っているけど、ネットワークレイヤの知識が前提とされ、人によってはそのあたりに苦手意識があるかもしれないなと課題感をもっていたところでした。時期的に良い機会だったので、突発的に勉強会を企画しました。

はてなでの LVS/keepalived の使われ方

はてなでは LVS というか keepalived の使われ方は主に以下の2パターンです

  1. VRRP で冗長化しつつ LVS による L4 ロードバランサーとして使用する
  2. VRRP の冗長化のみを使用している

また、はてなのサービスはオンプレミス環境とクラウド環境の両方で展開しており、主にオンプレミス環境で LVS/keepalived が使われているという事情がありました。

そこで今回の勉強会では実装を keepalived に絞りつつ、はてなでの利用状況を勘案した資料構成になっています。

資料について

LVS そのものの解説は全体の 1/4 になっており、ネットワーク周りの解説を充実させています。これは冒頭にもある通り LVS の挙動を理解するためにはネットワークレイヤの理解が不可欠であることに起因しています。また、実際の運用や障害対応などでネットワークレイヤでどのようなことが起きているかを把握することで、設定内容や挙動をより深く理解できるようになるということもあります

ここではどのようなことを念頭において資料の各章を作成、勉強会で話していたかを簡単に紹介します。

L2/L3 の基礎知識

はてなでの LVS は主に LVS/TUN と LVS/DR を採用しています。このため LVS の virtual server から real server にトラフィックを割り当てる時にネットワークレイヤ、とくに L2/L3 でどのようなことが発生しているかを解説するために L2/L3 の基礎を解説しています。

資料では詳細は書かれていませんが、L2/L3 の世界でどのようにパケットが転送されているかということを補足しつつ、後述の LVS で LVS/TUN や LVS/DR の解説に繋げています。

VRRP の基礎知識

技術的には LVS とは異なる領域ではありますが、LVS そのものを冗長化するために VRRP を使用しています。また、はてなでは LVS は使っていないが VRRP による冗長化を採用している箇所は多いので、Master 選出時にどのようなことが起きているかを解説しました。

LVS について

今回の勉強会でのコアになる部分のはずでした。今回の勉強会ではとくに以下の点について解説がしたかったので、ネットワーク周りの解説にページ数を割いていました

  • LVS/DR や LVS/TUN によってどのような経路を通ってパケットが転送されるのか
  • LVS/DR と LVS/TUN の違いがパケットの世界でどのように実装されているか

keepalived について

ここまでで LVS を構成している技術要素という観点での解説は完了しています。LVS のインターフェースと VRRP の実装の keepalived について簡単に解説して、今回の勉強会の締めとしました。

どうだったか

当初は「30分でわかった気になれるかもしれない LVS 勉強会」というお題目でしゃべるつもりが、実際に資料を作ったこところ、30分では収まらず60分の分量になってしまいました。実際に勉強会で質疑応答を交えつつ喋ってみると80分という長丁場な勉強会になりました。

今回の勉強会では SRE の同僚の他にもアプリケーションエンジニアも興味を持ってもらえたというのが嬉しかったです。ネットワークレイヤの話から LVS/keepalived の解説をすることで、今までとは異なる視点で LVS に接してもらえるようになるんじゃないかと思っています。

また、今回の資料を作成するにあたり、実装や仕様についてあらためて確認する機会にもなったので、僕個人としても得るものが大きい勉強でした。

最後に

はてなでは表面上の実装だけではなく、実装の裏側にある技術的な成り立ちまで含めて理解し、一緒に基盤の運用やサービスを作っていく仲間を募集しています!

hatenacorp.jp