【转贴】lvs负载均衡+keepalived高可用性配置详解

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。 
------------------------------------------------------------------------------------------------------------------------------------------------------------------

一些名词解释 (利用下面的拓扑来理解名词)

    1; VIP: Virtual IP(虚拟ip, 主要是提供用户进行访问的);

    2; RIP: REAL SERVER IP(真实服务器ip, 主要是提供服务的主要的服务器有http服务器);

    3; CIP: CLIENT IP(客户端ip, 用来访问虚报ip);

    4; DIP: DEVICE IP(设备的ip, 作为REAL SERVERGateway, 这个最好也是用虚拟ip, 这个ip是在nat模式下才使用配置nat模式最好使用两张网卡);

    5; DIRECTOR: 调度器(是指安装ipvsadm的那台机器);

    6; RS: REAL SERVER(真实的服务器里面有安装服务器比如web, mail等等;)

        

: lvs的三种模式(按照出现的时间顺序来排列);

    1; nat模式 (回复包要经过DIRECTOR, 这种模式最早出现最成熟但是调度器是瓶颈,所以这个模式现在比较少用; tunneling模式和直接路由模式是后来为了解决某些问题而出现的);             

    2; tunneling模式;(回复包不需要经过DIRECTOR, 这种模式只要调度器和真实服务器的路由可达即可所以应用起来比较广回复包的时候直接通过各自的路由器出去所以比较方便配置只要realserver支持tunneling即可)

    3; 直接路由模式;(回复包不需要经过DIRECTOR, 这种模式要求RSDIRECTOR中间不能用路由器隔开回为这个模式只改变目标的mac地址)

: lvs的十种算法;

    1; 四种静态算法(假设服务器为a, b, c! 后面的数字代表服务器的权重);

1: rr: abc, abc, abc

2: wrr: a3b2c1, aababc aababc

           3: dh: 目标hash;(根据目标地址选择服务器)

4: sh: hash;(根据源地址选择服务器)

    2; 六种动态算法;

1: lc: ci最小, (ciestablished状态的数量)处理能力比较强的计算机就一直回复;

2: wlc: ci/wi最小, (wiweight的值)针对处理能力强的计算机weight调大一点;

3: lblc: 基于wlc, cache, 如果有一台已经跟服务器在连接那就一直使用这一台;如果负载太重(ci>wi), wlc选择一台就一直这台;

4: lblcr: 基于lblc, 只是cache集群;如果每台负载都过重, wlc选一台如果一台没有用, remove;

5: sed: (ci+1)/wi最小;一开始就把weight用上;

6: nq: 基于sed选一台如果没过载一直就这台有过载再使用sed再选一台;(ci>wi)

需要实现的目标;

1; 用户访问192.168.2.149, 192.168.2.149把服务请求一会儿转发到192.168.2.31, 一会儿转发到192.168.2.32;

    DIRECTOR: 192.168.2.23(VIP 192.168.2.149)

    REAL SERVERS: 192.168.2.31(lo:0 192.168.2.149)

à        把上面的需要用三种模式各实现一遍调试算法使用wrr;

2; 使用两台机器192.168.2.23(DIRECTOR MASTER)192.168.2.31(DIRECTOR BACKUP)作为调试器使用192.168.2.20, 192.168.2.21, 192.168.2.22, 192.168.2.31, 192.168.2.32作为真实服务器;

    DIRECTOR: 192.168.2.23, 192.168.2.31(VIP 192.168.2.149)

    REAL SERVERS: 192.168.2.21, 192.168.2.20, 192.168.2.22, 192.168.2.31, 192.168.2.32(lo:0 192.168.2.149);

第一个目标的实现;

1; DIRECTOR的配置;

1; 安装lvs软件ipvsadm; (确认有ip_vs模块使用lsmod | grep ip_vs)

