使用Nginx实现负载均衡

一、       负载均衡的基本作用

1.        转发功能

根据自身一定的算法(权重、轮询),将客户端的请求转发到不同的应用服务器上面,减轻单个服务器的压力,提高系统的并发量

2.        容灾处理

通过心跳检测的方式,判断应用服务器是否正常工作,如果服务器宕机,则请求自动忽略该服务器,发送到正在正常工作的服务器上面。

3.        恢复添加

如检测到宕机的服务器恢复正常工作,自动将该服务器添加回处理用户请求的列表中。

 

 

二、       CentOS 上面安装Nginx

(Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境。建议使用管理员安装,因为80端口需要管理员启动。)

1.      安装Nginx的前置相关软件 (加上-y默认安装过程)

yum install –y gcc-c++

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

2.      直接下载.tar.gz安装包,地址:https://nginx.org/en/download.html

3.      解压文件之后使用默认配置目录,只是安装目录,非业务相关的配置

(将文件放到你想要反之的目录之后进行解压)

tar -zxvf nginx-1.10.1.tar.gz

cd nginx-1.10.1

./configure

4.      编译安装

make

make install

查找安装路径:

whereis nginx

5.      启动、停止

cd /usr/local/nginx/sbin/

./nginx

./nginx -s stop

./nginx -s quit

./nginx -s reload

./nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。

./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

查询nginx进程:

ps aux|grep nginx

 

6.      重启

1.先停止再启动:

对 nginx 进行重启相当于先停止再启动,即先执行停止命令再执行启动命令。如下:

./nginx -s quit

./nginx

2.重新加载配置文件(推荐):

当 ngin x的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用-s reload不用先停止 ngin x再启动 nginx 即可将配置信息在 nginx 中生效,如下:

./nginx -s reload

7.      开机自启动

即在rc.local增加启动代码就可以了。

vi /etc/rc.local

增加一行 /usr/local/nginx/sbin/nginx

(如果访问不了的话看看是不是防火墙问题)

 

三、       Nginx实现负载均衡

(这里简单的使用两个tomcat模拟两台服务器,具体情况自行调整)

1.      Nginx的负载分发

Nginx 的 upstream目前支持的分配算法:

1)、轮询 ——1:1 轮流处理请求(默认)

每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。

2)、权重 ——you can you up

通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。

3)、ip_哈希算法

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

 

2.      配置Nginx的负载均衡与分发

使用Nginx实现负载均衡

       通过在upstream参数中添加的应用服务器IP后添加指定参数实现,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcats的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将大部分请求发送给8080端口;较少部分给tomcat2来实现有条件的负载均衡,当然这个可以根据服务器1、2的硬件指数处理请求能力。

 

四、总结

总结一下,负载均衡不论是各种软件或硬件上的解决方案,主要还是将大量的并发请求按照一定的规律分发给不同的服务器处理,从而减少某台服务器的瞬时压力,提高网站的抗并发能力。nginx在负载均衡的应用之所以广泛,这归功于它的灵活配置,一个nginx.conf文件解决大部分问题,另外它本身轻量级,不需要占用服务器太多资源就可以达到较好的效果。

 

ps:现在各大云服务器都有比较成熟的负载均衡和容灾处理的方案,非必须的情况建议直接使用云服务器的,免去自己搭建的麻烦,笔者本人现在用Nginx基本都是用来做正向代理,

附正向代理使用文档:https://my.oschina.net/xwzj/blog/1608621)

转载于:https://my.oschina.net/xwzj/blog/1608611