虚拟机搭建LVS+keepalived DR

版权声明:有疑问可加微信15216874307 https://blog.csdn.net/Doudou_Mylove/article/details/82799556

LVS虚拟服务器负载均衡高可用搭建


其实一开始想准备了四台真实腾讯云云主机来测试的,最后还是由于VIP的问题,转到虚拟机上,VIP在真实服务器上不能像虚拟机那样设置成跟你的主机IP一致就可以,好像需要一个公网IP才行,还有待挖掘!

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+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 {
     [email protected]                  #报警邮箱,可注释掉
   }
   notification_email_from [email protected]
   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服务器。

猜你喜欢

转载自blog.csdn.net/Doudou_Mylove/article/details/82799556
今日推荐