实现Nginx基于TCP层的负载均衡

#实战描述:
现如今有很多的大企业、互联网大厂例如百度、京东、新浪、网易、腾讯、淘宝包括UPWEN公司^-^等,都在使用Nginx作为用于发布自己门户网站的webserver。Nginx是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由伊戈尔·赛索耶夫创建并于2004年首次公开发布,为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日,2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7亿美元收购。

Nginx是免费的开源软件,根据类BSD许可证的条款发布。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
So,我们得知,很多用户选择Web服务器使用Nginx,除看重其并发能力强之外,也通常是把Nginx作为负载均衡器来使用,相信这也是F5选择收购Nginx的重要原因之一吧。Nginx既可以实现四层TCP层如mysql、redis等应用的负载,也可以实现七层HTTP层负载均衡,不过四层TCP层的负载不支持动静分离的,比如用Tomcat和Nginx配合使用,今天我们先讨论四层TCP层负载的实现。
接下来,我们看下如何具体实现。
#实战环境:
准备两台CentOS7.x,其中一台作为Nginx发布web页面,配置不同端口号的虚拟应用(给她起个hostname名称叫webserver.upwen.com);另外一台作为Nginx的负载均衡(给她起个hostname名称叫balancer.upwen.com),安装部署Nginx并实现四层TCP层负载。
#具体实现:
##实现Nginx四层TCP层负载均衡的先决条件
首先是Nginx版本大于1.9才可以,另外需要编译安装前加入--with-stream选项才可以支持Tcp负载均衡。
##安装编译过程中需要用到的软件包
我们在webserver.upwen.com主机上采用编译安装的方式安装nginx。

下载软件包到本地:

##配置并编译安装Nginx

##环境变量设置

环境变量配置好后,测试启动和关闭Nginx。

当然,我们也可以基于systemd,在/usr/lib/systemd/system/nginx.service配置好,通过systemctl来管理Nginx的服务启动。
##配置Nginx虚拟主机
通过配置/usr/local/nginx/conf/nginx.conf,配置不同端口的Nginx虚拟主机。

由于增加了82端口,如果selinux已开启,尽量在不关闭的情况下,调整下端口策略。

##Nginx实现TCP层负载均衡
使用同样的方式在balancer.upwen.com主机上编译安装并启动Nginx,在其主配置文件nginx.conf中,使用stream标签配置。

#结果:
我们在balancer主机上执行curl -l localhost:86命令,会发现balancer主机上的Nginx负载均衡起到了作用,会轮询webserver主机上的TCP80和TCP82端口号的应用。

同样的,我们也可以在webserver主机上配置例如redis这样的应用,与此同时,在balancer主机上配置好steam标签,可以实现轮询webserver主机上TCP6379的redis端口,这一部分,我们放在后面进行实践。
#知识点:
Yum仓库安装软件;
编译安装部署软件;
Nginx主配置文件的使用;
负载均衡的配置。