翼度科技»论坛 云主机 LINUX 查看内容

高并发解决方法-LVS、LVS-NAT、LVS-DR

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
高并发解决方法-LVS、LVS-NAT、LVS-DR

前言:

集群功能分类:
1.LB Load Balancing,负载均衡(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着重点。LVS
2.HA High Availability 高可用集群(增加服务可用性),是以提升服务的始终在线能力为着重点,不会因为宕机而导致服务不可用。Keepalived
大型网站高并发解决方案LVS

负载均衡

(Load Balance)负载均衡,当然这是一个简单的概括,比如,我有10台机器都提供web服务,那么我如何均衡的利用这10台机器呢,让这10台机器保证高性能、高可用、高并发就是负载均衡要考虑和要做的事情。
实现负载均衡一般可以使用顺序、比重、流量、服务类别等进行分配,负载均衡的部署方式也分为路由和服务直接返回模式
负载均衡的主要方式
1.http重定向
2.DNS负载均衡
优点:
将负载均衡的工作交给了DNS,省却了网站管理维护负载均衡服务器的麻烦,同时许多DNS还支持基于地理位置的域名解析,将域名解析成距离用户地理最近的一个服务器地址,加快访问速度吗,改善性能。
缺点:
目前的DNS解析是多级解析,每一级DNS都可能化缓存记录A,当某一服务器下线后,该服务器对应的DNS记录A可能仍然存在,导致分配到该服务器的用户访问失败。
DNS负载均衡的控制权在域名服务商手里,网站可能无法做出过多的改善和管理。
不能够按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前运行状态,所以其的负载均衡效果并不是太好。
可能会造成额外的网络问题。为了使本DNS服务器和其他DNs服务器及时交互,保证DNSs数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。
3.反向代理负载均衡
4.ip负载均衡
优点:在响应请求时速度较反向服务器负载均衡要快。
缺点。如法处理更高级的请求
5.数据链路层负载均衡
优点:不需要负载均衡服务器进行IP地址的转换。数据响应时,不需要经过负载均衡服务器。
缺点:负载均衡服务器的网卡带宽要求较高。
四层负载和七层负载
所谓四层就是基于IP+端口的负载均衡,主要代表有lvs。
七层负载也称内容交换,就是基于URL等应用层信息.的负载均衡,主要代表有nginx。
关于代理
正向代理
反向代理
LVS概述
LVS是Linux Virtual Server 也就是Linux虚拟服务器
LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务,只是把特定的请求转发给对应的real server(真正提供服务的主机),从而实现集群环境中的负载均衡。
LVS工作模式:
NAT转发模式

1.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端lP),后面统称为CIP,目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标IP地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
R.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
4.然后LVS将此报文的源地址修改为本机并发送给客户端。
优点:
网络隔离安全,节约IP地址
还有DR直接路由模式、TUN-IP隧道模式、FULL-NAT等...
LVS-NAT实战案例
准备:
client: VMNET0 192.168.31.86
LVS: VMNET0 192.168.31.143
VMNET2 192.168.198.128
web1: VMNET 2 192.168.198.129
web2: VMNET 2 192.168.198.130
关闭防护墙 关闭selinux
步骤:
1.web1配置网站和路由
  1. yum install -y httpd  //先使用NAT网络连接 安装好httpd
  2. systemctl start httpd
  3. systemctl enable httpd  //完成后切换为vmnet2仅主机网络
  4. echo "web1" > /var/www/html/index.html
  5. route add default gw 192.168.198.128  //配置真实服务器的网络出口 -net外部网络 gw网关
  6. [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
  7. TYPE="Ethernet"
  8. PROXY_METHOD="none"
  9. BROWSER_ONLY="no"
  10. BOOTPROTO="static"
  11. DEFROUTE="yes"
  12. IPV4_FAILURE_FATAL="no"
  13. IPV6INIT="yes"
  14. IPV6_AUTOCONF="yes"
  15. IPV6_DEFROUTE="yes"
  16. IPV6_FAILURE_FATAL="no"
  17. IPV6_ADDR_GEN_MODE="stable-privacy"
  18. NAME="ens33"
  19. UUID="2a55dccb-7784-4b4e-a5e2-4004033803fa"
  20. DEVICE="ens33"
  21. ONBOOT="yes"
  22. IPADDR=192.168.198.129
  23. NETMASK=255.255.255.0
  24. GATEWAY=192.168.198.128  //只允许LVS的vmnet2通过
  25. DNS1=114.114.114.114
复制代码
2.web2配置网站和路由
  1. yum install -y httpd
  2. systemctl start httpd
  3. systemctl enable httpd
  4. echo "web2" > /var/www/html/index.html
  5. route add default gw 192.168.198.128  //配置真实服务器的网络出口 -net外部网络 gw网关
  6. [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
  7. TYPE="Ethernet"
  8. PROXY_METHOD="none"
  9. BROWSER_ONLY="no"
  10. BOOTPROTO="static"
  11. DEFROUTE="yes"
  12. IPV4_FAILURE_FATAL="no"
  13. IPV6INIT="yes"
  14. IPV6_AUTOCONF="yes"
  15. IPV6_DEFROUTE="yes"
  16. IPV6_FAILURE_FATAL="no"
  17. IPV6_ADDR_GEN_MODE="stable-privacy"
  18. NAME="ens33"
  19. UUID="2a55dccb-7784-4b4e-a5e2-4004033803fa"
  20. DEVICE="ens33"
  21. ONBOOT="yes"
  22. IPADDR=192.168.198.130
  23. NETMASK=255.255.255.0
  24. GATEWAY=192.168.198.128
  25. DNS1=114.114.114.114
复制代码
3.LVS-NAT配置路由功能和负载策略
  1. [root@localhost ~]# vim /etc/sysctl.conf  //启动路由转发功能
  2. net.ipv4.ip_forward = 1
  3. [root@localhost ~]# sysctl -p  //查询路由转发功能是否开启
  4. yum install -y ipvsadm  //安装LVS
  5. ipvsadm -A -t 192.168.31.32:80 -s rr  //-A 对外提供地址 -t tcp协议 -s rr 使用rr策列轮询策略
  6. ipvsadm -a -t 192.168.31.32:80 -r 192.168.192.129:80 -m  //-a对内真实服务器 -r真实服务器地址
  7. ipvsadm -a -t 192.168.31.32:80 -r 192.168.192.130:80 -m
  8. [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
  9. BOOTPROTO=static
  10. NAME=ens37
  11. DEVICE=ens37
  12. ONBOOT=yes
  13. IPADDR=192.168.198.128
  14. NETMASK=255.255.255.0
复制代码
4.client测试
  1. [root@localhost ~]# curl 192.168.198.129   //测试 直接curl realserver内网 是不行的  如果可以说明realserver并不在内网
  2. curl: (7) Failed to connect to 192.168.198.129: 网络不可达
  3. [root@localhost ~]# curl 192.168.198.130
  4. curl: (7) Failed to connect to 192.168.198.130: 网络不可达
  5. [root@localhost ~]# curl 192.168.31.143   //测试 curl LVSserver 正确是把请求通过DIP转发到realserver
  6. web22222
  7. [root@localhost ~]# curl 192.168.31.143
  8. web111111
复制代码
DR转发模式

Director Server作为群集的访问入口,但不作为网关使用,后端服务器池中的Real Server与Director Server在同一个物理网络中,发送给客户机的数据包不需要经过Director Server。为了响应对整个群集的访问,DS(前端负载均衡节点服务器)与RS(后端真实服务器)都需要配置有VIP地址
每个Real Server上都有两个IP:VIP(负载均衡对外提供访问的 IP 地址)和RIP(负载均衡后端的真实服务器 IP 地址),但是VIP是隐藏的,就是不能提供解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP(负载均衡与后端服务器通信的 IP 地址),在DIR接收到客户端的请求后,DIR根据负载算法选择一台rs sever的网卡mac作为客户端请求包中的目标mac,通过arp转交给后端RS serve处理,后端再通过自己的路由网关回复给客户端
特点:
1.Director Server 和 Real Server 必须在同一个物理网络中
2.Real Server 可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对 RIP 进行直接访问
3.Director Server作为群集的访问入口,但不作为网关使用
4.所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server
5.Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server
6.Real Server 上的 lo 接口配置 VIP 的 IP 地址
优点:
负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为 超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。
LVS-DR模式实战
准备:
四台统一网段的ip 关闭selinux 关闭防火墙
client:192.168.70.132
LVS:192.168.70.130
web1:192.168.70.133
web1:192.168.70.134
步骤:
1.LVS增加VIP
  1. ifconfig  //查看网卡
  2. ifconfig ens33:0 192.168.70.131 broadcast 192.168.70.255 netmask 255.255.255.0 up  //添加新ip
  3. route add -host 192.168.70.131  //添加路由
复制代码
2.LVS开启路由转发
  1. vim /etc/sysctl.conf
  2. net.ipv4.ip_forward = 1  // 开启路由转发功能
  3. net.ipv4.conf.all.send_redirects = 0  //禁止转发重定向报文
  4. net.ipv4.conf.ens33.send_redirects = 0  //禁止ens33转发重定向报文
  5. net.ipv4.conf.default.send_redirects = 0  //禁止转发默认重定向报文
复制代码
3.LVS设置路由转发规则/规则(设置ipvsadm)
  1. yum install ipvsadm -y
  2. ipvsadm -C  //清除ipvs规则
  3. ipvsadm -A -t 192.168.70.131:80 -s rr  //添加vip规则
  4. ipvsadm -a -t 192.168.70.131:80 -r 192.168.70.133:80 -g
  5. ipvsadm -a -t 192.168.70.131:80 -r 192.168.70.134:80 -g
  6. ipvsadm -ln  //检查
  7. ipvsadm-save > /etc/sysconfig/ipvsadm  //让配置的规则永久生效
  8. systemctl enable ipvsadm
复制代码
4.配置web集群
设置子网掩码32(两台web都一样如下配置)
  1. yum install -y httpd
  2. echo web1 > /var/www/html/index.html
  3. systemctl start httpd
  4. systemctl enable httpd
  5. ifconfig lo:0 192.168.70.131/32  //在本地回环接口(lo)上添加一个逻辑IP地址 /32表示这个地址的掩码为255.255.255.255,即单IP.因为在LVS-DR模式下,需要在每台真实服务器上都设置一个虚拟IP(VIP),但是两一样ip会冲突,这样当负载均衡器下线时,真实服务器可以接管VIP,继续提供服务。
复制代码
设置内核参数
  1. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  //忽略arp响应,只有当当目标IP与本机接口地址匹配时,才响应ARP请求。
  2. 这样可以防止接口收到发往其他IP的ARP请求时也错误响应。
  3. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  //接口会主动对所有接收到的ARP请求进行回应,即使目标IP不是本地IP。
复制代码
5.client测试
  1. curl 192.168.70.131
复制代码
可以在LVS看详细状态
  1. ipvsadm -Lnc
复制代码
对以上两种模式的补充:
我们在配置ipvsadm时 rr表示虚拟服务算法的选择
静态调服方法:
1.rr 轮询算法 均等的对待每一台服务器,不管服务器上实际的连接数量和系统负载
2.wrr 加权轮询 根据真实服务器的不同处理能力,动态地调整其权限,来调度访问请求
动态调服方法
3.lr 最少连接 调度器通过”最少连接“调度算法动态地将网络请求调度到已建立的链接数最少的服务器上
4.wlc 加权最少连接 调度器可以自动问询真实服务器的负载情况,并动态地调整其权限
命令补充:
  1. 管理虚拟服务
  2. ipvsadm -E -t 192.168.70.131:80 -s wrr  //修改算法
  3. ipvsadm -D -t 192.168.70.131:80  //删除指定虚拟服务
  4. ipvsadm -C  //全部清空
  5. 管理真实服务
  6. ipvsadm -a -t 192.168.70.131:80 -r 192.168.70.133 -g -w 5  //增加真实服务器的权重
  7. ipvsadm -e -t 192.168.70.131:80 -r 192.168.70.133 -g -w 2  //修改真是服务器的权重
  8. ipvsadm -d -t 192.168.70.131:80 -r 192.168.70.133  //删除真实服务器
复制代码
来源:https://www.cnblogs.com/xuxuxuxuxu/p/17673002.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具