LINE Developer Conference インフラの部の参加メモ

今更ですが「LINE Developer Conference」インフラの部に参加させて頂けたのでメモです。
 http://line-hr.jp/archives/37147547.html
とても参考になる話が聞けてLINEさん大変ありがとうございました。
↓のようにもう既に奇麗に他の方が沢山書き留めていますので、もうひたすら個人的にメモっていたのを羅列するだけ。
 http://masasuzu.hatenablog.jp/entry/2014/04/16/LINE_Developer_conference
 http://dev.classmethod.jp/server-side/line-dev-conf-infra/
 http://blog.mogmet.com/line-developer-conference-infra-introduce-network-case/
 http://blog.mogmet.com/line-developer-conference-infra-db-high-availability/

思ったこと

L3DSR/statelessSLBあたりは今後のサービスインフラ考える上でとても参考になりました。
サービス運用におけるDBのDDL運用は…やっぱりまだ手間がかかるところかなという感じでした。
ただ、MySQLでもオンラインDDLができるようになっているので、今後Immutable Infrastructureに合わせてどう対応させて行くかが詰められて今後1,2年内には何かしら形になるんじゃないかという気もしています。
 参考:http://dev.classmethod.jp/cloud/aws/jawsdays2014-08/
  (ここを見ても、DBはまだどうやって対応させて行くかという感じかな?)
 

※付きは個人感

ITSCの紹介

 範囲
  データセンタ
  ネットワーク
  サーバ
  DB
  セキュリティ分野ではアプリケーションも含めた全体
 サービスへの関わり方
  企画・設計でキックオフ
  開発・テストでインフラ設計、キャパ設計
  リリース・運営は体制組んで対応
 サービスインフラマネージャが表にたって対応

