Lvs+vrrp实现的功能原理及配置实验集合——共2个单服务案例、2个合体案例

Lvs+keepalived实现负载均衡高可用

前言

在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡,当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,因此需要引入其他的软件来实现负载均衡服务的高可用。本文就介绍了一种基于 LVS+Keepalived 的方式,来实现高可用 Web 集群。

一、LVS介绍

一)概念

Cluster,又称为集群、群集,由多台主机构成,但对外只表现为一个整体。

二)群集的类型

负载均衡(Load Balancer)群集,简称为LB,以提高响应能力,尽可能处理更多的访问请求,减少延迟为目标。获得高并发,高负载的整体性能。

高可用(High Available)群集,简称为HA,尽可能的减少中断时间为目的,保证服务的连续性,达到高可用性的效果。故障切换,双机热备,多机热备都是高可用性群集

高性能运算(High Performance Computer)群集。

三)负载均衡的结构

第一层,负载调度器(Load Balancer或Director),占有群集的IP地址(VIP,虚拟的IP地址)。

第二层,服务器池(Server Pool),占有真实的IP地址,RIP(real ip)。

四)负载均衡的工作模式

  • 地址转换(NAT)模式

    调度器和web服务器们于同一个局域网,调度器即NAT服务器,有两块网卡,作为内网网关,转发用户请求和服务器响应。真正的服务器被NAT隐藏起来,安全性较高。

  • IP隧道(TUN)模式

    调度器和web服务器分布在互联网上不同的位置,调度器和服务器通过IP隧道连接。客户端请求由调度器转发给服务器,服务器响应直接转发给客户端(不再经调度器)。为了IP地址一致,也需要服务器以调度器的IP地址来响应。

  • 直接路由(DR)模式

    调度器和web服务器们于同一个局域网。客户端将请求发给调度器,调度器将请求发给web服务器,web服务器将响应直接发给客户机。要求服务器有多个IP,除了自己的局域网IP外,还要有与调度器共享 的集群IP。

以上工作模式中,安全性依次降低,但性能依次升高。

五)LVS虚拟服务器

1.概念

Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统,是针对linux内核的负载均衡解决方案。

2.使用

modprobe ip_vs

使用LVS功能需要加载ip_vs模块。默认情况下,linux自动加载该模块。ip_vs是LVS的核心模块,而ipvsadm是用户空间的ip_vs管理工具。

3.LVS负载调度算法

LVS负载调度算法即转发用户请求的方法。

  • 轮询(Round Robin)

  • 加权轮询(Weighted Round Robin)

  • 最少连接(Least Connections)

  • 加权最少连接(Weighted Least Connections)

  • ...

LVS支持8种调度算法。

二、Keepalived介绍

 一)功能

Keepalived起初是为LVS设计的一款健康检查工具 ,专门用来监控集群系统中各个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的。

总结:作用

1、支持节点健康状态检查(Health Checking) 健康检查 2、支持故障自动切换(Failover) 故障切换 官方网站:Keepalived for Linux

二)工作原理

keepalived的热备方式基于VRRP协议,采用一主多备方式,即一个master主机,多个backup主机,多个主机共用同一个虚拟IP地址,但优先级不同,同一时间只有一个主机在运行。主备设备之间可以相互监测状态,一但发现主设备故障,则备用设备根据优先级选举出新的master主机,虚拟IP也由故障主机漂移到新的master模式的主机。

实现安装

安装LVS高负载

一)安装工具ipvsadm

1、安装,在调度器上安装用户空间工具。

yum -y install ipvsadm

2、ipvsadm命令

1)查看版本号

ipvsadm -v

2)帮助

ipvsadm --help|more

二)创建虚拟服务器
1.增加虚拟服务器

ipvsadm -A -t 172.16.16.172:80 -s rr

创建一台虚拟服务器,-t后跟群集IP地址,-s(schedule)指定对于该服务器调度算法,
rr(Round Robin)为轮询调度。
-t,tcp,可以是-u 即udp,虚拟服务器支持的协议。
2.将真实服务器加入到群体

ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1

ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1

ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1

-r (real)跟真实服务器IP地址,-m(masquerade)表示采用NAT模式(DR模式-g),-w 1 表示给的权重。

调度类型:

rr = 轮询 ​ wrr = 加权轮询 ​ lc = 最少链接 ​ wlc = 加权最少链接

集群访问模式

-g = DR模式

-m = NAT模式

-i = TUN模式 ​ -w = 设置权重(权重为0表示暂停节点)

3.查看配置

