您的位置:首页 > 运维架构 > Tomcat

Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享 分类: 系统架构 Linux 2015-06-09 21:50 168人阅读 评论(0) 收藏

2015-06-09 21:50 1041 查看
环境准备:

一、11台测试机器
hostname:v1~v10(10台测试机)

ip:192.168.33.81(v1)~192.168.33.90(v101)

由于在内网测试,需要搭建个内网yum源,方便安装软件。yum所在机器为192.168.33.101

二、待实现功能

下面分别使用haproxy/nginx/lvs实现HA+负载均衡,软件环境如下:

v1:33.81nginx

v2:33.82nginx

v3:33.83tomcat

v4:33.84tomcat

v5:33.85tomcat

v6:33.86tomcat

v7:33.87haproxy

v8:33.88haproxy

v9:33.89lvs

v10:33.90lvs

1.安装依赖包

yum-yinstallpcre-devel
yum-yinstallopenssl-devel
yum-yinstallgcc
yum-yinstalllrzsz
yum-yinstallopenssh-clients


2.安装nginx

2.1.上传、解压、重命名nginx

su-root

1、cd/usr/local

2、rz-y

3、tar-xzvfnginx-1.7.7.tar.gz

4、mvnginx-1.7.

1、进入解压后的目录,指定安装路径,
注:不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc
cd/usr/local/nginx
./configure--prefix=/usr/local/nginx--conf-path=/usr/local/nginx/nginx.conf
2、编译:
make
3、安装:
makeinstall
4、启动
/usr/local/nginx/sbin/nginx
5、查看
http://192.168.xx.xxx
出现:welcomeNginx,就安装ok了。
6、停止
/usr/local/nginx/sbin/nginx–sstop


2.2.安装nginx

2.3.安装jdk

1、su-root用户
2、进入usr目录
cd/usr
3、在usr目录下建立java安装目录
mkdir–m755java
4、将jdk-6u24-linux-i586.bin拷贝到java目录下
rz-y
4、安装jdk
cd/usr/java
chmod755jdk-6u24-linux-i586.bin
./jdk-6u24-linux-i586.bin‘
注意:如果出现/lib/ld-linux.so.2:badELFinterpreter:Nosuchfileordirectory,安装下glic即可:yuminstallglibc.i686
5、安装完毕为他建立一个链接以节省目录长度
ln-s/usr/java/jdk1.6.0_24//usr/jdk
6、配置环境变量
vim/etc/profile
添加内容:
vi/etc/profile
exportJAVA_HOME=/usr/jdk
exportPATH=$PATH:$JAVA_HOME/bin
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportJAVA_HOMEPATHCLASSPATH
7、执行下命令(source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。)
source/etc/profile


2.4.安装tomcat

1、上传、解压:
rz-y
tar-zxvfapache-tomcat-6.0.37.tar.gz
2、重命名:
mvapache-tomcat-6.0.37tomcat


2.5.重新配置nginx

1、cd/usr/local/nginx
2、vi/usr/local/nginx/nginx.conf


添加:

