haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践

1、背景介绍

为了实现tomcat应用服务高可用和系统负载均衡分发问题。我们采用开源组件HAPROXY做负载均衡分发到tomcat应用服务器,而保障了应用服务器高可用的同时NGINX单机存在单点故障,假如HAPROXY服务器挂了,那么所有的服务也会跟着瘫痪 。最终决定采用keepalived+haproxy方案来实现前端应用服务高可用,就能很好的解决这一问题。

2、开源组件介绍

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

Keepalived是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障的发生,通过配合Nginx可以实现WEB前端服务的高可用。

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

3、架构图


haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第1张图片

4、高可用实践

4.1、环境信息

haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第2张图片

4.2、软件信息

haproxy 1.4.11

Keepalived 1.12.18

Tomcat7

java1.8

4.3、软件安装

4.3.1、应用服务器安装

需要在web3~web4这两台应用服务器部署java和tomcat软件,然后发布应用程序到这两台服务器。

1、软件下载

tomcat下载地址:

http://apache.fayea.com/tomcat/tomcat-7/v7.0.77/bin/apache-tomcat-7.0.77.tar.gz

java下载地址

http://download.oracle.com/otn/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz

2、安装JDK

1)、上传java软件到应用服务器主机

ftp jdk-8u121-linux-x64.tar.gz

2)、解压软件包

tar xzvf jdk-8u121-linux-x64.tar.gz –C /usr

3)、配置环境变量

打开文件/etc/profile并在文件末尾添加

exportJAVA_HOME=/usr/jdk1.8.0_121

export PATH=$JAVA_HOME/bin:$PATH

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后执行命令生效环境变量source /etc/profile

4)、验证jdk安装

java –versoin

3、安装tomcat

1)、上传tomcat软件到两台应用服务器上面

ftp apache-tomcat-7.0.77.tar.gz

2)、安装tomcat

tar xvzf apache-tomcat-7.0.77.tar.gz –C /opt

然后解压的目录程序在/opt/apache-tomcat-7.0.77

软件安装完毕!

4、部署应用包

1)、上传代码包test.war

ftp test.war

2)、将代码包部署到tomcat应用服务器

cp test.war/opt/apache-tomcat-7.0.77/webapps

3)、启动tomcat服务

/opt/apache-tomcat-7.0.77/bin/shutdown.sh

/opt/apache-tomcat-7.0.77/bin/startup.sh

4)、访问代码

http://192.168.56.103:8080/test

http://192.168.56.104:8080/test 

4.3.2、haproxy软件安装

需要在web1~web2这两台服务器部署haproxy软件。

1、haproxy软件安装

1)软件下载

curl -fL

http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.11.tar.gz | tar xzf - -C /opt

2)解压和安装nginx

Cd /opt/haproxy-1.4.11

vi Makefile

编译安装的haproxy默认安装路径为/usr/local,将其改为/usrl/local/haproxy

65 PREFIX =/usr/local/haproxy

make install

mkdir -p /usr/local/haproxy/etc

cp examples/haproxy.cfg /usr/local/haproxy/etc

mkdir -p /usr/share/haproxy

3)启动haproxy服务

/usr/local/haproxy/sbin/haproxy  -f /usr/local/haproxy/etc/haproxy.cfg

2、配置负载均衡策略

编辑配置文件/usr/local/haproxy/etc/haproxy.cfg


##负载均衡采用轮询策略

global

log 127.0.0.1local0

log 127.0.0.1local1 notice

#log loghostlocal0 info

maxconn 4096

chroot /usr/share/haproxy

uid 99

gid 99

daemon

#debug

#quiet

#noproc 1

pidfile /usr/local/haproxy/haproxy.pid

defaults

logglobal

modehttp

optionhttplog

optiondontlognull

retries 3

optionredispatch

maxconn 2000

contimeout5000

clitimeout50000

srvtimeout50000

listendcos-master010.0.0.0:9090

cookieSERVERID rewrite

balanceroundrobin

serverdcos-master01192.168.56.101:8081 weight5 check inter 2000 rise 2 fall 5

serverdcos-master02192.168.56.102:8081 weight5 check inter 2000 rise 2 fall 5

listen status

mode http

bind0.0.0.0:1080

stats enable

stats uri/admin-status#管理地址

stats authhaproxy:haproxy#管理帐号:管理密码

statshide-version#隐藏haproxy版本信息


3、配置haproxy日志 


编辑配置文件/etc/rsyslog.conf,新增以下两行配置

local0.*/var/log/haproxy.log

local1.*/var/log/haproxy.log

编辑配置文件/etc/sysconfig/rsyslog

找到SYSLOGD_OPTIONS="-c 5"

改为SYSLOGD_OPTIONS="-r -m 0"

