1.1负载均衡介绍
1.1.1负载均衡的妙用
负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
- 单台计算机无法承受大规模的并发访问或数据流量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减少用户等待响应的时间又提升了用户体验;
- 7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。
1.1.2为什么要用lvs
- 工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、目录结构,Nginx单凭这点可利用的场合就远多于LVS了。
- 最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。
- Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一,相反LVS对网络稳定性依赖比较大。
- Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
那为什么要用lvs呢?
- 简单一句话,当并发超过了Nginx上限,就可以使用LVS了。
- 日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。
- 大型门户网站,电商网站需要用到LVS。
1.2 LVS介绍
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一。
1.2.1相关参考资料
LVS项目介绍
http://www.linuxvirtualserver.org/zh/lvs1.htmlLVS集群的体系结构
http://www.linuxvirtualserver.org/zh/lvs2.htmlLVS集群中的IP负载均衡技术
http://www.linuxvirtualserver.org/zh/lvs3.htmlLVS集群的负载调度
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官方标准内核的一部分。
- LVS无需安装
- 安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
- ipvsadm是通过命令行管理,而keepalive读取配置文件管理
- 后面我们会用Shell脚本实现keepalive的功能
1.3 LVS集群搭建
1.3.1集群环境说明
主机名 |
IP地址 |
软件 |
系统版本 |
lb03 |
10.0.0.15 |
lvs keepalived |
CentOS Linux release 7.4.1708 |
lb04 |
10.0.0.16 |
lvs keepalived |
CentOS Linux release 7.4.1708 |
web03 |
10.0.0.18 |
tomcat |
CentOS Linux release 7.4.1708 |
web04 |
10.0.0.17 |
tomcat |
CentOS Linux release 7.4.1708 |
主机说明
[root@lb03 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@lb03 ~]# uname -a
Linux lb03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[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)
Docs: man:firewalld(1)
[root@lb03 ~]# getenforce
Disabled
web环境说明
[root@lb03 ~]# curl 10.0.0.17
web03
[root@lb03 ~]# curl 10.0.0.18
web04
1.3.2安装ipvsadm管理工具
安装管理工具
yum -y install ipvsadm
查看当前LVS状态,顺便激活LVS内核模块。
ipvsadm
查看系统的LVS模块。
[root@lb03 ~]# lsmod|grep ip_vs
ip_vs_wrr 12697 1
ip_vs 141092 3 ip_vs_wrr
nf_conntrack 133387 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
1.3.3 LVS集群搭建
配置LVS负载均衡服务(在lb03操作)
步骤1:在eth0网卡绑定VIP地址(ip)
步骤2:清除当前所有LVS规则(-C)
步骤3:设置tcp、tcpfin、udp链接超时时间(--set)
步骤4:添加虚拟服务(-A),-t指定虚拟服务的IP端口,-s 指定调度算法 调度算法见man ipvsadm, rr wrr 权重轮询 -p 指定超时时间
步骤5:将虚拟服务关联到真实服务上(-a) -r指定真实服务的IP端口 -g LVS的模式 DR模式 -w 指定权重
步骤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
检查结果:
[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
ipvsadm参数说明:(更多参照 man ipvsadm)
参数 (短格式) |
参数 (长格式) |
参数说明 |
-A |
--add-service |
在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。 |
-E |
--edit-service |
编辑内核虚拟服务器表中的一条虚拟服务器记录。 |
-D |
--delete-service |
删除内核虚拟服务器表 |