目录
目录
NET模式
NET模式原理
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的调度机容易阻塞客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通
过PREROUTING后被ipvs结果并作nat转发
因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工
作。所以在做lvs时要把iptables的火墙策略全清理掉。
所需要的环境
环境三台红帽9
关闭三台主机的防火墙,和selinux指令如下
systemctl stop firewalld
setenforce 0
分为lvs,webserver1,webserver2
lvs主机双网卡一个网卡用NTE桥接网络172.25.254.100/24,网关为172.25.254.2;一个网卡用仅主机网络192.168.0.100/24,网关为本主机地址的网关
第二块网卡,选为仅主机
webserver1一个网卡仅主机的ip为192.168.0.10/24,网关为192.168.0.100
网卡选为仅主机,ip地址网关如下:
webserver2一个网卡仅主机的ip为192.168.0.20/24,网关为192.168.0.100
选为仅主机
在lvs主机上进行设置
sysctl -a | grep ip_forward
查询内核路由功能是否开启
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
lvs中打开内核路由功能
sysctl -p
启动
在两台webserver上,注意两台
yum install httpd -y
下载httpd服务
systemctl restart httpd
重启服务
echo webserver1 - 192.168.0.10 > /var/www/html/index.html
webserver1上
echo webserver2 - 192.168.0.20 > /var/www/html/index.html
webserver2上
将内容写入httpd配置文件中
systemctl restart httpd
在lvs中检测
curl 192.168.0.10
curl 192.168.0.20
可以通
在lvs上配置ipvsadm
dnf install ipvsadm -y
安装lvs服务
服务的信息
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -Ln
查看是否配置成功
服务有啦,rr表示轮流调度10一次,20一次,但不知道要调度那些主机
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
写入192.168.0.10和192.168.0.20
保存到/etc/sysconfig/ipvsadm
成功两次20,一次10
-A #添加
-E #修改
-t #tcp服务
-U #udp服务
-s #指定调度算法,默认为WLC
-p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-f #firewall mask 火墙标记,是一个数字
DR模式
环境配置
共5台红帽9,一台lvs一台router路由器一台client客户端两台webserver主机
lvs,一个网卡是仅主机ip地址及网关如下回环接口lo为192.168.0.200
仅主机
router路由器
两个网卡一个对外一个仅主机,IP地址及网关如下
vim /etc/sysctl.conf
进入配置文件
net.ipv4.ip_forward=1
sysctl -p
打开内核路由功能
client客户端主机
一个网卡对外,网关路由如下
两个webserver
要设置回环接口不对外通信,回环地址为192.168.0.200
websever1
webserver2
在lvs中配置ipvsadm
在客户端clinet测试
成功
lvs算法
类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:
静态方法和动态方法静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
静态
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,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
动态
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC:least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数)x256+inactiveconns(非活动链接数)
2、WLC:Weighted Lc(权重最少链接)
默认调度方法Overhead=(activeconnsx256+inactiveconns)/weight
3、SED:Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns)x256/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
防火墙标记解决轮询调度问题
环境与上面DR一致
两台webserver主机都下载
yum install mod_ssl -y
下载mod_ssl
systemctl restart httpd
重启服务
netstat -antlupe | grep httpd
查询端口是否开启
在lvs主机中
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
这条命令是在 iptables 的 mangle 表的 PREROUTING 链中添加了一条规则。
具体作用如下:
-t mangle:指定操作的表为 mangle 表。
-A PREROUTING:表示在 PREROUTING 链中添加规则。
-d 192.168.0.200:指定目标 IP 地址为 192.168.0.200 。
-p tcp:指定协议为 TCP 。
-m multiport --dports 80,443:表示匹配目标端口为 80 和 443 。
-j MARK --set-mark 66:表示对匹配的数据包进行标记,标记值为 66 。
检查是否成功
将之前的内容清楚,配置新的内容