ipvsadm -ln

  注:-l列出vs配置列表,n以数字方式 显示IP和端口号。
4.删除群集中的真实服务器

ipvsadm -d -r 192.168.7.23:80 -t 172.16.16.172:80

5.保存配置

ipvsadm-save > /etc/sysconfig/ipvsadm #将内存中的规则存盘

6.删除群集

ipvsadm -D -t 172.16.16.172:80

7.恢复配置

ipvsadm -restore < /etc/sysconfig/ipvsadm

案例1—LVS—NAT群集配置

一)应用要求

LVS调度器作为Web服务器池的网关

使用轮询(rr)调度算法

二)环境说明

1、调度器两块网卡,外网网卡采用仅主机模式与互联网用户主机相连接。互联网用户主机采用真机模拟。

2、调度器与内网交换机相连接内网网卡采用NAT,与两台网卡也采用NAT的web服务器相连接。

三)LVS—NAT群集配置
1、Web服务器的配置

1)配置IP和默认网关指向192.168.6.10。

2)安装httpd,并配置站点。为两台服务器创建首页,192.168.6.11服务器首页内容为“1111”,192.168.6.12服务器首页内容为“2222”。

2、LVS调度器的配置

1)配置两块网卡,并为内ens33、外网ens36网卡配置IP地址,保证其与内网两台服务器及互联网客户机的连通性。

关闭防火墙,selinux

2)开启系统路由功能

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

应用配置:sysctl -p

3).修改ipvsadm配置文件

vim /etc/sysconfig/ipvsadm-config

IPVS_SAVE_ON_STOP="yes"   #在停止服务时保存lvs策略,默认是no
IPVS_SAVE_ON_RESTART="yes" #在重启服务时保存lvs策略,默认是no

4)设置ipvsadm开机自启,并设置重启服务器策略不会丢失

touch /etc/sysconfig/ipvsadm

systemctl start ipvsadm && systemctl enable ipvsadm

5)配置LVS-NAT策略

a.创建lvs虚拟服务器群集:

ipvsadm -A -t 192.168.227.10:80 -s rr # 群集IP:192.168.227.10,调度类型:rr.

b. 向服务器群集中添加真实服务器:

ipvsadm -a -t 192.168.227.10:80 -r 192.168.6.11:80 -m

ipvsadm -a -t 192.168.227.10:80 -r 192.168.6.12:80 -m

c.验证配置:

ipvsadm -ln

3、结果验证

访问http://192.168.227.10,并验证群集分配情况。注意访问中及时清除浏览器缓存。

访问结果说明:用户访问192.168.227.10时,网页内容交替显示11111和2222。

案例2—构建LVS—DR集群

一)应用要求
  • LVS调度器只作为Web访问入口

  • Web访问出口由各节点服务器分别承担

二)环境说明

1、群集IP为:192.168.6.150。

2、调度器仅需一块网卡,需要有一个物理接口ens33和一个逻辑接口ens33:0。

3、为各web服务器创建VIP为集群IP的逻辑接口lo:0。

4、以局域网客户机192.168.6.22来模拟互联网用户。

三)配置步骤
1、调度器配置

1)配置IP地址:192.168.6.150。

2)创建、修改配置逻辑接口。

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-ens33:0 #复制产生逻辑接口ens33:0。

vim ifcfg-ens33:0

#修改以下配置,删除uuid,其他配置项不用修改
IPADDR=192.168.6.150
NETMASK=255.255.255.255
DEVICE=ens33:0
NAME=ens33:0

ifup ens33:0 #激活逻辑接口配置

3)调整/proc内核参数,关闭重定向响应

vim /etc/sysctl.conf #linux可以在不关机不重启的情况下调整内核参数。

文件最后添加以下内容:

    net.ipv4.conf.all.send_redirects=0      #关闭ICMP重定向
    net.ipv4.conf.default.send_redirects=0
    net.ipv4.conf.ens33.send_redirects=0

sysctl -p #配置立即生效。

4)配置LVS-DR群集策略

a.清除原有设置:

    查看原有设置:
    ipvsadm -ln
    清除原有设置:
    ipvsadm -D -t IP:80  或者 ipvsadm -C

b.创建新的群集:

    ipvsadm -A -t 192.168.6.150:80 -s rr        #创建虚拟服务器或群集
    ipvsadm -a -t 192.168.6.150:80 -r 192.168.6.11 -g
    ipvsadm -a -t 192.168.6.150:80 -r 192.168.6.12 -g
    #将真实服务器加入到集群中,-g表示采用DR直接路由模式下。      
2、web服务器配置

