apache+tomcat 实现负载均衡集群

环境介绍:

192.168.101.58 apache代理服务器 apache,apr,apr-util,tomcat-connector
192.168.101.62 tomcat-A服务器
tomcat,jdk

192.168.101.63 tomcat-B服务器 tomcat多实例,ajp_port:8019
192.168.101.63 tomcat-默认页面服务器 tomcat多实例,ajp_port:8029

apache支持两种代理协议

1.http

2.ajp

tomcat及jdk的安装略过。

编译安装apache的httpd

1、编译安装apr

[[email protected] src]# wget 
[[email protected] src]# tar -zxf apr-1.5.2.tar.gz
[[email protected] src]# cd apr-1.5.2
[[email protected] src]# ./configure --prefix=/usr/local/apr
[[email protected] src]# make && make install

2、编译安装apr-util

[[email protected] src]# wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.gz
[[email protected] src]# tar -zxvf apr-util-1.5.4.tar.gz 
[[email protected] src]# cd apr-util-1.5.4
[[email protected] src]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[[email protected] src]# make && make install

3、编译安装apache

3.1、安装

[[email protected] src]# wget 
[[email protected] src]# tar -zxvf httpd-2.4.20.tar.gz
[[email protected] src]# cd httpd-2.4.20
[[email protected] src]#  ./configure --prefix=/usr/local/http --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxu-ajp --enable-proxy-balancer --enable-lbmethod-heartbeat --enable-heartbeat  --enable-slotmem-shm --enable-slotmem-plain --enable-watchdog
[[email protected] src]# make && make install

3.2、编写启动脚本

[[email protected] src]# vim /etc/init.d/httpd
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve #	       HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/http/bin/apachectl
httpd=${HTTPD-/usr/local/http/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	killproc -p ${pidfile} -d 10 $httpd
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status -p ${pidfile} $httpd
	RETVAL=$?
	;;
  restart)
	stop
	start
	;;
  condrestart)
	if [ -f ${pidfile} ] ; then
		stop
		start
	fi
	;;
  reload)
        reload
	;;
  graceful|help|configtest|fullstatus)
	$apachectl [email protected]
	RETVAL=$?
	;;
  *)
	echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
	exit 1
esac

exit $RETVAL

3.3、启动脚本赋予权限

[[email protected] src]# chmod +x /etc/init/d/httpd
[[email protected] src]# chkconfig --add httpd

3.4、启动apache(故障排查)

3.4.1、查看httpd进程

[[email protected] src]# service httpd start
[[email protected] src]# ps -ef |grep httpd
root     14445 14189  0 15:21 pts/0    00:00:00 grep httpd

3.4.2、查看端口状态

[[email protected] src]# netstat -tlnp |grep 80
tcp        0      0 :::80            :::*          LISTEN      14300/httpd[[email protected] src]#

3.4.3、查看错误日志

[[email protected] src]# cat /usr/local/http/logs/error_log
[Mon Jul 18 11:49:53.889462 2016] [proxy_balancer:emerg] [pid 14087:tid 140187546703616] AH01177: Failed to lookup provider ‘shm‘ for ‘slotmem‘: is mod_slotmem_shm loaded??
[Mon Jul 18 11:49:53.889750 2016] [:emerg] [pid 14087:tid 140187546703616] AH00020: Configuration Failed, exiting
[Mon Jul 18 11:50:01.041040 2016] [proxy_balancer:emerg] [pid 14127:tid 140379317155584] AH01177: Failed to lookup provider ‘shm‘ for ‘slotmem‘: is mod_slotmem_shm loaded??
[Mon Jul 18 11:50:01.041275 2016] [:emerg] [pid 14127:tid 140379317155584] AH00020: Configuration Failed, exiting
[Mon Jul 18 11:50:02.193534 2016] [proxy_balancer:emerg] [pid 14139:tid 140297643288320] AH01177: Failed to lookup provider ‘shm‘ for ‘slotmem‘: is mod_slotmem_shm loaded??

