Nginx实现负载均衡

介绍

  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。
    作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
  • Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

负载均衡原理

  • 客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。
    在这里插入图片描述

常见的几种负载均衡策略

  • 默认的负载均衡配置
http {
    upstream myr {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    server {
        listen 80;
        location / {
           proxy_pass http://myr;
        }
    }
}
  • 上例中,有3个应用实例分别运行在srv1-srv3。当不显示指定负载均衡方法时,默认为round-robin。所有请求都被代理转发至myr服务器组,并根据负载均衡方法来分发请求。
  1. 轮询(默认)
  • 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver { 
server 192.168.43.14; 
server 192.168.43.15; 
} 
  1. 指定权重
  • 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver { 
server 192.168.43.14 weight=8; 
server 192.168.43.15 weight=10; 
} 
  1. IP绑定 ip_hash
  • 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver { 
ip_hash; 
server 192.168.43.14:88; 
server 192.168.43.15:80; 
} 

健康检测

  • nginx反向代理实现包含服务器健康检查。如果来自特定服务器的响应失败,报错,nginx将标记该服务器为failed,一段时间内尽量避免选择此服务器作为随后请求的分发服务器。

  • max_fails机制设置fail_timeout期间,和服务器沟通失败的连续重试次数,默认为1.当设置为0时,不做服务器健康检测。fail_timeout定义了服务器被标记为failed的时长。fail_timeout时间间隔过后,nginx将开始使用活动客户端请求来探测服务器,如果探测成功则标记服务器为活动服务器。

安装

案例展示

  • 四台虚拟主机:关闭firewalld selinux ,server3和server4开启httpd
    server1 192.168.43.10(配置nginx)
    server2 192.168.43.2 (测试实验效果)
    server3 192.168.43.3(RS)
    server4 192.168.43.4(RS)
  1. 配置一个上游服务,访问www.myr.club,会轮询访问两台后端服务器
  • vim /usr/local/nginx/conf/nginx.conf更改配置文件
  • 做出下图中的改动

在这里插入图片描述
在这里插入图片描述

  • 实验结果测试;
  • 在测试主机中主机名解析vim /etc/hosts
    在这里插入图片描述
  • 我在server3和server4的默认发布页面中分别写入了RS3,RS4,用于测试
  • 在server2中用浏览器访问www.myr.club
    在这里插入图片描述
    在这里插入图片描述
  1. 配置了两个上游服务,以不同的负载均衡算法访问后端
  • vim /usr/local/nginx/conf/nginx.conf更改配置文件
  • 做出下图中的改动

在这里插入图片描述
在这里插入图片描述

  • 实验结果:
  • 给server2中配置主机解析
  • vim /etc/hosts
    在这里插入图片描述
  • 用浏览器分别访问 www.app1.club和www.app2.club.
  • app1轮询访问server3和server4
  • app2一直访问server3
  1. 配置了两个上游服务,访问后端服务器中的不同目录中的内容
  • vim /usr/local/nginx/conf/nginx.conf更改配置文件
  • 做出下图中的改动
    在这里插入图片描述
    在这里插入图片描述
  • 结果测试
  • 在server3中创建/var/www/html/app1目录,并写入index.html文件
  • 在server4中创建/var/www/html/app2目录,并写入index.html文件
[root@server3 conf]# mkdir /var/www/html/app1
[root@server3 conf]# cd /var/www/html/app1
[root@server3 app1]# echo "<h1>Hello,server3</h1>" > index.html
[root@server4 conf]# mkdir /var/www/html/app2
[root@server4 conf]# cd /var/www/html/app2
[root@server4 app1]# echo "<h1>Hello,server4</h1>" > index.html
  • 在server2中进行主机解析,步骤同上
  • 用浏览器分别访问www.app1.club/app1和www.app2.club/app2

配置文件详解

#nginx进程,一般设置为和cpu线程数一样
worker_processes  1;
events {
    #单个负载应用进程的最大并发链接数
    worker_connections  1024;
}

http {    
    #连接超时时间,单位是秒
    keepalive_timeout  65;    
    #防止DDOS攻击,每秒限制1个连接访问
    #limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    #limit_conn_zone $binary_remote_addr zone=addr:10m;
    
    #weight 权重    max_fails 失败次数    fail_timeout 失败超时
    #30秒内连接失败两次将认为该服务不可用
    
    #配置上游服务器1(就是负载均衡需要分发的服务器)
    upstream app1_server {
        server   192.168.43.3 weight=1 max_fails=2 fail_timeout=30s;
        server   192.168.43.4 weight=1 max_fails=2 fail_timeout=30s;
    }
    
    #配置上游服务器2(就是负载均衡需要分发的服务器)
    upstream app2_server {
        server   192.168.43.3 weight=1 max_fails=2 fail_timeout=30s;
        server   192.168.43.4 weight=1 max_fails=2 fail_timeout=30s;
    }
    
    #配置负载均衡服务器
    server {
        #监听端口
        listen       80;        
        #监听地址(ip/域名)
        server_name  www.app1.com;        
        #/拦截所有
        location / {
            proxy_pass   http://app1;
            proxy_connect_timeout 1;#连接应用超时
            proxy_read_timeout 180;
            proxy_send_timeout 180;
            index  index.html index.htm;
        }
    }    
    #配置负载均衡服务器
    server {
        #监听端口
        listen       80;        
        #监听地址(ip/域名)
        server_name  www.app2.com;        
        #/拦截所有
        location / {    
            proxy_pass   http://app2;
            proxy_connect_timeout 1;#连接应用)超时
            proxy_read_timeout 180;
            proxy_send_timeout 180;
            index  index.html index.htm;
        }
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值