Nginx实现负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上将负载分发到不同的服务器,也就是我们所说的负载均衡。

1、实现效果

(1)浏览器地址栏输入http://218.244.158.200/edu/a.html ,负载均衡效果,平均分发到8080端口服务器中和8081端口的服务器中。

2、准备工作

(1)准备两台Tomcat服务器,一台8080,一台8081。

/usr/src目录下新建tomcat8080tomcat8081文件夹,将解压后的apache-tomcat-8.5.57分别放在新建的两个目录下。

tomcat8080目录下的apache-tomcat-8.5.57中的server.xml无需修改,直接启动即可。

tomcat8081目录下的apache-tomcat-8.5.57中的server.xml需要修改2处端口号后启动,需要修改处如下所示。

<!--8005改成任意端口-->
<Server port="8015" shutdown="SHUTDOWN">
    
<!--将8080改成8081-->
<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

分别启动8080端口Tomcat和8081端口Tomcat即可。

浏览器访问http://218.244.158.200:8080/http://218.244.158.200:8080/

(2)在两台Tomcat中的webapps中创建名称为edu的文件夹,在edu中创建页面a.html,用于测试。

tomcat8080

# 进入`/usr/src/tomcat8080/apache-tomcat-8.5.57/webapps`目录下
cd /usr/src/tomcat8080/apache-tomcat-8.5.57/webapps

# 新建edu目录
mkdir edu

# 进入edu目录
cd edu

# 创建a.html
vi a.html

# 内容写上如下
<html>
	<head>
		<title>8080-PORT</title>
	</head>
	<body>
		<h1>This is 8080 port page</h1>
	</body>
</html>

tomcat8081

# 进入`/usr/src/tomcat8081/apache-tomcat-8.5.57/webapps`目录下
cd /usr/src/tomcat8081/apache-tomcat-8.5.57/webapps

# 新建edu目录
mkdir edu

# 进入edu目录
cd edu

# 创建a.html
vi a.html

# 内容写上如下
<html>
	<head>
		<title>8081-PORT</title>
	</head>
	<body>
		<h1>This is 8081 port page</h1>
	</body>
</html>

浏览器访问:

浏览器地址栏分别输入http://218.244.158.200:8081/edu/a.htmlhttp://218.244.158.200:8080/edu/a.html

至此,两台tomcat服务器就部署好了。

3、Nginx负载均衡配置

nginx配置文件中进行负载均衡的配置。

/usr/local/nginx/conf目录下的nginx.conf下进行相关配置。

# 进入配置文件目录下,查找nginx.conf

[root@iZbp17oxotxuhf5g2zr3brZ ~]# cd /usr/local/nginx/conf

编辑nginx.conf配置文件

# 编辑配置文件
[root@iZbp17oxotxuhf5g2zr3brZ conf]# vi nginx.conf

首先在http块中添加一个upstream,名字随便起,这里我起名为myserver,括号中的内容以server开头后跟IP:PORT,具体如下。

# 配置负载均衡服务列表 添加一个 upstream 
    upstream myserver{
    
    # 实现负载均衡的tomcat服务器的列表
        server 218.244.158.200:8080;
        server 218.244.158.200:8081;
    }

其次在server块中将server_name的值localhost改成服务器的IP地址,如下。

 # server_name 值localhost 改成ip地址
        server_name  218.244.158.200;

最后在location块中添加一个proxy_pass,值为http://myserver,如下。

 # 添加proxy_pass
        proxy_pass http://myserver;

重载nginx配置

# 回到`/usr/local/nginx/sbin`目录下执行重载命令
[root@iZbp17oxotxuhf5g2zr3brZ sbin]# ./nginx -s reload

测试效果

浏览器地址栏输入http://218.244.158.200/edu/a.html,刷新即可看到每刷新一次就会显示不同的tomcat服务器中的资源文件,如此就实现了将请求分发到不同的服务器中。

随着互联网信息的爆炸性增长,负载均衡(load balance) 已经不再是一 个很陌生的话题。顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。

快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎。

nginx就是其中的一个,在linux下有Nginx、LVS、Haproxy等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式(策略)。

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight

weight代表权重,默认为1,权重越高被分配的客户端越多。

指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。例如:

upstream server_pool{
	server 192.168.5.21 weight=10;
	server 192.168.5.22 weight=10;
}

3、ip_ hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:

upstream server_pool{
	ip_ hash;
	server 192.168.5.21:80;
	server 192.168.5.22:80;
}

4、fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pool{
	server 192.168.5.21:80;
	server 192.168.5.22:80;
	fair;
}

完结!

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

隻言片語・於此匯聚!