usernobodynobody;#定义Nginx运行的用户和用户组
worker_processes4;#nginx进程数,建议设置为等于CPU总核心数。
error_loglogs/error.log	info;#全局错误日志定义类型,[debug|info|notice|warn|error|crit]
worker_rlimit_nofile1024;#一个nginx进程打开的最多文件描述符数目,所以建议与ulimit-n的值保持一致。
pid	logs/nginx.pid;#进程文件
#工作模式及连接数上限
events{
useepoll;#参考事件模型,use[kqueue|rtsig|epoll|/dev/poll|select|poll];epoll模型是Linux2.6以上版本内核中的高性能网络I/O模型
worker_connections1024;#单个进程最大连接数(最大连接数=连接数*进程数)
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http{
includemime.types;#文件扩展名与文件类型映射表
default_typeapplication/octet-stream;#默认文件类型
#设定负载均衡的服务器列表
upstreamtomcatxxxcom{
server192.168.56.200:8080;
server192.168.56.201:8080;
}
#设定日志格式
log_formatwww_xy_com'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
sendfileon;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
keepalive_timeout65;#长连接超时时间,单位是秒
#gzipon;
#设定虚拟主机,默认为监听80端口
server{
listen80;
server_nametomcat.xxx.com;#域名可以有多个,用空格隔开
#charsetkoi8-r;
#设定本虚拟主机的访问日志
access_log/data/logs/access.logwww_xy_com;
#对"/"启用反向代理
location/{
proxy_pass
'target='_blank'>http://tomcatxxxcom;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}
#error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
}


3、创建logs所需要的文件夹/data/logs/

cd/
mkdir–m755data
cddata
mkdir–m755logs


4、启动tomcat、nginx。

/usr/local/tomcat/bin/startup.sh
/usr/local/nginx/sbin/nginx


5、修改hosts,加入

192.168.56.99tomcat.xxx.com

6、访问http://redis.xxy.com

上面部分安装,我是用脚本装的。没按照上面来,使用上面配置时,启动nginx时,提示我"[emerg]7458#0:unknowndirective"<feff>user"in/usr/local/nginx/nginx.conf:1",

于是,我就直接拿着nginx.conf.default修改了,改改也能用。下面是我修改后的配置(v1下:/usr/local/nginx/nginx.conf):

worker_processes1;
error_loglogs/error.loginfo;
pidlogs/nginx.pid;
events{
useepoll;
worker_connections1024;
}
http{
includemime.types;
default_typeapplication/octet-stream;
#配置需要代理的服务器列表
upstreamservers{
serverv3:8080;
serverv4:8080;
}
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
access_loglogs/access.logmain;
sendfileon;
keepalive_timeout65;
server{
listen80;
server_namelocalhost;
access_loglogs/host.access.logmain;
location/{
#引用上面的配置
proxy_pass
'target='_blank'>http://servers;
proxy_set_headerHost$host;
proxy_set_headerX-Real_IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
roothtml;
indexindex.htmlindex.htm;
}
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
}


访问v1:80,使用rr策略自动轮巡v3,v4效果图:

对了,上面那句v3,v4的提示语,是我echo一句话把tomcat默认的ROOT/index.jsp给覆盖了,用作测试

1.首先使用keepalived+nginx+tomcat实现

测试过程中发现,我收到将nginxkill之后keepalived居然ip不飘,检查了配置也没发现问题。唯一能让keepavlied执行notify.sh脚本时候就是在启动kp时,
会检查nginx是否存活,不存活则启动。现在已经实现了

于是又加了个脚本单独去监控kp,脚本名称为:monitor.sh,代码在下边
v1的keepalived脚本:

!ConfigurationFileforkeepalived
global_defs{
}
vrrp_scriptchk_nginx{
script"killall-0nginx"
interval1
weight-2
}
vrrp_instanceVI_1{
stateMASTER
interfaceeth0
virtual_router_id1
priority100
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
track_script{
chk_nginx
}
virtual_ipaddress{
192.168.33.181/24
}
notify_master"/etc/keepalived/notify.shmaster"
notify_backup"/etc/keepalived/notify.shbackup"
notify_fault"/etc/keepalived/notify.shfault"
}
vrrp_instanceVI_2{
stateBACKUP
interfaceeth0
virtual_router_id2
priority98
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
track_script{
chk_nginx
}
virtual_ipaddress{
192.168.33.182/24
}
notify_master"/etc/keepalived/notify.shmaster"
notify_backup"/etc/keepalived/notify.shbackup"
notify_fault"/etc/keepalived/notify.shfault"
}


v2的keepalived脚本:

!ConfigurationFileforkeepalived
global_defs{
}
vrrp_scriptchk_nginx{
script"killall-0nginx"
interval1
weight-2
}
vrrp_instanceVI_1{
stateBACKUP
interfaceeth0
virtual_router_id1
priority98
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
track_script{
chk_nginx
}
virtual_ipaddress{
192.168.33.181/24
}
notify_master"/etc/keepalived/notify.shmaster"
notify_backup"/etc/keepalived/notify.shbackup"
notify_fault"/etc/keepalived/notify.shfault"
}
vrrp_instanceVI_2{
stateMASTER
interfaceeth0
virtual_router_id2
priority100
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
track_script{
chk_nginx
}
virtual_ipaddress{
192.168.33.182/24
}
notify_master"/etc/keepalived/notify.shmaster"
notify_backup"/etc/keepalived/notify.shbackup"
notify_fault"/etc/keepalived/notify.shfault"
}


v1,v2共同脚本:
monitor.sh:

#!/bin/bash
whiletrue;
do
A=`ps-ef|grepnginx|wc-l`
B=`ps-ef|grepkeepalived|wc-l`
if[$A-eq1];then
echo'restartnginx!!!!'
/usr/local/nginx/sbin/nginx
if[$A-eq1];then
if[$B-gt1];then
killallkeepalived
servicekeepalivedstart&
fi
fi
fi
if[$B-eq1];then
servicekeepalivedstart&
fi
sleep5
done


notify.sh

#!/bin/bash
#keepalivednotifyscript
contact='root@localhost'
notify(){
mailsubject="`hostname`tobe$1:vipfloating"
mailbody="`date'+%F%H:%M:%S'`:vrrptransition,`hostname`changedtobe$1"
echo$mailbody|mail-s"$mailsubject"$contact
}
case"$1"in
master)
notifymaster
echo"变成主了,触发master!">>/root/k_tips.log
/usr/local/nginx/sbin/nginx
exit0
;;
backup)
notifybackup
echo"变成从了,触发backup事件!">>/root/k_tips.log
/usr/local/nginx/sbin/nginx
exit0
;;
fault)
notifyfault
echo"脑列了,触发fault事件!">>/root/k_tips.log
/usr/local/nginx/sbin/nginx-sstop
exit0
;;
*)
echo'Usage:notify.sh{master|backup|fault}'
exit1
;;
esac


2.使用keepalived+haproxy+tomcat实现

2.1安装haproxy

yum-yinstallhaproxy

2.2修改配置

#tohavethesemessagesendupin/var/log/haproxy.logyouwill
#needto:
#
#1)configuresyslogtoacceptnetworklogevents.Thisisdone
#byaddingthe'-r'optiontotheSYSLOGD_OPTIONSin
#/etc/sysconfig/syslog
#
#2)configurelocal2eventstogotothe/var/log/haproxy.log
#file.Alinelikethefollowingcanbeaddedto
#/etc/sysconfig/syslog
#
#local2.*/var/log/haproxy.log
#
#上面说我们要把日志写到/var/log/haproxy.log需要修改以下两个地方:
1./etc/sysconfig/syslog,这个我现在用的centos6.6已经没有了,取代它的是同目录下的rsyslog
vi/etc/sysconfig/rsyslog
这里对它做了以下更改:修改前:SYSLOGD_OPTIONS="-c5"修改后:SYSLOGD_OPTIONS="-c2-r"
2./etc/rsyslog.conf修改日志存放位置vi/etc/rsyslog.conf
我在local7.*下面加了一行,修改后是这样的:#Savebootmessagesalsotoboot.loglocal7.*/var/log/boot.loglocal2.*/var/log/haproxy.log[/code]

好了,基本的配置可以了。
下面开始修改/etc/haproxy/haproxy.cfg

3.使用keepalived+lvs+tomcat实现

未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: