LVS+Keepalived+Nginx

一、简述

1.Keepalived简介
   Keepalived是Linux下一个轻量级别的高可用解决方案,高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成;      
   Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点,后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程;
   
VRRP协议与工作原理
   在现实的网络环境中,主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议,熟悉网络的学员对VRRP协议应该不陌生,它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信,这其中涉及到两个概念:物理路由器和虚拟路由器;
   VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收 MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的;
     每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送 的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来 监控Master运行状态,一一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是 就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可 用性;
    
Keepalvied的工作原理
   上面我们介绍了Keepalived通过VRRP实现高可用性的工作原理,而Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控以 及故障隔离,下面我们介绍一下Keepalived对服务器运行状态和故障隔离的工作原理;
Keepalived工作在TCP/IP 参考模型的 三层、四层、五层,也就是分别为:网络层,传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制如下:

网络层: 我们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP,在网络层 Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果 某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点;

传输层: 提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP 的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口 连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到 这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉;

应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义 Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否 允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除;
      
2.LVS简介
   LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
   三种模式讲解
1、基于NAT的LVS模式负载均衡
   NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。
LVS+Keepalived+Nginx_第1张图片
2、基于TUN的LVS负载均衡
   在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。
LVS+Keepalived+Nginx_第2张图片
3、基于DR的LVS负载均衡
   DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。
   LVS+Keepalived+Nginx_第3张图片
LVS常用调度算法
1.轮询调度
   轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

2.加权轮询调度
   加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

3.最小连接调度
   最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

4.加权最小连接调度
   加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

二、部署

1.节点信息

IP 服务
192.168.200.100 Nginx
192.168.200.110 Nginx
192.168.200.120 Lvs+keepalived
192.168.200.130 Lvs+keepalived

2.安装Nginx(两台同样的操作)

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# yum -y install gcc* zlib zlib-devel pcre-devel openssl openssl-devel
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar xf nginx-1.15.10.tar.gz -C /opt/
[root@localhost ~]# cd /opt/nginx-1.20.2/
[root@localhost nginx-1.15.10]# ./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost nginx-1.20.2]# make && make install
[root@localhost ~]# cd /opt/nginx/sbin/
[root@localhost sbin]# ./nginx
[root@localhost sbin]# ps -ef| grep nginx
root 9855 1 0 20:19 ? 00:00:00 nginx: master process ./nginx
nginx 9856 9855 0 20:19 ? 00:00:00 nginx: worker process

修改Nginx HTML文件,便于后期测试区分;
LVS+Keepalived+Nginx_第4张图片
LVS+Keepalived+Nginx_第5张图片

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.200.99
NETMASK=255.255.255.255
LVS+Keepalived+Nginx_第6张图片
[root@localhost ~]# systemctl restart network

2.安装Keepalived+Lvs

[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf_bak
[root@localhost keepalived]# vi keepalived.conf (Master节点conf文件)

global_defs {    
router_id LVS_Master }  
  
vrrp_instance VI_1 {
state MASTER               #指定instance初始状态,实际根据优先级决定.backup节点不一样
interface ens33             #虚拟IP所在网
virtual_router_id 51       #VRID,相同VRID为一个组,决定多播MAC地址
priority 100               #优先级,另一台改为90.backup节点不一样
advert_int 1               #检查间隔
authentication {
    auth_type PASS         #认证方式,可以是pass或ha
    auth_pass 1111         #认证密码
}
virtual_ipaddress {
    192.168.200.99         #VIP
}
 }   
 		 virtual_server 192.168.200.99 80 {
delay_loop 1               #服务轮询的时间间隔
lb_algo rr                #加权轮询调度,LVS调度算法 rr|wrr|lc|wlc|lblc|sh|sh
lb_kind DR                 #LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段
nat_mask 255.255.255.0
persistence_timeout 0     #会话保持时间
protocol TCP              #健康检查协议

## Real Server设置,80就是Nginx连接端口
real_server 192.168.200.100 80 {
    weight 1  ##权重
    TCP_CHECK {
        connect_timeout 3
        connect_port 80
        delay_before_retry 3
        retry 3
    }
}
real_server 192.168.200.110 80 {
    weight 1
    TCP_CHECK {
        connect_timeout 3
            connect_port 80
        retry 3
        delay_before_retry 3
   				 }
		} 
}

拷贝Keepalived的conf文件到从节点,并修改从节点的节点身份与优先级

[root@localhost keepalived]# scp keepalived.conf 192.168.200.110:/etc/keepalived/

       vrrp_instance VI_1 {
        state BACKUP               #指定instance初始状态,实际根据优先级决定.backup节点不一样
        interface ens33             #虚拟IP所在网
        virtual_router_id 51       #VRID,相同VRID为一个组,决定多播MAC地址
       priority 90               #优先级,另一台改为90.backup节点不一样
advert_int 1               #检查间隔
authentication {
    auth_type PASS         #认证方式,可以是pass或ha
    auth_pass 1111         #认证密码
	}
virtual_ipaddress {
    192.168.200.99         #VIP
  	 } 
}
############相同部分省略!!!!!

conf文件修改完后依次重启服务后在客户端进行验证!

三、测试

1.浏览器访问VIP
LVS+Keepalived+Nginx_第7张图片
LVS+Keepalived+Nginx_第8张图片
2.模拟故障

停止Keepalived Master节点,浏览器重新访问。
[root@localhost keepalived]# systemctl stop keepalived
LVS+Keepalived+Nginx_第9张图片
LVS+Keepalived+Nginx_第10张图片

你可能感兴趣的:(Linux,lvs,nginx,网络)