好像是slotmem模块没有加载,编辑httpd配置文件启用slotmem模块

[[email protected] src]# vim /etc/httpd/httpd.conf
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule slotmem_plain_module modules/mod_slotmem_plain.so

3.4.4、重新启动测试

[[email protected] src]# service httpd start
[[email protected] src]# ps -ef |grep httpd
root     14300     1  0 12:52 ?        00:00:00 /usr/local/http/bin/httpd
daemon   14302 14300  0 12:52 ?        00:00:01 /usr/local/http/bin/httpd
daemon   14303 14300  0 12:52 ?        00:00:01 /usr/local/http/bin/httpd
daemon   14304 14300  0 12:52 ?        00:00:01 /usr/local/http/bin/httpd
root     14443 14428  0 15:17 pts/1    00:00:00 vim /etc/init.d/httpd
root     14451 14189  0 15:28 pts/0    00:00:00 grep httpd

[[email protected] src]# netstat -tlnp |grep 80
tcp        0      0 :::80          :::*            LISTEN      14300/httpd

4、编译apache的jk模块

[[email protected] src]# wget 
[[email protected] src]# tar -zxvf tomcat-connectors-1.2.41-src.tar.gz 
[[email protected] src]# cd tomcat-connectors-1.2.41-src/native/
[[email protected] native]# ./configure --with-apxs=/usr/local/http/bin/apxs
[[email protected] native]# make && make install

5、配置(在httpd.conf中virtual host中添加jk的配置文件)

[[email protected] native]# vim /etc/httpd/httpd.conf
include /etc/httpd/extra/httpd-jk.conf

5.1编辑httpd-jk.conf

