Nginx+keepalived+Tomcat集群架构

keepalived实现nginx发生故障时,自动切换,实现nginx反向代理的高可用。

环境:

CentOS6.4  64bit;

Jdk6.tar.gz

Aapache-tomcat-6.0.41.tar.gz

nginx-1.4.2.tar.gz

主机规划:

keepalived-master:192.168.115.10

keepalived-slave: 192.168.115.20

tomcat1         : 192.168.115.30

tomcat2         : 192.168.115.40

JDK安装:

tar  zxvf   JDK6.tar.gz

vi /etc/profile.d/jdk.sh

export JAVA_HOME=/usr/local/jdk6

export CALASS_PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_BIN=$JAVA_HOME/bin

export PATH=$PATH:$JAVA_HOME/bin

Tomcat安装:

tar zxvf  Aapache-tomcat-6.0.41.tar.gz

mv  ./tomcat   /usr/local/tomcat1

cp  -r  /usr/local/tomcat1   /usr/local/tomcat2

修改tomcat2中server.xml定义的三个端口:

shutdown端口"8005

ajp端口:    8009

http端口:   8080

nginx的安装:

tar zxvf  pcre-8.12.zip

./configure

make && make install

yum groupinstall "Development Tools"

yum install openssl  openssl-devel

tar zxvf  nginx-1.4.2.tar.gz

cd nginx-1.4.2

./configure  --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre

make

make install

#########Nginx启动脚本####

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`

options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`

for opt in $options; do

if [ `echo $opt | grep ‘.*-temp-path‘` ]; then

value=`echo $opt | cut -d "=" -f 2`

if [ ! -d "$value" ]; then

# echo "creating" $value

mkdir -p $value && chown -R $user $value

fi

fi

done

}

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

#########Nginx启动脚本####

安装keepalived

yum install popt-devel

tar  zxvf keepalived-1.1.19.tar.gz

./configure --prefix=/usr/local/keepalived

make && make install

规划配置:

mkdir  /etc/keepalived

cp  /usr/local/keepalived/sbin/keepalived   /usr/sbin/

cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d

cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

修改配置文件:

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER        主为MASTER。备为BACKUP

interface eth0

virtual_router_id 51  主和备相同

priority 100           主高备低

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.115.222

192.168.115.111

192.168.115.99

}

}

观察:

MASTER:

/etc/init.d/keepalived start

ip addr show看到如下信息:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:7e:20:10 brd ff:ff:ff:ff:ff:ff

inet 192.168.115.10/24 brd 192.168.115.255 scope global eth0

inet 192.168.115.222/32 scope global eth0

inet 192.168.115.111/32 scope global eth0

inet 192.168.115.99/32 scope global eth0

inet6 fe80::20c:29ff:fe7e:2010/64 scope link

valid_lft forever preferred_lft forever

BACKUP:

/etc/init.d/keepalived start

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:05:ff:b3 brd ff:ff:ff:ff:ff:ff

inet 192.168.115.20/24 brd 192.168.115.255 scope global eth0

inet6 fe80::20c:29ff:fe05:ffb3/64 scope link

valid_lft forever preferred_lft forever

停止master上的keepalived后在观察backup:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:05:ff:b3 brd ff:ff:ff:ff:ff:ff

inet 192.168.115.20/24 brd 192.168.115.255 scope global eth0

inet 192.168.115.222/32 scope global eth0

inet 192.168.115.111/32 scope global eth0

inet 192.168.115.99/32 scope global eth0

inet6 fe80::20c:29ff:fe05:ffb3/64 scope link

valid_lft forever preferred_lft forever

配置nginx代理tomcat

http模块中添加:

