`
code727
  • 浏览: 66765 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Nginx安装,配置实现Tomcat负载均衡

阅读更多

       Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,具备占有内存少,并发能力强的特点。在高连接并发的情况下,是Apache服务器不错的替代品。

1.安装配置

1.1依赖安装

yum install pcre pcre-devel

1.2安装nginx

 

# 解压并进入解压目录
tar -zxvf nginx-1.9.5.tar.gz
cd nginx-1.9.5
# 配置安装在默认的/usr/local目录下
./configure
# 编译安装
make && make install

1.3拷贝配置文件至/etc/nginx

cp -r /usr/local/nginx/conf/nginx.conf /etc/nginx  

1.4将nginx定义为服务

 

# 编辑nginx启动脚本
vi /etc/init.d/nginx

 

 输入如下Shell命令

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/etc/nginx/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
   echo "nginx already running...."
   exit 1
fi
   echo -n $"Starting $prog: "
   daemon $nginxd -c ${nginx_config}
   RETVAL=$?
   echo
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
   return $RETVAL
}
# Stop nginx daemons functions.
stop() {
        echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx $nginx_pid
}
# reload nginx service functions.
reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
exit $RETVAL

 完成后可通过如下命令对nginx进行启动

service nginx start

1.5添加开机启动

vi /etc/rc.d/rc.local

添加如下配置:

# tomcat启动命令
/usr/local/tomcat/bin/startup.sh
# 加载指定的配置后启动nginx
/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
/usr/local/nginx/sbin/nginx

 1.6测试

在浏览器中输入http://localhost,若展现出欢迎界面,则说明配置成功

二、Nginx实现Tomcat的负载均衡

 2.1实现目标

 目标清单:

1)210、211和212三台主机上各安装一个Tomcat,利用统一的8080接口提供服务;

2)210和211还各安装了一个Nginx,利用统一的80接口提供请求分发并实现Tomcat负载均衡的目的;

3)可利用http://192.168.31.210和http://192.168.31.211两个http地址随机访问到最底层的Tomcat,但在实际的生产环境中,对外只提供一个url地址,因此需要keepalived来提供VIP(192.168.31.200)来实现;

4)keepalived安装在210和211两台主机上,它还有一个目的就是监控本机Nginx的运行状态。例如:当210的Nginx处于不可运行状态时,keepalived将VIP飘逸到211,使211上的keepalived继续利用VIP对外提供访问入口。
2.2实现过程

2.2.1在各主机上安装Tomcat

(此处省略一千字......)

2.2.2在210和211上安装配置Nginx

    安装已在第1节中实现,直接进行Nginx的配置。

vi /etc/nginx/nginx.conf

    主要的配置内容如下:

worker_processes  1;

# 指定error日志和pid文件的路径
error_log  /data/logs/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       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日志文件的路径
    access_log  /data/logs/nginx/access.log  main;
    sendfile        on;
    # tcp_nopush     on;
    keepalive_timeout  65;

    # 定义负载组
    upstream upstream1 {
         # 对应具体若干个Tomcat服务器的访问地址
         server   192.168.31.210:8080;
         server   192.168.31.211:8080;
         server   192.168.31.212:8080;
    }
    server {
        listen       80;
        # 服务器host,不同的主机有不同的名称
        server_name  192.168.31.211;

        # 定义根路径访问规则
        location / {
             root   html;
             index  index.html index.htm;
             # 访问地址,upstream1最终会被负载组中的某个server替换成真实的地址
             proxy_pass         http://upstream1;
             proxy_set_header   Host             $host;
             proxy_set_header   X-Real-IP        $remote_addr;
             proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
             client_max_body_size  100m;   
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
     }
}

    由于在Nginx的启动脚本中修改了所加载的配置文件路径为/etc/nginx(默认为/usr/local/nginx/conf),因此在启动之前还需要将mime.types文件拷贝于此

cp /usr/local/nginx/conf/mime.types /etc/nginx

 2.2.3重启210和211上的Nginx后测试

service nginx restart

1)输入http://192.168.31.210和http://192.168.31.211后,如果在浏览器中能呈现出Tomcat的首页,说明启动成功;

2)查看pid和日志目录,如果出现pid和access.log文件,则说明配置的文件路径有效;

3)见下图:


     红框中的信息是我在tomcat首页中自己加的,反复刷新页面,如果IP地址在210 - 212之间变化,则说明Nginx的负载均衡配置成功。
3.加入Keepalived实现灾备切换
3.1安装依赖
yum install popt-devel
yum install gcc gcc-devel
yum install openssl openssl-devel
 3.2安装Keepalived
# 解压并进入安装目录
tar -zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
# 配置,指定配置文件的目录和安装目录
./configure --sysconf=/etc --prefix=/usr/local/keepalived
# 编译安装
make && make install
 3.3设置开机启动
# 拷贝启动脚本到/usr/sbin/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
 vi /etc/rc.d/rc.local 后加入如下启动命令:
/etc/rc.d/init.d/keepalived start
    启动
service keepalived start
    重启系统后,输入如下命令:
service keepalived status
    如果出现如下示例信息:
    keepalived (pid  1897) 正在运行...
    则说明设置成功
3.4编辑keepalived监控nginx的脚本

 vi /opt/nginx_keepalived.sh后输入如下命令行:

#!/bin/bash
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then
service nginx start
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
service keepalived stop
fi
fi

     作用在于当本机nginx处于停止(宕机)状态时,尝试重启。等待3秒再次校验,仍然失败则不再尝试,将本机keepalived停止,让其它处于同一个VIP的keepalived来接管,达到灾备切换的目的。

     启动脚本授权

chmod -R 755 /opt/nginx_keepalived.sh

3.5编辑配置文件

vi /etc/keepalived/keepalived.conf

主机210(Master)上的配置内容:

! Configuration File for keepalived

global_defs {
   notification_email {
     code727@163.com
   }
   notification_email_from pub@easymobi.cn
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_http_port { 
    script "/opt/nginx_keepalived.sh"   # 检查nginx状态的脚本 
    interval 2   
    weight 3 
} 

vrrp_instance VI_1 {
    state Master
    # 取决于具体的eth
    interface eth2
    virtual_router_id 51
    # Nginx Master的IP地址
    mcast_src_ip 192.168.31.210
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111222
    }
    virtual_ipaddress {
        # Master和Backup共有的虚拟IP地址
        192.168.31.200
    }
    track_script {
    	chk_http_port
    }
}

备机211(Backup)上的配置内容:

! Configuration File for keepalived

global_defs {
   notification_email {
     code727@163.com
   }
   notification_email_from pub@easymobi.cn
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_http_port { 
    script "/opt/nginx_keepalived.sh"   # 检查nginx状态的脚本 
    interval 2   
    weight 3 
} 

vrrp_instance VI_1 {
    state Backup
    # 取决于具体的eth
    interface eth4
    virtual_router_id 51
    # Nginx Backup的IP地址
    mcast_src_ip 192.168.31.211
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111222
    }
    virtual_ipaddress {
        # Master和Slave共有的虚拟IP地址
        192.168.31.200
    }
    track_script {
    	chk_http_port
    }
}

3.6重启系统后测试

1)输入192.168.31.200后能正常访问到Tomcat首页,此时210上的Nginx日志文件的内容在增加,211的没有,说明常规情况下都是210的Nginx在处理转发;

2)停掉Master的Nginx(模拟宕机)后输入同样的地址仍然能正常访问到Tomcat首页,日志结果和场景1)一样,因为keepalived会监控到Nginx被关闭而又重新将它启动;
3)停掉Backup的nginx(模拟宕机)后输入同样的地址仍然能正常访问到Tomcat首页,日志结果和场景1)一样;
4)停掉Master的keeplived后输入同样的地址仍然能正常访问到Tomcat首页,此时已被Backup的keeplived接管,211上的Nginx日志文件的内容在增加,210的没有,说明在这种情况下都是211的Nginx在处理转发;

5)重启Master的keeplived,此时Master的keeplived抢回主动权(因为keeplived.conf的vrrp_install中没有声明nopreempt,将采用默认抢占策略),输入同样的地址后仍然能正常访问到Tomcat首页,日志结果和场景1)一样。

4.总结

    从前面的架构图中可看出,每一个Tomcat存在单点问题,虽然从Nginx层面来访问可过滤掉不可用的Tomcat,但整体来说,由于少了一台服务器,性能会有所下降,最极端的情况下,当所有的Tomcat都处于不可用时,访问Nginx也无济于事了。因此,对于那种可靠性要求非常高的环境来说,可为每一个Tomcat再添加一个备份,同样利用keeplived来分配VIP并实施监控。在这种环境下,nginx.conf文件中的server配置将修改为VIP:8080。

     上述手段也是服务器维护升级时,为保证7*24时不断服务更新的惯用手段——升级时,手动停到当前Tomcat主机,让keeplived接管到备机后继续对外提供老服务,当在主机上更新完成后,再将主机重新启动,如果keeplived为抢占式的,则主机自动抢回主动权后对外提供新服务,备机又处于待命状态,此时就可以在备机上“悄无声息”的更新服务了。

     另外,将server配置中的ip指向另一台Nginx服务器的ip,来实现Nginx之间无限层次的转发,但必须保证各转发服务器之间不能形成闭路环。

  • 大小: 17.9 KB
  • 大小: 133.1 KB
分享到:
评论

相关推荐

    Nginx+Tomcat 负载均衡 3分钟搞定

    要实现负载均衡,需要在 Nginx 服务器上配置 upstream 模块,以便将请求分配到多台 Tomcat 服务器上。具体配置如下: 1. upstream netitcast.com { server 127.0.0.1:18080 weight=1; server 127.0.0.1:28080 ...

    Nginx+tomcat配置集群负载均衡实例

    本实例将详细阐述如何通过Nginx配置集群负载均衡,以实现动静分离,提升系统性能和稳定性。 首先,Nginx是一款轻量级的Web服务器/反向代理服务器,以其高性能、稳定性以及低内存占用著称。它能处理静态文件请求,...

    Nginx + Tomcat 负载均衡配置详解

    Nginx 和 Tomcat 的组合常常被用来实现这样的目标,其中Nginx作为反向代理和负载均衡器,而Tomcat作为Java应用服务器。本文将深入探讨如何配置Nginx与Tomcat进行负载均衡,以提高系统的服务能力和稳定性。 首先,...

    Nginx与tomcat 负载均衡

    Nginx与Tomcat的负载均衡是指通过Nginx服务器来实现Tomcat集群的负载均衡,以提高系统的高性能和可扩展性。下面是实现负载均衡的详细步骤和知识点: 一、环境准备 * Nginx 1.8.0 * Apache Tomcat 6.0.33 二、目标...

    Nginx+tomcat 实现负载均衡session共享demo

    本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`session`共享。 首先,我们要理解负载均衡的基本概念。负载均衡是通过将工作负载分散到多个计算资源,以优化资源使用、最大化吞吐量、最小化...

    Nginx与Tomcat配置实现负载均衡.zip

    通过以上步骤,你可以建立起一个基本的Nginx与Tomcat负载均衡配置。这个配置不仅可以提高Web应用的可用性和响应速度,还能在单个服务器出现问题时,确保服务的连续性。随着业务的增长,可以根据需要扩展Tomcat集群,...

    Keepalived + Nginx 实现高可用 Web 负载均衡配置文件

    Keepalived + Nginx 实现高可用 Web 负载均衡配置文件,具体详情参见博文:http://blog.csdn.net/l1028386804/article/details/72801492

    Nginx++Keepalived+Tomcat负载均衡&动静分离

    Nginx++Keepalived+Tomcat负载均衡&动静分离配置 本文主要介绍了Nginx、Keepalived和Tomcat的负载均衡和动静分离配置,旨在帮助读者了解如何搭建高可用、高性能的Web应用系统。 一、环境准备 在开始配置之前,...

    nginx负载均衡 nginx+tomcat tomcat实现负责均衡

    ### Nginx与Tomcat实现负载均衡的知识点详解 #### Nginx简介及特性 Nginx是一款由Igor Sysoev开发的高性能HTTP服务器和反向代理服务器,以其出色的稳定性和低系统资源消耗而著称。最初是为俄罗斯访问量排名第二的...

    Nginx+Tomcat负载均衡配置教程

    ### Nginx+Tomcat负载均衡配置教程 #### 一、Nginx 安装与配置 **1. 下载并安装Nginx** - **下载Nginx**:前往Nginx官方网站下载适合您操作系统的最新版本。推荐下载稳定版以确保运行稳定。 - **解压文件**:将...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    在Nginx配置文件中,你可以设置upstream模块来定义后端Tomcat服务器的列表和负载均衡策略。 2. 安装Tomcat:部署多个Tomcat实例,每个实例运行在不同的端口上,以处理来自Nginx的请求。 3. 安装keepalived:解压`...

    实现基于nginx的tomcat负载均衡和集群配置

    本篇文章将详细讲解如何使用Nginx作为反向代理服务器来实现对Tomcat应用服务器的负载均衡和集群配置。 首先,我们需要理解Nginx和Tomcat的角色。Nginx是一款高性能的HTTP和反向代理服务器,常用于处理静态内容和...

    Nginx+Tomcat高性能负载均衡集群搭建(模板).zip

    **一、Nginx配置负载均衡** 1. **安装Nginx**: 在所有支持的平台上(如Ubuntu、CentOS等),都可以通过包管理器安装Nginx。 2. **配置负载均衡**: 在Nginx的配置文件`nginx.conf`或其包含的虚拟主机配置文件中,...

    Nginx+tomcat配置集群负载均衡

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"**Nginx+Tomcat配置集群负载均衡**"就是实现这一目标的一种常见方案。Nginx是一款高性能的反向代理服务器,常用于处理静态资源和进行负载均衡;Tomcat则是...

    nginx+tomcat实现负载均衡1

    总之,"nginx+tomcat实现负载均衡1"的学习将涵盖Nginx的基本操作、负载均衡配置、与Tomcat的集成以及高可用性的实现,这些都是构建高性能Web服务的关键技术。通过这些知识,开发者可以设计出更健壮、高效的分布式...

    nginx 双tomcat 负载均衡

    5. 配置 Nginx,以实现双 Tomcat 负载均衡: 在 nginx.conf 文件中添加以下配置: ```bash http { upstream tomcat { ip_hash; server localhost:8080; server localhost:8081; } server { listen 80; ...

    Nginx+Tomcat负载均衡

    首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 ...

    nginx+tomcat 负载均衡简易配置与动静分离

    总结来说,"nginx+tomcat 负载均衡简易配置与动静分离"是通过Nginx作为反向代理,结合Tomcat应用服务器,实现静态内容和动态请求的分离处理,以及请求的负载均衡,从而达到高可用、高性能的Web服务架构。

    Linux下nginx的安装及配置负载均衡

    Linux下nginx的安装及配置负载均衡是指在Linux操作系统中安装和配置nginx服务器,以实现负载均衡的功能。nginx是一款轻量级的Web服务器软件,支持反向代理、负载均衡、缓存等功能。 一、安装nginx 在安装nginx之前...

    nginx+tomcat负载均衡实现

    本文将深入探讨如何利用`nginx`和`tomcat`实现负载均衡,以提升系统性能和稳定性。 首先,我们需要理解负载均衡的基本概念。负载均衡是指通过将工作负载分布到多个计算资源(如服务器)来避免过载,确保服务的高...

Global site tag (gtag.js) - Google Analytics