负载均衡是指一台主服务器接收请求,转发到多台服务器组成的服务器集群,让多台服务器平均分担负载。

我在VMware上装了3台centos,其中一台作为反向代理服务器,其余两台组成服务器集群。

A:192.168.0.167
B:192.168.0.168
C:192.168.0.169 反向代理服务器

用户直接访问C服务器,由C服务器转发请求到A和B服务器。

C服务器nginx.conf 配置:
在 http { 内添加以下代码

upstream myserver {      #myserver为自定义的名称
      server  192.168.0.167:80;  #服务器A的ip
      server  192.168.0.168:80;  #服务器B的ip
    }

在location / { 内添加以下代码

proxy_pass http://myserver;  #转发到哪个服务器集群,我这里为http://myserver

A、B服务器nginx.conf 配置(如果服务器中只有一个server域,这一步可以省略)
把 server { 内的server_name改成服务器C的ip或域名

server_name 192.168.0.169;

然后把两个完全一样的项目分别部署到服务器A、B上。
这里为了测试,我把两个index.php文件分别放到A、B服务器上
并分别写入内容

<?php
echo '这里是服务器A';
<?php
echo '这里是服务器B';

在浏览器输入反向代理服务器C的IP:

A10负载均衡器 负载均衡器在哪两层_服务器

A10负载均衡器 负载均衡器在哪两层_后端_02

反复刷新浏览器,结果为两个内容交替显示,说明反向代理服务器是轮流把请求转发到服务器集群中的服务器的。至此完成了一个简单的负载均衡配置。

为什么会轮流交替转发呢?因为upstream默认是以轮询的方式,按照请求的时间顺序向服务器集群中的服务器轮流分配,如果遇到宕机的服务器,即把请求转向下个服务器。upstream还有其他分配策略,下面介绍其中几种:

ip_hash
根据IP分配,相同IP的请求会分配到同一服务器,可以解决session的问题。

upstream 192.168.0.169 {         
      ip_hash;
      server  192.168.0.167:80;  
      server  192.168.0.168:80;  
    }

还可以为每个服务器分别设置分配规则:

  1. weight:权重,设置值越大,被分配到几率越大。
  2. backup:备用服务器,当其他服务器宕机的时候才会启用。
  3. down:表示不使用该服务器。
upstream 192.168.0.169 {    
      server  192.168.0.165:80 weight=1;  
      server  192.168.0.166:80 weight=2;     
      server  192.168.0.167:80 backup;  
      server  192.168.0.168:80 down;  
    }

以上,反向代理服务器C仅仅只作为一个负责转发请求的中转站,是否有点浪费?
那么我们可以把服务器C也配置成一个可以提供后端服务的服务器,让其既作为一个反向代理服务器,又作为服务器集群中的一份子。
在nginx.conf的http { 内添加一个server段,让其侦听与反向代理服务器不同的端口

server {
        listen 8080;    #侦听端口
        server_name 192.168.0.169;    #反向代理服务器IP或域名
        root /www;    #网站根目录

        location / {
                index index.html index.php;
        }
        location ~ \.php {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

然后在upstream内加入此sever的ip和端口

upstream myserver {
      server  192.168.0.167:80;
      server  192.168.0.168:80;
      server 192.168.0.169:8080;    #添加此IP和端口
    }

再把网站部署到根目录里面就可以了。

又或者,可以把反向代理服务器配置为缓存服务器

在http中写入以下代码:

proxy_cache_path /cache/servercache levels=1:2 keys_zone=testCache:1m inactive=1h max_size=30m;

各参数解释:
proxy_cache_path /cache/servercache 缓存路径,缓存文件夹的上级文件夹必须要指定,否则会保存,如这里要手动建立 /cache 文件夹;
levels=1:2 缓存目录的层级名称,这里指定两层目录,第一次名称为一个字母,第二层为两个;
keys_zone=testCache:1m 指定缓存区名称和内存缓存空间大小;
inactive=2h 缓存数据超过两小时没人访问将会自动删除;
max_size=30m 指定硬盘缓存空间大小;

然后加入一下代码

proxy_cache testCache;  #指定使用的缓存去,设置为上面keys_zone指定的缓存区
proxy_cache_valid  200 304  12h; #设置各状态码的缓存时间,若不指定状态码只写12h,即默认只缓存200、301、302
#proxy_cache_valid any 1m;  #也可以用any代替所有状态码

这些代码写在 http server location 任一个域里面都可以

访问一下网站,看有没有生成缓存文件

A10负载均衡器 负载均衡器在哪两层_运维_03