nginx负载均衡

拥有回忆 提交于 2019-12-02 16:18:29

一:为什么要实现负载均衡

当一台服务器的单位时间内访问量越大的时候,服务器压力会越大,当一台服务器压力大得超过自身的承受压力的时候,服务器会崩溃。为了避免服务器崩溃,让用户更好的体验,我们通常通过负载均衡的方式来分担服务器的压力。那么什么是负载均衡呢?我们可以建立很多个服务器,这些服务器组成一个服务器集群,然后当用户访问我们的网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器群中选择一个压力较小的服务器,然后将该访问请求引入选择的服务器。这样,用户每次的访问,都会保证服务器集群中的每个服务器的压力区域平衡,分担了服务器的压力,避免了服务器崩溃的情况。

二:Nginx的优势

nginx是一款可以通过反向代理实现负载均衡的服务器,使用nginx服务器实现负载均衡的时候,用户首先会访问到nginx服务器,然后nginx服务器再从服务器群中选择压力较小的服务器,把该访问请求引入到该服务器。若服务器群中的某个服务器崩溃,那么从待选的服务器列表中删除,也就是说如果一个服务器崩溃了,那么nginx肯定不会把访问引入该服务器了。

三:负载均衡

当使用了代理服务器时,一般代理服务器后面不仅仅只有一台原始服务器,而是有很多台服务器一起在处理用户发过来的请求,这时就要协调好多台服务器怎样合作共同处理用户的请求

若所有的原始服务器配置相差不大的情况下,负载均衡的手段一般为轮询,即每台服务器平等地处理用户的请求,当请求到来时会自动交给当前所负责事务最少的服务器去处理;

若原始服务器的配置有一定差异时,则采用加权轮询的方式,配置较好的服务器将负责更多的请求处理,反之亦然;

而一旦采取轮询方式,而要考虑session共享的问题,因为要是用户的请求被分配给不同的服务器处理而未实现session共享的话则需要用户重复登陆操作,当前实现session共享的方式有写入数据库或者写入memcached;

若不想处理session共享,则采用ip哈希的方式将某一用户的请求指定分配给某一台服务器,在配置中加上 ip_hash 这句即可;

几种常用的负载均衡方式

  • 最少连接:系统把新连接分配给当前连接数目最少的服务器。该算法在各个服务器运算能力基本相似的环境中非常有效。

  • 最快算法:最快算法基于所有服务器中的最快响应时间分配连接。该算法在服务器跨不同网络的环境中特别有用。

  • 轮询:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度、连接速度和内存等方面不是完全均等,那么效果会更好。

  • 加权轮询:该算法中,每个机器接受的连接数量是按权重比例分配的。这是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器。

四:测试

1、实现效果 (1)浏览器地址栏输入地址http://192.168.180.113/dev/a.html,负载均衡效果,平均8080 和8088端口中

2、准备工作 (1)准备两台tomcat服务器,一台8080,一台8088 (2)在两台tomcat里面webapps目录中,创建名称是dev文件夹,在dev文件夹中创建页面a.html,用于测试

3、在nginx的配置文件中进行负载均衡的配置

 upstream myserver {
     server  192.168.180.112:8088;
     server  127.0.0.1:8080;
    }
​
    server {
        listen       80;
        server_name  192.168.180.113;
​
        #charset koi8-r;
​
        #access_log  logs/host.access.log  main;
​
        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
        }

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!