nginx 负载均衡时,一台tomcat宕机时的问题 自动切换

nginx 负载均衡时,一台tomcat宕机时的问题 自动切换如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。具体配置过程如下:1.在http节点下,添加upstream节点。upstreamlinuxidc{      server10.0.6.108:7080;      server10.0.0.85:8980;}

大家好,又见面了,我是你们的朋友全栈君。

如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。具体配置过程如下:

1. 在http节点下,添加upstream节点。

upstream linuxidc {

      server 10.0.6.108:7080;
      server 10.0.0.85:8980;
}

  2.  将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即“
http://linuxidc”.

location / {

            root  html;
            index  index.html index.htm;
            proxy_pass http://linuxidc;
}

    3.  现在负载均衡初步完成了。upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能 自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

    除此之外,upstream还有其它的分配策略,分别如下:

    weight(权重)

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

upstream linuxidc{

      server 10.0.0.77 weight=5;
      server 10.0.0.88 weight=10;
}

    ip_hash(访问ip)

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

upstream favresin{

      ip_hash;
      server 10.0.0.10:8080;
      server 10.0.0.11:8080;
}

    fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

 upstream favresin{     
      server 10.0.0.10:8080;
      server 10.0.0.11:8080;
      fair;
}

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

 upstream resinserver{

      server 10.0.0.10:7777;
      server 10.0.0.11:8888;
      hash $request_uri;
      hash_method crc32;
}

upstream还可以为每个设备设置状态值,这些状态值的含义分别如下:

down 表示单前的server暂时不参与负载.

weight 默认为1.weight越大,负载的权重就越大。

max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.

fail_timeout : max_fails次失败后,暂停的时间。

backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态
      ip_hash;
      server 10.0.0.11:9090 down;
      server 10.0.0.11:8080 weight=2;
      server 10.0.0.11:6060;
      server 10.0.0.11:7070 backup;
}

Nginx的配置与部署研究,Upstream负载均衡模块  http://www.linuxidc.com/Linux/2013-04/82526p2.htm

CentOS 6.2实战部署Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用Nginx搭建WEB服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3下Nginx性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3下配置Nginx加载ngx_pagespeed模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4安装配置Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx日志过滤 使用ngx_log_if不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍请点这里
Nginx 的下载地址请点这里

用了nginx负载均衡后,在两台tomcat正常运行的情况下,访问http://localhost 速度非常迅速,通过测试程序也可以看出是得到的负载均衡的效果,但是我们试验性的把其中一台tomcat(server localhost:8080)关闭后,再查看http://localhost,发现反应呈现了一半反映时间快,一半反映时间非常非常慢的情况,但是最后都能得到正确结果.

 

解决办法:

问题解决,主要是proxy_connect_timeout 

 

 这个参数, 这个参数是连接的超时时间。 我设置成1,表示是1秒后超时会连接到另外一台服务器。


#user 

 nobody;


worker_processes 

 1;




#error_log 

 logs/error.log;


#error_log 

 logs/error.log 

 notice;


#error_log 

 logs/error.log 

 info;




#pid 

 

 

 

 

 

 

 logs/nginx.pid;






events {



 

 

 

 worker_connections 

 1024;


}






