« 楽にいろいろな試験に合格するテクニック | 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

The comments to this entry are closed.

TrackBack


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

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