1)配置群集接口lo:0(web服务器上的配置)

cp /etc/sysconfig/network-scripts/ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

       DEVICE=lo:0
       IPADDR=192.168.6.150
       NETMASK=255.255.255.255
       # If you're having problems with gated making 127.0.0.0/8 a martian,
       # you can change this to something else (255.255.255.255, for example)
       ONBOOT=yes
       NAME=loopback

ifup lo:0

2)调整内核参数,关闭ARP响应

vim /etc/sysctl.conf

内容底部添加以下内容:

    net.ipv4.conf.all.arp_ignore=1 #只回答目标IP地址是来访网络接口本地地址的ARP查询请求
    net.ipv4.conf.all.arp_announce=2 #忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
    net.ipv4.conf.default.arp_ignore=1 #忽略arp
    net.ipv4.conf.default.arp_announce=2
    net.ipv4.conf.lo.arp_ignore=1 #忽略arp
    net.ipv4.conf.lo.arp_announce=2

sysctl -p

3)添加到群集IP地址的本地路由记录

route add -host 192.168.6.150 dev lo:0

vim /etc/rc.local #开机时自动执行

route add -host 192.168.6.150 dev lo:0 #添加一条到群集IP主机地址的路由,dev表示经过的接口。

4)配置并启用httpd服务

systemctl start httpd

web1上执行 echo "web1" > /var/www/html/index.html

web2上执行 echo "web2" > /var/www/html/index.html

3、测试

调度服务器无法访问负载均衡VIP。需要使用客户端。

浏览器访问 http://192.168.6.150

安装keepalived

一)安装keepalived依赖包

yum -y install gcc gcc-c++ openssl-devel libnl libnl-devel

libnl核心库提供了网络连接所需要的基础函数,用于处理socket的链接和断开、数据收发、消息创建分析,提供用户可定制接收状态机,并提供一种抽象的数据类型框架,用于简化网络连接协议对象的实现。

二)安装keepalived

1、解压包keepalived-2.2.2.tar.gz。

tar xf keepalived-2.2.2.tar.gz -C /usr/src

cd /usr/src/keepalived-2.2.2/

2、配置并安装

        ./configure --prefix=/usr/local/keepalived --sysconfdir=/etc
        make -j 8 && make install
三)安装后设置

1、复制开机控制脚本

cp /usr/src/keepalived-2.2.2/keepalived/etc/init.d/keepalived /etc/init.d/keepalived

2、启动服务

systemctl start keepalived.service

3、设置开机启动

systemctl enable keepalived.service

四)配置文件keepalived.conf内容

!开始的行为注释

global-defs #全局设置

vrrp_instance #热备实例设置

virtual_server #虚拟服务器设置 ipvsadm -A -t iP:80 -s rr

real_server #真实服务器设置 ipvsadm -a -t ip:80 -r ip:80 -g

/etc/keepalived/samples/ #样例文件

实例1—双机热备份

环境说明:两台主机IP分别为192.168.3.33,192.168.3.34,漂移IP地址:192.168.3.200,客户机IP为192.168.3.20(这里我们采用了真机),三台主机采用桥接模式连接。

一)服务器1配置

1、修改配置文件:

        global_defs{
          router_id node1   #服务ID
        }
        vrrp_instance VI_1 {
            state MASTER    #一个热备份组只能有一台master
            interface ens33 #承载VIP地址的网卡
            virtual_router_id 51    #VRRP组名,可以随意指定,但两个节点必须一致
            priority    100             #0-255,数值越大,优先级越高。
            advert_int  1               #心跳监测时间
            authentication  {       #认证类型,两个节点必须一致
               auth_type PASS       #密码认证
               auth_pass 1111       #认证共享密码
            }
            virtual_ipaddress{  #漂移IP地址
                192.168.3.200   
            }
        }

2、调整内核参数,关闭重定向响应

vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0
二)服务器2配置

1、安装keepalived。

2、安装后设置。

3、修改配置文件:

        global_defs{
          router_id node2   #服务ID
        }
        vrrp_instance VI_1 {
          state     BACKUP   #备份
          priority  90      #在一个热备份组各主机的优先级不能相同。
        }

4、调整内核参数,关闭重定向响应

5、测试验证:

systemctl restart keepalived.service

iptables -F

1)在两台服务器上查看漂移IP:

ip a

2)ping -t 192.168.3.200

3)在192.168.3.33上停止keepalived,查看客户机上ping命令变化。并在两台主机上查看漂移IP地址的变化。

ip a