システム運営

 開発 ー システム運営(ここ) ー パートナー企業(ISP/CDNなど)
 2年振り返り
  ユーザ、サービス、サーバ増え続けているがメンバーはあまり増えていない
   自動インストール周りの整備がされているから(Plug and Installと呼んでいる)
   問題
    DC内のコネクションタイムアウト(アプリタイムアウト
     L2SWのパケドロ  ※いつものキューオーバーフローのこと
      アプリケーションで対象できればうれしいが…
       メッセージサービスだとアプリケーション側で制御が難しい(一斉系)
      結果、バッファの大きいSWに交換
      NWを独立させてサーバを隔離
    DC空調
     サーバがつめなくなってきた
      スケールアップ
      VM集約
     HBaseが一番台数が多い
      経験則的に1000台くらいで性能に壁がある感じ
      ハード故障多くて運用コストがつらい
       スケールアップで台数減らしをもくろむ
        IOPS重視
         Diskなら1500くらいのIOPS
         PCI-SSDで数万から10万クラスに
       Disk早くしたらCPUがネックになってきた
     仮想化ハイパーバイザ
      VMWareでやってる
      運用性などでの都合
      1サーバで10VMくらいの集約度 ※48Gの24コアくらいか?
    運営問題
     地震などがあると2倍くらいのトラフィックがあるがなんとかさばけた
     年末年始にRedisの一部に負荷集中
      NIC割り込みとRedisの処理しているCPUコアが重複して遅延
      tasksetでRedisプロセスが使うCPUを分散させて応急処置
      irqbalanceの対象からNICを外して、NICは手動設定

LINE DBシステム

 主にLINEゲーム系のお話
 DBMS色々だけどMySQLが73%くらいで最も多い、次がSQLServerで17%くらい。ほかはほとんどない。
 DBサーバ台数1000台くらい運用
 容量算定について
  同時接続が見込みから外れると大変だったという話
 自動フェイルオーバ(Multi-Master Replication Manager)
 MySQL+MMM 構成 MySQLはPerconaベースをカスタマイズ
  Write用VIPとRead用VIPを振る
  heatbeatでVIPの移動
  フェイルオーバはMMMが指示
 無停止シャード追加
  MGMTという独自開発されたプロセスがシャードサーバ情報を提供  ※fabricの独自版のようなもの
  シャーディング数が増える場合はどうするか
   移行用マップが作られる
   既存DBから担当シャードデータ移動のためにDB間でつないでデータとる
    取り方はselect/insertのSQLベース
   コピーが終わったらMGMTから新シャードDBを通知
  MGMTはマネージャ・エージェントシステムでアプリサーバにエージェントが配置されており、アプリはエージェントに問い合わせてシャーディングマップを取得している
  マネージャはPUSHでファイル配布&エージェントメモリ展開

 ・シャード追加中のトランザクションはどうするか?
   一番古いデータからselectして行く、そのための識別用タイムスタンプ列が存在する
   複数回selectでのゲットをまわして事前同期を進めて、エイや!でシャード追加
 ・DDLの変更を伴う際にはどのように無停止対応をしているのか?
   DDLを事前にもらってメンテ入れて適用パターンが多め
   全部が全部必ずしも無停止ではない

 MMMカスタマイズ点
  ・モニターサーバ1台で複数担当
  ・フェイルオーバ時に外部スクリプト呼び出し
  ・レプリケーション遅延でのフェイルオーバはしないようにした
  ・障害判断のSQLにダミーテーブルへの操作を追加

事前アンケートFAQ回答

 LINEシステム規模
  サーバは万、DBは千単位

ネットワークインフラの取り組み

 課題
  内部ネットワークトラフィック
  データセンタスペース
  
  ネットワーク
  Unknown Unicast Flooding → MACアドレステーブルFLUSH → 通信不安定
   これが1Gクラスで発生していた
  前はPOD単位でL2
   L2がSS単位
   表と裏の分離、裏を160Gbps
   LBをL3DSR化(Tunnel方式(トンネリングチャネルをサーバとバランサで張る)・DSCP方式(これを採用、DSCPヘッダを利用した制御方式)
  
  データセンタ
   高効率、高密度、実効8kVA以上
   51Uラック 24kVA、100口の100V電源、特注
   スイッチを背面設置、後は空調の問題
    スイッチ専用の箱を特注して、サーバの熱がスイッチに影響しないようにした

  海外利用向けには拠点を構築
   海外はキャリアの相互接続ポイントが品質が落ちやすい
   なるべくLocal ISPと直接パスを持つ
   利用者に近いところにサーバを設置
   利用者が一番近いところのサイトに接続
   バックボーンはリングトポロジー(US 1、アジア3、EU1) コストと冗長性の妥協点
   論理ネットワークはMPLSでPseudo wireを構築

   論理ネットワークでやりたかったこと
    インターネット通信を利用者に近いところで収容
     クライアント側で機能を実装(得ている利用者情報からStaticに決まる)
     GLSBも検討中
    拠点間通信
     MPLS上にサービス用、サーバ間通信用2つのネットワークを別々に構築
   
   メッセージサービスとして
    リアルタイム性重視
    TCPセッションを張り続けるためセッション数があまり落ちない
    LBセッションテーブルがあふれる
     セッション管理どうする?
      LB機器増やし、スペックアップ
      LBでセッション管理しない構成
       stateless SLB ハッシュテーブルを使ってバランスする形式
       バランシング先サーバ増減時の挙動がメーカーによって違いがある
        ハッシュテーブル全体再計算
         負荷均等性は保証、サーバがかわってしまうので1回切断的な動き
        部分再計算
         負荷均等性はだめだが、既存セッションはOK、LINEはこっちを採用
    stateless SBLまとめ
     セッション数に対してはスケール
     障害時の挙動の理解が必要
     問題点
      負荷の偏り
      モニタリング
      LB仕様をベンダーが開示してくれない

   ・配線で気をつけていること
     電源ケーブルのあまりが出ないよう自作
     NWケーブルは専用経路を通す感じなラックデザイン

以上