设为首页 收藏本站
查看: 934|回复: 0

[经验分享] 负载均衡高可用之LVS+Keepalived(DR/主备)+apache

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-9 09:10:07 | 显示全部楼层 |阅读模式
负载均衡高可用之LVS+Keepalived(DR/主备)+apache

介绍:

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。



实验环境:

四台机器分别安装centos6.3(本实验用的是虚拟机),两台做lvs转发器,分主和备,两个作为后端web服务器,五个ip。

名称
   

IP

LVS-MASTER
   

172.16.1.176

LVS-BACKUP
   

172.16.1.177

LVS-DR-VIP
   

172.16.1.195

WEB1-REALSERVER
   

172.16.1.178

WEB2-REALSERVER
   

172.16.1.179



安装完系统后执行yum groupinstall -y "development tools"



实验步骤:

①     在realserver主机上实行脚本realserver,为lo:0绑定VIP地址172.16.1.195,这步分别在二个web主机上172.16.1.178、172.16.1.179实施。这步提前做,是因为以后的过程中这一步是不会发生更改的。

1.  #vim /usr/local/sbin/realserver  

2.  #!/bin/bash  

3.  SNS_VIP=172.16.1.195

4.  . /etc/rc.d/init.d/functions  

5.  case "$1" in  

6.  start)  

7.         ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

8.         /sbin/route add -host $SNS_VIP dev lo:0

9.         echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  

10.       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

11.       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  

12.       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

13.       sysctl -p >/dev/null 2>&1  

14.       echo "RealServer Start OK"  

15.       ;;

16.stop)  

17.       ifconfig lo:0 down

18.       route del $SNS_VIP >/dev/null 2>&1  

19.       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  

20.       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

21.       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  

22.       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

23.       echo "RealServer Stoped"

24.       ;;

25.*)  

26.       echo "Usage: $0 {start|stop}"

27.       exit 1

28.esac  

29.exit 0

简单说明下上述脚本的作用:

1)vip(virtual ip)。直接路由模式的vip必须跟服务器对外提供服务的ip地址在同一个网段,并且lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个vip;

2)vip被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突;

3)echo这段的作用是抑制arp广播。如果不做arp抑制,将会有众多的机器向其他宣称:“嗨!我是奥巴马,我在这里呢!”,这样就乱套了。

②为二台lvs主机安装lvs+keepalived软件。安装lvs软件是必须做的,因为keepalived是运行在lvs之上的,因此lvs及keepalived必须装在一个系统里面。过程如下:

1.  #mkdir /usr/local/src/lvs

2.  #cd /usr/local/src/lvs

3.  #wget http://www.linuxvirtualserver.or ... ipvsadm-1.24.tar.gz

4.  #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/[李凯(Li1]  /usr/src/linux

5.  #tar zxvf ipvsadm-1.24.tar.gz

6.  #cd ipvsadm-1.24

7.  #make

8.  #make install

③编辑keepalived.conf文件,直接用keepalived实现负载均衡及高可用性。

a)Keepalved的安装

1.  a)Keepalved的安装

2.  #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

3.  #tar zxvf keepalived-1.1.15.tar.gz

4.  #cd keepalived-1.1.15

5.  #./configure

6.  #make

7.  #make install

将keepalived做成启动脚务,方便管理:

1.  #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

2.  #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

3.  #mkdir /etc/keepalived

4.  #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

5.  #cp /usr/local/sbin/keepalived /usr/sbin/

6.  #service keepalived start|stop





b)Keealived的配置

①分别在主从负载均衡服务器上配置keepalived.conf ,内容分别如下:

1.  ! Configuration File for keepalived

2.  global_defs {  

3.     notification_email {

4.           yuhongchun027@163.com

5.     }  

6.     notification_email_from sns-lvs@gmail.com

7.     smtp_server 127.0.0.1

8.     router_id LVS_DEVEL

9.  }  

