啊哈,最近被thrift搞残了,已经各个项目要做大融合,尤其是大家的thrift都共用一个nginx前端今天又加了8个thrift,一共有28个Thrift服务了。有朋友可能怀疑需要这么多的thrift server么? 加入了…. 我们已经在客户端层做了相关的优化了,比如批量put和get… 效果不是很明显….
说正题,nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 TCP 代理和负载均衡。
最近爬虫有些狠,标记下博客原文是地址, http://xiaorui.cc http://xiaorui.cc/?p=1367
最近nginx1.9发布了,里面有个特别喜人的功能,就是支持tcp的负载均衡, 这功能这jb碉堡了… 一说起nginx的tcp proxy负载调度,大家可能更多的是用姚伟斌开发的nginx_tcp_proxy_module,话说阿里这帮人的开源精神还是很棒的。 大赞一个 ! 这个nginx_tcp_proxy_module模块也确实很给力,不管是代理Thrift和redis 都是很实用的。 既然官方的1.9发布了我们就简单的测试下…. ngx_stream_core_module 是这个模块的名字, 具体的实现代码也懒得看,估计就算看了,也看不懂 哈哈…..
官方有个nginx plus的商用版本倒是支持,但是功能毕竟受限… …. 有兴趣的朋友可以看看。
http://nginx.com/products/application-load-balancing/
直接用ubuntu环境测试
sudo apt-get install libpcre3 libpcre3-dev build-essential http://hg.nginx.org/nginx/ 自己找相关的平台和版本 wget http://hg.nginx.org/nginx/archive/61d7ae76647d.tar.gz tar zxvf ./61d7ae76647d.tar.gz cd nginx-61d7ae76647d #具体的参数你们自己加吧 ./auto/configure --with-stream make sudo make install
据说还支持ssl协议, 有兴趣的朋友也可以试试,比如mysql是含有ssl的证书协议的。 configure的时候加入 –with-stream_ssl_module 编译参数。
至于配置也是很简单….
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
stream { upstream xiaorui { server 192.168.1.111:9090 weight=5 max_fails=3 fail_timeout=30s; server 192.168.2.222:9090 weight=5 max_fails=3 fail_timeout=30s; } server { listen 9090; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass xiaorui; } }
stream的配置对里还支持 server unix:/tmp/nima.sock; 类似这样的sock数据交换接口。
也可以直接proxy_pass 到 unix:/tmp/stream.socket;
ngx_stream_core_module 也同样的支持tcp长连接保持。 keepidle是保持时间,keepintvl是间隔时间 ,keepcnt是发送的个数
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
那么OK了后,我们可以用telnet来进行测试….
vagrant@dev:~$ telnet localhost 9090
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
…
vagrant@dev:~$ telnet localhost 9090
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
…
效果不错,把一堆的后端server接入到nginx上…. 只看到队列忽忽的往下掉。。。。
有时间写一个 ngx_stream_core_module 和 nginx_tcp_proxy_module的性能对比….. 个人觉得还是nginx_tcp_proxy_module的调优的方式多点。。。
nice!