0
点赞
收藏
分享

微信扫一扫

OpenHarmony实战:轻量级系统之子系统移植概述

彪悍的鼹鼠 04-08 18:30 阅读 0

一、负载均衡技术

1、介绍:

负载均衡技术(Load Balance)是一种概念,其原理就是把分发流量、请求到不同的服务器,平均分配用户请求。

2、作用:

流量分发,请求平均,提高系统处理能力,降低单例压力。

安全,隐藏后端真实服务。

屏蔽非法请求。(七层负载均衡)

3、负载均衡分类:

二层负载均衡 (mac):二层负载均衡主要工作在网络的数据链路层,它通过虚拟MAC地址的方式实现。当外部请求到达时,负载均衡器接收这些请求,替换请求的目标MAC地址为实际服务器的MAC地址。

三层负载均衡 (ip):三层负载均衡工作在网络层,外部请求首先发送到虚拟IP地址,负载均衡器接收这些请求后,根据一定的算法(如轮询、权重等)选择一个后端服务器,并将请求的目标IP地址替换为所选服务器的实际IP地址。

四层负载均衡 (tcp):四层负载均衡在三层的基础上增加了对传输层(TCP/UDP)信息的处理。它不仅根据IP地址进行转发,还考虑端口号。当请求到达时,负载均衡器会根据请求的IP地址和端口号来选择后端服务器,并转发请求。

七层负载均衡 (http):七层负载均衡也称为应用层负载均衡,它工作在OSI模型的最高层——应用层。它不仅能够根据IP地址和端口号进行转发,还能解析应用层协议(如HTTP)的内容,并根据协议中的特定信息(如URL、Cookie等)来选择后端服务器。

4、四层与七层负载的区别:

(1) 四层负载均衡:

四层负载均衡根据报文中的目标地址和端口信息来选择后端服务器。当负载均衡设备接收到客户端的SYN请求时,它会根据预设的算法(如轮询、最少连接数等)选择一个最佳的服务器,并修改报文中的目标IP地址,将请求转发给该服务器。

在四层负载中,负载均衡设备只是起到一个类似路由器的转发动作,TCP的三次握手是客户端和服务器直接建立的。

(2) 七层负载均衡:

又称为“内容交换”,也就是通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。例如对图片类的请求转发到特定的图片服务器;将对文字类的请求可以转发到特定的文字服务器。

在七层负载中,负载均衡设备更类似于一个代理服务器,负载均衡和前端的客户端以及后端的服务器都会分别建立TCP连接。

二、负载均衡器LB配置

1、停止web01/web02中的keepalived服务:

负载均衡器LB自带故障转移功能,当某个服务器出现故障时,负载均衡器能够自动将流量转移到其他健康的服务器上。因此不需要在web服务器上再配置keepalived。

2、准备负载均衡器LB:

克隆负载虚拟机LB,修改IP、UUID、hosts,关闭防火墙、selinux和NetworkManager

三、nginx负载均衡实现

1、把www.shop.com域名解析到LB:

2、在LB上编译安装Nginx:

(1) 安装依赖库和环境:

yum -y install pcre-devel zlib-devel openssl-devel

yum -y install gcc gcc-c++ autoconf automake make

(2) 编译安装nginx:

tar -zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0
useradd -r -s /sbin/nologin www
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
make && make install
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3、nginx负载均衡配置:

upstream shop {
    server 10.1.1.11;  
    server 10.1.1.13;
}

server {  
    listen 80;
    server_name www.shop.com;

    location / {
        proxy_pass http://shop;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

(1) 负载配置:

① upstream shop:定义了一个名为 shop 的后端服务器组,其中包含了两台服务器 web01 和 web02。

② server_name www.shop.com:指定服务器接受的请求针对的是域名www.shop.com。

③ proxy_pass http://shop:http://shop 是一个代理传递的目标,代理服务器将客户端的请求传递给shop组中定义的服务器,http://10.1.1.11

④ proxy_set_header HOST $host:代理服务器将原始请求中的Host请求头保留并传递给后端服务器。后端应用程序(如PHP)依赖Host请求头来确定如何响应请求,如果没有正确的Host请求头,后端应用程序可能无法正确运行。

完成了上述配置就已实现了负载均衡。

检验负载均衡效果:

(2) 获取客户端真实IP地址:

当查看web服务器的日志时,发现只能获取到代理服务器的访问信息。这是因为真实客户端请求通过代理服务器转发至后端服务器,因此后端服务器认为请求都是由代理服务器发出的。

① 修改LB配置:

想要后端服务器能够获取到真实的客户端IP地址,需要在LB的nginx配置文件中添加如下两条配置:

② web01、web02修改日志格式:

http {
    ……
    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log logs/access.log main;
    ……
}

access_log logs/access.log main:指定访问日志的位置

"$http_x_forwarded_for":获取负载均衡转发前的IP

查看日志:

4、负载均衡与反向代理的区别:

负载均衡(Load Balancing)的主要目的是根据不同的算法,在多个服务器之间分配工作负载,以确保每个服务器都能够有效地处理请求,提高整体系统的性能和可用性。

反向代理(Reverse Proxy)则位于客户端和服务器之间,客户端向反向代理发送请求,然后反向代理将请求转发给后端的服务器,反向代理可以用来隐藏服务器的真实信息。

5、分发请求关键字:

upstream中的分发之后有几个关键字:

backup:备用,当upstream中定义的其他服务器都不可用时,才会将请求分发至此服务器。

down:标记为down的服务器不会被用来处理任何请求,通常用于将某个已经出现故障的服务器从负载均衡中移除。

upstream {
    server 10.1.1.10 backup或down;
    server 10.1.1.12;
}

6、nginx 负载均衡算法:

① round robin轮询方式,默认的负载均衡方式,依次将请求分配到各个后台服务器中,适用于后台机器性能一致的情况。

② weight:根据权重来分发请求到不同的机器中,指定轮询几率,用于后端服务器性能不均的情况。

upstream {
    server 10.1.1.10 weight=8;
    server 10.1.1.12 weight=2;
}

③ IP_hash:根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被分配固定的机器上。

upstream {
    ip_hash;
    server 10.1.1.10;
    server 10.1.1.12;
}

6、session持久性:

(1) cookies 与 session:

Cookies和Session是Web中常用的两种状态管理机制,用于跟踪用户会话和存储用户信息。

① Cookies存储在客户端上,Cookies可以设置过期时间,过期后自动删除,也可以选择不过期,由用户手动清除。

② Session通常存储在服务器上。Session的生命周期通常与用户的浏览器会话相关联,当用户关闭浏览器或会话超时后,Session会失效。

(2) 负载均衡出现的问题:

当负载均衡配置了轮询算法后,可能会出现验证码登录失败的问题。这是因为用户在一台服务器上输入了验证码,但随后的请求被负载均衡器路由到了另一台服务器,导致会话信息不同步,从而引发登录失败。

(3) 解决方案:

通过ip_hash算法,将生成验证码和验证都请求同一台服务器,实现session会话持久性。

upstream shop {
    ip_hash;
    server 10.1.1.11;
    server 10.1.1.13;
}

sbin/nginx -s reload

配置完成后即可成功登录:

举报

相关推荐

0 条评论