杉哥的个人博客

负载均衡简介与nginx负载均衡简单配置实例

一般web架构里面,常见就是一个lamp,但是这个单一架构往往能力有限,随着业务的发展,网站越来越受到欢迎,则原先的架构不能支持高并发的访问。所以我们一般会对这个架构做扩展,来支撑高并发。

由于单台web服务器的能力有限,这个时候可以做水平扩展scale out 向外扩展(负载均衡集群),增加很多台web服务器提供服务。原先有一个垂直扩展 scale up|on(向上扩展:主要是在单台服务器上不断的增加硬件的配置)。

①-垂直扩展

就是在单台服务器上增加配置,但是这有问题:

  1. 随着硬件的增加的,效率反倒会在一定的时候出现急剧下降。主要的原因是由于如果存在多个CPU或者其他资源,多个服务进程会不断的争夺操作系统资源。
  2. 硬件是存在瓶颈的,也就是说不可能有一个无限配置的主机(32G、320000G),也叫作电子行业的摩尔定律(《浪潮之巅》)不在满足。(主要是由于现在工业限制,造成电器设备的线宽已经达到瓶颈)量子计算机 光子计算机
  3. 往往硬件的升级和硬件的成本是不满足线性关系的,是一个指数级别的增加。
  4. 往往老板最不喜欢花钱的。

②-水平扩展

就是在水平方向不断的增加主机,提升网站的整体的性能。

概念:

  1. 常见的负载均衡器实现有:软件 nginx 或者 lvs和 硬件 f5(类似交换机 20w) 之分
  2. 常见的负载均衡的算法有 轮询、加权、ip_hash

简单的nginx负载均衡示例:

1、配置3个虚拟主机:

# 基于81端口的虚拟主机
    server {
        listen       81;
        listen       t.cn:81;
        server_name  t.cn;

        location / {
            root   /var/www/html/81;
            index  index.html index.htm;
        }
    }

    # 基于82的端口的虚拟主机
    server {
        listen       82;
        listen       t.cn:82;
        server_name  t.cn;

        location / {
            root   /var/www/html/82;
            index  index.html index.htm;
        }
    }

    # 配置83
    server {
        listen       83;
        listen       t.cn:83;
        server_name  t.cn;

        location / {
            root   /var/www/html/83;
            index  index.html index.htm;
        }
    }

2、配置一个80的虚拟主机做前端的用户请求:

server {
    listen 80;
    server_name t.cn;
    
    location / {
        proxy_pass http://backend;
    }
 }

3、配置一个upstream,代表的含义配置负载均衡器的能够处理的web服务器

注意:定义这个upstream必须放在http里面的server前面

# 定义负载均衡集群的配置信息
    upstream backend {
    #ip_hash; # 使用ip_hash算法
   	server t.cn:81  backup  weight=10;
   	server t.cn:82;
   	server t.cn:83 weight=1 down;
        # 配置的另外的虚拟主机
        server 192.168.60.10:8080 weight=4;
    }
backup的含义是这台是备份服务器平时用不上,当前面所有服务器挂了,这台才会被使用。
down表示暂时关闭这台服务器。
weight=10表示权重,例如:客户端发起了15个请求,10个请求走t.cn:81,当然不是严格的10个,只是说明这个服务区能完成很多请求,weight后面不能有空格。