lvs集群

文章目录

          • 1.集群的分类
          • 2.lvs的三种模式
          • 3.基于NAT模式下的lvs负载均衡
          • 4.基于隧道模式TUN的lvs
          • 5.基于DR模式的lvs
          • 6.lvs算法
          • 7ipvs的命令用法
          • 8.lvs-nat配置
          • 9.LVS-DR配置

1.集群的分类
1.负载均衡集群(提升效率)
2.高可用集群	(保障业务的可用性)
3.高性能集群	(算法科学,一般人接触不到)

负载均衡集群:
	软件实现方式:lvs(效率较高,基于四层负载) haproxy nginx等
	硬件实现方式:F5
lvs(linux虚拟服务器),章文嵩博士主导的开源负载均衡项目,其项目主要是在linux内核中实现基于ip的数据请求负载均衡调度方案。	
lvs存在一个缺点:不具备状态检查功能,只是调度器。
2.lvs的三种模式
lvs的工作模式:
NAT模式(地址转换)
TUN模式(ip隧道)
DR模式(路由)
3.基于NAT模式下的lvs负载均衡

lvs集群_第1张图片

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集群_第2张图片
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集群_第3张图片
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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
RS1
9.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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 

访问验证
lvs集群_第4张图片
lvs集群_第5张图片

你可能感兴趣的:(集群-负载均衡-高可用,负载均衡,lvs)