upstream  tomcat {

server 192.168.115.30:8080 weight=3;

server 192.168.115.30:8081 weight=3;

server 192.168.115.40:8080 weight=3;

server 192.168.115.40:8081 weight=3;

location / {

proxy_pass http://tomcat;

}

Nginx配置完毕。此时测试:

192.168.115.10:MASTER

/etc/init.d/keepalived start

server nginx start

192.168.115.20:SLAVE

/etc/init.d/keepalived start

server nginx start

后端tomcat全部打开。

注意此时,在keepalived上配置的虚拟IP是:

192.168.115.222

192.168.115.111

192.168.115.99

在浏览器中访问任何一个VIP,nginx都能代理到后方。并且能正常访问到TOMCAT主页面。

现在把MASTER上的nginx stop,观察

192.168.115.10 MASTER:

service  nginx stop

ip addr show 观察:发现VIP消失

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:7e:20:10 brd ff:ff:ff:ff:ff:ff

inet 192.168.115.10/24 brd 192.168.115.255 scope global eth0

inet6 fe80::20c:29ff:fe7e:2010/64 scope link

valid_lft forever preferred_lft forever

于是观察BACKUP上,ip addr show 观察已经获取VIP了。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:05:ff:b3 brd ff:ff:ff:ff:ff:ff

inet 192.168.115.20/24 brd 192.168.115.255 scope global eth0

inet 192.168.115.222/32 scope global eth0

inet 192.168.115.111/32 scope global eth0

inet 192.168.115.99/32 scope global eth0

inet6 fe80::20c:29ff:fe05:ffb3/64 scope link

valid_lft forever preferred_lft forever

再用浏览器访问VIP,看是否能问到tomcat页面。

依然能访问到,说明keepalived起到作用了。

这就是keepalived双机热备,故障转移的表现功能所在。在Nginx+Keepalived的架构上,nginx双机实现了反向代理的高可用。一台nginx挂掉后,依然不会影响访问。前端负载均衡已经解决了,但是后端的tomcat服务器挂掉后,该如何呢?keepalived是无法做到对后端服务器的健康检测的。这需要Nginx的功能。

时间: 2024-12-30 18:16:16

Nginx+keepalived+Tomcat集群架构的相关文章

19.Tomcat集群架构

1.Nginx+Tomcat集群架构介绍 2.Nginx+Tomcat集群架构实战 [[email protected] conf.d]# cat proxy_zrlog.cheng.com.conf upstream zrlog { server 172.16.1.7:8080; server 172.16.1.8:8080; } server { listen 80; server_name zrlog.cheng.com; location / { proxy_pass http://zr

nginx整合tomcat集群并做session共享----测试案例

最近出于好奇心,研究了一下tomcat集群配置,并整合nginx,实现负载均衡,session共享,写篇记录,防止遗忘.---------菜鸡的自我修炼. 说明:博主采用一个web项目同时部署到两台tomcat下,(tomcat-A,tomca-B),使用nginx做反向代理,按照设置的权值,将请求分发到后台的tomcatA/tomcat-B,并且实现session共享. 配置好本地域名指向:修改host文件:添加 127.0.0.1  www.domain.com.cn 新建项目:tiny-d

Nginx+Memcached+Tomcat集群配置

1.   Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebServer间的负载均衡,降低单个Web Server的负荷,以提高整体的性能与稳定性. 安装和配置Nginx的简单方式如下: 1)      下载并解压Nginx到本地目录:http://nginx.org/en/download.html 2)      对Nginx的配置主要是对它的配置文件/conf/nginx.conf的修改.如下链接是nginx.conf配置文件各个属性的详细说明:

nginx+memcached+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版 集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 一.nginx安装 安装依赖包 yum -y install gcc gcc-c++ 1.安装pcre库 tar z

nginx+双tomcat集群负载均衡(一台机器)

nginx简介 Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日.其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名. 下面是采用一台机器nginx+双tomcat集群负载均衡方案.当更新项目时可以停止

Docker Compose 一键部署Nginx代理Tomcat集群

Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [[email protected] ~]# tree compose_nginx_tomcat/ compose_nginx_tomcat/ ├── docker-compose.yml ├── mysql │   ├── conf │   │   └── my.cnf │   └── data ├── nginx │   ├── Dockerfile │   ├── nginx-1.12.1.tar.gz │  

Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议

转自:http://feitianbenyue.iteye.com/blog/2056357 最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议 但是,明明是https url请求,发现 log里面, Xml代码   0428 15:55:55 INFO  (PaymentInterceptor.java:44) preHandle() - requestStringForLog:    { "re

Nginx SSL+tomcat集群,取不到https正确协议

最近在做一个项目, 用到企业微信,架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议,但是在调试微信菜单的相关功能时却发现报错,报错信息如下: 经过调试dofilter里面的代码,发现: 浏览器中输入的URL是 https://shaidh.dhwrwi.com/dheu/syuu.do 但是打断点调试request.getRequestURL() 输出来的 一直是  http://shaidh.dhwrwi.com/

使用Nginx实现Tomcat集群负载均衡

一.背景 随着业务量和用户数量的激增,单一的tomcat部署应用已经无法满足性能需求,而且对于每次发布项目期间服务不可用的问题也凸显,既然出现了这个问题,那么我们本文就借助nginx来完美的解决这个问题. 二.基本概念 1.说明:关于Nginx的概念和介绍以及Centos7下安装步骤,请移步:Centos7安装Nginx实战 2.正向代理和反向代理 假设我们给定客户端A.代理服务器B.以及最终服务器C 正向代理:代理服务器B来代替客户端A来访问最终服务器C并将最终结果转发给客户端A,站在客户端A