10.vrrp_instance VI_1 {  

11.    state MASTER              

12.    interface eth0  

13.    virtual_router_id 51

14.    priority 100     

15.    advert_int 1

16.    authentication {

17.        auth_type PASS

18.        auth_pass 1111

19.    }  

20.    virtual_ipaddress {

21.        172.16.1.195   

22.    }  

23.}  

24.virtual_server 172.16.1.195 80 {  

25.    delay_loop 6                  

26.    lb_algo wrr                  

27.    lb_kind DR                  

28.    persistence_timeout 60         

29.    protocol TCP                 

30.    real_server 172.16.1.178 80 {

31.        weight 3               

32.        TCP_CHECK {

33.        connect_timeout 10        

34.        nb_get_retry 3

35.        delay_before_retry 3

36.        connect_port 80

37.        }

38.    }  

39.    real_server 172.16.1.179 80 {

40.        weight 3

41.        TCP_CHECK {

42.        connect_timeout 10

43.        nb_get_retry 3

44.        delay_before_retry 3

45.        connect_port 80

46.        }

47.     }  

48.}

1.  ! Configuration File for keepalived

2.  global_defs {  

3.     notification_email {

4.           yuhongchun027@163.com

5.     }  

6.     notification_email_from sns-lvs@gmail.com

7.     smtp_server 127.0.0.1

8.     router_id LVS_DEVEL

9.  }  

10.vrrp_instance VI_1 {  

11.    state BACKUP              

12.    interface eth0

13.    virtual_router_id 51

14.    priority 99     

15.    advert_int 1

16.    authentication {

17.        auth_type PASS

18.        auth_pass 1111

19.    }  

20.    virtual_ipaddress {

21.        172.16.1.195  

22.    }  

23.}  

24.virtual_server 172.16.1.195 80 {  

25.    delay_loop 6                  

26.    lb_algo wrr                  

27.    lb_kind DR                  

28.    persistence_timeout 60         

29.    protocol TCP                 

30.    real_server 172.16.1.178 80 {

31.        weight 3               

32.        TCP_CHECK {

33.        connect_timeout 10        

34.        nb_get_retry 3

35.        delay_before_retry 3

36.        connect_port 80

37.        }

38.    }  

39.    real_server 172.16.1.179 80 {

40.        weight 3

41.        TCP_CHECK {

42.        connect_timeout 10

43.        nb_get_retry 3

44.        delay_before_retry 3

45.        connect_port 80

46.        }

47.     }  

48.}





②分别在二台lvs机上启动servciekeepalived start就可实现负载均衡及高可用集群;keepalived.conf内容说明如下:

●全局定义块

1、email通知。作用:有故障,发邮件报警。

2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。

3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。

●VRRP定义块

1、同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?
2、实例组group。至少包含一个vrrp实例。
3、Vrrp实例vrrp_instance。实例名出自实例组group所包含的那些名字。

(1)实例状态state。只有MASTER和BACKUP两种状态,并且需要大写这些单词。其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态有BACKUP变换成MASTER;当失效的MASTER所在的系统恢复时,BACKUP从MASTER恢复到BACKUP状态。

(2)通信接口interface。对外提供服务的网络接口,如eth0,eth1.当前主流的服务器都有2个或2个以上的接口,在选择服务接口时,一定要核实清楚。

(3)lvs_sync_daemon_inteface。负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。

(4)虚拟路由标识virtual_router_id。这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。

(5)优先级priority。这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER的priority值为150,那么BACKUP的priority只能是140或更小的数值。

(6)同步通知间隔advert_int。MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。

(7)验证authentication。包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信。

4、 虚拟ip地址virtual_ipaddress。可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip必须与我们在lvs客户端设定的vip相一致!

●虚拟服务器virtual_server定义块

虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。

1、虚拟服务器virtual_server。这个ip来自于vrrp定义块的第“4”步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp端口的负载均衡功能。

