前言
体系性能扩展方式
集群Cluster
Cluster: 集群是为了办理某个特定标题将堕胎计算机组合起来形成的单个体系
Cluster常见的三种类型:
- LB:LoadBalancing(负载均衡)由多个主机构成,每个主机只负担一部分访问
- HA:HighAvailiablity(高可用)SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
SLA:Service level agreement(服务等级协议)是在肯定开销下为保障服务的性能和可用性,服
务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在
常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时间,就会有一
些列的处罚措施,而运维,最主要的目的就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间
- HPC:High-performance computing(高性能计算,国家战略资源,不在课程范围内)
分布式
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
- 分布式应用-服务按照功能拆分,使用微服务
- 分布式静态资源–静态资源放在不同的存储集群上
- 分布式数据和存储–使用key-value缓存体系
- 分布式计算–对特殊业务使用分布式计算,好比Hadoop集群
集群与分布式
- 集群: 同一个业务体系,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的
- 分布式: 一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务
- 分布式是以收缩单个任务的实行时间来提拔效率的,而集群则是通过提高单位时间内实行的任务数
来提拔效率
- 对于大型网站,访问用户很多,实现一个聚集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。假如有效户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载环境,决
定由给哪一台去完成相应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,假如一个节点垮了,那这个业务大概就会失败
四层转发与七层转发的区别
四层转发: 四层转发是指在传输层(TCP/IP层)进行负载均衡,是基于传输层的负载均衡,常用的装备包罗硬件负载均衡器(如F5、Cisco等)和软件负载均衡器(如Nginx、HAProxy等)。它主要根据传输层的源IP地址、目的IP地址、源端口和目的端口等信息来进行负载均衡。四层转发可以实现基于网络协议和端口的负载均衡,但无法深入到应用层进行更精细的流量分发。
七层转发: 七层转发是指在应用层进行负载均衡,它可以深入到应用层的协议和数据进行分析和处理,是基于应用层的负载均衡,常用的装备包罗应用交付控制器(ADC,如F5 BIG-IP等)和应用层负载均衡软件(如Nginx、HAProxy等)。。七层转发可以根据HTTP请求头、URL、Cookie等信息进行负载均衡,从而实现更精细的流量分发和更灵活的战略设置。七层转发可以根据具体的应用需求进行定制化设置,适用于复杂的应用场景。
LVS(Linux virual server)
一、LVS先容
LVS(Linux Virtual Server)是一个开源的负载均衡软件,可以用于在Linux体系上构建高可用、高性能的应用服务器集群。
LVS基于Linux内核的IP负载均衡技术,通过将客户端请求导向一组后端服务器(称为真实服务器),从而实现对客户端请求的负载均衡。LVS支持多种负载均衡算法,如轮询、权重、哈希等,可以根据现实需求选择最合适的算法。
LVS的架构包罗调度器(负载均衡器)、虚拟服务器和真实服务器。调度器负责吸收客户端请求,并根据负载均衡算法将请求发送给合适的虚拟服务器。虚拟服务器是一个虚拟的IP地址和端口,可以对外提供服务。真实服务器是现实处理客户端请求的服务器,可以是一台或多台。
LVS相关概念
VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <–> VIP == DIP <–> RIP
二、LVS集群结构体系
LVS(Linux Virtual Server)集群的体系结构通常被划分为三个主要条理:负载均衡层、服务器群组层(或称为服务器池)、以及后端共享存储层。
1. 负载均衡层(Load Balancer)
功能: 作为整个集群体系的前端,负责吸收来自客户端的请求,并根据预设的调度算法将请求分发到后端的服务器群组中。
构成: 通常由一个或多个负载调度器(Director Server)构成,这些调度器上安装了LVS模块,用于实现负载均衡功能。别的,还大概包含备份调度器(Backup Load Balancer),以确保在主调度器故障时能够接替其工作。
特点: 调度器通过IP负载均衡技术或基于内容的请求分发技术,将请求转发到最合适的服务器上。同时,调度器还负责监控后端服务器的康健状况,并在检测到故障时将其从调度列表中剔除。
2. 服务器群组层(Server Pool/Server Array)
功能: 由一组现实运行应用服务的服务器构成,这些服务器负责处理来自负载均衡层转发的请求,并返反相应数据。
构成: 服务器群组可以包含多种类型的服务器,如WEB服务器、MAIL服务器、FTP服务器、DNS服务器等。这些服务器通过高速的LAN或WAN相连接,以确保数据的高效传输。
特点: 服务器群组中的服务器可以根据需要动态增长或淘汰,以适应不同的负载需求。同时,服务器之间的负载均衡和容错机制可以确保体系的高可用性和稳固性。
3. 后端共享存储层(Backend Storage/Shared Storage)
功能: 为服务器群组提供一个共享的存储区,使得全部服务器都能够访问相同的数据和服务。
构成: 通常由磁盘阵列装备或分布式文件体系构成,以提供高可用性和可扩展的存储办理方案。
特点: 共享存储层可以确保数据的同等性和完整性,同时淘汰数据复制和更新的开销。别的,它还可以支持多种数据访问协议和接口,以满足不同应用的需求。
- +-----------------+
- | 负载均衡层 |
- | (Load Balancer)|
- | +----+ +----+ |
- | | LB1| | LB2| |(LB2为备份)
- | +----+ +----+ |
- +-----------------+
- |
- | 转发请求
- v
- +-----------------+
- | 服务器群组层 |
- | (Server Pool/ |
- | Server Array) |
- | +----+ +----+ |
- | | RS1| | RS2| |
- | +----+ +----+ |
- | ... ... |
- | +----+ +----+ |
- | | RSN| | RSN+1| |
- | +----+ +----+ |
- +-----------------+
- |
- | 访问共享数据
- v
- +-----------------+
- | 后端共享存储层 |
- | (Backend Storage)|
- | +------------+ |
- | | 磁盘阵列/ | |
- | | 分布式FS | |
- | +------------+ |
- +-----------------+
复制代码 三、lvs的调度算法
lvs调度算法类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法: 仅根据算法本身进行调度,不考虑RS的负载环境
动态方法: 主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
lvs静态调度算法
1、RR: roundrobin 轮询 RS分别被调度,当RS设置有差别时不推荐
2、WRR: Weighted RR,加权轮询根据RS的设置进行加权调度,性能差的RS被调度的次数少
3、SH: Source Hashing,实现session sticky,源IP地址hash;未来自于同一个IP地址的请求始终发往
第一次挑中的RS,从而实现会话绑定
4、DH: Destination Hashing;目的地址哈希,第一次轮询调度至RS,后续将发往同一个目的地址的请
求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
lvs动态调度算法
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC: least connections(最少链接发)
适用于长连策应用Overhead(负载值)=activeconns(运动链接数) x 256+inactiveconns(非活
动链接数)
2、WLC: Weighted LC(权重最少链接)
默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
3、SED: Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当node1的权重为1,node2的权重为10,颠末运算前反复的调度都会被node2承接
4、NQ: Never Queue,第一轮均匀分配,后续SED
5、LBLC: Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR: LBLC with Replication,带复制功能的LBLC,办理LBLC负载不均衡标题,从负载重的复制
到负载轻的RS
四、LVS集群的类型
lvs-nat: 修改请求报文的目的IP,多目的IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目的IP
五、NAT模式
1.NAT模式先容
本质是多目的IP的DNAT,通过将请求报文中的目的地址和目的端口修改为某挑出的RS的RIP和PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和相应报文都必须经过Director转发,Director易于成为体系瓶颈
支持端口映射,可修改请求报文的目的PORT
VS必须是Linux体系,RS可以是任意OS体系
2.NAT模式数据逻辑
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目的地址(VIP)访问目的端口(9000port)
2.VS服务器吸收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送相应数据包,包中的相应保温为数据来源(RIP1)相应目的(CIP)相应端口(9000port)
4.VS服务器吸收到相应数据包,改变包中的数据来源(RIP1–>VIP),相应目的端口(9000–>80)
5.VS服务器把修改过报文的相应数据包回传给客户端
6.lvs的NAT模式吸收和返回客户端数据包时都要颠末lvs的调度机,以是lvs的调度机容易阻塞
3.NAT模式实验详解
1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
2.Web服务器采用仅主机网卡与director相连
3.Web服务器网关指向192.168.0.100
4.后端web服务器不需要连接外网
Ⅰ、实验环境
主机名角色IPLVS调度器(vs)192.168.0.100/24,vip 172.25.254.100/24webserver1真实服务器1(RS)192.168.0.10/24,GW 192.168.0.100webserver2真实服务器2(RS)192.168.0.20/24,GW 192.168.0.100client测试机当地 Ⅱ、设置下令
0.webserver1、webserver2设置
- #webserver1 网卡配置
- [root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
- [connection]
- id=eth0
- type=ethernet
- interface-name=eth0
- [ipv4]
- address1=192.168.0.10/24,192.168.0.100
- method=manual
- #webserver1 http配置
- [root@webserver1 ~]# yum install httpd -y
- [root@webserver1 ~]# echo this is 192.168.0.10 > /var/www/html/index.html
- #webserver2 同理
- [root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
- [connection]
- id=eth0
- type=ethernet
- interface-name=eth0
- [ipv4]
- address1=192.168.0.20/24,192.168.0.100
- method=manual
- [root@webserver2 ~]# yum install httpd -y
- [root@webserver2 ~]# echo this is 192.168.0.20 > /var/www/html/index.html
复制代码 1.在lvs中启用内核路由功能
- [root@lvs ~]# sysctl -a | grep ip_forward #查看打开内核路由功能的命令
- net.ipv4.ip_forward = 0 # 0表示关闭,1表示打开
- net.ipv4.ip_forward_update_priority = 1
- net.ipv4.ip_forward_use_pmtu = 0
-
- [root@lvs ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf #修改配置文件
- [root@lvs ~]# sysctl -p #加载参数
- net.ipv4.ip_forward = 1
复制代码 2.在lvs中安装ipvsadm
- [root@lvs ~]# yum install ipvsadm -y
复制代码 3,在lvs中添加调度战略
- [root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
- [root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
- [root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
复制代码 4.查看战略
- [root@lvs ~]# ipvsadm -Ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 172.25.254.100:80 rr
- -> 192.168.0.10:80 Masq 1 0 0
- -> 192.168.0.20:80 Masq 1 0 0
-
- [root@lvs ~]# cat /proc/net/ip_vs
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP AC19FE64:0050 rr
- -> C0A80014:0050 Masq 1 0 3
- -> C0A8000A:0050 Masq 1 0 2
- [root@lvs ~]# cat /proc/net/ip_vs_conn
- Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PEName PEData
- TCP AC19FE01 C777 AC19FE64 0050 C0A8000A 0050 TIME_WAIT 9
- TCP AC19FE01 C779 AC19FE64 0050 C0A8000A 0050 TIME_WAIT 9
- TCP AC19FE01 C778 AC19FE64 0050 C0A80014 0050 TIME_WAIT 9
- TCP AC19FE01 C776 AC19FE64 0050 C0A80014 0050 TIME_WAIT 9
- TCP AC19FE01 C77A AC19FE64 0050 C0A80014 0050 TIME_WAIT 9
复制代码 5.生存规则
- [root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
- [root@lvs ~]# cat /etc/sysconfig/ipvsadm
- -A -t 172.25.254.100:80 -s rr
- -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
- -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
复制代码 6.测试 (在当地shell下)
- [C:\~]$ for /L %i in (1,1,4) do (curl 172.25.254.100)
- C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 )
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 21 100 21 0 0 7945 0 --:--:-- --:--:-- --:--:-- 10500
- this is 192.168.0.10
- C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 )
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 21 100 21 0 0 8070 0 --:--:-- --:--:-- --:--:-- 10500
- this is 192.168.0.20
- C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 )
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 21 100 21 0 0 7933 0 --:--:-- --:--:-- --:--:-- 10500
- this is 192.168.0.10
- C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 )
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 21 100 21 0 0 7903 0 --:--:-- --:--:-- --:--:-- 10500
- this is 192.168.0.20
复制代码 六、DR模式
1.DR模式先容
DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP地点的接口的MAC,目的MAC是某挑选出的RS的RIP地点接口的MAC地址;源IP/PORT,以及目的IP/PORT均保持不变
在DR模式中,RS吸收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,以是RS和vs上都要有vip
2.DR模式特点
1.Director和各RS都设置有VIP
2.确保前端路由器将目的IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址
- arptables -A IN -d $VIP -j DROP
- arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
复制代码
- /proc/sys/net/ipv4/conf/all/arp_ignore
- /proc/sys/net/ipv4/conf/all/arp_annou
复制代码 4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络
5.RIP的网关不能指向DIP,以确保相应报文不会经过Director
6.RS和Director要在同一个物理网络
7.请求报文要经过Director,但相应报文不经过Director,而由RS直接发往Client
8.不支持端口映射(端口不能修改)
9.RS可使用大多数OS体系
3.DR模式数据逻辑
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机吸收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出相应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC
4.DR模式实验详解
1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP
2.Web服务器采用和DIP相同的网段和Director连接
3.每个Web服务器设置VIP
4.每个web服务器可以出外网
Ⅰ、实验环境
主机名ipvip角色client172.25.254.10 vmware NATnull测试主机routerNAT-eth0:172.25.254.100,仅主机eth1:192.168.0.10null路由器lvs192.168.0.200,GW 192.168.0.10 仅主机lo:192.168.0.100调度器webserver1192.168.0.101,GW 192.168.0.10 仅主机lo:192.168.0.100web服务器1webserver2192.168.0.102, GW 192.168.0.10 仅主机lo:192.168.0.100web服务器2 Ⅱ、设置实验环境
- #在客户端主机中为nat模式网卡
- [root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
- [connection]
- id=eth0
- type=ethernet
- interface-name=eth0
- [ipv4]
- address1=172.25.254.10/24,172.25.254.2
- method=manual
- dns=114.114.114.114;
- [root@client ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 172.25.254.2 0.0.0.0 UG 100 0 0 eth0
- 172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
复制代码- #在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡
- [root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
- [connection]
- id=eth0
- type=ethernet
- interface-name=eth0
- [ipv4]
- address1=172.25.254.100/24,172.25.254.2
- method=manual
- dns=114.114.114.114;
- [root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
- [connection]
- id=eth1
- type=ethernet
- interface-name=eth1
- [ipv4]
- address1=192.168.0.10/24
- method=manual
- [root@router ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 172.25.254.2 0.0.0.0 UG 100 0 0 eth0
- 172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
- 192.168.0.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1
复制代码- #对于dr调度器设定网卡为仅主机模式
- [root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
- [connection]
- id=eth1
- type=ethernet
- interface-name=eth1
- [ipv4]
- address1=192.168.0.200/24,192.168.0.10
- method=manual
- [root@lvs ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth1
- 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1
复制代码- #对于RS1 RS2的设定网卡为仅主机模式
- [root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
- [connection]
- id=eth0
- type=ethernet
- interface-name=eth0
- [ipv4]
- address1=192.168.0.101/24,192.168.0.10
- method=manual
- [root@webserver1 ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth0
- 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
- ---------------------------------------------------------------------------------------
- [root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
- [connection]
- id=eth0
- type=ethernet
- interface-name=eth0
- [ipv4]
- address1=192.168.0.102/24,192.168.0.10
- method=manual
- [root@webserver2 ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth0
- 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
复制代码 Ⅲ、办理vip标题
DR模子中各主机上均需要设置VIP,办理地址辩说的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS修改内核参数,来限制arp相应和通告的级别
限制相应级别:arp_ignore
- 0:默认值,表示可使用当地任意接口上设置的任意地址进行相应
- 1:仅在请求的目的IP设置在当田主机的吸收到请求报文的接口上时,才给予相应
限制通告级别:arp_announce
- 0:默认值,把本机全部接口的全部信息向每个接口的网络进行通告
- 1:尽量避免将接口信息向非直接连接网络进行通告
- 2:必须避免将接口信息向非本网络进行通告
Ⅳ、设置详情
1.在lvs 和 rs 中设定vip
- [root@lvs ~]# ip addr add dev lo 192.168.0.100/32
- [root@webserver1 ~]# ip addr add dev lo 192.168.0.100/32
- [root@webserver2 ~]# ip addr add dev lo 192.168.0.100/32
复制代码 2.在RS1和RS2中办理相应标题
- [root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- [root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- [root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
- [root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- [root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- [root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- [root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
- [root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
复制代码 3.在lvs中设置战略
- [root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
- [root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g -w 1
- [root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g -w 2
- [root@lvs ~]# 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.0.100:80 wrr
- -> 192.168.0.101:80 Route 1 0 0
- -> 192.168.0.102:80 Route 2 0 0
复制代码 4.在client中测试效果
- [root@client ~]# for i in {1..10}
- > do
- > curl 192.168.0.100
- > done
- webserver1 192.168.0.101
- webserver2 192.168.0.102
- webserver2 192.168.0.102
- webserver1 192.168.0.101
- webserver2 192.168.0.102
- webserver2 192.168.0.102
- webserver1 192.168.0.101
- webserver2 192.168.0.102
- webserver2 192.168.0.102
- webserver1 192.168.0.101
复制代码 七、TUN模式
1.TUN模式先容
LVS-TUN模式:它的连接调度和管理与VS/NAT中的一样,使用ip隧道技术的原理,即在原有的客户端请求包头中再加一层IP Tunnel的包头ip首部信息,不改变原来整个请求包信息,只是新增了一层ip首部信息,再使用路由原理将请求发给RS server,不外要求的是全部的server必须支持”IPTunneling”或者”IP Encapsulation”协议。
2.TUN模式数据逻辑
整个请求过程示意:
这里假设CIP的CIP地址为:202.10.1.100 ,DIR的Eth1的ip地址为:202.10.1.101, Eth0的ip地址为:192.168.1.100/24 ,RIP1的Eth0地址为:192.168.1.10/24,Eth1的ip地址为:10.10.10.10/24,下面的就讲讲请求细节:
① client向目的vip发出请求,DIR吸收。此时IP包头及数据帧头信息如下:
src ipsrc portdst ipdst port202.10.1.1010011202.10.1.10180 ② DIR根据负载均衡算法选择一台active的RS(RIP1),使用ip tunnel技术将此RIP1地点网卡的ip地址作为目的ip地址,将DIP作为源地址重封装一层IP首部,并记录到hash表中,DIR将请求包发送给RIP1。此时IP包头及数据帧头信息如下:
src ipdst ipsrc ipsrc portdst ipdst port192.168.1.100192.168.1.10202.10.1.1010011202.10.1.10180 ③RIP1(192.168.1.10)收到DIR发过来的请求后,拆开后发现请求包中里面还有一层ip包头,并且该ip包头的目的IP(VIP)与当地loopback口地址匹配,于是处理这个报文。随后重新封装报文,通过自己的网关将相应报文发送给客户端,此时IP包头及数据帧头信息如下:
src ipsrc portdst ipdst port202.10.1.10180202.10.1.1010011 LVS/TUN模式就是使用ip tunnel技术原理,在不改变原有的ip包头首部信息的底子上再封装一层ip首部信息,再使用路由的原理将请求转交给后端RS server,以是全部的server都必须支持ip tunnel隧道 ,相比LVS/DR模式,LVS/TUN对网络的消耗比力大,由于要支持ip tunnel的开销,以是这也是为什么DR模式是三种模式中效率最高的一种模式。
八、fullnat模式
fullnat:通过同时修改请求报文的源IP地址和目的IP地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需相应给DIP;但Director还要将其发往Client
3.请求和相应报文都经过Director
4.支持端口映射
注意:此类型kernel默认不支持
九、防护墙标签办理轮询错误标题
标题引出
以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询庞杂的标题
当我第一次访问80被轮询到RS1后下次访问443仍然大概会被轮询到RS1上
在RS1和RS2中安装mod_ssl并重启apache
- yum install mod_ssl -y
- systemctl restart httpd
复制代码 在lvs中设置调度,由于我们要调度80和443两个端口以是我们需要设定两组战略
- [root@lvs ~]# ipvsadm -C
- [root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
- [root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
- [root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
- [root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
- [root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
- [root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g
- [root@lvs ~]# 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.0.100:80 rr
- -> 192.168.0.101:80 Route 1 0 0
- -> 192.168.0.102:80 Route 2 0 0
- TCP 192.168.0.100:443 rr
- -> 192.168.0.101:443 Route 1 0 0
- -> 192.168.0.102:443 Route 1 0 0
复制代码 当我们使用client测试时发现两次连续访问会轮询到同一个服务器上
- [root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
- webserver2 192.168.0.102
- webserver2 192.168.0.102
- [root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
- webserver1 192.168.0.101
- webserver1 192.168.0.101
- [root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
- webserver2 192.168.0.102
- webserver2 192.168.0.102
复制代码 标题办理
MARK target 可用于给特定的报文打标记
其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服务:可将多个不同的应用使用同一个集群服务进行调度
实现方法:
1.在Director(lvs)主机打标记
- iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
复制代码 2.ipvsadm使用 -f 基于火墙标记
- ipvsadm -A -f NUMBER [options]
复制代码 例:在lvs中设置端口标签,将80和443设为团体
- [root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 123
- [root@lvs ~]# iptables -t mangle -nL #查看规则
- Chain PREROUTING (policy ACCEPT)
- target prot opt source destination
- MARK tcp -- 0.0.0.0/0 192.168.0.100 multiport dports 80,443 MARK set 0x7b
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- Chain POSTROUTING (policy ACCEPT)
- target prot opt source destination
复制代码 再设置调度规则
- [root@lvs ~]# ipvsadm -A -f 123 -s rr
- [root@lvs ~]# ipvsadm -a -f 123 -r 192.168.0.101 -g
- [root@lvs ~]# ipvsadm -a -f 123 -r 192.168.0.102 -g
- [root@lvs ~]# ipvsadm -Ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- FWM 123 rr
- -> 192.168.0.101:0 Route 1 0 0
- -> 192.168.0.102:0 Route 1 0 0
复制代码 client测试
- [root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
- webserver2 192.168.0.102
- webserver1 192.168.0.101
- [root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
- webserver2 192.168.0.102
- webserver1 192.168.0.101
- [root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
- webserver2 192.168.0.102
- webserver1 192.168.0.101
复制代码 十、ipvsadm下令常用选项
- ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]
- ipvsadm -D -t|u|f <集群服务地址>
- ipvsadm -C
- ipvsadm -R
- ipvsadm -S [-n]
- ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]
- ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>
- ipvsadm -L|l [options]
- ipvsadm -Z [-t|u|f <集群服务地址>]
- ipvsadm --set <超时时间>
- ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]
- ipvsadm --stop-daemon <主或备>
- ipvsadm -h
- --add-service -A 添加一个集群服务,需要使用选项
- --edit-service -E 编辑一个集群服务,需要使用选项
- --delete-service -D 删除指定集群服务,需要使用选项
- --clear -C 删除所有集群服务,包括真实服务器转发策略规则
- --restore -R 从标准输入中恢复策略规则
- --save -S 保存策略规则到标准输出
- --add-server -a 添加一个真实服务器,需要使用选项
- --edit-server -e 编辑一个真实服务器,需要使用选项
- --delete-server -d 删除一个真实服务器,需要使用选项
- --list -L|-l 查看集群服务列表,包括真实服务器转发策略规则
- --zero -Z 计数器清零。清除连接数、包转发等数量统计信息
-
- --tcp-service -t <集群服务地址> 允许集群服务使用的传输协议为TCP。<IP:Port>
- --udp-service -u <集群服务地址> 允许集群服务使用的传输协议为UDP。<IP:Port>
- --fwmark-service -f <防火墙标识> 使用一个整数值来防火墙标识集群服务,而不是地址、
- 端口和协议使用它,我们可以通过结合IPtables将多
- 个以调度器为目标的端口定义成一个防火墙标识,由
- ipvsdam通过此项关联标识,则可以实现对一个IP多
- 端口调度,即实现后端服务器可以开放多个服务
- --scheduler -s scheduler 指定集群服务使用的调度算法:rr|wrr|lc|wlc|lblc
- |lblcr|dh|sh|sed|nq,默认为wlc
- --persistent -p <超时时间> 开启持久化服务,开启它则表示在指定时间内,来自同
- 一IP的请求都会转发到后端同一台真实服务器上
- --netmask -M <网络掩码> 使用网络掩码来屏蔽持久化来源IP的地址范围,默认值
- 为255.255.255.255,即所有来源IP请求都会享受持久
- 化服务
- --real-server -r <真实服务器地址> 指定真实服务器的主机IP与端口
- --gatewaying -g 指定真实服务器转发工作模式,使用DR模式,默认
- --ipip -i 指定真实服务器转发工作模式,使用TUN模式
- --masquerading -m 指定真实服务器转发工作模式,使用NAT模式
- --weight -w <权重值> 指定真实服务器的权重值
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |