LVS负载均衡集群

第1章 LVS负载均衡集群简介

1.1 负载均衡介绍

1.1.1 负载均衡的妙用

负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增长吞吐量、增强网络数据处理能力、提升网络的灵活性和可用性。html

Ø 单台计算机没法承受大规模的并发访问或数据流量了,此时须要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减小用户等待响应的时间又提高了用户体验;前端

Ø 7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。linux

1.1.2 为何要用lvs

Nginx反向代理优势web

工做在网络模型的7层,能够针对http应用作一些分流的策略,好比针对域名、目录结构,Nginx单凭这点可利用的场合就远多于LVS了。算法

最新版本的Nginx也支持4TCP负载,曾经这是LVSNginx好的地方。vim

Nginx对网络稳定性的依赖很是小,理论上能ping通就就能进行负载功能,这个也是它的优点之一,相反LVS对网络稳定性依赖比较大。windows

Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。后端

那为何要用lvs呢?浏览器

ü 简单一句话,当并发超过了Nginx上限,就可使用LVS了。缓存

ü 1000-2000W PV或并发请求1万如下均可以考虑用Nginx

ü 大型门户网站,电商网站须要用到LVS

1.2 LVS介绍

        LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,能够在UNIX/LINUX平台下实现负载均衡集群功能。该项目在19985月由章文嵩博士组织成立,是中国国内最先出现的自由软件项目之一

1.2.1 相关参考资料

LVS官网:http://www.linuxvirtualserver.org/index.html


相关中文资料:

LVS项目介绍           http://www.linuxvirtualserver.org/zh/lvs1.html

LVS集群的体系结构     http://www.linuxvirtualserver.org/zh/lvs2.html

LVS集群中的IP负载均衡技术  http://www.linuxvirtualserver.org/zh/lvs3.html

LVS集群的负载调度      http://www.linuxvirtualserver.org/zh/lvs4.html

1.2.2 LVS内核模块ip_vs介绍

早在2.2内核时, IPVS就已经之内核补丁的形式出现。

2.4.23版本开始,IPVS软件就合并到Linux内核的经常使用版本的内核补丁的集合。

2.4.24之后IPVS已经成为Linux官方标准内核的一部分。

image.png 

Ø LVS无需安装

Ø 安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive

Ø ipvsadm是经过命令行管理,而keepalive读取配置文件管理

Ø 后面咱们会用Shell脚本实现keepalive的功能

第2章 LVS集群部署

2.1 LVS集群搭建

2.1.1 集群环境说明

 

主机名

IP地址

软件

系统版本

lb03

10.0.0.15

lvs keepalived

CentOS Linux release 7.2.1511

lb04

10.0.0.16

lvs keepalived

CentOS Linux release 7.2.1511

web03

10.0.0.18

tomcat

CentOS Linux release 7.2.1511

web04

10.0.0.17

tomcat

CentOS Linux release 7.2.1511


主机说明

[root@lb03 ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@lb03 ~]# uname -r

3.10.0-327.el7.x86_64

[root@lb03 ~]# getenforce

Disabled

[root@lb03 ~]# systemctl status firewalld.service

firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

web环境说明

image.png 

image.png 

 

2.1.2 安装ipvsadm管理工具(只在负载服务器上操做)

 

# 查看系统的LVS模块

lsmod|grep ip_vs

 

# 默认没有加载模块,须要安装管理工具才会激活

yum -y install ipvsadm

 

# 查看当前LVS状态,顺便激活LVS内核模块

ipvsadm

 

# 激活后查看系统的LVS模块

[root@lb03 ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@lb03 ~]# lsmod|grep ip_vs

ip_vs                 140944  0

nf_conntrack          105745  1 ip_vs

libcrc32c              12644  2 xfs,ip_vs

2.1.3 配置LVS负载均衡服务(在lb03操做)

