LVS+keepalived の設定 1

備忘録として、DSRによるLVSkeepalivedの設定を段階的に書く。


前提は以下のとおり:

  • LVSの転送方式はDSR
  • ネットワークは単一セグメントで超簡単なもの
  • OSはCentOS6.5

今回はDSRのLVSMySQL:Slaveの負荷分散の練習。
以降の予定は:

  1. keepalived導入
  2. LVS+keepalivedの2重化
  3. keepalivedによる厳格なMySQL:Slave死活監視+死活管理

ネットワーク構成

今回は以下の構成。


  • LVSはeth0 = 192.168.1.100。さらに後々を考えてVirtualIPとしてeth0:0 = 192.168.1.10を設定。クライアントはこのアドレス(VIP)にアクセスする。
  • MySQL:Masterはeth0 = 192.168.1.200、ただしLVSとは関係ない。
  • MySQL:Slave1はeth0 = 192.168.1.201、MySQL:Slave2はeth0 = 192.168.1.202
  • 全サーバ(LVS + Slave1 + Slave2)は NetworkManagerとSELinuxをoffにする。

LVSの設定

Firewall

3306番ポートを開けておく。

インストール

ipvsadmパッケージをインストール。

# yum install ipvsadm
システムパラメータの設定

パケットフォワーディングを行うため、net.ipv4.ip_forwardを有効にする*1
具体的には/etc/sysctl.confを編集し、sysctl -pを実行する。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# /sbin/sysctl -p
# cat /proc/sys/net/ipv4/ip_forward 
1
VirtualIPの設定

eth0にVirtualIPを設定する。

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth0:0

次のような内容を書く。

# cat ifcfg-eth0:0
DEVICE="eth0:0”
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
HWADDR="00:0C:29:C3:3A:BE"
MTU="1500"
NM_CONTROLLED="no"
ONBOOT="yes"

作成したらネットワークを再起動し、ifconfigで確認する。

# service network restart# /sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C3:3A:BE  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:748 errors:0 dropped:0 overruns:0 frame:0
          TX packets:924 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:77893 (76.0 KiB)  TX bytes:91746 (89.5 KiB)

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:C3:3A:BE  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:246 errors:0 dropped:0 overruns:0 frame:0
          TX packets:246 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:15828 (15.4 KiB)  TX bytes:15828 (15.4 KiB)
ipvsadmの設定

まず、-Cオプションで内容をクリアし、確認する。

# ipvsadm -C
# ipvsadm -S

以下のコマンドを実行する。

# ipvsadm -A -t 192.168.1.10:3306
# ipvsadm -a -t 192.168.1.10:3306 -r 192.168.1.201:3306 -g
# ipvsadm -a -t 192.168.1.10:3306 -r 192.168.1.202:3306 -g

確認は以下。

# ipvsadm -S
-A -t 192.168.1.10:3306 -s wlc
-a -t 192.168.1.10:3306 -r 192.168.1.201:3306 -g -w 1
-a -t 192.168.1.10:3306 -r 192.168.1.202:3306 -g -w 1

# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.10:3306 wlc
  -> 192.168.1.201:3306           Route   1      0          0         
  -> 192.168.1.202:3306           Route   1      0          0 

MySQL:Slaveの設定

Firewall

3306番ポートを開けておく。

MySQL

MySQLを初期化し、起動する。

# mysql_install_db

# mysqld_safe &

次に、Client:192.168.1.5 からアクセスできるように、ユーザ(ここではroot)の権限設定を行う。

# mysql
mysql> GRANT ALL ON *.* TO root@'192.168.1.5’
システムパラメータの変更

以下のパラメータを/etc/sysctl.confに追記する。

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2

編集後、設定を反映させる。

# /sbin/sysvtl -p
仮想loopbackデバイス作成

LVSのVIPと同じIPをlo:0に登録。

# cd /etc/sysconfig/network-scripts
# cp ifcfg-lo ifcfg-lo:0
# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.10
# NETMASKはこれでなければならない。
NETMASK=255.255.255.255 
NETWORK=192.168.1.0
# If you're having problems with gated making 127.0.0.0/8 a martian,            
# you can change this to something else (255.255.255.255, for example)          
BROADCAST=192.168.1.255
ONBOOT=yes
NAME=loopback0

作成したら再起動。

# service network restart

動作確認

ClientからLVSのVIP(192.168.1.10)にアクセスすると、どちらかのスレーブに飛ぶ。

# mysql -h 192.168.1.10

*1:net.ipv4.conf.default.rp_filterなどは有効のままでよさげ