4) 在主机192.168.3.33上开启keepalived,再次使用ip a在两台主机上查看漂移动地址变化。

案例2—LVS+HA群集

实验目标:负载均衡+高可用群集

  • LVS调度器实现双机热备份。

  • LVS+keepalived能够管理服务器池,自动隔离失效节点。

  • LVS采用DR模式

  • 在两台web服务器上首页文件:web1的index.html内容为192.168.3.35,web2的index.html内容为192.168.3.36。

一)LVS+HA调度组服务器配置:

master,backup服务器配置

1)安装keepalived
2)安装后设置
3)在上述(安装keepalived实例1)配置基础之上修改配置文件:
virtual_server 192.168.3.200 80 {   #漂移IP
    delay_loop 6    #每隔6秒查询realserver状态
    lb_algo rr      #lvs算法
    lb_kind DR      #lvs工作模式
    protocol TCP    #用TCP协议检查realserver状态
​
    real_server 192.168.3.35 80 { #web网站真实IP
        weight 1    #权重
        TCP_CHECK{
            connect_port 80
            connect_timeout 3   #3秒无响应超时
            nb_get_retry 3      #失败重试次数
            delay_before_retry 3    #失败重试的间隔时间
        }
    }
    real_server 192.168.3.36 80 {
        weight 1
        TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
可选参数:
  virtual_server
persistence_timeout 10  #这个参数的意义是保持客户端的请求在这个时间段内全部发到同一个真实服务器

重启服务:

systemctl restart keepalived.service

4)安装ipvsadm,检测ipvsadm配置

yum -y install ipvsadm

ipvsadm -ln

注:如果看不到LVS群集信息,需要手动创建群集信息。或者因为keepalived.conf配置文件问题而没有生效。

5)验证IP配置信息:

ip a #查看VIP是否在master的ENS33网卡。

二)web池中web服务器配置:
请参见上述 (案例2—构建LVS—DR集群)中web服务器配置。

1、配置群集接口lo:0

2、调整内核参数,关闭ARP响应。

三)测试

1、测试IP地址漂移。在master主机上执行:

1)访问网站点:http://192.168.3.200

2)ip a #查看漂移地址

3)停止主的keepalived

4)http://192.168.3.200 #验证站点是否仍旧可以访问

5)ip a #主服务器、备份服务器均执行,查看漂移IP地址。

相关术语

LB (Load Balancer 负载均衡)

HA (High Available 高可用)

Failover (失败切换)

Cluster (集群)

LVS (Linux Virtual Server Linux 虚拟服务器)

DS (Director Server),指的是前端负载均衡器节点

RS (Real Server),后端真实的工作服务器

VIP (Virtual IP),虚拟的 IP 地址,向外部直接面向用户请求,作为用户请求的目标的 IP 地址

DIP (Director IP),主要用于和内部主机通讯的 IP 地址

RIP (Real Server IP),后端服务器的 IP 地址

CIP (Client IP),访问客户端的 IP 地址

Keepalived工作原理

keepalived:顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived基于VRRP协议来实现高可用,主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态,如果某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工作正常后Keepalived自动将其加入到服务器群中,这些工作全部自动完成,而不需要人工干预,只需要人工修复故障的web服务器即可。

三层机理是发送ICMP数据包即PING给某台服务器,如果不通,则认为其故障,并从服务器群中剔除;四层机理是检测TCP端口号状态来判断某台服务器是否故障,如果检测端口存在异常,则从服务器群中剔除;五层机理是根据用户的设定检查某个服务器应用程序是否正常运行,如果不正常,则从服务器群中剔除。

LVS工作原理

LVS工作在网络层。通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上面,在Director Server虚拟一个对外访问的IP(VIP)。用户访问VIP,到达Director Server,Director Server根据一定的规则选择一个Real Server,处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如果返回给客户端数据等等。IPVS为此有三种机制:

VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。

VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。

VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。

我们要达到的目标为:

1、Client 通过 VIP 访问服务能够将请求根据配置的规则进行分发(LB)

2、当 MATSER 的 LB 节点故障时,自动切换到 BACKUP 的 LB 节点上,保证服务正常访问;MASTER 恢复后,再次作为主 LB 负载节点

3、当某个 RS 节点故障时,自动剔除该节点;恢复后,再次加入集群

总结

本文介绍了使用 LVS+Keepalived 来实现高可用负载均衡,这能使得我们的服务能够更加的稳定。Keepalived 默认是运行在 LVS 之上的,有较好的兼容性,当然我们也可以使用户 Nginx 作为 LB 的软件,可根据业务和两者的异同进行选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值