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、架构图
4、高可用实践
4.1、环境信息
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主节点
验证结果:
1、杀掉haproxy服务进程,keepalived自动拉起haproxy服务。
2、浏览器访问应用192.168.56.100:81/test,服务正常
(2)模拟Keepalived主节点(192.168.56.101)宕机或是Keepalive服务挂死务,VIP会自动切换到Keepalived备节点(192.168.56.102)上面 ,前端业务无感知。
停止keepalived服务
验证结果:
1、模拟停止keepalived服务或模拟主机宕机,VIP正常自动切换到keepalive备机
2、浏览器访问应用192.168.56.100:81/test,服务正常。
(3)重新启动Keepalived主节点(192.168.56.101)上面的Keepalived服务,VIP又会切回到Keepalived主节点(192.168.56.101)上面。
验证结果:
1、恢复keepalive主节点,VIP正常回切到keepalive主节点。
2、浏览器访问应用192.168.56.100:81/test,服务正常。
欢迎大家关注我的微信公众号,里面有很多相关的技术干货,也能随时联系到我。谢谢!