1.高并发:由于分布式系统的问世,高并发(HighConcurrency)通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。
2.高并发负载均衡技术主要有两种技术:一种是基于四层的LVS负载均衡技术,一种是基于七层的Nginx技术的负载均衡技术。
3.LVS:全称(Linux Virtual Server:Linux虚拟服务器),是一个虚拟的服务器集群系统,目的是使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
4.Nginx(一种开源软件)
5.四层LVS模型
词汇:
VIP :虚拟服务器地址
DIP :转发的网络的地址
1.和RIP通信:ARP协议,获取真实的Real server的ip地址,MAC 地址
2.转发client的数据包到RIP上(隐藏的VIP)
RIP :后端真实服务器的ip地址
CIP :客户端的IP地址
注意:1.负载均衡器和客户端不进行三次握手,只负责将收到的数据包进行转发,它是保证客户端和真实服务器端的三次握手和四次分手顺利进行,
6.上网流程:
隐藏的vip:对外隐藏,对内可见
1. kernel parameter: 配置文件:/proc/sys/net/ipv4/conf/*IF*/
- arp_ignore:定义接收到的ARP请求的响应级别
0:只要本地配置的有相应地址,就给予响应
1:仅在请求目标(MAC)地址配置请求到达的接口上的时候,才给予响应。
- arp_announce:定义将自己的地址向外通告时的通告级别
0:将本地任何接口上的任何地址向外通告
1:试图仅向目标网络通告与网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告
7.操作:
7.1DR模式下的LVS(分如下四步):
1.要配置一个隐藏的VIP,将它配置到服务器的io接口上面(注意:一个网卡上面可以配置多个ip地址)
2.LVS意指虚拟器服务器
3.ipvs:嵌入到Linux内核 ipvsadm:管理应用程序
4.LVS调度方法:
4.1 四种静态调用方法: - rr:轮循 - wrr - dh - sh
4.2 动态调用方法: - lc:最小连接 - wlc:加权最小连接 (默认时的连接)- sed:最短期望延迟 - nq :never queue
-LBLC :于本地最小连接 - DH - LBLCR: 基于本地的带复制功能的最少连接
7.2搭建
LVS命令:监控多个端口号
对监控包的设置(ipvsadm是需要在服务器上安装的准备包):
1.安装ipvs内核模块: yum -y install ipvsadm
2.管理集群服务命令:ipvsadm -A -t +ip地址和端口号 -s rr
对负载包的设置:
命令格式:-a -t|u|f service-address -r service-address [-g|i|m] [-w weight]
-t|u|f service-address :事先定义好的某集群服务
7.3步骤:
1.准备好三台虚拟机
2.先配置三台虚拟机的网络
3.配置LVS的VIP(在eth0的子接口)
- ifconfig eth0:8 192.168.9.100/24
- echo 1 > /proc/sys/net/ipv4/ip_forward :这个是地址转发的配置,目的是将接收到的数据包给转发出去,而不是丢掉,其实就相当于一个路由器
4.调整RS响应,通告级别(每一台都要配置)
- echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
- echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
5.配置RS 的VIP (每一台RS都配)
- ifconfig lo:8 192.168.9.100 netmask 255.255.255.255
6.启动RS上面的httpd服务 yum -y install httpd /var/www/html vi index.html --from 内容
启动httpd: service httpd start
客户端验证:RIP 80 是可以显示的
-VIP 80 是不能显示的
7. LVS-ipvsadm
- yum -y install ipvsadm(在负载均衡的那台服务器上面安装)
- ipvsadm -A -t 192.168.9.100:80 -s rr 基于192.168.9.100:80这样的数据进行负载
- ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.12 -g
- ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.13 -g
- ipvsadm -ln
- 浏览器刷新:访问VIP
- ipvsadm -lnc
- ipvsadm -natp
node01 :192.168.9.11 作为LVS负载均衡服务器 也是DIP(eth0),也在这台负载均衡服务器上配置VIP(eth0:8)
node02 :192.168.9.12 Realserver1 RIP1 调整Rs响应和通告级别,然后在配置VIP(对外隐藏,对内可见)
node03 :192.168.9.13 Realserver2 RIP2 调整RS响应和通告级别,然后在配置VIP(对外隐藏,对内可见)
LVS中的DR模式潜在的风险:
1.当LVS负载均衡服务器挂掉的时候,那么后面的真实服务器就不能被访问了,也就意味着服务器瘫痪了,这样就引发了一个单点故障问题。
2.当后面的一台Realserver服务器挂掉的时候,这样就会使当客户端访问服务器的时候,一部分客户端是可以访问,另外一部分是不可以访问。
解决技术:keeplived技术
简介:Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其 他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
注意: dr 模型中的LVS 负载均衡一定不要忘记RealServer 中要配置隐藏的VIP 和通告级别 ,千万不要忘记。
keepalived是集群管理中保证集群高可用的服务软件
高可用:High Available
要求:
1.需要心跳机制探测后端RS是否提供服务。
a)探测down,需要从lVS中删除该RS
b)探测发送从down到up,需要从lvs中再次添加RS
2.LVS DR 需要主备
keepalived原理:
1.VRRP协议(虚拟路由冗余协议)
2.IP漂移
安装: yum -y install keepalived
启动: service keepalived start
配置文件 /etc/keepalived/keepalived.conf
日志: /var/log/message 查看日志。
简单架构图:
keepalived配置文件:
1./etc/keepalived/keepalived.conf
2.帮助手册 man keepalived.conf
3.编辑之前需要备份 cp -a keepalived.conf keepalived.conf.backup
配置文件介绍:
!Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc ********* failover@firewall.loc * * sysadmin@firewall.loc *配置邮箱 * } * * notification_email_from Alexandre.Cassen@firewall.loc ********* smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER # 配置主负载均衡器(LVS) interface eth0 virtual_router_id 51 priority 100 # 权重值 主要是要区别主备LVS的根据 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.56.100/24 dev eth0 label eth0:3 #配置虚拟服务器的IP地址(VIP) } } virtual_server 192.168.56.100 80 { #配置真实服务器的ip地址 delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.56.102 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.56.103 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }