暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx负载均衡

我为啥没洁癖 2024-03-25
54

负载均衡(Load Balance)指将服务请求分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而让多个服务节点共同完成工作任务。

Nginx为了实现负载均衡提供了几种策略:

轮询

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

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

upstream my-server{
  server ip1:8080;
  server ip2:8080;
}

server {
    listen      80;
    server_name localhost;
    
    location / {
        proxy_pass   http://my-server/;
    }
}
复制

加权轮询

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

当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大

upstream my-server{
  # 每6个访问5个访问ip1, 1个访问ip2
  server ip1:8080 weight=5; 
  server ip2:8080 weight=1;
}

server {
    listen      80;
    server_name localhost;
    
    location / {
        proxy_pass   http://my-server/;
    }
}
复制

ip_hash

如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

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

upstream my-server{
  ip_hash;
  server ip1:8080 weight=5; 
  server ip2:8080 weight=1;
}

server {
    listen      80;
    server_name localhost;
    
    location / {
        proxy_pass   http://my-server/;
    }
}
复制

真实ip_hash

关键字hash

http {
	...
	#获取客户端真实ip
    map $http_x_forwarded_for  $clientRealIp {
            ""      $remote_addr;
            ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;
    }
    ...
}

upstream my-server{
  hash $clientRealIp;
  server ip1:8080; 
  server ip2:8080;
}

server {
    listen      80;
    server_name localhost;
    
    location / {
        proxy_pass   http://my-server/;
    }
}
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论