nginx实战操作之负载均衡分发到tomcat服务器以及负载均衡的四种策略

    今天我们使用nginx做负载均衡的实战操作,当一个网站的访问量过大的时候,我们把请求全都放到一台服务器处理的话,会造成服务器的宕机,这时我们需要准备多台服务器,把日益增长的访问需求,分别分发到不同的服务器中处理,达到一个负载均衡的效果。

需求

    客服端发送同一个url请求,nginx服务器把请求发送到不同端口号的tomcat服务器去处理。

 

前期准备

    这里我们准备一台端口9001的nginx服务器,再准备一台端口是8006的tomcat服务器,再准备一台端口是8007的tomcat服务器。

 

具体操作

  • 创建自定义iosoft8006和iosoft8007的web应用,并且创建index.html,拷贝到docker容器中tomcat的webapps文件下,并且修改,conf文件下的server.xml文件,修改完毕后,重启tomcat服务,详细操作参照我之前的文章

从docker安装tomcat到启动自定义项目

  •     确认环境准备完毕

# docker ps -a

    出现下边的进程信息,说明环境准备完毕

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
d9aaff77e5ee        tomcat              "catalina.sh run"        42 seconds ago      Up 38 seconds       0.0.0.0:8007->8080/tcp           mytomcat8007
749e3cb8be3d        tomcat              "catalina.sh run"        57 seconds ago      Up 50 seconds       0.0.0.0:8006->8080/tcp           mytomcat8006
bcbe5d0b053a        nginx               "nginx -g 'daemon of…"   30 hours ago        Up 23 hours         80/tcp, 0.0.0.0:9001->9001/tcp   mynginx

  • 修改nginx的nginx.conf配置文件,追加下边的粗体部分

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream myTomcatServer{
        server    192.168.100.101:8006;
        server    192.168.100.101:8007;
    }

    server {
        listen 9001;
        server_name 192.168.100.101;
        location  / {
            proxy_pass http://myTomcatServer;
        }
    }

    include /etc/nginx/conf.d/*.conf;
}

  • 将修改完的nginx.conf文件拷贝回docker容器中的nginx

# docker cp nginx.conf mynginx:/etc/nginx/nginx.conf

  • 重新启动nginx服务

# docker restart mynginx

  • 使用客户端访问nginx的ip+9001

http://192.168.100.101:9001/

  • 在客户端浏览器中不停按下F5

端口8006的tomcat和端口8007的tomcat不停的为我们处理请求

    这样就完成了nginx负载均衡实战的需求,是不是很简单啊,我们接下来简单说下,nginx负载均衡的策略

 

nginx负载均衡的策略

    主要有四种策略

  • 轮询

    刚才我们配置的策略就是轮询策略,它也是nginx默认的轮询策略,每次将我们的请求平均分配到不同的服务器中来处理我们的请求,这里有个好处,就是当处理请求的服务器down掉后,nginx会自动为我们剔除掉down掉的服务器。

 

  • weight

    也称为权重策略,权重,顾名思义,就是权重越高的服务器,我们就多访问,怎么配置呢,就是在刚才追加的upstream属性中,每个服务器的ip地址后,增加weight属性,weight属性值越高,被访问的几率就越高。

nginx.conf

略...

    upstream myTomcatServer{
        server    192.168.100.101:8006  weight=5;
        server    192.168.100.101:8007  weight=10;
    }

略...

  • ip hash

    ip hash的方式就是,根据客户端第一次发起请求时使用的ip,访问到哪台服务器,接下来在发起请求时,每次就固定在这台服务器访问,这样的好处就是,解决共享session的问题,配置的话就是在upstream属性中追加ip_hash属性

nginx.conf

略...

    upstream myTomcatServer{

        ip_hash;
        server    192.168.100.101:8006 ;
        server    192.168.100.101:8007;
    }

略...

  • fair

    从单词意思角度来说就是公平,公正的意思,按照服务器处理请求的响应时间来分配,响应时间越短,就优先分配,配置的话就是在upstream属性中追加fair属性

nginx.conf

略...

    upstream myTomcatServer{

        fair;
        server    192.168.100.101:8006 ;
        server    192.168.100.101:8007;
    }

略...

    在实际运用过程中,我们来看我们的需求来选择负载均衡的策略,我们所有一切的技术,都是来围绕需求来实现的,理解负载均衡的概念,我们就能搭建一个高可用的服务架构。

你可能感兴趣的:(nginx)