« 楽にいろいろな試験に合格するテクニック | Main | WEBブラウザーに表示されている画面を直接編集する方法 »

April 23, 2009

LVS+ldirectorを使ってMySQLをロードバランスをしてみる

今回はLVSを使ってMySQLのslaveサーバをロードバランシングする方法を記してみます。LVSは単に振り分けしかやってくれませんので、リアルサーバの生存確認やLVSの作動管理のためにldirectorも導入しています。

LVSだけだとLVSの設定を入れ込まなければなりませんが、ldirectorを使うとldirectorの設定ファイルに書いておくことでLVSの設定をldirectorが自動生成して反映してくれるので楽ちんです。

※世の中にはLVS+keepalivedの組み合わせが多いようですが、検証してみたところldirectorのほうが導入も運用も簡単なのでこちらを採用しました。

前提条件


VIP: 10.0.2.10

DB1: 10.0.0.101

DB2: 10.0.0.102



ロードバランサーとなるサーバへのインストール方法

【インストール】

# yum install ipvsadm
# yum install heartbeat
# yum install heartbeat-ldirectord


【ldirectorの設定】

$ sudo vi /etc/ha.d/ldirectord.cf

  checktimeout=5
  checkinterval=10
  autoreload=no
  logfile="/var/log/ldirectord.log"
  virtual=10.0.2.10:3306
        real=10.0.0.101:3306 gate
        real=10.0.0.102:3306 gate
        checktype=negotiate
        protocol=tcp
        checktype=connect
        scheduler=lc
        netmask=255.255.255.255


【VirtualIPアドレスの設定】
※本当はheartbeatサービスの設定で行いますが、今回LVSを冗長化せずheatbeatサービスを使わないのでこの方法でお茶を濁します。

% sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0:0

  DEVICE=eth0:0
  IPADDR=10.0.2.10
  NETMASK=255.255.255.255
  NETWORK=10.0.2.10
  BROADCAST=10.0.2.10
  ONBOOT=yes


リアルサーバ側の設定方法

【ループバックIPアドレスの設定】

% sudo vi /etc/sysconfig/network-scripts/ifcfg-lo:0

  DEVICE=lo:0
  IPADDR=10.0.2.10
  NETMASK=255.255.255.255
  NETWORK=10.0.2.10
  BROADCAST=10.0.2.10
  ONBOOT=yes
  NAME=loopback:0

【ループバックデバイスに割り当てられたip addressに対するarpに反応しないように設定(重要!)

% sudo vi /etc/sysctl.conf

  # Resolving the arp problem for LVS and ldirector.
  net.ipv4.conf.eth0.arp_ignore = 1
  net.ipv4.conf.eth0.arp_announce = 2

$ sudo sysctl -p

$ sudo sysctl -a | grep net.ipv4.conf.eth0.arp

メンテナンスの方法

【ldirectorの起動(=LVSの起動)】

% sudo service ldirectord start

【リアルサーバの追加】

% sudo vi /etc/ha.d/ldirectord.cf

    real=10.0.0.101:3306 gate
    real=10.0.0.102:3306 gate

の要領で追加し、

% sudo service ldirectord reload

【接続状況の確認】

% sudo ipvsadm -Ln

  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP 10.0.2.10:3306 lc
    -> 10.0.0.101:3306                Route 1 0         0
    -> 10.0.0.102:3306                Route 1 0         0


(付録) もしldirectorを使わずに手作業でLVSの設定をするとしたら

●VIP追加 (lcオプションは最小コネクション(lc) でリアルサーバにバランスする)

% sudo ipvsadm -A -t 10.0.2.10:3306 -s lc


●削除したい時は以下

% sudo ipvsadm -D -t 10.0.2.10:3306


●VIPにひも付くリアルサーバのIPアドレス(RIP)を追加 (-gはDSR、-mはNAT)

% sudo ipvsadm -a -t 10.0.2.10:3306 -r 10.0.0.101 -g
% sudo ipvsadm -a -t 10.0.2.10:3306 -r 10.0.0.102 -g


●削除したい時は以下

% sudo ipvsadm -d -t 10.0.2.10:3306 -r 10.0.0.101
% sudo ipvsadm -d -t 10.0.2.10:3306 -r 10.0.0.102


●設定確認

% sudo ipvsadm -Ln

|

« 楽にいろいろな試験に合格するテクニック | Main | WEBブラウザーに表示されている画面を直接編集する方法 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference LVS+ldirectorを使ってMySQLをロードバランスをしてみる:

« 楽にいろいろな試験に合格するテクニック | Main | WEBブラウザーに表示されている画面を直接編集する方法 »