- 1.集群的分类
- 2.lvs的三种模式
- 3.基于NAT模式下的lvs负载均衡
- 4.基于隧道模式TUN的lvs
- 5.基于DR模式的lvs
- 6.lvs算法
- 7ipvs的命令用法
- 8.lvs-nat配置
- 9.LVS-DR配置
1.负载均衡集群(提升效率) 2.高可用集群 (保障业务的可用性) 3.高性能集群 (算法科学,一般人接触不到) 负载均衡集群: 软件实现方式:lvs(效率较高,基于四层负载) haproxy nginx等 硬件实现方式:F5 lvs(linux虚拟服务器),章文嵩博士主导的开源负载均衡项目,其项目主要是在linux内核中实现基于ip的数据请求负载均衡调度方案。 lvs存在一个缺点:不具备状态检查功能,只是调度器。2.lvs的三种模式
lvs的工作模式: NAT模式(地址转换) TUN模式(ip隧道) DR模式(路由)3.基于NAT模式下的lvs负载均衡
LVS-NAT特点:
NAT:网络地址转换,接受数据的报文信息进行解封装,使得私网能够与外网的IP地址进行相应的转换,从而使公网访问到内部的私有IP CIP(Client IP):客户端的ip VIP(Director Virutal IP):调度器外网的ip DIP:调度器的内网ip RIP:真实服务器的ip RIP和DIP是私网地址,且RIP的网关指向DIP,请求和接受的报文都经过调度器 支持端口映射
lvs-nat图解:
客户端上以cip去请求调度器上配置的vip,调度器上的vip对cip的报文进行解封装,通过算法求出客户端上 要请求的资源,然后调度器其内部的DIP携带CIP去请求RIP,客户端的cip请求到资源后 ,(RIP以及对DIP配置了网关)将其cip发送给DIP调度器,DIP调度器再通过VIP公网传送回客户端。4.基于隧道模式TUN的lvs
lvs-tun特点(ip tunneling)
lvs-tun模式不修改请求报文的ip首部,通过原来的ip首部(CIP<-->VIP)之外再封装一个ip首部(DIP<-->RIP) 可以跨地域 RIP,DIP,VIP必须是公网地址,(也就是经过路由器) RS服务端的OS必须支持隧道功能 不支持端口映射 RS服务器网关不能指向DIP 请求报文经过调度器,响应报文不能经过调度器
lvs-tun图解:
客户端httpd请求资源,客户端的CIP被调度器的VIP接受报文进行解封装,其中是经过路由器转发,VIP再通过RIP转发给RS服务器请求响应的资源,请求到后,不再通过调度器回去, 而是通过路由直接转发给客户端。5.基于DR模式的lvs
LVS-DR特点
DR模式是通过修改目标主机的mac地址进行转发的。 调度器都要配置VIP,DIP 服务器都要配置RIP,DIP DR模式中必须修改RS服务器的2个内核参数: 参数一:arp_announce(是否接受记录别人的通告)其中0:默认的,通告自己所拥有的所有地址,1:自己在1.0网段的话,不会通告给2.0网段,但是没有绝对性, 2:总是不通告于自己不在一个网段的ip地址,有绝对性。 参数二:apr_ignore有九个可选值,0.1.2.3.4.5.6.7.8.,意思如下: 0:默认的,回应任何网络接口上对任何本地ip地址的arp查询请求(只要有本地地址就会响应) 1:请求报文从指定接口进入的,并且请求的目标地址就是接口配置的地址才给予响应。否则丢包 2:只回答目标ip地址的访问arp请求,访问的ip必须在网络接口的子网段中 3:不回应网络接口的arp请求,只对设置的唯一连接地址做回应 4-7:保留不使用 8:不回应所有地址的arp查询 RIP可以用公网与私网,一般情况下用私网 RS服务器与director调度在同一个网络中,不能存在路由器 不支持端口映射 RS服务器的网关不能指向DIP,因为流量经过DR会出现报文,(响应报文是不能经过调度器的)
LVS-DR图解
客户端的CIP请求服务器资源,被调度器的VIP接受到后修改报文的目标MAC地址,再通过DIP的mac地址匹配到rip指定的mac地址,请求资源后,再通告vip传回给客户端。6.lvs算法
静态方法: RR(round robin):平均分摊 WRR(weighted rr),根据一定的比例,比如RS1请求强RS2请求弱,就让RS1分俩个请求,RS2分一个请求。 SH(source hash):源地址hash,同一个ip的请求调到同一服务器上服务,每个服务请求单独调度。 DH(destination hash):目标地址hash,将对同一个目标(请求资源)的请求始终发送同一个RS服务器 动态方法: 根据算法以及RS服务器的负载状态进行分析,根据指定的算法算出overhead(负载)值最小的选为RS LC(Least Connection):最少连接数,算法: overhead=Active * 256 +lnactive WLC(加权的LC):算法: overhead=(Active*256+lnactive)/weight SED(最短期望延迟) NQ(是SED的改进) LBLC(基于最少的连接,动态连接)7ipvs的命令用法
ipvs集群服务支持TCP,UDP,EST,AH_EST,SCTP等诸多协议 一个ipvs主机定义的时候必须指定lvs-type模式,以及lvsscheduler(调度器) 一个cluster service 必须有俩个服务器 管理调度器命令 -A:添加 -E:编辑 管理服务命令(ipvsadm): ipvsadm -a|e -t |u|f ip[:port] -r ip[:port] [-g|l|i|m][-w weight][-x upper][-y|lower] -T:tcp -u:udp -f:防火墙过滤流量 -t ip:port -u ip:port -f mark -s :指定算法(默认为wlc) -p:定义持久连接(不指定默认为300秒) lvs模式类型: -g:(默认gateway),dr模式 -i:ipip tun隧道模式 -m:masquerade nat模式 -w:设定权重,设为0时不会被调度,默认为1,权重值越大则表示性能越好,被调度的资源也更多。 清空和查看配置 ipvsadm -C清空配置 -L:查看配置 -n:以数字格式显示地址和端口 -c:显示当前ipvs连接 --stats:统计数据 --rate:输出速率信息 --exact:显示精确值 保存和重新加载 -R:重新 -S:保存 重置配置规则 -Z:重置8.lvs-nat配置
环境准备
| 服务器名称 | DIP | VIP |
|---|---|---|
| apache服务器(RS1) | 192.168.136.230 | 192.168.136.2(同一网关) |
| apache服务器(RS2) | 192.168.136.242 | 192.168.136.2(同一网关) |
| lvs调度器(DR) | 192.168.136.130 | 192.168.136.250 |
#关闭防火墙 [root@DR ~]# systemctl disable --now firewalld.service Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@DR ~]# setenforce 0 [root@RS1 ~]# systemctl disable --now firewalld [root@RS1 ~]# setenforce 0 [root@RS2 ~]# systemctl disable --now firewalld Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@RS2 ~]# setenforce 0
#配置DR的vip [root@DR ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR1=192.168.136.130 IPADDR2=192.168.136.250 GATEWAY=192.168.136.2 DNS1=114.114.114.114 [root@DR ~]# reboot [root@DR ~]# ip a 2: ens33:mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:8d:35:71 brd ff:ff:ff:ff:ff:ff inet 192.168.136.130/24 brd 192.168.136.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.136.250/24 brd 192.168.136.255 scope global secondary noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::876a:c402:3d8:7405/64 scope link noprefixroute valid_lft forever preferred_lft forever
#RS1和RS2上安装httpd [root@RS1 ~]# yum -y install httpd [root@RS2 ~]# yum -y install httpd [root@RS1 ~]# systemctl enable --now httpd [root@RS2 ~]# systemctl enable --now httpd #RS1和RS2分别加网页内容 [root@RS1 ~]# echo 'RS1' >> /var/www/html/index.html [root@RS2 ~]# echo 'RS2' >> /var/www/html/index.html #我的RS1和RS2均处于192.168.136.2的网关中,所以这里略,没有的话配置ifcfg-xxx的网卡文件即可
#安装ipvsadm [root@DR ~]# yum -y install ipvsadm #DR上配置转发规则 [root@DR ~]# vim /etc/sysctl.conf #从文件读取 [root@DR ~]# sysctl -p net.ipv4.ip_forward = 1 #添加规则,指定网关:端口,以及算法 [root@DR ~]# ipvsadm -A -t 192.168.136.250:80 -s rr [root@DR ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.136.250:80 rr #以数字方式显示配置的模式 [root@DR ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.136.250:80 rr #添加rs的服务器DIP,指定nat模式 [root@DR ~]# ipvsadm -a -t 192.168.136.250:80 -r 192.168.136.230:80 -m [root@DR ~]# ipvsadm -a -t 192.168.136.250:80 -r 192.168.136.242:80 -m #很多情况下没有/etc/sysconfig/ipvsadm该文件,应该保存ipvsadm配置会报错 #解决方法: [root@DR ~]# ipvsadm --save > /etc/sysconfig/ipvsadm #保存配置 [root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm #查看配置 [root@DR ~]# cat /etc/sysconfig/ipvsadm -A -t 192.168.136.250:80 -s rr -a -t 192.168.136.250:80 -r 192.168.136.230:80 -m -w 1 -a -t 192.168.136.250:80 -r 192.168.136.242:80 -m -w 1 #测试 [root@DR ~]# curl http://192.168.136.250 RS2 [root@DR ~]# curl http://192.168.136.250 RS1 [root@DR ~]# curl http://192.168.136.250 RS2 [root@DR ~]# curl http://192.168.136.250 RS19.LVS-DR配置
环境准备
| 服务器名称 | DIP | VIP |
|---|---|---|
| apache服务器(RS1) | 192.168.136.230 | 192.168.136.250 |
| apache服务器(RS2) | 192.168.136.242 | 192.168.136.250 |
| lvs调度器(DR) | 192.168.136.130 | 192.168.136.250 |
#防火墙依旧关闭略 #配置DR网关 [root@DR ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR1=192.168.136.130 IPADDR2=192.168.136.250 GATEWAY=192.168.136.2 DNS1=114.114.114.114 [root@DR ~]# ip addr add 192.168.136.250/24 dev ens33 #临时配置vip方式不推荐使用 #重启服务 [root@DR ~]# systemctl restart NetworkManager [root@DR ~]# ifdown ens33 ;ifup ens33 #RS1,RS2上配置arp的内核参数 [root@RS1 ~]# vim /etc/sysctl.conf [root@RS1 ~]# sysctl -p net.ipv4.conf.all.arp_ignore = 1 #只访问本网段的arp请求 net.ipv4.conf.all.arp_announce = 2 #记录ip通告 [root@RS2 ~]# vim /etc/sysctl.conf [root@RS2 ~]# sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 #一定要先设置好内核参数在配置VIP,如果先配置VIP,VIP配置好后会立即通告给所有人,而修改内核参数就是为了不通告 #配置RS1的VIP [root@RS1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=dhcp NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR1=192.168.136.230 IPADDR2=192.168.136.250 GATEWAY=192.168.136.2 PREFIX=24 DNS1=114.114.114.114 [root@RS1 ~]# ifdown ens33 ;ifup ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2) [root@RS1 ~]# ip a 2: ens33:mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:58:19:59 brd ff:ff:ff:ff:ff:ff inet 192.168.136.230/24 brd 192.168.136.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.136.250/24 brd 192.168.136.255 scope global secondary #配置RS2的vip [root@RS2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=dhcp NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR1=192.168.136.242 IPADDR2=192.168.136.250 GATEWAY=192.168.136.2 PREFIX=24 DNS1=114.114.114.114 [root@RS2 ~]# systemctl restart NetworkManagert Failed to restart NetworkManagert.service: Unit NetworkManagert.service not found. [root@RS2 ~]# systemctl restart NetworkManager [root@RS2 ~]# ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:a6:de:35 brd ff:ff:ff:ff:ff:ff inet 192.168.136.242/24 brd 192.168.136.255 scope global dynamic noprefixroute ens33 valid_lft 921sec preferred_lft 921sec inet6 fe80::1999:71f7:bd78:5ade/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@RS2 ~]# ifdown ens33;ifup ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2) [root@RS2 ~]# ip a ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:a6:de:35 brd ff:ff:ff:ff:ff:ff inet 192.168.136.242/24 brd 192.168.136.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.136.250/24 brd 192.168.136.255 scope global secondary #DR上安装ipvsadm,添加dr模式规则 [root@DR ~]# yum -y install ipvsadm [root@DR ~]# ipvsadm --save > /etc/sysconfig/ipvsadm #ipvsadm开机自启 [root@DR ~]# systemctl enable --now ipvsadm.service [root@DR ~]# ipvsadm -A -t 192.168.136.250:80 -s wrr [root@DR ~]# ipvsadm -a -t 192.168.136.250:80 -r 192.168.136.242:80 -g [root@DR ~]# ipvsadm -a -t 192.168.136.250:80 -r 192.168.136.230:80 -g #保存规则 [root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm [root@DR ~]# cat /etc/sysconfig/ipvsadm -A -t 192.168.136.250:80 -s rr -a -t 192.168.136.250:80 -r 192.168.136.230:80 -g -w 1 -a -t 192.168.136.250:80 -r 192.168.136.242:80 -g -w 1 参数:-A:添加虚拟服务器 -t:添加tcp-ip以及端口 -s:指定算法 rr:平均负载 -a:添加节点 -g:DR模式 -i:tun模式 -m:nat模式 -w:设置权重 #在RS1和RS2上配置httpd启动 [root@RS1 ~]# yum -y install httpd [root@RS2 ~]# yum -y install httpd [root@RS1 ~]# systemctl enable --now httpd [root@RS2 ~]# systemctl enable --now httpd [root@RS1 ~]# echo "RHCSA" > /var/www/html/index.html [root@RS2 ~]# echo "RHCE" > /var/www/html/index.html #RS1,RS2,DR上配置路由 [root@RS1 ~]# route add -host 192.168.136.250 dev ens33 [root@RS2 ~]# route add -host 192.168.136.250 dev ens33 [root@DR ~]# route add -host 192.168.136.250 dev ens33
访问验证



