目录
封装redhat7.6版本虚拟机
- 选择7.6版本镜像,设置内存大小,设置虚拟机名
- 设置时区、选择最小化安装、不勾选kdump enable选项(kdump是在系统崩溃、死机等不良状况发生时,将发生崩溃时内存的一些数据进行保存下来,后续可供使用人员进行分析)设置自动分区(仅有根分区)
- 设置root用户密码,开始安装
- 安装完成,进入虚拟机,设置主机名并添加解析,设置防火墙和selinux关闭
- 编辑网卡配置文件,设置ip、dns、网关,重启network服务使配置生效
- 宿主机ssh连接虚拟机配置epel源
- 关闭虚拟机、清理虚拟机自身信息并压缩封装好的镜像
一、服务器架构
- C/S与B/S架构,如下图所示
- C/S架构:微信、qq等,客户端的数据都是直接从服务器加载过来的
- B/S架构:现有的绝大多数的电商平台
二、流量转发过程
- 客户访问资源过程如下:
- 网络层面(外部访问):客户访问资源,经过CDN加速,来达到各个区域内的客户都能以基本相同的速度访问想要的资源
- 企业内部服务器:
进来的数据流通过路由器进入到企业内部服务器
,往往需要先经过负载均衡层处理来分担单个服务器的压力(因为现在数据量太过庞大,单点远远无法满足需求),负载均衡层包括四层负载均衡与七层负载均衡,LVS就是四层负载均衡,但是四层无法定制分流策略,比如重定向等,这些就要交给七层负载均衡来处理,因为客户发起的往往是七层应用请求(http),最终是要到达七层(应用层)来进行处理
- 同时,
LVS往往需要部署高可用(HA)来解决调度节点(均衡器)的单点问题
- 关于四层与七层的负载均衡详解
https://blog.csdn.net/nk298120/article/details/116526345. - lvs工作模式详解
https://blog.csdn.net/nk298120/article/details/112648399.
三、LVS部署(DR直连模式)
1.添加内核策略
yum install -y ipvsadm %安装相关工具,添加策略
- 接下来我们要
新建一个虚拟服务,它需要有一个vip(虚拟ip)
,这个ip在部署完高可用后可以在不同节点之间浮动
server11上操作:
ipvsadm -A -t 172.25.0.100:80 -s rr %-A:添加一个虚拟ip,-s:指定调度算法,rr为轮询调度算法,-t:TCP服务
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.12:80 -g %-a往这个tcp服务里面添加;-r:表示真实的服务器ip;-g:表示直连模式;直连模式不支持端口转发,是什么端口就对应的是什么端口
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.13:80 -g
2.后端(real server)提供服务
server2上:
yum install -y httpd
systemctl enable --now httpd
echo server12>/var/www/html/index.html
server3上:
yum install -y httpd
systemctl enable --now httpd
echo server13>/var/www/html/index.html
3.real server禁用arp
- 在DR(直连)模式中,客户端想要通过vip访问到真实后端的资源,要求
调度节点和后端都要有相同的vip
,但是同时会有这样一个问题产生:
DR模式下,调度节点和real server真实服务器在一个vlan(同一个网段)里面,并且拥有相同的vip,那么其它主机访问vip的时候如何能够根据实现定义好的调度算法正确的在两个real server之间完成调度呢? - 我们可以
禁用后端的arp(地址广播协议)
,让主机不要对外广播自己的vip地址,就相当于不要告诉别人我有这个ip,链路层的传输只需要mac地址而不需要通过ip
后端主机添加vip使客户端可以访问到资源
两个后端都添加vip
注意
:这时候的负载均衡仍然是有问题的,因为此时能够负载均衡只是因为客户端随机访问到了server11上的vip所以才能够正常调度,正常情况下,server11、12、13上都有vip,因此客户端访问vip的时候可能会随机访问到这三个节点的任何一个节点上,那么我们该如何保证客户端在访问vip的时候只能访问到调度节点server11呢?这就需要禁用server12和server13节点的arp协议,让它们不对外广播vip地址禁用arp协议有两种方式
1、在内核层面禁用
vi /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl p
2、使用arptables_jf工具(相当于arp防火墙)禁用
arptable只针对arp协议生效,只控制arp,不影响其它协议
使用arptables_jf工具(相当于arp防火墙)禁用:
yum install -y arptables_jf %安装相关工具
arptables -A INPUT -d 172.25.0.100 -j DROP %当别人直接访问我的172.25.0.100地址的时候直接丢弃数据包,不给予相应(相当于不让别人进来)
arptables -A OUTPUT -s 172.25.0.100 -j mangle --mangle-ip-s 172.25.0.3 %当出去的地址(源地址)为172.25.0.100的时候转换为实际的ip
客户端测试
arp -d 172.25.0.100 %清除本地arp信息
curl 172.25.0.100 %访问vip,测试是否负载均衡
DR模式下的数据流走向
- client -> DR -> RS ->client
客户端访问DR,DR访问RS,RS直接把数据包定向到了客户端 - 在LVS的三种工作模式中,DR模式的工作效率最高,
它工作在第二层数据链路层,直接通过mac地址转发数据,它仅仅承担转发工作,直接把数据往后甩,最后返回给客户端,性能非常高。
- 三种工作模式中
NAT性能最差,因为需要进行地址转换,数据流一进一出原路径返回需要经过调度器,隧道模式和DR模式性能最接近,隧道模式需要支持广域网、多个网段,而DR直连模式要求必须要在一个vlan里面。