LVS+keepalived DR

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

技术
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器.
集群采用三层结构
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

调度器工作原理
调度器是服务器集群系统的唯一入口点,它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。
在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。因为所有的操作都是在Linux操作系统核心空间中完成的,它的调度开销很小,所以它具有很高的吞吐率。服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。

意义(宗旨)
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
很好的可伸缩性
很好的可靠性
很好的可管理性

LVS三种工作模式

1、NAT模式-网络地址转换
通过网络地址转换的方法来实现调度,客户端请求目的为VIP,LB根据调度算法决定发送到后端的RS,这个过程中LB会把客户端发送的请求目的由VIP改成后端真实服务器(RS)的IP,真实服务器响应完毕再把响应后的数据包发送给LB(NAT模式下我们需要把RS的默认路由设置为LB服务器),LB接收到响应包后再改成VIP发送给客户端.
缺点:请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈;
优点:NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。只需要在LB上配置一个公网IP地址就可以了。
2、TUN模式-隧道模式
基于NAT模式的缺点,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端(客户端请求目的为VIP,LB接收到客户请求包,进行IP Tunnel封装发送给RS解开IP Tunnel包头信息,RS得到客户的请求包并进行响应处理,)。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址(源IP地址还是VIP地址)发送给客户不用经过LB服务器。
3、DR模式-直接路由模式
DR模式是通过改写请求报文的目标MAC地址(客户端请求目的为VIP,LB接收到客户请求包,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送,真实服务器响应请求之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。),将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
DR模式是互联网使用比较多的一种模式。
DR模式小结:RS主机需要绑定VIP地址在LO接口上,由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务,负载均衡器的网卡必须与物理网卡在一个物理段上。

这里我们只演示DR模式.

环境准备

lvs+keepalived最少虚拟四台虚拟机
DR-Master:192.168.20.130
DR-Backup:192.168.20.131
RS-Node1:192.168.20.132
RS-Node2:192.168.20.133
VIP:192.168.20.134

以上四台都用虚拟机测试,全部关闭防火墙service iptables stop.

开始搭建

两台DR安装keepalived和ipvsadm
yum -y install keepalived ipvsadm

注意:如果只做负载均衡只安装ipvsadm就够了,keepalived是用来做高可用的.

两台DR配置keepalived.conf文件
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
     benngcc@163.com                  #报警邮箱,可注释掉
   }
   notification_email_from benngcc@163.com
   smtp_server 192.168.20.130        #这里一定要真实IP
   smtp_connect_timeout 30
   router_id localhost              #通常为hostname,但不一定非得是
}
vrrp_instance VI_1 {               #vrrp实例定义部分  
    state MASTER                  #设置lvs的状态,MASTER和BACKUP两种,必须大写
    interface eth0                #设置对外服务的接口
    virtual_router_id 51    #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
    priority 150              #定义优先级,数字越大优先级越高
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {                #设置验证类型和密码
        auth_type PASS             #主要有PASS和AH两种
        auth_pass 1111        #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {
        192.168.20.134                 #VIP,可以写多个,每行一个
    }
}
virtual_server 192.168.20.134 80 {        #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                             #健康检查时间间隔
    lb_algo rr                                #负载均衡调度算法
    lb_kind DR                                 #负载均衡转发规则
    nat_mask 255.255.255.0
    persistence_timeout 0                #设置会话保持时间,对动态网页非常有用
    protocol TCP                      #转发协议,TCP和UDP两种
    real_server 192.168.20.132 80{  #配置服务器节点1,需要指定real server的真实IP地址和端口
        weight 1                      #设置权重,数字越大权重越高
        TCP_CHECK {
            connect_port    80          #连接端口,要和上面的保持一致
            connect_timeout 3           #连接超时为10秒
            nb_get_retry 3              #重连次数
            delay_before_retry 3       #重试间隔
        }
    }
    real_server 192.168.20.133 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

从DR与主DR的配置文件唯一不同的地方如下两处:
state BACKUP        #(从DR要写成BACKUP)
priority 100        #(从DR优先级要比主DR数字小)

#注意:这个配置还可以写检测脚本来代替.

两台DR启动keepalived
/etc/init.d/keepalived start

两台RS安装httpd,分别给主页面作一个不同的标识便于测试
yum -y install httpd
echo "node1" >>/var/www/html/index.html
echo "node2" >>/var/www/html/index.html

两台RS编写如下脚本,此脚本用于节点服务器绑定 VIP
vim /lvs/RS.sh

#!/bin/bash
#description:start realserver
vip=192.168.20.134
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start Realserver"
        /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
        echo "Stop Realserver"
        /sbin/ifconfig lo:0 down
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
        echo "Usage: $0 (start | stop)"
exit 1
esac

两台RS分别执行上面写好的脚本
bash /lvs/RS.sh

查看VIP是否绑定成功

两台RS启动httpd
service httpd start

测试
浏览器输入VIP地址:http://192.168.20.134
刷新浏览器循环呈现node1和node2表示OK.

关掉主DR的keepalived查看VIP是否漂移到从DR,浏览器访问还正常表示OK.

注意:nginx用yum安装需要先安装nginx专用的yum源
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
再安装nginx: yum -y install nginx
启动:service nginx start

注意:nginx替换httpd浏览器访问的时候会有一个会话保持的现象,就是一段时间里初次访问到的节点就会一直都是此节点.

yum安装httpd的主页面目录:/var/www/html/index.html
yum安装nginx的主页面目录:/usr/share/nginx/html/index.html

总结:
当 MASTER 服务器无法提供服务时,VIP 会在 MASTER 上自动移除,BACKUP 服务器会提升为 MASTER 状态,绑定 VIP 、接管服务。
当 MASTER 修复加入网络后,会自动抢回 VIP ,成为 MASTER 身份。
当后端提供服务httpd/nginx服务挂起时,会自动切换至其它httpd/nginx服务器。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小数苗小数苗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值