(1)delay_loop。健康检查时间间隔,单位是秒。

(2)lb_algo。负载均衡调度算法,互联网应用常使用wlc或rr。

(3)lb_kind。负载均衡转发规则。一般包括DR、NAT、TUN3种,在我的方案中,都使用DR的方式。

(4)persistence_timeout。会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR转发模式,真实服务器有3个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了---登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。

(5)转发协议protocol。一般有tcp和udp两种。实话说,我还没尝试过udp协议类的转发。



、真实服务器real_server,也即服务器池。Real_server的值包括ip地址和端口号,多个连续的真实ip。

(1)权重weight,权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。

(2)Tcp检查tcp_check。

附注:以上就是lvs+keepalived的基本配置步骤,有兴趣的同学建议可做下lvs的1+2的基本架构实验,即不需要keepalived,采用单lvs的方式,其lvs_dr脚本如下

1.  #vim /usr/local/sbin/lvs-dr.sh  

2.         #!/bin/bash

3.         #website director vip.

4.         SNS_VIP=192.168.1.188

5.         SNS_RIP1=192.168.1.104

6.         SNS_RIP2=192.168.1.105

7.        ./etc/rc.d/init.d/functions

8.           logger $0 called with $1

9.           case "$1" in

10.         start)

11.         # set squid vip

12.         /sbin/ipvsadm --set 30 5 60

13.         /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up

14.         /sbin/route add -host $SNS_VIP dev eth0:0

15.         /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3

16.         /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1

17.         /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1

18.         touch /var/lock/subsys/ipvsadm >/dev/null 2>&1  

19.        ;;

20.stop)  

21.         /sbin/ipvsadm -C

22.         /sbin/ipvsadm -Z

23.         ifconfig eth0:0 down

24.         route del $SNS_VIP

25.         rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1  

26.         echo "ipvsadm stoped"

27.        ;;

28.status)  

29.         if [ ! -e /var/lock/subsys/ipvsadm ];then

30.                 echo "ipvsadm stoped"

31.                 exit 1

32.         else

33.                 echo "ipvsadm OK"

34.         fi

35.       ;;

36.*)  

37.         echo "Usage: $0 {start|stop|status}"

38.         exit 1

39.esac  

40.exit 0

测试

    1.      测试负载均衡

转发器:

                            spacer.gif



输入命令: watch "ipvsadm "

观看主备切换,由于两个web的权重相同,所以这里数字会交替增长



spacer.gif

在两个web服务器的 /var/www/html下分别建立index.html文件,用vim编辑,分别输入本机ip作为标识

spacer.gif

访问虚拟ip 172.16.1.195 刷新页面连个web的ip会交替变化,说明负载均衡构建已经启用。

spacer.gifspacer.gif

    2.    测试lvs转发器的主备切换

关闭主转发器172.16.1.176,模拟主lvs故障,观察backup是否启用



访问172.16.1.195,刷新页面发现两个web的ip交替变化,在backup上利用watch “ipvsadm” 说明backup在master故障后接管了转发工作。

spacer.gifspacer.gif

spacer.gif

如果master恢复,由于设置的master优先级比backup高,所以转发工作又会转到master上。注意keepalived最好设置成为开机启动。



测试完成

记住软链接必须要做
$ ln -s /usr/src/kernels/2.6.32-358.18.1.el6.x86_64 /usr/src/linux
$ tar -zxf ipvsadm-1.24.tar.gz
$ cd ipvsadm-1.24
$ make && make install
$ cd ..
$ yum install openssl-devel openssl popt-devel
$ tar -zxf keepalived-1.1.20.tar.gz
$ cd keepalived-1.1.20
$ ./configure --prefix=/ && make && make install



/sbin/ifconfig lo:1 172.16.1.195 netmask 255.255.255.255

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-148595-1-1.html 上篇帖子: LVS:keepalive实现ipvs高可用 下篇帖子: LVS-FULLNAT模式测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表