使用nginx实现负载均衡

什么是负载均衡?

将负载分摊到多台服务器执行,从而提高服务的可用性和响应速度
在这里插入图片描述
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实现轮询,可自行阅读相关文章。

完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值