keepalivedでLBの冗長化

VRRPを使った冗長化を行う。
環境はi2bsの日記の環境にlb2を追加する。

ゲストOSの用意

VirtualBox上にlb2を用意する。
OSは他のゲストOSと同じくDebian 6.0 32bit。

hostname IP1 IP2 GATEWAY
lb1 172.16.0.100 192.168.250.100 172.16.0.231
lb2 172.16.0.101 192.168.250.101 172.16.0.231
web1 Nothing 192.168.250.110 192.168.250.120
web2 Nothing 192.168.250.111 192.168.250.120
vip 172.16.0.120 Noting Nothing
gateway Nothing 192.168.250.120 Nothing

ipvsadm,keepalivedインストール(lb2)

lb2もlb1と同じくipvsadm,keepalivedのインストールをしておく。

apt-get update
apt-get install ipvsadm libnl1 keepalived

ポートフォワード有効化(lb2)

sed -i.`date +%Y%m%d` -e '/net\.ipv4\.ip_forward/s/^#\(.*\)$/\1/' /etc/sysctl.conf
sysctl -p
cat /proc/sys/net/ipv4/ip_forward

keepalived停止(lb1)

/etc/init.d/keepalived stop
ipvsadm -C
ipvsadm -Ln

keepalived設定(lb1,lb2)

以下設定ではkeepalived起動時にmasterがいない場合、masterへ昇格し、
既にmasterが存在する場合は、backupとなる。

cat /dev/null > /etc/keepalived/keepalived.conf
ex /etc/keepalived/keepalived.conf << EOF
a
virtual_server_group web.localdomain_http {
  172.16.0.120 80
}

virtual_server group web.localdomain_http {
  lvs_sched lc
  lvs_method NAT
  protocol TCP
  delay_loop 10
  virtualhost web.localdomain

  #sorry_server 192.168.250.200 80

  real_server  192.168.250.110 80 {
    weight 1
    inhibit_on_failure

    HTTP_GET {
      url {
        path /wwwcheck.html
        status_code 200
      }
      connect_timeout 3
    }
  }

  real_server  192.168.250.111 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
      url {
        path /wwwcheck.html
        status_code 200
      }
      connect_timeout 3
    }
  }
}

vrrp_instance VE {
  state BACKUP
  interface eth0
  garp_master_delay 5
  virtual_router_id 1
  priority 100
  nopreempt
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass secret
  }
  virtual_ipaddress {
    172.16.0.120/24 dev eth0
  }
}

vrrp_instance VI {
  state BACKUP
  interface eth1
  garp_master_delay 5
  virtual_router_id 2
  priority 100
  nopreempt
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass secret
  }
  virtual_ipaddress {
    192.168.250.120/24 dev eth1
  }
}

vrrp_sync_group VG {
  group {
    VE
    VI
  }
}
.
wq
EOF

keepalived起動(lb1,lb2)

/etc/init.d/keepalived start