实现负载均衡

作用:

  1. 解决大并发情况下,将流量分散到多台后端服务器上,避免某台服务器流量过大,导致服务器崩溃。解决了大并发情况下能正常访问的问题。从而解决web达不到,访问不了的问题
  2. 提高了网站的性能(并发量)和用户体验。
  3. 方便网站的性能扩展
  4. 可以让业务服务器之间可以起到冗余功能--》高可用

TCP(传输控制协议)和 UDP(用户数据报协议)是传输层的两种主要协议,它们在数据包(报文)中有一些共同的特征,尽管整体结构和目的大相径庭。下面列出了一些 TCP 和 UDP 报文共有的元素:

  1. 源端口号和目的端口号:这两种协议的报文头部都包含了源端口号和目的端口号,用于标识发送和接收数据的应用程序。端口号是一个 16 位的字段。
  2. 校验和:TCP 和 UDP 的报文头部都包含校验和字段,用于检测传输过程中可能出现的数据损坏。校验和覆盖了头部和数据部分,但 UDP 的校验和是可选的,而 TCP 的校验和是必需的。

然而,需要注意的是,TCP 和 UDP 报文的结构和包含的其他字段有很大的差异:

  • TCP 报文头部 包含了序号、确认号、窗口大小、紧急指针、偏移量、标志位(如 SYN、ACK、FIN)等额外的字段,用于实现其面向连接、可靠传输的特性。
  • UDP 报文头部 相对简单,除了源端口号、目的端口号和校验和之外,只包含了一个长度字段,用于指定整个用户数据报的长度,包括头部和数据部分。

TCP 和 UDP 的主要区别在于 TCP 提供了可靠的数据传输,包括数据排序、错误检测和重传机制,而 UDP 则提供了更快、更轻量级的传输,适用于对实时性和效率要求较高的应用,如视频会议、在线游戏等,但它不保证数据的可靠传输和顺序到达。


  IP地址只找到服务器  端口号可以送到同一台服务器上的不同程序 一个程序默认只占用一个端口号

负载均衡器和所有web机 都要编译安装nginx且确保每个后端web服务器都正常提供web服务  直接克隆web2机器  然后修改ip地址 见cd  /etc/sysconfig/network-scripts/

  1. 配置负载均衡功能

备份原来的配置

[root@lb-1 conf]# cp  nginx.conf   nginx.conf.back

[root@lb-1 conf]# cp nginx.conf.default nginx.conf

cp:是否覆盖"nginx.conf"? y

cat nginx.conf

worker_processes  2;

events {

    worker_connections  2048;

}

http {

    #定义一个负载均衡器  名字叫scweb ,会将流量分发到下面的3台服务器里

    upstream scweb {

        server 192.168.159.136;

        server 192.168.159.140;

    }

   #定义一个虚拟主机,对外提供web服务

    server {

        listen 80;

        #定义一个访问网页根目录,定义一个路由,转发到scweb负载均衡配置上去处理

        location / {

            proxy_pass http://scweb;

        }

    }

nginx -t   nginx -s reload 检查语句错误 并重新启动

负载均衡调度算法

  1. 轮询 round-robin 简称rr 公平
    1. 加权轮询 ,weight值越高,获得流量就会越多,默认 weight值为1

  1. 最小连接数 least-connected

让后端的服务器知道前端的客户机的ip地址

步骤1:在负载均衡器上修改http请求报文头部字段,添加一个X-Real-IP字段

[root@lb-1 conf]# cat nginx.conf

    server {

        listen 80;

       #定义一个访问网页根目录,定义一个路由,转发到scweb负载均衡配置上去处理

        location / {

            proxy_pass http://scweb;

            #代理服务器在转发http请求报文的时候,在http请求报文的头部里增加一个字段 名字叫X-Real-IP,它的值来自客户机的ip地址

            proxy_set_header   X-Real-IP        $remote_addr;

        }

    }

}

[root@lb-1 conf]# nginx  -t   nginx  -s reload