apt-get install ipvsadm

    2; 配置虚拟ip;

       ifconfig eth1:1 192.168.2.149 netmask 255.255.255.255 up

       route add –host 192.168.2.149 dev eth1:1

    3; 配置负载均衡(使用dr模式调度算法为wrr, weight统一配置成5);

       ipvsadm –A –t 192.168.2.149:80 –s wrr

       ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.31:80 –g –w 5

       ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.32:80 –g –w 5

    2; 真实服务器的配置(要注意arp问题分别在192.168.2.31192.168.2.32上配置);

       1; 配置虚拟ip;

           ifconfig lo:0 192.168.2.149 netmask 255.255.255.255 up

           route add –host 192.168.2.149 dev lo:0

       2; 抑制arp广播;

           echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

           echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter

           echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

           echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

           echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

           echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

第二个目标的实现;

1; DIRECTOR的配置(上面那个主要实现的是负载均衡这个主要实现的高可用性的配置这个是在192.168.2.23上的配置, 192.168.2.31只需要改变两个地址即可下面有注释);

    1; 高可用性软件的安装keepalived;

        apt-get install keepalived

       2; keepalived主要的配置文件如下(keepalived.conf)

           ! configuration file for keepalived

global_defs {

        notification_email{

                361589194@qq.com

        }

        notification_email_from 361589194@qq.com

        smtp_server smtp.163.com

        router_id lvs_director #邮件通知的标识, keepalived的日志文件在/var/log/syslog, 可以在这个文件查看状态即可;

}

vrrp_instance V1{

        state MASTER #192.168.2.31配置为BACKUP

        interface eth1

        lvs_sync_daemon_interface eth1

        virtual_router_id 51   #虚拟路由的标识必须与BACKUP一样;

        priority 150 #192.168.2.31配置为100(一般来说要小t50);

        advert_int 5

        authentication {

                auth_type PASS

                auth_pass 1111

        }

        virtual_ipaddress {

                192.168.2.149

                 }

}

virtual_server 192.168.2.149 80 {

        delay_loop 10  #ping的超时时间;

        lb_algo wrr

        lb_kind DR

        #persistence_timeout 10 #这个是配置持久性连接的如果配置这个那要预防单台的突发性连接;

        protocol TCP

        real_server 192.168.2.20 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10 #检测80的端口的超时时间;

                        nb_get_retry 3 #重试次数

                        delay_before_retry 3 #重试的延时

                        connect_port 80

                }

        }

        real_server 192.168.2.22 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

           delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.21 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.30 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.32 80 {

                       weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.2.32 80 {

                weight 100

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

}

       3; 启动keepalived;

           /etc/init.d/keepalived restart

    2; 真实服务器的配置与上面lvs的配置一样每台都要配置;

配置lvs或者lvs+keepalived需要注意的问题;

   1; 使用client机器ping一下虚拟ip(ping 192.168.2.149), 使用arp –n查看192.168.2.149mac地址必须与调度器的mac地址一样如果不一样那就是真实服务器的欺骗了交换机调度器就失去了作用;

    2; tunnel模式的配置需要在真实服务器配置tunnel接口地址;

       ifconfig tunl0 192.168.2.149 netmask 255.255.255.255 up(同时如果在同一个局域网里面测试也要预防arp欺骗)

    3; nat模式下真实服务器基本不需要配置什么只需要把网关指向DIP即可;

作者: whzhuang

日期: 2013/4/20

版本: first release

参考网站:

1; 51ctolvs标签推荐博客; http://blog.51cto.com/tagindex.php

2; lvs的英文官方网站; http://www.linuxvirtualserver.org/

3; lvs的中文官方网站http://zh.linuxvirtualserver.org/

4; arp问题的解决(教授亲自出手指点); http://zh.linuxvirtualserver.org/node/225

4; lvs初学必看http://os.51cto.com/art/201202/319979.htm

原文地址:https://www.cnblogs.com/AloneSword/p/3034863.html