重启rsyslog服务

Systemctl rsyslog restart


4.3.3、安装keepalived软件

需要在web1~web2这两台服务器部署keepalived软件

1、下载keepalived到/usr/local/src目录

wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2、解压安装

tar-zxvf keepalived-1.2.18.tar.gz-c /usr/local/src

cd/usr/local/src/keepalived-1.2.18

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

make&& make install

3、将keepalived配置成Linux系统服务

#复制默认配置文件到默认路径

mkdir/etc/keepalived

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

#复制keepalived服务脚本到默认的地址

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

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

ln-s /usr/local/keepalived/sbin/keepalived /usr/sbin/

4、设置keepalived服务开机启动

chkconfigkeepalived on

5、修改Keepalived配置文件

在MASTER节点配置文件/etc/keepalived/keepalived.conf(192.168.56.101)

global_defs {

router_id 192.168.56.101##指定本机物理主机IP

}

vrrp_script chk_nginx {

script "/etc/keepalived/checkHaproxy.sh"##检测nginx服务状态

interval 2 ##检测时间间隔

weight -20 ##如果条件成立,权重-20

}

vrrp_instance VI_1 {

state MASTER##指定这台主机keepalived为主节点

interface enp0s8##指定物理网卡接口

virtual_router_id 11 ##虚拟路由的ID号,两个节点设置必须一样,建议用IP最后段

mcast_src_ip

192.168.56.101##指定本机物理主机IP

priority 100 ##节点优先级,值范围0-254,MASTER要比BACKUP高

nopreempt ##优先级高的设置nopreempt解决异常恢复后再次抢占的问题

advert_int 1 ##组播信息发送间隔,两个节点设置必须一样,默认1s

##设置验证信息,两个节点必须一致

authentication {

auth_type PASS

auth_pass 1111

}

##将track_script块加入instance配置块

track_script {

chk_nginx ##执行Nginx监控的服务

}

##虚拟IP池,两个节点设置必须一样

virtual_ipaddress {

192.168.56.100##虚拟ip,可以定义多个

}

}

Keepalived Backup备机节点配置文件(192.168.56.102)

global_defs {

router_id 192.168.56.102##指定备机物理主机IP

}

vrrp_script chk_nginx {

script "/etc/keepalived/checkHaproxy.sh"##检测nginx服务状态

interval 2

weight -20

}

vrrp_instance VI_1 {

state BACKUP##指定这台主机keepalived为备节点

interface enp0s8##指定物理网卡接口

virtual_router_id 11

mcast_src_ip 192.168.56.102##指定本机物理主机IP

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.56.100##虚拟ip,可以定义多个

}

}

6、Nginx状态检测脚本

/etc/keepalived/checkHaproxy.sh

脚本:如果haproxy停止运行,尝试启动,如果无法启动则杀死本机的keepalived进程,

keepalied将虚拟ip绑定到backup机器上。内容如下:

#!/bin/bash

A=`ps -C haproxy --no-header | wc -l`

if [ $A -eq 0 ];then

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg

echo "Haproxystart"

sleep 3

if [ `ps -C haproxy--no-header | wc -l` -eq 0 ];then

/etc/init.d/keepalived stop

echo"keepalived stop"

fi

fi

7、启动Keepalived

systemctl start keepalived

4.4、高可用测试

�(1)关闭Keepalived主节点(192.168.56.101)上面的haproxy服务后,Keepalived服务是否自动会将将haproxy服务拉起来,前端业务无感知。

Keepalived主节点


haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第3张图片

验证结果:

1、杀掉haproxy服务进程,keepalived自动拉起haproxy服务。

2、浏览器访问应用192.168.56.100:81/test,服务正常

(2)模拟Keepalived主节点(192.168.56.101)宕机或是Keepalive服务挂死务,VIP会自动切换到Keepalived备节点(192.168.56.102)上面 ,前端业务无感知。

haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第4张图片

停止keepalived服务

haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第5张图片

验证结果:

1、模拟停止keepalived服务或模拟主机宕机,VIP正常自动切换到keepalive备机

2、浏览器访问应用192.168.56.100:81/test,服务正常。

(3)重新启动Keepalived主节点(192.168.56.101)上面的Keepalived服务,VIP又会切回到Keepalived主节点(192.168.56.101)上面。

haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第6张图片
haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第7张图片

验证结果:

1、恢复keepalive主节点,VIP正常回切到keepalive主节点。

2、浏览器访问应用192.168.56.100:81/test,服务正常。

欢迎大家关注我的微信公众号,里面有很多相关的技术干货,也能随时联系到我。谢谢!

haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践_第8张图片

(完)

你可能感兴趣的:(haproxy+keepalived+tomcat开源组件实现应用服务器高可用实践)