步骤2:在每个后端real server上使用这个x_real_ip这个字段

  1. ip_hash  a hash-function is used to determine what server should be selected for the next request (based on the client’s IP address) 基于客户机的源ip地址来进行hash算法得到一个hash值(摘要值),你曾经访问过某个server,下次还是去访问这个server,不会调度到其他的server上。适合session信息保存在服务器的场景(客户机ip地址没有变化) 适合网站是需要保存用户信息,用户的信息如果是存放在服务器端里的session里,避免用户切换到其他的服务器的时候,没有它的session,session里会保存用户的登录信息,购物车等临时数据。
  2. 健康检测  Health Checks

    是负载均衡器去检查后端的web server是否正常运行,如果没有运行,就是不健康。

    fail_timeout –设置必须多次尝试失败才能将服务器标记为不可用的时间,以及将服务器标记为不可用的时间(默认为10秒)。

    max_fails –设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认为1次尝试)。

    backup 备份:当其他的服务器都不提供服务的时候,再启用这台服务器提供服务 --》备胎

    slow_start  慢启动

    down   将上游的服务器标识为不可用,不会再发送任何的请求给这台服务器

  3. upstream web_servers {

            server 192.168.203.144:80;

            server 192.168.203.149:80 max_fails=2 fail_timeout=5s;

        }

    检测方式:

  4. 被动检测  passive health checks
  5. 主动检测  active health checks  需要安装nginx plus ,需要付费

access_log  logs/host.access.log  main;  也要解开注释 方便看日志 看是否成功  tail -f scweb.access.log和hosts.access.log

[root@web-1 conf]# nginx -s reload

转发功能

一台服务器里运行了2个web服务器

  1. nginx  静态页面  --》80
  2. go  动态页面  --》8080

当用户访问nginx的80端口的时候,转发请求到go语言写的网站的8080端口上

[root@web-1 system]# cd /web1/

 nohup go run server.go &

在nginx服务器上配置转发功能

[root@web-1 conf]# nginx -t

[root@web-1 conf]# nginx -s reload

也可以转发到www.jd.com   或者www.taobao.com

中台路由转发功能

需要到web2服务器上的网页根目录下新建sc文件夹,同时sc文件夹里新建index.html文件

[root@web-2 html]# mkdir sc

[root@web-2 html]# cd sc

[root@web-2 sc]# vim index.html

welcome to sc

500错误

open  to many files  -->因为linux内核限制一个进程默认情况下只能打开1024个

ulimit -a

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

ulimit -n 100000 临时修改线程 通过给内核传递参数,一个进程可打开100000个文件

永久生效 /etc/security/limits.conf

*                soft    nofile        100000

*                hard    nofile        100000

[root@web-2 sc]# reboot

502错误:  bad gateway  负载均衡器后面的backend server都挂了,负载均衡器是好的


四层在传输层和七层(应用层)负载均衡

第四层负载均衡主要基于TCP或UDP协议,关注的是IP地址和端口号。Nginx通过监听特定的端口,接收来自客户端的请求,然后根据一定的策略(如轮询、最少连接数等)将请求分发到后端服务器。这种类型的负载均衡不关心HTTP请求的具体内容,只关注数据包的头部信息。在Nginx配置中,第四层负载均衡通常不直接配置,而是通过监听特定端口并使用`proxy_pass`指令将请求代理到后端服务器。但是,通过使用`stream`模块,Nginx也可以实现真正的第四层负载均衡。

第七层负载均衡,即应用层负载均衡,涉及到解析HTTP/HTTPS请求,可以根据URL、HTTP头、Cookie等更复杂的信息来进行请求的路由。Nginx作为第七层负载均衡器时,能够基于HTTP请求的内容进行智能分发,比如根据URL路径、主机名或者特定的HTTP头信息来选择后端服务器。

在Nginx配置中,第七层负载均衡是通过`http`或`server`块内的`location`指令来实现的。`location`指令可以基于URL模式匹配,将请求路由到不同的后端服务器组。例如:

```nginx

http {

    upstream backend {

        server backend1.example.com;

        server backend2.example.com;

    }

    server {

        listen 80;

        location /api/ {

            proxy_pass http://backend;}

        location /web/ {

            proxy_pass http://web_servers;}

Nginx作为负载均衡器,通过第四层和第七层负载均衡能力,可以提供灵活且高性能的请求分发机制,满足不同场景的需求。第四层负载均衡通常用于简单的基于端口的分发,而第七层负载均衡则提供了更精细的控制,适用于需要根据HTTP请求内容进行路由的情况。

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值