第1章 LVS负载均衡群集
#####企业群集分类 #######
####搭建负载均衡器的需求:
1)把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待时间,提升用户体验
2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度的提高。
3)7*24的服务保证,任意一个或多个有限后面节点设备宕机,要求不能影响业务。
在负载均衡器集群中,所有的计算节点都应该提供相同的服务。集群负载均衡获取所有对该服务的入站要求,然后将这些请求尽可能的平均分配在所有集群节点上。
####根据群集所针对的目标差异,可分为三种类型####
负载均衡群集
高可用群集
高性能运算群集
1、负载均衡群集(Load Balance Cluster)
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
LB的负载分配依赖于主节点的分流算法
2、高可用群集(High Availability Cluster)
以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
HA的工作方式包括双工和主从两种模式
3、高性能运算群集(High Performance Computer Cluster)
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
高性能运算群集的高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
####负载均衡群集工作模式分析####
1、负载均衡群集是目前企业用得最多的群集类型
当前负载均衡技术有很多实现方案,例如基于DNS域名依次轮流解析、基于客户端调度访问、基于应用层系统负载的调度,还有基于IP地址的调度等,相比较而言IP负载均衡技术更为成熟和效率。LVS的IP负载均衡技术是依赖于ipvs内核模块来实现的,ipvs是LVS集群系统的核心软件,它的主要作用是:安装在调度器上,同时在调度器上虚拟出一个IP地址(这个地址可以正常访问互联网),用户必须通过这个虚拟的IP地址访问集群服务。这个虚拟IP一般称为LVS的VIP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中根据不同的调度算法计算选取一个服务节点响应用户的请求。
2、群集的负载调度技术有三种工作模式
地址转换
IP隧道
直接路由
####NAT模式####
●地址转换(Network Address Translation)
●简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
●服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
●原理:基于ip伪装MASQUERADES,原理是多目标DNAT。所以请求和响应都经由Director调度器。
●优点:
支持端口映射
RS可以使用任意操作系统
节省公有IP地址。
(RIP和DIP都应该使用同一网段私有地址,而且RS的网关要指向DIP。
使用nat另外一个好处就是后端的主机相对比较安全。 )
缺点:请求和响应报文都要经过Director转发;极高负载时,Director可能成为系统瓶颈。
就是效率低的意思
###TUN模式###
●IP隧道(IP Tunnel)
●简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
●服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
●优点:
RIP,VIP,DIP都应该使用公网地址,且RS网关不指向DIP;
只接受进站请求,解决了LVS-NAT时的问题,减少负载。
请求报文经由Director调度,但是响应报文不需经由Director。
●缺点:
不指向Director所以不支持端口映射。
RS的OS必须支持隧道功能。
隧道技术会额外花费性能,增大开销。
###直接路由(Direct Routing)####
●简称DR模式,采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
●负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
●优点:
RIP可以使用私有地址,也可以使用公网地址。
只要求DIP和RIP的地址在同一个网段内。
请求报文经由Director调度,但是响应报文不经由Director。
RS可以使用大多数OS
缺点:
不支持端口映射。
不能跨局域网。
####负载均衡群集架构#####
负载均衡的结构
第一层,负载调度器(Load Balancer或Director)
第二层,服务器池(Server Pool)
第三层,共享存储(Share Storage)
前端的负载均衡层,中间的服务器集群层和最底层的共享数据层。负载调度器能够无缝隙的将网络请求调度到后端的真实提供服务的服务器上,从而使得服务器集群的结构是透明的,用户在访问整个集群的服务时就像是在访问一台高性能,高可用性的真实服务器一样。客户端的程序不会受到服务器集群的修改而受到影响,服务器集群的可伸缩性在于可以通过向集群中加入或者删除节点来实现,通过对应的节点故障检测和系统重置可以实现高度的可用性。
####LVS各层次的具体划分####
负载均衡层:
处于整个集群的最前端,由一台或者多台调度器构成,LVS模块部署在调度器上,调度器根据既定的算法来实现将网络请求调度到不同后端服务器,完成对应的功能。
服务器集群层:
由一组实际运行着应用服务的服务器构成,后端服务器支持的服务包括,web服务,邮件服务,FTP服务,DNS服务等一个或者多个,每个服务器之间可以通过LAN或者更大范围的WAN相连,在实际的应用场景中,调取服务器也可以作为应用服务器提供服务。
共享数据层:
向服务器集群中的所有real server提供共享存储空间和内容一致性的存储区域。一般是由磁盘阵列组成,提供数据的一致性。也可以由NFS提供。目前来说磁盘阵列更为适合,NFS受网络影响较大,不太稳定。
注意:调度器在整个LVS体修中最为关键,是整个系统的核心部分。目前来说调度器系统仅仅支持Linux,内核2.6之后已经无需设置就原生支持LVS,但是reasl server的系统并不受限制,大多数常见的系统均可作为应用服务器提供服务。
####关于LVS虚拟服务器####
Linux Virtual Server
针对Linux内核的负载均衡解决方案
1998年5月,由我国的章文嵩博士创建
官方网站:http://www.linuxvirtualserver.org/
#####LVS的负载调度算法####
1、轮询(Round Robin)(静态方法)
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
2、加权轮询(Weighted Round Robin)(静态方法)
根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
保证处理能力强的服务器承担更多的访问流量
3、最少连接(Least Connections) (动态方法)
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点
4、加权最少连接(Weighted Least Connections)(动态方法)
在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重
权重较高的节点将承担更大比例的活动连接负载
#####NFS共享存储服务####
1、Network File System,网络文件系统
依赖于RPC(远端过程调用)
需安装nfs-utils、rpcbind软件包
系统服务:nfs、rpcbind
共享配置文件:/etc/exports
2、使用NFS发布共享资源
安装nfs-utils、rpcbind软件包
设置共享目录
启动NFS服务程序
查看本机发布的NFS共享目录
3、在客户机中访问NFS共享资源
安装rpcbind软件包,并启动rpcbind服务
手动挂载NFS共享目录
fstab自动挂载设置
LVS适用环境
调度器目前支持Linuxhe FreeBSD
支持的TCP:HTTP,HTTPS,FTP,SMTP,POP3,IMAP4,PROXY,LDAP,SSMTP
支持的UDP:DNS,NTP,ICP,视频和音频流播放协议。
LVS对应real server没有限制,real server可以运行在所有的支持TCP/IP的操作系统之上
####案列:LVS-NAT负载均衡集群搭建#####
试验环境
试验拓扑图:
试验思路:
1.配置调度器,配置双网卡,安装ipvsadm,配置负载分配策略,开启路由功能。
2.配置NFS共享存储服务器,设置共享规则。
3.配置节点服务器,web1和web2配置设定大部分相同。
4.测试机测试。
试验步骤:
1.配置调度器Director
(1)配置双网卡,ens33 192.168.32.20 (外网) ens36 192.168.31.20 (内网)
[root@director ~]# hostnamectl --static set-hostname Director
[root@director ~]# bash
[root@Director ~]#
(2)安装IPvsadm,配置
[root@Director yum.repos.d]# yum -y install ipvsadm ###安装ipvsadm服务
[root@Director yum.repos.d]# ipvsadm -v
[root@Director yum.repos.d]# modprobe ip_vs
[root@Director ~]# systemctl start ipvsadm.service ###开启服务
[root@Director ~]# ipvsadm -C ###清除策略
(3)配置负载分配策略
创建虚拟服务器(注意:NAT模式要两块网卡,调度器的地址是外网口地址)
群集的VIP地址为192.168.32.20(外网ip),针对TCP 80端口提供负载分流服务,使用的轮询调度算法。对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址
[root@Director ~]# ipvsadm -A -t 192.168.32.20:80 -s rr (端口号不要忘了)
[root@Director ~]# ipvsadm -a -t 192.168.32.20:80 -r 192.168.31.21:80 -m
[root@Director ~]# ipvsadm -a -t 192.168.32.20:80 -r 192.168.31.22:80 -m
[root@Director ~]# ipvsadm
(4)保存LVS策略
[root@Director ~]# ipvsadm-save > /opt/ipvsadm
[root@Director ~]# cat /opt/ipvsadm
衍生:
Ipvsadm 的应用
-A --add-service 添加一条新的虚拟服务
-E --edit-service 编辑虚拟服务
-D --delete-service 删除虚拟服务
-C --clear 清除所有的虚拟服务规则
-R --restore 恢复虚拟服务规则
-a --add-server 在一个虚拟服务中添加一个新的真实服务器
-e --edit-server 编辑某个真实服务器
-d --delete-server 删除某个真实服务器
-L | -l --list 显示内核中的虚拟服务规则
-n --numeric 以数字形式显示IP端口
-c --connection 显示ipvs中目前存在的连接,也可以用于分析调度情况
-Z --zero 将转发消息的统计清零
-p --persistent 配置持久化时间
--set tcp tcpfin udp 配置三个超时时间(tcp/tcpfin/udp)
-t | -u TCP/UDP协议的虚拟服务
-g | -m | -i LVS模式为:DR | NAT | TUN
-w 配置真实服务器的权重,默认为1
-s 配置负载均衡算法,如:rr, wrr, lc等
--timeout 显示配置的tcp/tcpfin/udp超时时间
--stats 显示历史转发消息统计(累加值)
--rate 显示转发速率信息(
例子:
- 管理虚拟服务
添加一个虚拟服务192.168.1.100:80,使用轮询算法
ipvsadm -A -t 192.168.1.100:80 -s rr
修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
删除虚拟服务
ipvsadm -D -t 192.168.1.100:80 - 管理真实服务
添加一个真实服务器192.168.1.123,使用DR模式,权重2
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
修改真实服务器的权重
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
删除真实服务器
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
3. 查看统计
查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate
(5)开启调度服务器路由转发功能
[root@Director ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
###添加路由表功能
[root@Director ~]# sysctl -p ###启动服务
net.ipv4.ip_forward = 1
2.存储服务器配置NFS
(1)安装NFS服务
[root@NFS yum.repos.d]# rpm -q nfs-utils ###没有该服务,需要安装
[root@NFS yum.repos.d]# yum -y install nfs-utils
[root@NFS yum.repos.d]# yum -y install rpcbind ###安装nfs-utils 就安装了
[root@NFS yum.repos.d]# systemctl start nfs ###启动服务
[root@NFS yum.repos.d]# systemctl start rpcbind ###启动服务
(2)设定NFS共享规则
[root@NFS ~]# mkdir /opt/jlh1 /opt/jlh2
[root@NFS ~]# echo "/usr/share (ro,sync)" >> /etc/exports
[root@NFS ~]# echo "/opt/jlh1 192.168.31.0/24 (rw,sync)" >> /etc/exports
[root@NFS ~]# echo "/opt/jlh2 192.168.31.0/24 (rw,sync)" >> /etc/exports
[root@NFS ~]# cat /etc/exports
/usr/share (ro,sync)
/opt/jlh1 192.168.31.0/24 (rw,sync)
/opt/jlh2 192.168.31.0/24 (rw,sync)
[root@NFS ~]# systemctl start nfs
[root@NFS ~]# systemctl enable nfs
[root@NFS ~]# systemctl start rpcbind
[root@NFS ~]# systemctl enable rpcbind
(3)添加共享内容
[root@NFS ~]# echo "da jia hao" >> /opt/jlh1/index.html
[root@NFS ~]# echo "ni hao" >> /opt/jlh2/index.html
(4)发布共享
[root@NFS ~]# exportfs -rv
[root@NFS ~]# chmod 777 /opt/jlh1/index.html
[root@NFS ~]# chmod 777 /opt/jlh2/index.html
3.配置节点服务器
(1)节点服务器Real-server1的配置
① 查看共享目录是否成功
[root@Real-server1 ~]# yum -y install nfs-utils
[root@Real-server1 ~]# showmount -e 192.168.31.24
showmount命令用于查询NFS服务器
showmount --help
Usage: showmount [-adehv]
[--all] [--directories] [--exports]
[--no-headers] [--help] [--version] [host]
-a或--all 以 host:dir 这样的格式来显示客户主机名和挂载点目录。
-d或--directories 仅显示被客户挂载的目录名。
-e或--exports 显示NFS服务器的输出清单。
-h或--help 显示帮助信息。
-v或--version 显示版本信。
--no-headers 禁止输出描述头部信息。
例子:
显示NFS客户端信息
showmount
显示指定NFS服务器连接NFS客户端的信息
showmount 192.168.1.1 #此ip为nfs服务器的
显示输出目录列表
showmount -e
显示指定NFS服务器输出目录列表(也称为共享目录列表)
showmount -e 192.168.1.1
显示被挂载的共享目录
showmount -d
显示客户端信息和共享目录
showmount -a
显示指定NFS服务器的客户端信息和共享目录
showmount -a 192.168.1.1
exportfs命令
如果修改了/etc/exports文件后不需要重新激活nfs,只要重新扫描一次/etc/exports文件,并且重新将设定加载即可:
exportfs [-aruv]
参数说明如下。
-a 全部挂载(或卸载)/etc/exports文件内的设定。
-r 重新挂载/etc/exports中的设置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的内容。
-u 卸载某一目录。
-v 在export时将共享的目录显示在屏幕上。
② 搭建http服务
[root@Real-server1 ~]# yum -y install httpd ###安装http
[root@Real-server1 ~]# mount 192.168.31.24:/opt/jlh1 /var/www/html
[root@Real-server1 ~]# vi /etc/fstab
[root@Real-server1 ~]# systemctl start httpd ###启动http服务
[root@Real-server1 ~]# systemctl enable httpd
http启动失败
[root@Real-server1 ~]# systemctl start httpd ###启动失败
Job for httpd.service failed because a fatal signal was delivered to the control process. See "systemctl status httpd.service" and "journalctl -xe" for details.
[root@Real-server1 html]# find / -name httpd.conf ###找到配置文件
/etc/httpd/conf/httpd.conf ###配置文件路径
/usr/lib/tmpfiles.d/httpd.conf
^C
[root@Real-server1 html]# vi /etc/httpd/conf/httpd.conf
[root@server conf]# vi httpd.conf
#ServerName www.example.com:80
ServerName localhost:80
####在配置文件里面添加主机名
在启动就成功了
③ 测试机测试
(2)节点服务器Real-server2的配置
步骤与Real-server1相同
[root@Real-server2 yum.repos.d]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@Real-server2 yum.repos.d]# yum -y install httpd
[root@Real-server2 ~]# mount 192.168.31.24:/opt/jlh2 /var/www/html/
[root@Real-server2 ~]# vi /etc/fstab
[root@Real-server2 ~]# systemctl restart httpd
[root@Real-server2 ~]# systemctl enable httpd
测试机测试
4.在测试机真机上测试,输入http://192.168.32.20,访问
清除浏览器缓存,再次访问
至此lvs高度群集架构就搭建成功了。
三、LVS相关术语
DS:Director Server, 指的是前端负载均衡器节点。
RS:Real Server, 后端真实的工作服务器。
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
DIP:Director Server IP, 前端负载均衡器IP地址,主要用于和内部主机通信。
RIP:Real Server IP, 后端服务器的IP地址。
CIP:Client IP, 访问客户端的IP地址