[[email protected] native]# vim /etc/httpd/extra/httpd-jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/extra/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel error
JkMount /* controller

说明:

LoadModule:表示装载模块

JkWorkersFile:定义workers属性的配置文件

JkLogFile:       定义work日志的路径

JkMount:        将/下的所有请求都交给controller集群处理,controller必须要在workers.properties中定义,否则报错

5.2、编辑workers.properties配置文件,增加如下内容

worker.list=controller                #定义控制器

#========tomcat1========
worker.tomcat1.port=8009               #tomcat的ajp端口
worker.tomcat1.host=192.168.101.62     #tomcat的ip
worker.tomcat1.type=ajp13              #ajp协议版本,目前1.3
worker.tomcat1.lbfactor=1              #权重

#========tomcat2========
worker.tomcat2.port=8019
worker.tomcat2.host=192.168.101.63
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

#========tomcat3========
worker.tomcat3.port=8029
worker.tomcat3.host=192.168.101.63
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1

#========controller负载平衡控制器========
worker.controller.type=lb                          #指定controller类型
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3 #指定负载平衡的tomcat
worker.controller.sticky_session=true              #指定是否粘性session
worker.controller.sticky_session_force=false
worker.connection_pool_size=3000
worker.connection_pool_minsize=50
worker.connection_pool_timeout=50000
# session配置说明:  
#当sticky_session,sticky_session_force都为true时不复制session,  
#sticky_session_force=false指集群中某台服务器多次请求没有响应,则转发到其它服务器处理,  
#sticky_session=false不使用粘性session,同时配置不复制session时,注意转发请求后可能会找不到原来的session.

到此,配置完成。下面访问http://192.168.101.58测试。

本博客参照了:http://cuisuqiang.iteye.com/blog/2070526  帖子,望大神勿怪。

时间: 2024-08-30 00:58:30

apache+tomcat 实现负载均衡集群的相关文章

【中级篇】部署Tomcat+Nginx负载均衡集群

部署Tomcat+Nginx负载均衡集群 1.          实验需求: 1)     2台服务器同时部署tomcat; 2) 部署Nginx 3) 搭建负载均衡,测试其效果. 2.          实验环境: Linux服务器系统版本:CentOS-6.5 -S02 IP:192.168.10.15  ( tomcat 2 ) Linux服务器系统版本:CentOS-6.5 -S03 IP : 192.168.10.18  ( Nginx) Linux服务器系统版本:  RedHat6.

apache以mod_jk方式实现tomcat的负载均衡集群

目录 1.环境准备 2.mod_jk配置 3.测试 4.总结 1.环境准备 准备三台主机,一台提供httpd环境,另两台提供tomcat环境. 主机规划: 主机名:httpd           IP地址:192.168.0.200提供httpd服务 主机名:TomcatA    IP地址:192.168.0.201提供tomcat服务 主机名:TomcatB    IP地址:192.168.0.202提供tomcat服务 jdk与tomcat的安装请参照博文:http://zhaochj.bl

Nginx+Tomcat高性能负载均衡集群搭建

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/8745794.html Nginx是一个高性能的HTTP服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.其占有内存少,并发能力强,在同类型的网页服务器中表现较好.Nginx可以在大多数Unix Linux OS上编译运行,并有Windows移植版.一般情况下,对于新建站点,建议使用最新稳定版作为生产版本. 单个Tomcat最大支持在线访问是500左右,要通知支持更多的访问量一个Tomcat

nginx+tomcat配置负载均衡集群

一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,方法如下:首先去apache tomcat官网下载一个tomcat解压版.解压该压缩包,生成n份tomcat 分别命名为 tomcat1,tomcat2,然后修改server.xml配置文件,分别进入tomcat/conf/目录,修改server.xml,一共三处.第一处:第二处.tomcat访问端口号:第三处:之后修改bin下的启动文件分别进入tomcat/bin目录,修改 startup.

Nginx + Tomcat 配置负载均衡集群

一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版nginx. 创建一个简单的web项目.为了直观的区分访问的哪个tomcat,在页面写上标记8081.8082. 分别部署到对应的tomcat下.如图:???? ? 2.配置nginx 进入nginx-1.10.1\conf路径,修改配置文件nginx.conf. 1.配置服务器组,在http{}节点之间添加u

Nginx + Tomcat 配置负载均衡集群简单实例

一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版nginx. 创建一个简单的web项目.为了直观的区分访问的哪个tomcat,在页面写上标记8081.8082. 分别部署到对应的tomcat下.如图:???? ? 2.配置nginx 进入nginx-1.10.1\conf路径,修改配置文件nginx.conf. 1.配置服务器组,在http{}节点之间添加u

2019.9.20 nginx+tomcat的负载均衡集群

图片上面是需要准备的环境 1,先安装nginx [[email protected] ~]# yum -y install pcre-devel zlib-devel openssl-devel lrzsz [[email protected]~]#useradd -M -s /sbin/nologin nginx 释放nginx源码包 [[email protected]~]# tar xf nginx-1.14.2.tar.gz -C /usr/src/ 4)配置编译: [[email pr

Linux下Apache+tomcat搭建负载均衡服务器集群

之前在我的博客里面写了一篇文章http://blog.csdn.net/yannanying/article/details/43018175,本文就是为了补充当时的那篇文章而写.我记得当时是参考百度经验里面的一篇文章写的,文章地址为http://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html,寒假的时候按照这篇文章的相关内容搭建了Apache+tomcat服务器集群,当时是弄成功了,回到学校后再次想尝试一下怎么搭建,但是发现自己记

Nginx + Tomcat 负载均衡集群的搭建实例

操作系统: CentOS6.5   JDK软件版本:jdk1.7.0_65  Tomcat软件版本:apache-tomcat-7.0.54 案例环境:拓扑图和案例环境 一.在对应的服务器上分别安装Nginx和Tomcat 1.Nginx的安装方法大家可以参考:Nginx的源码安装 2.Tomcat的安装方法大家可以参考:Tomcat的安装与配置 注意:如果防火墙没有关闭的朋友,在安装完成之后,分别在对应的服务器上创建防火墙规则 Nginx服务器上防火墙规则 Tomcat服务器上防火墙规则 二.