负载均衡基础与nginx下TCP负载均衡配置
安装nginx
- 在服务器快速集群环境搭建中,都迫切需要一个能拿来即用的负载均衡器,nginx在1.9版本之前,只支持http协议web服务器的负载均衡,从1.9版本开始以后,nginx开始支持tcp的长连接负载均衡,但是nginx默认并没有编译tcp负载均衡模块,编写它时,需要加入
--with-stream
参数来激活这个模块。 - nginx编译安装需要先安装
pcre、openssl、zlib
等库,也可以直接编译执行下面的configure
命令,根据错误提示信息,安装相应缺少的库。
- 下载nginx安装包
下载地址 - 解压缩安装包,执行以下操作
以下命令均需在root用户下执行ccc@ccc:~# sudo tar -zxvf nginx-1.12.2.tar.gz 下面的make命令会向系统路径拷贝文件,需要在root用户下执行 root@ccc:~/nginx-1.12.2# ./configure --with-stream root@ccc:~/nginx-1.12.2# make && make install 编译完成后,默认安装在了/usr/local/nginx目录。 root@ccc:~/nginx-1.12.2$ cd /usr/local/nginx/ root@ccc:/usr/local/nginx$ ls conf html logs sbin 可执行文件在sbin目录里面,配置文件在conf目录里面。
nginx -s reload
重新加载配置文件启动
nginx -s stop
停止nginx服务 - nginx服务不识别问题
ccc@ccc:~#sudo vim /etc/profile
在环境变量文件末尾添加以下内容
使环境变量生效PATH=$PATH:/usr/local/nginx/sbin export PATH
ccc@ccc:~#source /etc/profile
编辑nginx配置文件
主要在conf
目录里面配置nginx.conf
文件,配置如下:
ccc@ccc:~$ whereis nginx
nginx: /usr/local/nginx /usr/local/nginx/sbin/nginx
ccc@ccc:~$ cd /usr/local/nginx/
ccc@ccc:/usr/local/nginx$ ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
ccc@ccc:/usr/local/nginx$ cd conf
ccc@ccc:/usr/local/nginx/conf$ ls
fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf
fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default
ccc@ccc:/usr/local/nginx/conf$ sudo vim nginx.conf
在http
的上面增加代码如下
#nginx tcp loadbalance config
stream {
upstream MyServer{
hash $remote_addr consistent;
server 127.0.0.1:6000 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:6002 weight=1 max_fails=3 fail_timeout=30s;
}
server {
proxy_connect_timeout 1s;
#proxy_timeout 3s;
listen 8000;
proxy_pass MyServer;
tcp_nodelay on;
}
}
代码解释:
- listen 8000;这个是nginx会监听的一个端口号,也就是说,所有的客户端连接指定的8000端口就可以,所有客户端发过来的请求在配置文件中,人家就写好了,你都连8000,客户端发的请求如果都在8000端口上,nginx感应到,你要我完成反向代理的操作,也就是负载均衡的操作,nginx就按照既定的负载均衡算法把这些请求分发到不同的服务器上。
- proxy pass MyServer 相当于一个标记。所有连接到8000端口的请求都连接到这个MyServer的信息里面负载均衡。
- MyServer的这个upstream就是负载均衡模块,包含了几台机器呢?包含了2台:127.0.0.1:6000,127.0.0.1.6002,相当于起了2台服务器,一个运行在6000端口,一个运行在6002端口。如果要添加新的服务器,我们只需要在下面新增这台服务器的信息就可以了。weight=1,就是权重,这2个服务器的权重都是1,就是说按照轮询算法,轮着往配置的服务器发,转着圈发送,配置强的服务器,我们可以给它配置的权重大一些。
- max_fails是在完成心跳机制,连续超过3次心跳失败,就认为服务器挂掉,fail_timeout,等心跳30秒。
- proxy_timeout 3s;是指nginx只和后端的chatserver连接3秒就断开,我们不加这个了。
- proxy_connect_timeout的意思是nginx得连接后台的server服务器,第一次连接的时候发现超过1秒的时间还没有握手成功就判定连接失败了
- tcp_nodelay on就是配置TCP的参数
- listen 8000是让客户端都往8000端口发送数据,8000端口可以给你负载均衡,往MyServer负载均衡配置里面进行负载均衡
- hash remote addr是基于一致性哈希的负载算法,可注销掉,默认使用轮询算法。
配置完成后,nginx -s reload
平滑重启。
负载均衡基础知识
常用的负载均衡算法分为以下两类:
静态负载均衡
动态负载均衡
常见的静态均衡算法:轮询法、随机法、源地址哈希法、一致性哈希法、加权轮询法、加权随机法。
常见的动态负载均衡算法:最小连接数法、最快响应速度法。