【Nginx 学习笔记3 —— 负载均衡】

200 阅读2分钟

准备

/server
|- nginx (监听80 和 9001)
    |- tomcat8081 (监听8081端口,修改server.xml)
	   |- webapps
		|- edu
		    |- a.html 
    |- tomcat8082 (监听8082端口,修改server.xml)
	    |- webapps
		|- edu
		    |- a.html 

记得到云服务器端开启相关端口的规则:

负载均衡

应用场景:在当业务系统服务器无法支撑当前的业务量时,用户可以选择更高性能的服务器。但更为合理的做法是通过在既有业务服务器基础上,增量的方式增加相同功能的服务器,将计算任务分摊到后台多台较低配置的服务器处理,每台服务器都可以响应服务请求。实现合理安排客户请求并加快了请求相应速度,来提高用户体验。而用户仅感受到是一台高性能服务器在提供服务。

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

配置实例

  1. 要实现的效果

    浏览器输入 http: //ip/edu/a.html,负载均衡效果,平均到 8081 和 8082 中去。

  2. 准备

    如开头那样,笔记2有多开tomcat的方法。

    1. 两台tomcat,分别监听8081,8082

    2. 并且都在webapps 下创建文件夹edu,并在edu下创建a.html用于测试,比如写一个 <h1>8081</h1>做区别。

    3. 开启两个tomcat

      直接访问tomcat测试一下:

  3. 配置Nginx

    到配置文件 nginx/conf/nginx.conf 中配置

    http {
    #负载均衡服务列表配置
    upstream myserver {
        server  ip:8081;
        server  ip:8082;
    }
    server {
        listen       80;
        server_name  ip;
        location / {
            proxy_pass http://myserver;    
            proxy_set_header Host $host; // 得添加这个
            root   html;
            index  index.html index.htm;
        }
     ...
    

    **proxy_set_header Host $host;**这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里。 如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。

  4. 测试

    没加端口是 80,走的nginx,不断刷新会走两个tomcat

负载均衡分配方式(策略)

轮询

​ 默认的策略,每次请求按时间顺序逐一分配到不同的服务器,如果某个服务器down了就把他剔除掉。

weight(权重)

​ weight代表权重,默认为1。添加如下,那他会跟据权重来分配

upstream myserver{
	server  192.168.92.128:8081 weight=10;
	server  192.168.92.128:8082 weight=10;
}

ip_hash

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

upstream myserver{
	ip_hash
	server  192.168.92.128:8081;
	server  192.168.92.128:8082;
}

fair (第三方)

按后台服务器的响应时间来分配请求,响应时间短的优先分配

upstream myserver{
	server  192.168.92.128:8081;
	server  192.168.92.128:8082;
	fair;
}