最近公司网站访问又见瓶颈,为了缓解压力,决定用LVS+Keepalived来实现负载均衡.在前面的文章中已经写过了用NAT模式来实现负载均衡  ,而今天用的是DR模式,其实NAT跟DR模式,各有优缺点,根据实际情况来选择适合自己的。下面看下具体步骤以及注意事项。
拓扑图如下:

首先看下我用的系统,系统为CentOS6.2,64位系统,用getconf LONG_BIT,和uname -a都可以查看
[root@lvs-master src]# getconf LONG_BIT 
64 
[root@lvs-master src]# uname -a 
Linux lvs-master 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
然后分析下搭建这个LVS+Keepalived(DR)需要的关键步骤及注意事项,第一、DR模式主要是靠虚拟IP来实现,客户端访问服务器首先会找keeaplived服务器,然后由keepalived服务器调度找到真实机,最后真实机通过自己的虚拟IP直接返回给客户端。那么这里有个疑问了,为什么每一台机器上都有虚拟IP,而客户端访问却单单找keepalived?那是因为keepalived服务器在不停发出例如:我就你要找的IP的信号,所以客户端很容易发现自己需要访问的IP而找到keepalived服务器。这个可以通过日志来发现。那么我们就需要在除了keepalived服务器之外的每台真实机上建立一个虚拟IP。这里又有疑问keepalived服务器为什么不需要建立虚拟IP,那是因为keepalived会自己生成虚拟IP,所以没必要自己去建立。第二、要注意的就是popt-static-1.13-7.el6.x86_64.rpm这个包,不装这个包,安装ipvs的时候会报错。第三、keepalived安装的时候一定要指定内核,要不然keepalived启动后只有两进程,正常是三个。如果不指定内核即使keepalived启动了,keepalived也发现不了真实机。第四、就是一些零碎的配置。
123 [root@lvs-master src]# wget  
[root@lvs-master src]# wget  
[root@lvs-master src]# wget 
然后,在LVS主跟备份上安装
 [root@lvs-master src]# rpm -ivh popt-static-1.13-7.el6.x86_64.rpm 
[root@lvs-master src]# yum -y install kernel-devel make gcc openssl-devel libnl* popt* 
[root@lvs-master src]# ln -s /usr/src/kernels/2.6.32-220.13.1.el6.x86_64/ /usr/src/linux 
[root@lvs-master src]# tar -zxvf ipvsadm-1.26.tar.gz 
[root@lvs-master src]# cd ipvsadm-1.26/ 
[root@lvs-master ipvsadm-1.26]# make 
[root@lvs-master ipvsadm-1.26]# make install 
[root@lvs-master ipvsadm-1.26]# cd .. 
[root@lvs-master src]# tar -zxvf keepalived-1.2.2.tar.gz 
[root@lvs-master src]# cd keepalived-1.2.2/ 
[root@lvs-master keepalived-1.2.2]# ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-358.2.1.el6.x86_64/ 
[root@lvs-master keepalived-1.2.2]# make && make install 
[root@lvs-master keepalived-1.2.2]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
[root@lvs-master keepalived-1.2.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ 
[root@lvs-master keepalived-1.2.2]# mkdir /etc/keepalived 
[root@lvs-master keepalived-1.2.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ 
[root@lvs-master keepalived-1.2.2]# cp /usr/local/sbin/keepalived /usr/sbin/
在两台LVS上分别配置keepalived, vim /etc/keepalived/keepalived.conf 
[root@lvs-master src]# vim /etc/keepalived/keepalived.conf 
#! Configuration File for keepalived 
global_defs { 
router_id LVS_MASTER #网上资料说这个值也需要修改,具体不详,之前我们线上的主备就一直是一样的 ^ ^还是修改一下吧! 
            } 
##################第一部分################### 
vrrp_instance VI_1 { 
    state MASTER #LVS_Backup上修改成BACKUP 
    interface eth0 
    virtual_router_id 60 #默认51 主从都修改为60 
    priority 100 #LVS_Backup上修改成80 
    advert_int 1 
    authentication { 
    auth_type PASS 
    auth_pass 1111 
    } 
virtual_ipaddress { 
    192.168.10.100 
    } 
} 
##################第二部分################### 
virtual_server 192.168.10.100 80 { 
    delay_loop 6 
    lb_algo rr 
    lb_kind DR 
    nat_mask 255.255.255.0 
    persistence_timeout 50 
    protocol TCP 
 real_server 192.168.10.3 80 { 
    weight 1 
    TCP_CHECK { 
        connect_timeout 10 
        nb_get_retry 3 
        connect_port 80 
        } 
    } 
 real_server 192.168.10.4 80 { 
    weight 1 
    TCP_CHECK { 
        connect_timeout 10 
        nb_get_retry 3 
        connect_port 80 
        } 
    } 
}
