| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux学习:四层负载均衡2 -> 正文阅读 |
|
[系统运维]Linux学习:四层负载均衡2 |
目录 (1)由于rs1和rs2的配置相同,可以把rs1的配置复制到rs2 一、LVS负载均衡四种工作模式1、LVS NET模式1.1 LVS NET模式介绍Virtual Server via NAT(LVS-NAT):用地址转换实现虚拟服务器。分发器有能被外部访问到的合法IP地址,他修改来自专有网络的流出包的地址。外界看起来包是来自分发器本身,当外界包送到转换器时,他能判断出应该将包送到内部网的哪个节点。 优点:节省IP地址,能对内部进行伪装; 缺点:效率低 1.2 LVS NET模式工作流程
LVS NET模式图解 2、DR工作模式2.1 LVS DR模式介绍Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一网段时,可以用此方法,控制管理的计算机收到请求包时直接送到参与集群的节点。 2.2 LVS DR模式工作原理DR和REAL SERVER都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有REAL SERVER对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REAL SERVER,把目的MAC地址改为REAL SERVER的MAC并发给这台REAL SERVER。这时real server收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DR和real server之间必须要在一个广播域,也可以理解为在同一台交换机上。 2.3 LVS DR模式工作流程
2.4 LVS DR模式特点
2.5 LVS DR模式图解3、LVS TUN工作模式3.1 LVS TUN模式介绍用IP隧道技术实现虚拟服务器。在集群的节点不在同一网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全,应该使用隧道技术中的VPN,也可使用租用专线。 TUN模式:采用NAT技术时,由于请求和相应的报文必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。所以调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。 3.2 LVS TUN模式工作流程客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址是VIP。 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。 RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。 3.3 LVS TUN模式图解4、LVS full-nat 工作模式lvs-fullnat(双向转换) 5、 四种模式的区别lvs-nat与lvs-fullnat:请求和响应报文都经由Director lvs-nat:RIP的网关要指向DIP; lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信 lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往client lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发 lvs-tun:通过在原IP报文外封装新的IP头实现转发,支持远距离通信 二、LVS ipvsadm命令的使用1、 LVS-server 安装lvs管理工具下载程序包:yum -y install ipvsadm Unit file:ipvsadm.service 主程序:/usr/sbin/ipvsadm 规则保存工具:/usr/sbin/ipvsadm-save 规则重载工具:/usr/sbin/ipvsadm-restore 配置文件:/usr/sbin/ipvsadm-config 2、命令选项-A:在服务器列表中添加一条新的虚拟服务器记录 -t:表示tcp服务 -u:表示udp服务 -s:表示使用的调度算法 -a:在服务器表中添加一条新的真实主机记录 三、实现lvs的持久连接1、定义由于HTTP是一种无状态协议,每次请求完就立即断开了。所以就需要一种持久连接机制,来把同一用户的HTTP请求在超时时间内都重定向到同一台realserver,超时时间可以自己定义。 2、lvs调度算法lvs调度算法分为静态和动态两种 2.1 静态算法(4种)只根据算法进行调度,而不考虑后端服务器的实际连接情况和负载情况 1、RR:轮叫调度(Round Robin) 调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等的对待每一台服务器,而不管服务器上实际的连接数和系统负载。 2、WRR加权轮叫(Weight RR) 根据真实服务器的不同处理能力来调度访问请求。可以保证处理能力强的服务器处理更多的访问流量。 3、DH:目标地址散列调度(Destination Hash) 根据请求的目标IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将该请求发送到该服务器,否则返回空 4、SH:源地址hash(Source Hash0 源地址散列调度算法根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将该请求发送到该服务器,否则返回空 2.2 动态算法前端的调度器会根据后端真实服务器的实际连接情况来分配请求 1、LC:最少连接 调度器通过“最少连接”调度算法动态的将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,“最小连接”可以较好的均衡负载。 2、WLC:加权最少连接 在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少连接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。 3、SED:最短期望延迟调度 在WLC基础上改进,Overhead=(ACTIVE+1)*256/加权。不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多 缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。 4、NQ:永不排队/最少队列调度 无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算,保证不会有一个主机空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。 5、LBLC:基于局部性的最少链接 6、LBLCR:带复制的基于局部性最少连接 四、LVS DR模式搭建三台服务器A、B、C 4.1 A:load balancer调度器dir ,分发器 systemctl stop firewalld && systemctl disable firewalld关闭三台服务器的防火墙 关闭selinux :setenforce 0 安装iptables-services:yum -y install iptables-services 添加iptables服务:systemctl enable iptables 启动iptables服务:systemctl start iptables.service 清空iptables规则:iptables -F 保存空规则:service iptables save 安装ipvsadm和net-tools:yum -y install ipvsadm net-tools (1)创建LVS的DR脚本vim /usr/local/sbin/lvs_dr.sh 打开配置文件写下如下内容
(2)给脚本设权chmod 755 /usr/local/sbin/lvs_dr.sh (3)执行脚本sh /usr/local/sbin/lvs_dr.sh (4)查看路由上的VIProute -n (5)查看网卡net上的VIPip addr 4.2? B:real server(web服务器)内网网卡 (1)创建转发脚本yum -y install net-tools 安装net-tools软件包 vim /usr/local/sbin/lvs_rs.sh 编写配置脚本 #/bin/bash
以下为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
arp_ignore:定义对目标地址为本机IP的ARP询问不同的应答模式0 0-(默认值):回应任何网络接口上对任何本地ip地址的arp查询请求; 1-只回答目标IP地址是来访网络接口本地地址的ARP查询请求; 2-只回答目标IP地址是来访网络接口本地地址的ARP请求,且来访Ip必须是在该网络接口的子网段内 3-不回应该网段界面的arp请求,而只对设置唯一和连接地址做出回应 4-7-保留未使用 8-不回应所有的(本地地址0arp查询 (2)给脚本设权chmod 755 /usr/local/sbin/lvs_rs.sh (3)执行脚本sh /usr/local/sbin/lvs_rs.sh (4)查看路由上的viproute -n (5)查看网卡lo上的vipip addr 4.3? C:real server(web服务器)也可以用和rs1一样的配置方法一一配置。 (1)由于rs1和rs2的配置相同,可以把rs1的配置复制到rs2scp /usr/local/sbin/lvs_rs.sh 192.168.142.134:/root (2)然后复制到相应的文件下cp lvs_rs.sh /usr/local/sbin/ (3)执行脚本sh /usr/local/sbin/lvs_rs.sh (4)查看路由上的vip(5)查看网卡lo上的vip4.4 测试在rs1和rs2分别安装nginx:yum -y install nginx 给nginx的一个页面,重新定义,让rs1和rs2有区别,首先cd /usr/share/nginx/html/进入文件中 用vim index.html命令进入,然后按shift+:,输入set ic; 然后再shift+:,输入%s/centos/rs1/g,回车enter; 最后保存并退出。 在rs1和rs2进行相同的操作,要注意在rs2操作时,将%s/centos/rs1/g换成%s/centos/rs2/g 进行上述操作后,进行重启nginx :systemctl start nginx 在浏览器中分别输入192.168.142.2和192.168.142.136查看 (1)用ipvsadm命令查看转发规则rs1权重为1,rs2权重为2,也就是rs2刷新两次,rs1会刷新一次,但刷新页面只会出现一个页面,并不会跳转,这是由于nginx的一个配置 我们重新配置一下rs1的nginx,打开vim /etc/nginx/nginx.conf,搜索keepalive,将keepalive_timeout 后面的65改为0,然后重新启动即可。rs2的nginx相同做法。 最终实现结果:在浏览器输入公网ip192.168.142.200,刷新两次rs2页面,再次刷新会跳转到rs1页面。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/16 6:06:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |