阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

初学Nginx实现Web负载均衡

110次阅读
没有评论

共计 4419 个字符,预计需要花费 12 分钟才能阅读完成。

keepalived: 是一个备份方案里面的一个关键的软件, 主要是主监控从, 一旦宕机立刻接管,

virtual IP: 相当于一个权杖, 是对外真正提供服务的 IP, 当 nginx1 是主,nginx2 是副, 那么只要主挂了, 副就能够直接将主导权抢过来, 负责通信业务

对于 session 方式, 用户信息存放在服务器端, 那么就直接搞一台 session 服务器, 所有服务器就去 session 服务器上去读取用户信息, 那么 session 同步解决了

web2 到 MySQL 中加缓存可以避免频繁的从 mysql 中读取相同的数据, 加一个缓存层直接提升了速度,(注意缓存是直接存在内存中的, 提高了 IO 速度)

后面的 Web 服务不管是什么系统(Nginx Apache), 只要内容一样就可以了, 但是一样的方便维护

Nginx 的负载均衡模块目前支持 4 种调度算法,下面进行分别介绍,其中后两项属于第 三方的调度方法:

轮询 poll(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台 服务器宕机, 故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight 值越大,分配到的访问机率越高,主要用于后端每 个服务器性能不均的情况下。就是权重值, 可以设置

ip_hash。每个请求按访问 IP 的 hash 结果分配,这样来自同一个 IP 的访客固定访 问一个后端服务器,有效解决了动态网页存在的 session 共享问题。fair。比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时 间长短智能地进行负载均衡,也就是根据后端服务器响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 的,如果需要使用这种调度算法,必须下载 Nginx 的 upstream_fair 模块。
url_hash。按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx 本身是不支持 url_hash 的,如果需要使用这种调度算法,必须安装 Nginx 的 hash 软件包。

ip_hash 在背后还是需要轮询的, 只是在轮询的基础上做了识别

注意 当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是 weight 和 backup。

没有指定的就是默认的, 就是轮询


做负载均衡服务器:

  1. upstream myserver {
  2. # server 172.16.60.32:80 weight=2 max_fails=3 fail_timeout=20s; 权重
  3. # server 172.16.60.31:80 weight=1 max_fails=3 fail_timeout=20s;
  4. server 172.16.60.32:80;
  5. server 172.16.60.31:80;
  6. server 172.16.60.52:80;
  7. }
  8. server {
  9. listen 80;
  10. server_name localhost;
  11. #charset koi8-r;
  12. #access_log logs/host.access.log main;
  13. location /{
  14. root html;
  15. index index.html index.htm;
  16. proxy_pass http://myserver; ## 注意这里, 就是引用上面定义的 proxy, 定义了就要引用
  17. proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
  18. include /opt/nginx/conf/proxy.conf;
  19. }
  20. #error_page 404 /404.html;
  21. # redirect server error pages to the static page /50x.html
  22. #
  23. error_page 500502503504/50x.html;
  24. location =/50x.html {
  25. root html;
  26. }

需要创建 /opt/nginx/conf/proxy.conf 文件:

  1. proxy_redirect off;
  2. proxy_set_header Host $host;
  3. proxy_set_header X-Real-IP $remote_addr;
  4. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  5. proxy_connect_timeout 90;
  6. proxy_send_timeout 90;
  7. proxy_read_timeout 90;
  8. proxy_buffer_size 4k;
  9. proxy_buffers 432k;
  10. proxy_busy_buffers_size 64k;
  11. proxy_temp_file_write_size 64k;

三种算法区别: 
轮询

  1. upstream myserver {
  2. server 172.16.60.32:80;
  3. server 172.16.60.31:80;
  4. server 172.16.60.52:80;
  5. }

权重:

  1. upstream myserver {
  2. server 172.16.60.32:80 weight=2 max_fails=3 fail_timeout=20s;
  3. server 172.16.60.31:80 weight=1 max_fails=3 fail_timeout=20s;
  4. server 172.16.60.52:80 weight=3 max_fails=3 fail_timeout=20s;
  5. }

IP hash:

  1. upstream myserver {
  2. ip_hash;
  3. server 172.16.60.32:80;
  4. server 172.16.60.52:80;
  5. server 172.16.60.31:80;
  6. }

假如提示 80 端口占用就使用 fuser -k 80/tcp 杀掉占用 80 端口的程序

nginx 集群实验总结; 
1, 明确拓扑结构, 明确 IP 地址架构 
2, 确定 real_server 确定是可用的 
3, 确定 real_server 和集群服务器上 selinux 和 seLinux 不影响服务 
4, 看好了自己启用的 nginx 的目录是自己所配置的, 不要改错了文件夹, 
5, 定义了负载均衡器名称要调用, 一旦访问 80 端口就要转到负载均衡器上面, 前面的 http:// 表明转发的是 http 协议, 是固定语法, 是 
6, 注意括号问题 
7, 看英文报错误

那么问题来了: 
数据从客户机 –> 负载均衡—>real_server 的来回? 从封装角度理解 
数据经过负载均衡服务器之后, 源 IP 和目的 IP 是否会发生改变?


答案: 数据包经过 nginx 均衡服务器后, 目的端口和目的 IP 地址和 mac 地址变为 real_server 的, 源 IP 和端口和 mac 变为 nginx 服务器的 
nginx 是负责的代理的工作, 完全代理, 所以外面的客户机是根本就不知道里面 real_server 的真实地址的

高性能: 大量的并发, 同时处理大量的请求和数据–> 集群解决方案 
高可用: 备份—> 备份


keepalived:

keepalived 是什么?

keepalived 是集群管理中保证集群高可用的一个服务软件,其功能类似于 heartbeat,用来防止单点故障。heartbeat(心跳)

keepalived 工作原理

keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功��的路由器组成一个路由器组,这个组里面有一个 master 和多个 backup,master 上面有一个对外提供服务的 vip(该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。
keepalived 主要有三个模块,分别是 core、check 和 vrrp。core 模块为 keepalived 的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check 负责健康检查,包括常见的各种检查方式。vrrp 模块是来实现 VRRP 协议的。

keepalived 的配置文件

keepalived 只有一个配置文件 keepalived.conf,里面主要包括以下几个配置区域,分别是 global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance 和 virtual_server。

global_defs 区域

主要是配置故障发生时的通知对象以及机器标识


什么是四层负载均衡, 什么是七层负载均衡?

四层: 传输层,IP+port 
七层: 应用层, 当然也能够用四层进行负载均衡

为什么四层的负载均衡快? 各自的优缺点

四层负载均衡只修改 IP 包头的 IP 地址和端口, 只相当于个路由器的功能, 外面能看真实服务器的 IP 地址, 不做 tcp 连接, 只是做个转发, 所以说四层要快, 大并发 
七层负载均衡是代理 TCP 连接, 外面看不到里面的真实情况, 我们学的 nginx 里面的就是七层, 两面都要建立 tcp 连接, 所以对性能的要求会更高

四层:lvs–> 是中国人章文嵩搞的, 现在在淘宝网, 现在已经嵌入到 Linux 内核中去了, 美国人的 F5 也能够实现四层负载均衡,
七层:nginx,HAproxy, 等

lvs 也是需要 keepalived 做高可用的

集群:cluster

更多 Nginx 负载均衡配置 相关教程见以下内容

Nginx 负载均衡配置说明 http://www.linuxidc.com/Linux/2016-03/129424.htm

Linux 下 Nginx+Tomcat 负载均衡和动静分离配置要点  http://www.linuxidc.com/Linux/2016-01/127255.htm

Docker+Nginx+Tomcat7 配置简单的负载均衡  http://www.linuxidc.com/Linux/2015-12/125907.htm

Nginx 负载均衡(主备)+Keepalived  http://www.linuxidc.com/Linux/2015-12/126865.htm

使用 Nginx 作为负载均衡器 http://www.linuxidc.com/Linux/2015-12/125789.htm

使用 Nginx 简单实现负载均衡  http://www.linuxidc.com/Linux/2016-08/134443.htm

Nginx 负载均衡与高可用的实现 http://www.linuxidc.com/Linux/2016-04/130350.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136116.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计4419字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中