随着公司业务规模的扩大,简单的增加服务器配置已经满足不了公司业务需求。负载均衡的目的是为了解决单个节点压力过大,造成Web服务响应过慢,严重的情况下导致服务瘫痪,无法正常提供服务。

负载均衡按照范围可以分为GSLB(Global Server Load Balancer)和SLB(Server Load Balancer)。按照协议模型分为四层负载均衡七层负载均衡

ssl

GSLB

GSLB是对物理集群的负载均衡。GSLB是依赖于用户和实际部署环境的互联网资源分发技术,不同的目的对应着一系列不同的技术实现。

ssl

SLB

ssl

1.nginx负载均衡原理

负载均衡实现原理是通过nginxproxy_pass模块和upstream模块实现的。客户端发送请求,由nginx代理转发upstream服务池,在之前文章中介绍使用过proxy_pass,负载 均衡和之前的代理区别就是,之前只转发一台服务器。负载均衡是转发多台服务器,并不是客户端每次请求都会转发到多台机器而是每次请求只转发到一台服务器。

ssl

2.nginx配置模块

upstream

upstream配置项属于ngx_http_upstream_module模块传送门

Syntax:	upstream name { ... }
Default: 
Context: http

server

Syntax:	server address [parameters];
Default: 
Context: upstream
parameters值类型描述
weightnumber设置服务器的权重,默认为1。权重越大,分配几率越高
max_connsnumber限制与代理服务器的最大并发活动连接数。默认值为零,表示没有限制
max_failsnumber设置在fail_timeout参数设置的持续时间内发生的与服务器通信的不成功尝试次数,以考虑服务器在一段时间内不可用,该持续时间也由fail_timeout参数设置
fail_timeouttime套指定数量的不成功尝试与服务器通信的时间应该考虑服务器不可用;以及服务器被视为不可用的时间段。默认情况下,参数设置为10秒。
backup将服务器标记为备份服务器。当主服务器不可用时,它将被传递请求。
down将服务器标记为永久不可用
resolveip地址监视与服务器域名对应的IP地址的更改,并自动修改上游配置,而无需重新启动nginx(1.5.12)。服务器组必须驻留在共享内存中。
routestring设置服务器路由名称。
servicename能够解析DNS SRV记录并设置服务名称(1.9.13)。要使此参数起作用,必须为服务器指定resolve参数并指定不带端口号的主机名。
slow_starttime设置服务器将其权重从零恢复到标称值的时间,当不健康的服务器变得健康时,或者服务器在一段时间被认为不可用后变得可用时。默认值为零,即禁用慢启动。
drain  

3.nginx配置

小菜这里刚好有两台服务器,walidream.comyagn.xin服务器。walidream.com做nginx代理转发,yagn.xin做后台服务器响应。

walidream.com服务器

服务目录

/etc/nginx/conf.d
|-balancing.conf

balancing.conf

upstream wali{
    server yagm.xin:9001;
    server yagm.xin:9002;
    server yagm.xin:9003;
}

server {
    listen       80; 
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/proxy_test.log  main;

    location / { 
        proxy_pass http://wali;
        include proxy_params;
    }   
}

检测语法并重启

nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

yagn.xin服务器

服务目录

/opt/app
|-code1
   |-index.html
|-code2
   |-index.html
|-code3
   |-index.html
   
/etc/nginx/conf.d
|-server1.conf
|-server2.conf
|-server3.conf

index.html(code1)

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>yagm服务器</h1>	
	<h1>第一个应用</h1>
</body>
</html>

index.html(code2)

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>yagm服务器</h1>	
	<h1>第二个应用</h1>
</body>
</html>

index.html(code3)

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>yagm服务器</h1>	
	<h1>第三个应用</h1>
</body>
</html>

server1.conf

server {
    listen       9001;
    server_name  yagm.xin www.yagm.xin;

    #charset koi8-r;
    access_log  /var/log/nginx/server1.log  main;


    location / {
        root   /opt/app/code1;
        index  index.html index.htm;
    }
}

server2.conf

server {
    listen       9002;
    server_name  yagm.xin www.yagm.xin;

    #charset koi8-r;
    access_log  /var/log/nginx/server2.log  main;


    location / {
        root   /opt/app/code2;
        index  index.html index.htm;
    }
}

server1.conf

server {
    listen       9003;
    server_name  yagm.xin www.yagm.xin;

    #charset koi8-r;
    access_log  /var/log/nginx/server3.log  main;


    location / {
        root   /opt/app/code3;
        index  index.html index.htm;
    }
}

检测语法并重启

nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

注意:如果购买的是云服务器,记得要在安区组中将上面9001,9002,9003端口在公网开放,不然公网是访问不了。如果不知道,请查看这篇文章传送门

准备好之后,访问http://walidream.com,按F5刷新页面,会发现应用在切换。

4.ip_hash

指定组应使用负载平衡方法,其中请求根据客户端IP地址在服务器之间分配。客户端IPv4地址的前三个八位字节或整个IPv6地址用作散列密钥。该方法确保来自同一客户端的请求将始终传递到同一服务器,除非此服务器不可用。在后一种情况下,客户端请求将被传递到另一个服务器。最有可能的是,它也将始终是同一台服务器。

Syntax:	ip_hash;
Default: 
Context: upstream

5.hash

Syntax:	hash key [consistent];
Default: 
Context: upstream
This directive appeared in version 1.7.2.
upstream wali{
	hash $request_uri;   #当每次请求同一台服务器时,就会定位到同一台服务器。
    server yagm.xin:9001;
    server yagm.xin:9002;
    server yagm.xin:9003;
}

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)