Linux企业运维--Nginx(七层负载均衡)

一、Nginx负载均衡概述

web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台web服务器组成集群,前端使用Nginx负载均衡,将请求分散的转发到我们后端服务器集群中,实现负载的分发,那么会大大提升系统的吞吐率、请求性能、高容灾之前在负载均衡调度器这里采用lvs的比较多,由于lvs只能实现对四层传输层的负载均衡,也就是说只能基于ip和端口号进行转发,假如有很多集群,比如01集群、02集群,端口号都是80,无法进行区分,lvs无法基于这种应用名称来转发进行负载均衡,因此就有了Nginx负载均衡,Nginx负载均衡既可以实现对四层的负载又可以实现对七层的负载,可以根据ip端口也可以根据应用名称来转发。

1.负载均衡原理

在之前一直认为负载均衡是当第一个用户连接过来就转发给web01,第二个用户连接过来就转发给web02,其实这是错误的,虽然有2个用户在连接,但是只会产生一个TCP连接,因为负载均衡池是一个整体,负载均衡是根据http请求来转发进行负载的,比如一个页面共有10个http请求,第一个http请求会转发给web01,第二个http请求转发给web02,也就是web01承担1,3,5,7,9的http请求,web02承担2,4,6,8,10的http请求,分工合作,当负载均衡服务器池的节点越多,页面访问的速度就会越快。

2.Nginx常用的云平台介绍

阿里云 SLB

腾讯云 CLB

青云 QLB

ucloud ULB

3.Nginx四层与七层的区别

  • Nginx负载均衡按层划分
    • ​ 二层:基于mac地址
    • ​ 三层:基于ip地址
    • ​ 四层:基于ip和端口号
    • ​ 七层:基于应用协议

      四层负载均衡:IP地址、TCP/UDP、端口号

      七层负载均衡:HTTP、HTTPS、FTP、SMTP

      下图为企业较为常用的负载拓步架构

      首先用户发送请求首先会被转发到四层负载均衡上,因为访问网站都是基于域名加端口的,四层就满足了访问条件,然后在根据请求的内容转发到七层负载上,七层负载再根据请求的类型转发到不同的后端web集群,四层和七层也可以在一台服务器上,使用Nginx就可以实现这种架构

       

二、nginx源码下载及配置

 

1.nginx官网下载地址

官方地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
下载地址:wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz

[root@server1 ~]# tar zxf master.tar.gz
[root@server1 ~]# ls
master.tar.gz  nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@server1 ~]# rm -fr *
[root@server1 ~]# ls
nginx-1.20.1.tar.gz
[root@server1 ~]# tar zxf nginx-1.20.1.tar.gz
[root@server1 ~]# ls
nginx-1.20.1  nginx-1.20.1.tar.gz
[root@server1 ~]# cd nginx-1.20.1
[root@server1 nginx-1.20.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@server1 nginx-1.20.1]# ./configure --help            ##可以看到可用参数

 2. 进入nginx源码目录进行编译

[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

checking for OS
 + Linux 3.10.0-957.el7.x86_64 x86_64
checking for C compiler ... not found              

./configure: error: C compiler cc is not found       ##显示gcc没有编辑器

[root@server1 nginx-1.20.1]# yum install -y gcc

 [root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

./configure: error: the HTTP rewrite module requires the PCRE library.   显示缺少PERC库,下载PCRE

[root@server1 nginx-1.20.1]# yum install -y pcre-devel    下载通常为库名+devel

  [root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

./configure: error: SSL modules require the OpenSSL library.   提示缺少Open

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sticky是nginx的一个模块,它是基于cookie的一种nginx负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。 (b)后端服务器处理完请求,将响应数据返回给nginx。 (c)此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值 (d)客户端接收请求,并保存带route的cookie。 (e)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。 其他需要注意的 (a)同一客户端的请求,有可能落在不同的后端服务器上。如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。 (b)cookie不一定生效。由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。 (c)客户端可能不带cookie。Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。 (d)cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。 (e)客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。 (f)Nginx sticky模块不能与ip_hash同时使用 sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly]; [name=route] 设置用来记录会话的cookie名称 [domain=.foo.bar] 设置cookie作用的域名 [path=/] 设置cookie作用的URL路径,默认根目录 [expires=1h] 设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值 [hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5 [no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置 [secure] 设置启用安全的cookie,需要HTTPS支持 [httponly] 允许cookie不通过JS泄漏,没用过

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值