Nginx转发TCP实现负载均衡

Nginx转发TCP实现负载均衡


通常我们会使用Nginx做反向代理和负载均衡,都是http协议,其实Nginx还可以转发TCP,而且配置基本很相似(下面的原理也适用于http)。

原理图如下:

正向代理和反向代理

正向代理:就是我们所说的代理,例如客户向服务器A发请求,但是A不接受除了服务器B以外的请求,然后客户委托服务器B向服务器A发请求,然后通过服务器B做中间人传输信息。这个过程是对服务器A是透明的,它只知道和服务器B通信。

反向代理:正向代理是客户委托,那么反向代理就是服务器做委托。例如客户向服务器A做请求,但是服务器A不知道怎么处理,那么A就委托服务器B处理,然后把结果返回给客户,这个过程对客户是透明的。

所有负载均衡就是利用了反向代理,把客户的请求分发到不同的主机上处理,客户并不需要知道处理的过程。

负载均衡策略

Nginx 提供轮询(round robin)、IP 哈希(client IP)和加权轮询 3 种方式,默认情况下,Nginx 采用的是轮询。

轮询(默认)

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

加权轮询

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

ip_hash

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

重试策略

可以为每个 backserver 指定最大的重试次数,和重试时间间隔,所使用的关键字是 max_fails 和 fail_timeout。

热机策略

当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就会使用由 backup 标注的备机。必须要注意的是,backup 不能和 ip_hash 关键字一起使用。

 

在nginx.conf文件配置,是和http同级的

stream {
    upstream backend {
        #hash $remote_addr consistent;
        server 10.118.12.92:10001 weight=5;
        #server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        #server unix:/tmp/backend3;
    }
    server {
        listen 10001;
        proxy_connect_timeout 5s;
        proxy_timeout 3600s;
        proxy_pass backend;
    }
}

注意如果放在http里面,那么这个配置就是负载均衡http了。

 

ref.

https://blog.52itstyle.com/archives/623/

 

欢迎关注我的公众号:只说一点点点点

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据