为了账号安全,请及时绑定邮箱和手机立即绑定

nginx 负载均衡(21)

标签:
Nginx

获取全套nginx教程,请访问瓦力博客
随着公司业务规模的扩大,简单的增加服务器配置已经满足不了公司业务需求。负载均衡的目的是为了解决单个节点压力过大,造成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模块传送门{:target="_blank"}

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

server

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

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消