什么是负载均衡?
将负载分摊到多台服务器执行,从而提高服务的可用性和响应速度
nginx支持的轮询策略
- 轮询
- 轮询+权重
- 客户端ip
- 第三方
- 哈希以及一致性哈希(这里不介绍)
nginx实现负载均衡
下面将使用tomcat在一台服务器进行测试,也可以自己用虚拟机建多台服务器进行测试
下载配置tomcat
https://tomcat.apache.org/download-80.cgi
下载完后解压
tar -zxvf apache-tomcat-7.0.57.tar.gz
重命名
mv apache-tomcat-7.0.57 tomcat1
复制1份
cp -rf tomcat1/ tomcat2
进入tomcat2/conf目录,修改server.xml,将端口改为9080
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为如下,就修改了三个地方
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--
<Connector executor="tomcatThreadPool"
port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
创建两个index.html
(分别复制到tomcat1/webapps/ROOT/下和tomcat2/webapps/ROOT/)
为了区分,将两个index.html注意区分一下,可以如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>TOMCAT 1</h1>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>TOMCAT 2</h1>
</body>
</html>
配置hosts文件(win10在C:\Windows\System32\drivers\etc)
添加
192.168.195.111 server.com
当我们访问server. com,将会跳转到192.168.195.111:80,也就是nginx服务器
(1)采用轮询实现负载均衡
进入nginx/conf,修改nginx.conf文件,添加如下
upstream usserver {
server 192.168.195.111:8080;
server 192.168.195.111:9080;
}
server {
listen 80;
server_name server.com;
location / {
proxy_pass http://usserver;
}
}
下面是配置代理连接的超时时间,如果超时了,就把请求轮询到下一台机器
location / {
proxy_pass http://usserver;
proxy_connect_timeout 1;
proxy_send_timeout 1;
proxy_read_timeout 1;
}
wq保存 -> (nginx启动或nginx -s reload重新加载nginx)
当我们访问server. com,将会跳转到192.168.195.111:80,nginx发现我们的server_name为server.com将会反向代理http://usserver,这是我们设置的负载均衡服务器组(usserver名字可以改)
测试,访问server .com,发现tomcat1和tomcat2交替出现,因为nginx默认采用轮询的方式实现负载均衡
(2)采用轮询加权重实现负载均衡
upstream usserver {
server 192.168.195.111:8080 weight=1;
server 192.168.195.111:9080 weight=2;
}
上面的意思就是192.168.195.111:8080访问一次,192.168.195.111:9080访问两次
wq保存 -> nginx -s reload重新加载
然后我们就会发现会在tomcat2页面停留两次
常用状态参数(可以看一下)
eg.server 192.168.195.111:8080 weight=1 max_fails=1 fail_timeout=2;
注意——预留服务器只有在其他机器故障或忙碌时才会使用
(3)采用ip_hash实现负载均衡
该方式时将每个请求按访问IP的hash进行分配
upstream usserver {
ip_hash;
server 192.168.195.111:8080;
server 192.168.195.111:9080;
}
此时访问server.com发现只显示一个tomcat页面
down表示该机器不参与负载均衡,注意当使用ip_hash时,无法使用weight和backup
upstream usserver {
ip_hash;
server 192.168.195.111:8080;
server 192.168.195.111:9080 down;
}
(4)采用第三方实现负载均衡(注意nginx版本不要太高)
下载nginx-upstream-fair-master.zip,对响应速度快的服务器优先分配,然后才会分配到速度较慢的服务器
解压
unzip nginx-upstream-fair-master.zip
重命名为
mv nginx-upstream-fair-master nginx-upstream-fair
重新编译nginx
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--add-module=/usr/local/nginx-upstream-fair
make && make install
这里我出错了,网上查了一下,是由于nginx版本( nginx-1.16.0)过高的原因,于是我重新下了一个 nginx-1.6.3,这次成功了。
进入nginx/conf,修改nginx.conf如下,采用fair模式
upstream usserver {
server 192.168.195.111:8080;
server 192.168.195.111:9080;
fair;
}
nginx还支持hash以及一致性hash实现轮询,可自行阅读相关文章。