Contents
  1. 1. why tcp load balancing
  2. 2. 安装
  3. 3. 如何配置TCP load balancing
  4. 4. 测试

从nginx 1.9开始,开源版中也有了tcp load balancing,为此投入了很多人力,这也是一个典型的商业软件开发支持开源产品的例子(此特性最早出现于nginx的商业版nginx plus)。

why tcp load balancing

nginx最初是一个反向代理,如今已经具有非常丰富的特性,web server, 缓存/加速,反向代理 , 应用网关。

Nginx一般用作繁忙网站的前端,44.9%的前10000最繁忙商业网站使用了nginx作为前端。

当你在内部使用nginx为应用实现代理和load balancing时,tcp load balancing将使你受益。现代应用使用各种协议而不只是http,nginx可用来处理这些内部流量,比如mysql load balancing就是一个好例子。

安装

CentOS 6.7默认源安装的Nginx版本是1.0.x,实在是古董级别,要安装最新版本的Nginx请自行添加源。
创建文件/etc/yum.repos.d/nginx.conf

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

只使用指定源安装Nginx

1
yum install nginx --disablerepo=* --enablerepo=nginx

如何配置TCP load balancing

TCP load balancing在stream上下文中配置,与httpmail类似,stream上下文能配置若干监听TCP连接的Server,连接被转发到由proxy_pass指令设定的upstream server group。Nginx使用load balancing算法来在upstream servers是选择。

1
2
3
4
5
6
7
8
9
10
11
12
stream {
server {
listen 3306;
proxy_pass db;
}
upstream db {
server db1:3306;
server db2:3306;
server db3:3306;
}
}

以上配置实现的是Nginx plus r5中的特性,详情可见TCP Load Balancing in NGINX Plus R5

测试

将测试机上的1307端口流量转发到vaio笔记本上的socks5端口。
/etc/nginx/nginx.conf配置文件末尾添加

1
2
3
4
5
6
7
8
9
stream {
server {
listen 1307;
proxy_pass vaio;
}
upstream vaio {
server 172.18.5.233:1080;
}
}

重新加载配置

1
nginx -s reload

在浏览器中设置代理为测试机172.18.1.34:1307
在浏览器中打开google.com,监听笔记本vaio 172.18.5.233:1080
google页面打开,同时tcpdump 输出

tcp转发成功,当然这里只有一台机器无法体现Load balancing,只能验证tcp reverse proxy功能的正常。

Contents
  1. 1. why tcp load balancing
  2. 2. 安装
  3. 3. 如何配置TCP load balancing
  4. 4. 测试