步骤1:在eth0网卡绑定VIP地址(ip

步骤2:清除当前全部LVS规则(-C

步骤3:设置tcptcpfinudp连接超时时间(--set

步骤4:添加虚拟服务(-A),调度算法见man ipvsadm

步骤5:将虚拟服务关联到真实服务上(-a

步骤6:查看配置结果(-ln

 

操做命令

ip addr add 10.0.0.13/24 dev eth0

ipvsadm -C                    

ipvsadm --set 30 5 60         

ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20   

ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1

ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1

ipvsadm -ln

 

参数说明:

-A  添加虚拟服务

-t  添加tcp IP地址

-s  指定轮询算法 rr 轮询 wrr 加权轮询

-p  指定超时时间

-a  关联真实服务器

-r  接真实服务器地址

-g  使用直接路由模式,这也是默认值  LVS4种工做状态

-w  权重

-l  查看结果

-n  不反向解析ip为域名

ipvsadm参数说明:(更多参照 man ipvsadm)

 

检查结果:

[root@lb03 ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.0.0.13:80 wrr persistent 20

  -> 10.0.0.17:80                 Route   1      0          0         

  -> 10.0.0.18:80                 Route   1      0          0    

 

参数

(短格式)

参数

(长格式)

参数说明

-A

--add-service

在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增长一台新的虚拟服务器。

-E

--edit-service

编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D

--delete-service

删除内核虚拟服务器表中的一条虚拟服务器记录。

-C

--clear

清除内核虚拟服务器表中的全部记录。

-R

--restore

恢复虚拟服务器规则

-S

--save

保存虚拟服务器规则,输出为-R 选项可读的格式

-a

--add-server

在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增长一台新的真实服务器

-e

--edit-server

编辑一条虚拟服务器记录中的某条真实服务器记录

-d

--delete-server

删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l

--list

显示内核虚拟服务器表

-Z

--zero

虚拟服务表计数器清零(清空当前的链接数量等)

-

--set tcp tcpfin udp

设置链接超时值

-

--start-daemon

启动同步守护进程。他后面能够是master或backup,用来讲明LVS Router 是master或是backup。在这个功能上也能够采用keepalived 的VRRP 功能。

-

--stop-daemon

中止同步守护进程

-h

--help

显示帮助信息

-t

--tcp-service service-address [vip:port] or [real-server-ip:port]

说明虚拟服务器提供的是tcp 的服务

-u

--udp-service service-address [vip:port] or [real-server-ip:port]

说明虚拟服务器提供的是udp 的服务

-f

--fwmark-servicefwmark

说明是通过iptables 标记过的服务类型。

-s

--scheduler scheduler

使用的调度算法,有这样几个选项

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

默认的调度算法是: wlc

-p

--persistent [timeout]

持久稳固的服务。这个选项的意思是来自同一个客户的屡次请求,将被同一台真实的服务器处理。timeout 的默认值为300秒。

-M

--netmask netmask

persistent granularity mask

-r

--real-server server-address

真实的服务器[Real-Server:port]

-g

--gatewaying

指定LVS 的工做模式为直接路由模式(也是LVS 默认的模式)

-i

--ipip

指定LVS 的工做模式为隧道模式

-m

--masquerading

指定LVS 的工做模式为NAT 模式

-w

--weight weight

真实服务器的权值

-

--mcast-interface

interface 指定组播的同步接口

-c

--connection

显示LVS 目前的链接 如:ipvsadm -L -c

-

--timeout   

显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout

-

--daemon    

显示同步守护进程状态

-

--stats     

显示统计信息

-

--rate      

显示速率信息

-

--sort      

对虚拟服务器和真实服务器排序输出

-

--numeric -n

输出IP 地址和端口的数字形式

 

2.1.4 web服务器配置(在web03/web04同时操做下面步骤)

步骤1:在lo网卡绑定VIP地址(ip

步骤2:修改内核参数抑制ARP响应

 

操做命令

ip addr add 10.0.0.13/32 dev lo

 

cat >>/etc/sysctl.conf<<EOF

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

EOF

sysctl -p

 

至此LVS集群配置完毕——进行验证

 

image.png 

image.png 

 

疑问解答:

问题1:浏览器访问没有发现轮询效果

   答:LVS的轮询不像Nginx明显,可使用多个客户端访问(WindowsLinux


问题2:使用抓包工具,发现进行通讯的是WindowsIPlb0380端口,可是lb03明明没有80端口?

    答:windows抓包查看,能够发现数据包的源MAC地址是web03web04,说明真正响应客户端请求的是web03web04

          Linuxtcpdump -nn port 80;  tcpdump -nn -e port 80

 

arp解析查看:

[root@lb04 ~]# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.0.1                 ether   00:50:56:c0:00:08   C                     eth0

10.0.0.17                ether   00:50:56:26:50:8a   C                     eth0

10.0.0.18                ether   00:50:56:23:12:f3   C                     eth0

10.0.0.254               ether   00:50:56:e4:7f:10   C                     eth0

 

[f:\~]$ arp -a

接口: 10.0.0.1 --- 0x13

  Internet 地址         物理地址              类型

  10.0.0.13             00-50-56-32-cc-5b     动态        

  10.0.0.15             00-50-56-2b-cd-ba     动态        

  10.0.0.16             00-50-56-32-cc-5b     动态        

  10.0.0.17             00-50-56-26-50-8a     动态        

  10.0.0.18             00-50-56-23-12-f3     动态    

image.png 

2.2 负载均衡(LVS)相关名词

image.png 

 

术语说明:

DSDirector Server。指的是前端负载均衡器节点。

RSReal Server。后端真实的工做服务器。

VIP:向外部直接面向用户请求,做为用户请求的目标的IP地址。

DIPDirector Server IP,主要用于和内部主机通信的IP地址。

RIPReal Server IP,后端服务器的IP地址。

CIPClient IP,访问客户端的IP地址。

 

2.3 LVS集群的工做模式--DR直接路由模式

        DR模式是经过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。

DR技术可极大地提升集群系统的伸缩性。但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网环境。

image.png 

DR直接路由模式说明:

Ø 经过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP


Ø 请求的报文通过调度器,而RS响应处理后的报文无需通过调度器LB,所以,并发访问量大时使用效率很高,比Nginx代理模式强于此处。


Ø DR模式是经过MAC地址的改写机制实现转发的,所以,全部RS节点和调度器LB只能在同一个局域网中。须要注意RS节点的VIP的绑定(lo:vip/32)ARP抑制问题。


Ø 强调下:RS节点的默认网关不须要是调度器LBDIP,而应该直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的状况),理论上讲,只要RS能够出网便可,不须要必须配置外网IP,但走本身的网关,那网关就成为瓶颈了。


Ø 因为DR模式的调度器仅进行了目的MAC地址的改写,所以,调度器LB没法改变请求报文的目的端口。LVS DR模式的办公室在二层数据链路层(MAC),NAT模式则工做在三层网络层(IP)和四层传输层(端口)。


Ø 当前,调度器LB支持几乎全部UNIXLinux系统,但不支持windows系统。真实服务器RS节点能够是windows系统。


Ø 总之,DR模式效率很高,可是配置也较麻烦。所以,访问量不是特别大的公司能够用haproxy/Nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万如下均可以考虑用haproxy/Nginx(LVSNAT模式)


Ø 直接对外的访问业务,例如web服务作RS节点,RS最好用公网IP地址。若是不直接对外的业务,例如:MySQL,存储系统RS节点,最好只用内部IP地址。

 

DR的实现原理和数据包的改变

image.png 

DR原理:

1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3. IPVS比对数据包请求的服务是否为集群服务,如果,将请求报文中的源MAC地址修改成DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,而后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

4. 因为DS和RS在同一个网络中,因此是经过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。

5. RS发现请求报文的MAC地址是本身的MAC地址,就接收此报文。处理完成以后,将响应报文经过lo接口传送给eth0网卡而后向外发出。 此时的源IP地址为VIP,目标IP为CIP

6. 响应报文最终送达至客户端

2.4 web端的操做有什么含义?

2.4.1 RealServer为何要在lo接口上配置VIP

答:既然要让RS可以处理目标地址为vipIP包,首先必需要让RS能接收到这个包。

   lo上配置vip可以完成接收包并将结果返回client

2.4.2 eth0网卡上配置VIP能够吗?

答:不能够,将VIP设置在eth0网卡上,会影响RSarp请求,形成总体LVS集群arp缓存表紊乱,以致于整个负载均衡集群都不能正常工做。

2.4.3 为何要抑制ARP响应?

先回顾ARP知识及了解arp_announcearp_ignore做用。


arp协议说明


ARP协议,全称"Address Resolution Protocol",中文名是地址解析协议,使用ARP协议可实现经过IP地址得到对应主机的物理地址(MAC地址)

ARP协议要求通讯的主机双方必须在同一个物理网段(即局域网环境)!

为了提升IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫作ARP缓存。

Windows查看ARP缓存命令 arp -a

Linux查看ARP缓存命令 arp -nCentOS7须要安装net-tools

Linux解析IP对应的MAC地址 arping -c 1 -I eth0 10.0.0.17

 

ARP缓存表是把双刃剑

(1) 主机有了arp缓存表,能够加快ARP的解析速度,减小局域网内广播风暴。由于arp是发广播解析的,频繁的解析也是消耗带宽的,尤为是机器多的时候。

(2) 正是有了arp缓存表,给恶意***带来了***服务器主机的风险,这个就是arp欺骗***。

(3) 切换路由器,负载均衡器等设备时,可能会致使短时网络中断。缘由是全部的客户端ARP缓存表没有更新

服务器切换ARP问题

当集群中一台提供服务的lb01机器宕机后,而后VIP会转移到备机lb02上,可是客户端的ARP缓存表的地址解析仍是宕机的lb01MAC地址。从而致使,即便在lb02上添加VIP,也会发生客户端没法访问的状况。

解决办法是:当lb01宕机,VIP地址迁移到lb02时,须要经过arping命令通知全部网络内机器更新本地的ARP缓存表,从而使得客户机访问时从新广播获取MAC地址。

这个是本身开发服务器高可用脚本及全部高可用软件必须考虑到的问题。

 

ARP广播进行新的地址解析

arping -I eth0 -c 1 -U VIP

arping -I eth0 -c 1 -U 10.0.0.13

 

测试命令

ip addr del 10.0.0.13/24 dev eth0

ip addr add 10.0.0.13/24 dev eth0

ip addr show eth0

arping -I eth0 -c 1 -U 10.0.0.13


arp_announcearp_ignore详解

配置的内核参数

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

lvsDR模式下须要关闭arp功能

 

arp_announce

对网络接口上,本地IP地址的发出的,ARP回应,做出相应级别的限制:

肯定不一样程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

数值

含义

0(默认)

在任意网络接口(eth0,eth1,lo)上的任何本地地址

1

尽可能避免不在该网络接口子网段的本地地址作出arp回应. 当发起ARP请求的源IP地址 是被设置应该经由路由达到此网络接口的时候颇有用.此时会检查来访IP是否为全部接口 上的子网段内ip之一.若是改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

2

对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试 选择与能与该地址通讯的本地地址.首要是选择全部的网络接口的子网中外出访问子网中 包含该目标IP地址的本地地址. 若是没有合适的地址被发现,将选择当前的发送网络接口或其余的有可能接受到该ARP回应的网络接口来进行发送.

 

arp_ignore

对目标地定义对目标地址为本地IPARP询问不一样的应答模式0

数值

含义

0(默认值)

回应任何网络接口上对任何本地IP地址的arp查询请求

1

只回答目标IP地址是来访网络接口本地地址的ARP查询请求

2

只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

3

不回应该网络界面的arp请求,而只对设置的惟一和链接地址作出回应

4-7

保留未使用

8

不回应全部(本地地址)的arp查询

抑制RSarp前的广播状况

image.png 


抑制RSarp后广播状况

image.png 

第3章 LVS集群的工做模式

3.1 LVS集群的工做模式总结

Ø DRDirect Routing)直接路由模式

Ø NATNetwork Address Translation

Ø TUNTunneling)隧道模式

Ø FULLNATFull Network Address Translation

3.1.1 LVS集群的工做模式--NAT

image.png 

        经过网络地址转换,调度器LB重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文处理以后,返回时必需要经过调度器,通过调度器时报文的源地址被重写,再返回给客户,完成整个负载调度过程。

收费站模式---来去都要通过LB负载均衡器。

NAT方式的实现原理和数据包的改变

image.png 

NAT方式的实现原理和数据包的改变描述

1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IPCIP,目标IPVIP

2.PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT

3. IPVS比对数据包请求的服务是否为集群服务,如果,修改数据包的目标IP地址为后端服务器IP,而后将数据包发至POSTROUTING链。 此时报文的源IPCIP,目标IPRIP

4.POSTROUTING链经过选路,将数据包发送给Real Server

5. Real Server比对发现目标为本身的IP,开始构建响应报文发回给Director Server。 此时报文的源IPRIP,目标IPCIP

6. Director Server在响应客户端前,此时会将源IP地址修改成本身的VIP地址,而后响应给客户端。 此时报文的源IPVIP,目标IPCIP

 

LVS-NAT模型的特性

RS应该使用私有地址,RS的网关必须指向DIP

DIPRIP必须在同一个网段内

请求和响应报文都须要通过Director Server,高负载场景中,Director Server易成为性能瓶颈

支持端口映射

RS可使用任意操做系统

缺陷:对Director Server压力会比较大,请求和响应都需通过director server

3.1.2 LVS集群的工做模式--隧道模式TUN

image.png 

 

        采用NAT技术时,因为请求和响应的报文都必须通过调度器地址重写,当客户请求愈来愈多时,调度器的处理能力将成为瓶颈,为了解决这个问题,调度器把请求的报文经过IP隧道(至关于ipip或ipsec )转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户,这样调度器就只处理请求的入站报文。因为通常网络服务应答数据比请求报文大不少,采用 VS/TUN技术后,集群系统的最大吞吐量能够提升10倍。

 

        VS/TUN工做流程,它的链接调度和管理与VS/NAT中的同样,只是它的报文转发方法不一样。调度器根据各个服务器的负载状况,链接数多少,动态地选择一台服务器,将原请求的报文封装在另外一个IP报文中,再将封装后的IP报文转发给选出的真实服务器;真实服务器收到报文后,先将收到的报文解封得到原来目标地址为VIP地址的报文, 服务器发现VIP地址被配置在本地的IP隧道设备上(此处要人为配置),因此就处理这个请求,而后根据路由表将响应报文直接返回给客户。


TUN原理和数据包的改变

image.png 

TUN原理和数据包的改变描述

1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。

2.PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3.IPVS比对数据包请求的服务是否为集群服务,如果,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。而后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP

4.POSTROUTING链根据最新封装的IP报文,将数据包发至RS(由于在外层封装多了一层IP首部,因此能够理解为此时经过隧道传输)。 此时源IP为DIP,目标IP为RIP

5. RS接收到报文后发现是本身的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,并且目标是本身的lo接口VIP,那么此时RS开始处理此请求,处理完成以后,经过lo接口送给eth0网卡,而后向外传递。 此时的源IP地址为VIP,目标IP为CIP

6.响应报文最终送达至客户端

LVS-Tun模型特性

RIPVIPDIP全是公网地址

RS的网关不会也不可能指向DIP

全部的请求报文经由Director Server,但响应报文必须不能进过Director Server

不支持端口映射

RS的系统必须支持隧道

3.1.3 LVS集群的工做模式--FULLNAT

image.png 

        LVS的DR和NAT模式要求RS和LVS在同一个vlan中,致使部署成本太高;TUNNEL模式虽然能够跨vlan,但RealServer上须要部署ipip隧道模块等,网络拓扑上须要连通外网,较复杂,不易运维。

为了解决上述问题,开发出FULLNAT,该模式和NAT模式的区别是:数据包进入时,除了作DNAT,还作SNAT(用户ip->内网ip),从而实现LVS-RealServer间能够跨vlan通信,RealServer只须要链接到内网。

类比地铁站多个闸机。

第4章 LVS+Keepalived方案实现

4.1 安装部署LVS+Keepalived

4.1.1 keepalived功能

1. 添加VIP

2. 添加LVS配置

3. 高可用(VIP漂移)

4. web服务器健康检查

4.1.2 在负载器安装Keepalived软件

安装keepalived

yum -y install keepalived

 

检查软件是否安装

[root@lb03 ~]# rpm -qa keepalived

keepalived-1.3.5-1.el7.x86_64

4.1.3 修改配置文件

lb03keepalied配置文件

vim /etc/keepalived/keepalived.conf

global_defs {

   router_id LVS_03

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 150

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

     10.0.0.13/24

    }

}

 

virtual_server 10.0.0.13 80 {

    delay_loop 6          

    lb_algo wrr                

    lb_kind DR                

    nat_mask 255.255.255.0

    persistence_timeout 50     

    protocol TCP                

 

    real_server 10.0.0.17 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

 

    real_server 10.0.0.18 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

}

 

lb04Keepalied配置文件

global_defs {

   router_id LVS_02

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

     10.0.0.13/24

    }

}

virtual_server 10.0.0.13 80 {

    delay_loop 6          

    lb_algo wrr                

    lb_kind DR                

    nat_mask 255.255.255.0

    persistence_timeout 50     

    protocol TCP                

 

    real_server 10.0.0.17 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

 

    real_server 10.0.0.18 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

}

 

4.1.4 启动keepalived服务

[root@lb03 ~]# systemctl start keepalived.service

 

检查lvs状态

[root@lb03 ~]# ipvsadm -ln                        

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.0.0.13:80 wrr persistent 50

  -> 10.0.0.17:80                 Route   1      0          0         

  -> 10.0.0.18:80                 Route   1      0          0  

 

检查虚拟ip

[root@lb03 ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:de:7c:97 brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.15/24 brd 10.0.0.255 scope global eth0

       valid_lft forever preferred_lft forever

    inet 10.0.0.13/24 scope global secondary eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::20c:29ff:fede:7c97/64 scope link

       valid_lft forever preferred_lft forever

4.1.5 web服务器上进行配置

(在web03/web04同时操做下面步骤)

步骤1:在lo网卡绑定VIP地址(ip

步骤2:修改内核参数抑制ARP响应

 

ip addr add 10.0.0.13/32 dev lo

 

cat >>/etc/sysctl.conf<<EOF

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

EOF

sysctl -p

 

注意:web服务器上的配置为临时生效,能够将其写入rc.local文件,注意文件的执行权限

在浏览器测试

4.2 常见LVS负载均衡高可用解决方案

开发相似keepalived的脚本,早期的办法,如今不推荐使用。

heartbeat+lvs+ldirectord脚本配置方案,复杂不易控制,不推荐使用

RedHat工具piranha,一个web界面配置LVS

LVS-DR+keepalived方案,老师推荐最优方案,简单、易用、高效。

4.3 lvs排错思路

image.png

相关文章
相关标签/搜索