Lvs+keepalived的高可用负载均衡

Lvs+keepalived的高可用负载均衡群集

1 关键技术介绍

  1. 1 LVS
       LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
       LVS集群采用三层结构,三层主要组成部分为:
       1 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
       2 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
       3 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
       
       针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:
       1 轮叫(Round Robin)
       调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
       2 加权轮叫(Weighted Round Robin)
       调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
       3 最少链接(Least Connections)
       调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
       4 加权最少链接(Weighted Least Connections)
       在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
       5 基于局部性的最少链接(Locality-Based Least Connections)
       “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
       6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
       "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
       7目标地址散列(Destination Hashing)
       "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
       8 源地址散列(Source Hashing)
       "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
       
       LVS有三种转发类型:
    NAT模式 TUN模式 DR模式
    对服务器
    节点要求
    服务节点可以是任何操作系统 必须支持IP隧道模式,目前只有Linux 服务节点支持虚拟网卡设备,能够禁用设备的ARP响应
    网络要求
    拥有私有IP地址的局域网络 拥有合法IP地址的局域网或广域网 拥有合法IP地址的局域网,服务节点与均衡器必须在同一个网段
    通常支持节点数 支持10-20个服务节点,又均衡器的处理能力而定 较高,可以支持到100个服务节点 较高,可以支持到100个服务节点
    网关 均衡器极为服务器节点网关 服务节点同自己的网关或者路由器连接,不经过均衡器 服务节点同自己的网关或者路由器连接,不经过均衡器
    服务节点安全性 较好,采用内部IP,服务节点隐蔽 较差,采用公用IP地址,节点完全暴露 较差,采用公用IP地址,节点完全暴露
    IP要求 仅需要一个合法IP地址作为VIP 除VIP外,每个服务节点需拥有合法IP地址,可以直接路由至客户端 除VIP外,每个服务节点需拥有合法的IP地址,可以直接路由至客户端
    效率 一般 高 最高
  2. 2 KEEPALIVED
       keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
       健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
       Keepalived的设计目标是构建可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用来做双机热备。使用keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性,对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。

系统总体部署设计

vmware虚拟出4台主机,LVS服务器两张网卡,一桥接模式,一张仅主机模式,两台服务器都为仅主机模式。
   LVS_master的桥接网卡ip 为192.168.1.196,内网ip:10.0.0.49。
   lvs-backup:外网192.168.1.197,内网为::10.0.0.52。
   两台web服务器的ip为10.0.0.51,10.0.0.52.
   虚拟IP为192.168.1.198,虚拟网关为10.0.0.100
   系统版本:CentOS Linux release 7.3.1611 (Core)
   
   拓扑图如下所示:
在这里插入图片描述
系统的实现
【1】安装ipvsadm和keepalived
在LVS_master和LVS_backup两台机器上安装ipvsadm和keepalived
在这里插入图片描述在这里插入图片描述
注意:yum方式安装过程可能会因为进程号被占用而出现中断的问题。
解决:可开启两个终端,一个终端重新yum一次,另一个终端输入命令pgrep yum显示被中断的进程号,随即执行命令: kill -9 进程号 将进程杀死。
再yum clean all 清理掉yum缓存,接着 yum makecache 重新yum即可安装成功

【2】配置主从LVS服务器(所有机器开启转发、关闭内核安全)
a,开户路由转发功能
[root@localhost ~]# vim /etc/sysctl.conf
在这里插入图片描述
[root@localhost ~]# sysctl -p

b,关闭SELinux内核安全(改完需重启服务器);
[root@localhost ~]# vi /etc/sysconfig/selinux
在这里插入图片描述
c,还原真实部署环境,开启iptables防火墙
添加规则链,开放80端口,配置目的地址转换
(让外网用户能够访问局域网内不同的服务器)
[root@localhost ~]# ./iptables-lvs-nat.sh
在这里插入图片描述
d,lvs_master keepalived配置文件

[root@localhost keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_MASTER
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.198
        }
}
vrrp_instance LAN_GATEWAY {
        state MASTER
        interface ens37
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 111
        }
        virtual_ipaddress {
                10.0.0.100
        }
}
virtual_server 192.168.1.198 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
#    persistence_timeout 50
    protocol TCP
 
    real_server 10.0.0.51 80 {
        weight 1
        TCP_CHECK {
 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 10.0.0.52 80 {
        weight 1
        TCP_CHECK {
 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

}
   
e,lvs_backup keepalived配置文件

[root@localhost keepalived]# cat keepalived.conf
! Configuration File for keepalived
 
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_BACK
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.198
        }
}
vrrp_instance LAN_GATEWAY {
        state BACKUP
        interface ens37
        virtual_router_id 52
        priority 80
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 111
        }
        virtual_ipaddress {
                10.0.0.100
        }
}
virtual_server 192.168.1.198 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
#    persistence_timeout 50
    protocol TCP
 
    real_server 10.0.0.51 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 10.0.0.52 80 {
        weight 1
        TCP_CHECK {
 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

}
   
f,在两台LVS上运行keepalived服务
在这里插入图片描述
g,两台WEB服务平台搭建
1.安装提供Apache服务的软件包httpd,简单修改配置文件,设置开机启动服务
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
2.将两台WEB服务器的网关设置成10.0.0.100.
在这里插入图片描述
3.默认网站根目录为/var/www/html, 编写简单的HTML文件区分web1、web2
在这里插入图片描述
在这里插入图片描述
4.在两台服务器定义arp-_gnore和arp_announce内核参数
使本地ip地址根据决策做出相应应答
在这里插入图片描述
【3】结果
a,从局域网中的一台机器ping VIP 192.168.1.198可以ping通
在这里插入图片描述
b,在LVS——master查看
在脚本调用配置文件
在这里插入图片描述
在列表中添加一条虚拟服务器、两条real server记录,指定服务端口为80
并且指定虚拟服务器的调度算法为论叫调度(rr)
在这里插入图片描述
c,ens33有VIP,ens37下有虚拟网关
在这里插入图片描述
d,在WEB1中ping 虚拟网关可以ping通
在这里插入图片描述
e,在LVS_master,使用curl验证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【4】热备验证
1,关闭LVS_master
在这里插入图片描述
2,在LVS_backup查看
VIP和虚拟网关自动绑定到LVS_backup上
在这里插入图片描述
调度规则也应用在了backup上
   在这里插入图片描述
局域网上机器仍能正常访问
在这里插入图片描述
在这里插入图片描述
关闭web1中的web服务
[root@localhost ~]# systemctl stop httpd

集群中服务只剩下Web2了
在这里插入图片描述
开启Web1中的web服务
[root@localhost ~]# systemctl start httpd

集群中服务又恢复正常

[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.198:80 rr
-> 10.0.0.51:80 Masq 1 0 0
-> 10.0.0.52:80 Masq 1 0 0

猜你喜欢

转载自blog.csdn.net/weixin_45138093/article/details/106817012