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、cd/usr/local
2、rz-y
3、tar-xzvfnginx-1.7.7.tar.gz
4、mvnginx-1.7.
添加:
一、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-root1、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–m755datacddatamkdir–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脚本:!ConfigurationFileforkeepalivedglobal_defs{}vrrp_scriptchk_nginx{script"killall-0nginx"interval1weight-2}vrrp_instanceVI_1{stateMASTERinterfaceeth0virtual_router_id1priority100advert_int1authentication{auth_typePASSauth_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{stateBACKUPinterfaceeth0virtual_router_id2priority98advert_int1authentication{auth_typePASSauth_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脚本:!ConfigurationFileforkeepalivedglobal_defs{}vrrp_scriptchk_nginx{script"killall-0nginx"interval1weight-2}vrrp_instanceVI_1{stateBACKUPinterfaceeth0virtual_router_id1priority98advert_int1authentication{auth_typePASSauth_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{stateMASTERinterfaceeth0virtual_router_id2priority100advert_int1authentication{auth_typePASSauth_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/bashwhiletrue;doA=`ps-ef|grepnginx|wc-l`B=`ps-ef|grepkeepalived|wc-l`if[$A-eq1];thenecho'restartnginx!!!!'/usr/local/nginx/sbin/nginxif[$A-eq1];thenif[$B-gt1];thenkillallkeepalivedservicekeepalivedstart&fififiif[$B-eq1];thenservicekeepalivedstart&fisleep5done
notify.sh#!/bin/bash#keepalivednotifyscriptcontact='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"inmaster)notifymasterecho"变成主了,触发master!">>/root/k_tips.log/usr/local/nginx/sbin/nginxexit0;;backup)notifybackupecho"变成从了,触发backup事件!">>/root/k_tips.log/usr/local/nginx/sbin/nginxexit0;;fault)notifyfaultecho"脑列了,触发fault事件!">>/root/k_tips.log/usr/local/nginx/sbin/nginx-sstopexit0;;*)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已经没有了,取代它的是同目录下的rsyslogvi/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实现
未完待续。。。
相关文章推荐
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- javaEE异常摘要——更换工作区相同tomcat当部署在同一个项目疑难解答
- 整合apache和tomcat构建Web服务器
- 为什么web应用在tomcat启动时报java.lang.ClassCastException异常?
- linux安装tomcat
- 用cronolog为tomcat做日志分割
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- Apache服务器和tomcat服务器有什么区别?
- centOs 开发环境,jdk,mysql,tomcat
- tomcat内部运行原理浅析
- Linux部署Tomcat服务器
- Java 项目转为Eclispe Plugin Maven项目并调试/运行在Maven内嵌的Tomcat
- tomcat结合nginx使用小结
- Tomcat启动不了
- tomcat详解
- tomcat7项目启动报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
- 在Ubuntu 12.04LTS系统中安装jdk和配置tomcat服务器
- tomcat服务器学习(二)
- Tomcat服务器的使用(一)
- 如何用mod_jk连接器来集成Apache2和Tomcat 7