http {



 

 

 

 include 

 

 

 

 

 

 mime.types;


 

 

 

 default_type 

 application/octet-stream;




 

 

 

 

 upstream localhost {



 

 

 

 

 

 

 #ip_hash;


 

 

 

 

 

 

 server 127.0.0.1:8081;


 

 

 

 

 

 

 server 127.0.0.1:8080;


 

 

 

 

 }




 

 

 

 #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 

 logs/access.log 

 main;




 

 

 

 sendfile 

 

 

 

 

 

 

 on;


 

 

 

 #tcp_nopush 

 

 

 

 on;




 

 

 

 #keepalive_timeout 

 0;


 

 

 

 keepalive_timeout 

 65;




 

 

 

 #gzip 

 on;




 

 

 

 server {



 

 

 

 

 

 

 

 listen 

 

 

 

 

 

 80;


 

 

 

 

 

 

 

 server_name 

 localhost;




 

 

 

 listen 80;


 

 

 

 server_name localhost;


 

 

 

 location /{



 

 

 

 proxy_pass http://localhost;


 

 

 

 proxy_set_header Host $host;


 

 

 

 proxy_set_header X-Real-IP $remote_addr;


 

 

 

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


    proxy_connect_timeout       1;
    proxy_read_timeout          1;
    proxy_send_timeout          1;



 

 

 

 }


 

 

 

 

 

 

 

 #charset koi8-r;




 

 

 

 

 

 

 

 #access_log 

 logs/host.access.log 

 main;




 

 

 

 

 

 

 

 #error_page 

 404 

 

 

 

 

 

 

 

 

 

 

 

 

 /404.html;




 

 

 

 

 

 

 

 # redirect server error pages to the static page /50x.html


 

 

 

 

 

 

 

 #


 

 

 

 

 

 

 

 error_page 

 

 500 502 503 504 

 /50x.html;


 

 

 

 

 

 

 

 location = /50x.html {



 

 

 

 

 

 

 

 

 

 

 

 root 

 

 html;


 

 

 

 

 

 

 

 }




 

 

 

 

 

 

 

 # proxy the PHP scripts to Apache listening on 127.0.0.1:80


 

 

 

 

 

 

 

 #


 

 

 

 

 

 

 

 #location ~ \.php$ {



 

 

 

 

 

 

 

 # 

 

 

 proxy_pass 

 

 http://127.0.0.1;


 

 

 

 

 

 

 

 #}




 

 

 

 

 

 

 

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000


 

 

 

 

 

 

 

 #


 

 

 

 

 

 

 

 #location ~ \.php$ {



 

 

 

 

 

 

 

 # 

 

 

 root 

 

 

 

 

 

 

 

 

 

 html;


 

 

 

 

 

 

 

 # 

 

 

 fastcgi_pass 

 

 127.0.0.1:9000;


 

 

 

 

 

 

 

 # 

 

 

 fastcgi_index 

 index.php;


 

 

 

 

 

 

 

 # 

 

 

 fastcgi_param 

 SCRIPT_FILENAME 

 /scripts$fastcgi_script_name;


 

 

 

 

 

 

 

 # 

 

 

 include 

 

 

 

 

 

 

 fastcgi_params;


 

 

 

 

 

 

 

 #}




 

 

 

 

 

 

 

 # deny access to .htaccess files, if Apache’s document root


 

 

 

 

 

 

 

 # concurs with nginx’s one


 

 

 

 

 

 

 

 #


 

 

 

 

 

 

 

 #location ~ /\.ht {



 

 

 

 

 

 

 

 # 

 

 

 deny 

 all;


 

 

 

 

 

 

 

 #}


 

 

 

 }






 

 

 

 # another virtual host using mix of IP-, name-, and port-based configuration


 

 

 

 #


 

 

 

 #server {



 

 

 

 # 

 

 

 listen 

 

 

 

 

 

 8000;


 

 

 

 # 

 

 

 listen 

 

 

 

 

 

 somename:8080;


 

 

 

 # 

 

 

 server_name 

 somename 

 alias 

 another.alias;




 

 

 

 # 

 

 

 location / {



 

 

 

 # 

 

 

 

 

 

 

 root 

 

 html;


 

 

 

 # 

 

 

 

 

 

 

 index 

 index.html index.htm;


 

 

 

 # 

 

 

 }


 

 

 

 #}






 

 

 

 # HTTPS server


 

 

 

 #


 

 

 

 #server {



 

 

 

 # 

 

 

 listen 

 

 

 

 

 

 443;


 

 

 

 # 

 

 

 server_name 

 localhost;




 

 

 

 # 

 

 

 ssl 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 on;


 

 

 

 # 

 

 

 ssl_certificate 

 

 

 

 

 cert.pem;


 

 

 

 # 

 

 

 ssl_certificate_key 

 cert.key;




 

 

 

 # 

 

 

 ssl_session_timeout 

 5m;




 

 

 

 # 

 

 

 ssl_protocols 

 SSLv2 SSLv3 TLSv1;


 

 

 

 # 

 

 

 ssl_ciphers 

 ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;


 

 

 

 # 

 

 

 ssl_prefer_server_ciphers 

 

 on;




 

 

 

 # 

 

 

 location / {



 

 

 

 # 

 

 

 

 

 

 

 root 

 

 html;


 

 

 

 # 

 

 

 

 

 

 

 index 

 index.html index.htm;


 

 

 

 # 

 

 

 }


 

 

 

 #}




}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163640.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux 如何安装whl文件,linux安装whl文件

    linux 如何安装whl文件,linux安装whl文件Windows环境:安装whl包:pipinstallwheel->pipinstall**.whl下载whl文件MySQL_python-1.2.5-cp27-none-win32.whlMySQL_python-1.2.5-cp27-none-win_amd64.whl执行pipinstallMySQL_python-1.2.5-cp27-none-win3…

  • 整理:数据库设计的六个阶段详解

    整理:数据库设计的六个阶段详解按照规范设计,我们将数据库的设计过程分为六个阶段:1、系统需求分析阶段;2、概念结构设计阶段;3、逻辑结构设计阶段;4、物理结构设计阶段;5、数据库实施阶段;6、数据库运行与维护阶段;每个阶段的详细解析如下:(资料来自:数据库设计(百度文库))一、系统需求分析阶段1、需求分析的任务2、需求分析的两种方法:自顶向下和自底向上二、概念结构设计三、逻辑结构设计

  • jmeter安装教程以及jdk环境配置_正版win10下载

    jmeter安装教程以及jdk环境配置_正版win10下载【Jmeter】win10/win11:Jmeter下载、安装、汉化、新机迁移、版本更新(Jmeter4以上版本均适用)

    2022年10月23日
  • 反射机制 java_什么叫反射机制

    反射机制 java_什么叫反射机制Java反射机制概述一、Java反射机制概述1.JavaReflection2.动态语言vs静态语言二、理解Class类并获取Class的实例1.概述2.方法3.哪些类型可以有Class对象?4.获取Class类的实例(四种方法)三、类的加载与ClassLoader的理解1.类的加载过程2.什么时候会发生类初始化?3.类加载器的作用4.JVM中不同类型的类的加载器5.6.Properties:用来读取配置文件。四、创建运行时类的对象五、获取运行时类的完整结构1.获取当前

  • 应用迁云之镜像迁移-(1)概述

    应用迁云之镜像迁移-(1)概述

  • spinner:获取选中值的三种方法

    spinner:获取选中值的三种方法

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号