lSky's blog

lvs集群部署

LVS

是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。

LVS主要组成部分为:

负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务

LVS负载均衡方式

  1. Virtual Server via Network Address Translation NAT(VS/NAT)
    VS/NAT是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。

  2. Virtual Server via IP Tunneling(VS/TUN)
    IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

  3. Virtual Server via Direct Routing(VS/DR)
    VS/DR方式是通过改写请求报文中的MAC地址部分来实现的。Director和RealServer必需在物理上有一个网卡通过不间断的局域网相连。 RealServer上绑定的VIP配置在各自Non-ARP的网络设备上(如lo或tunl),Director的VIP地址对外可见,而RealServer的VIP对外是不可见的。RealServer的地址即可以是内部地址,也可以是真实地址。

LVS集群搭建(VS/DR模式)

查看IPVS模块是否真的编译到内核中去

modprobe -l | grep ipvs

安装依赖

yum install popt-static kernel-devel make gcc openssl-devel lftp libnl popt -y

下载安装ipvsadm

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

编译安装ipvsadm

tar -xzvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install

下载安装keepalive

wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
yum install -y libnfnetlink-devel
./configure –prefix=/home/keepalived –sysconf=/home/keepalived/etc –with-kernel-dir=/usr/src/kernels/2.6.32-642.15.1.el6.x86_64/
make && make install

ln -s /home/keepalived/etc/keepalived /etc/
cp /home/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /home/keepalived/sbin/keepalived /usr/sbin/
cp /home/keepalived/etc/rc.d/init.d /etc/init.d

将keepalived做成启动服务

chkconfig –add keepalived
chkconfig –level 2345 keepalived on

开启路由转发

vim /etc/sysctl.conf

1
2
net.ipv4.ip_forward = 1
sysctl -p

配置keepalive

vim /home/keepalived/etc/keepalived/keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
! Configuration File for keepalived
global_defs {
notification_email {
*****@qq.com
}
notification_email_from *****@qq.com
smtp_server smtp.qq.com
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.120
}
}
virtual_server 192.168.40.120 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.40.200 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

###Real-server

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

1
2
3
4
5
6
DEVICE=lo:0
BOOTPROTO=static
IPADDR=192.168.40.120
GATEWAY=192.168.40.2
NETMASK=255.255.255.255
ONBOOT=yes

vim /etc/sysctl.conf

1
2
3
4
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p
service network restart
route add -host 192.168.40.120 dev lo:0