Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nginx 负载均衡 #52

Open
xiaotiandada opened this issue Jan 19, 2021 · 0 comments
Open

Nginx 负载均衡 #52

xiaotiandada opened this issue Jan 19, 2021 · 0 comments

Comments

@xiaotiandada
Copy link
Owner

2020-07-10 14:39:18

一、负载均衡 - 初探

资料参考:

https://zhuanlan.zhihu.com/p/89356016

https://juejin.im/post/5e60edbf5188254940670f75

服务器这边使用了 Nodejs 分别启两个服务 7001 7002 和 两台机器 启动 7001

Nginx 这边使用 upstream

nginx的upstream目前支持的5种方式的分配

1、轮询(默认) 本地测试了这种

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream node { 
  server 127.0.0.1:7001; 
  server 127.0.0.1:7002; 
} 

2 - 4 没有测试过 复制的....

2、指定权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream backserver { 
  server 127.0.0.1:7001 weight=8; 
  server 127.0.0.1:7002 weight=10; 
} 

3、IP绑定 ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver { 
  ip_hash; 
  server 127.0.0.1:7001; 
  server 127.0.0.1:7002; 
} 

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver { 
  server 127.0.0.1:7001; 
  server 127.0.0.1:7002; 
  fair; 
} 

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver { 
  server 127.0.0.1:7001; 
  server 127.0.0.1:7002; 
  hash $request_uri; 
  hash_method crc32; 
} 

max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

fail_timeout:max_fails次失败后,暂停的时间 (复制的...

Nginx 定义 测试机

http {
	upstream node {
    server 127.0.0.1:7001;
    server 192.168.1.11:7002;
  }
  
  # 因为 80 端口别的占用了 开了7000 代理
  server {
    listen 7000;
    server_name localhost;

    location / {
      proxy_pass http://node;
    }

  }
}
nginx -t

# 如果没有启动先
nginx

nginx -s reload

因为 egg 定义的 router 返回了 port 直接访问 127.0.0.1:7000 可以查看结果 随机返回 7001/7002

测试用了 jmeter 但是接口没异常 jmeter 倒是g了 使用不太熟练 请求次数太大了 但是效果还是可以看出来的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant