LVS+Keepalived+Tomcat实现高可用性及均衡负载

1、Keepalived简介

Keepalived是Linux下一个轻量级别的高可用解决方案。Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
      后来Keepalived又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,实现高可用性,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。

2、VRRP协议和工作原理

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。

每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播(一对多,一个Master对多个Backup)方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一般不会发生BACKUP抢占MASTER的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。

3、LVS负载均衡模式 直接路由模式(DR)

直接路由模式比较特别,很难说和什么方面相似,前NAT和TUN种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)?其原理 为,DR和REALSERVER都使用同一个IP对外服务?但只有DR对ARP请求进行响应,所有REALSERVER对本身这个IP的ARP请求保持静默?也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REALSERVER,把目的MAC地址改为 REALSERVER的MAC并发给这台REALSERVER?这时REALSERVER收到这个数据包,则等于直接从客户端收到这个数据包无异(因为服务器也有对外服务的ip,所以,有了客户机的ip地址,返回就可以不经过DR),处理后 直接返回给客户端?由于DR要对二层包头进行改换,所以DR和REALSERVER之间必须在一个广播域,也可以简单的理解为在同一台交换机上?

4、环境描述

LVS server1 (Master):192.168.1.135虚拟IP为:192.168.1.150(Master优先级高会首先获得vip)
LVS server2 ( Slave ) :192.168.1.136虚拟IP为:192.168.1.150(Master挂了之后slave才会获得vip)
WEB server1: 192.168.1.138虚拟IP为192.168.1.150(使用tomcat作为web容器)
WEB server2; 192.168.1.139虚拟IP为192.168.1.150 (使用tomcat作为web容器)

注意:所有集群服务器时间要一致

5、安装LVS

注意此动作。否则MAKE直接报错。
如果没有/2.6.32-279.el6.x86_64 这个目录,请安装内核开发包
# yum -y install kernel-devel
# ln -s /usr/src/kernels/2.6.32-279.el6.x86_64/ /usr/src/linux
# tar -xvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install
# ipvsadm –L

6、安装Keepalived

# tar –xvf keepalived-1.2.12.tar.gz
#./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64/
Keepalived version       : 1.2.12
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lssl -lcrypto -lcrypt
Use IPVS Framework       : Yes 表示使用ipvs框架,也是代表启动IPVS功能
IPVS sync daemon support : Yes  表示启动ipvs的同步功能,--disabled-lvs-sysncd此参数可以关闭。
IPVS use libnl           : No   表示使用新的libn1版本,如果想使用新的版本,需要重新安装libn1的包
Use VRRP Framework       : Yes 表示使用VRRP框架,这个实现keepalived高可用的必须功能
Use VRRP VMAC            : Yes 表示使用基础VMAC接口的xmit VRRP包
SNMP support             : No
SHA1 support             : No
Use Debug flags          : No
# make && make install
# cp /soft/keepalived-1.2.12/bin/keepalived /usr/bin/

ERRR: yum install -y openssl openssl-devel
  !!! OpenSSL is not properly installed on your system. !!!
  !!! Can not include OpenSSL headers files.            !!!

7、主DR(master)配置Keepalived配置文件(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1 #邮件服务器
smtp_connect_timeout 30 #邮件超时时间
router_id master
}

vrrp_instance VI_1 {    #定义VRR组,
state MASTER    #定义为MASTER主
interface eth0   #对外访问的网络接口
virtual_router_id 51  #虚拟路由标识。注意主从要一致,因为是同一个vip,所以id号才要是一致
priority 100   #主从优先级,主的优先级要高于从。注意是越大优先级越高
advert_int 1   #:广播周期秒数
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.150   #:虚拟VIP地址,真实环境这里应该是公网IP
}
}

virtual_server 192.168.1.150 80 {  #:虚拟VIP地址 与 端口,DR架构WEB端口和虚拟端口监听一致。否则将无法访问,无法实现端口映射
delay_loop 6  #健康检查时间间隔,单位是秒
lb_algo rr   #调用算法为RR
lb_kind DR  #调用架构模式为DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP

real_server 192.168.1.138 80 {   #:真实WEB服务器地址与端口
weight 1
TCP_CHECK{
connect_timeout 10   #:连接超时为10秒
nb_get_retry 3
delay_before_retry 8
connect_port 80   #连接端口为80,要和上面的保持一致
}

real_server 192.168.1.139 80 {
weight 1
TCP_CHECK{
connect_timeout 10
nb_get_retry 3
delay_before_retry 8
connect_port 80
}
}
}

8、从DR服务器配置文件

主从配置区别:

state BACKUP   #状态改成BACKUP
priority 90     #优先级要低于主
interface eth0  #网络接口注意和本机对应,
其它的配置文件内容和主的一样

9、配置WEBserver,所有的WEB脚本都一样

#!/bin/bash
# Written by NetSeek
# description: Config realserver lo and apply noarp

WEB_VIP="192.168.1.150"                        ;只需要改动你设置的vip即可
. /etc/rc.d/init.d/functions

case "$1" in
start)
ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
/sbin/route add -host $WEB_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p > /dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
       ifconfig lo:0 down
       route del $WEB_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
status)
        # Status of LVS-DR real server.
        islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`
        isrothere=`netstat -rn | grep "lo:0" | grep $web_VIP`
        if [ ! "$islothere" -o ! "isrothere" ]
        then
            echo "LVS-DR real server Stopped."
        else
            echo "LVS-DR Running."
        fi
        ;;
*)

echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
exit 0

10、启动WEB server的脚本

# ./ realserver.sh start
# ip add list


有上图所示的VIP就成功了,VIP绑定在本地回环接口

11、配置Tomcat配置文件并启动tomcat

# vim /usr/local/tomcat/conf/server.xml

<Connector port="80" protocol="HTTP/1.1"  索搜此项修改默认WEB端口

connectionTimeout="20000"               redirectPort="8443" />

<Host name="localhost"  appBase="web"  可以修改域名或者IP,但作代理请保持localhost

unpackWARs="true" autoDeploy="true">

<Context path="" docBase="/opt/web"></Context> 新增此项修改WEB的家目录

[[email protected] bin]# ./startup.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

12、启动keepalived服务

keepalived,lvs是keepalived编译支持的模块
在LVS主从服务器上启动keepalived
# /etc/init.d/keepalived start
在MASTER服务器上会看到VIP,当MASTER挂了之后。VIP将自动切换到SLAVE(从),
# /etc/init.d/keepalived start

有上图所示的vip表示keepalived启动VIP生效

13、访问测试

是否可以看到WEBIP

然后通过浏览器访问:http://192.168.1.150 看看是否可以访问?

f5不停的刷新,看看是否能访问不同的web页面?

时间: 2024-10-16 05:53:52

LVS+Keepalived+Tomcat实现高可用性及均衡负载的相关文章

LVS基础及LVS+Keepalived实现双主高可用负载均衡

LVS基础及LVS+Keepalived实现双主高可用负载均衡 LB集群: (Load  Balancing)即负载均衡集群,其目的是为了提高访问的并发量及提升服务器的性能,其    实现方式分为硬件方式和软件方式. 硬件实现方式: 常用的有 F5公司的BIG-IP系列.A10公司的AX系列.Citrix公司的 NetScaler系列等 软件实现方式: LVS工作于传输层.nginx工作于应用层.haproxy工作于传输层和应用层 本文主要讲解LVS. 一.什么是LVS ? 1. LVS:(Li

利用lvs keepalived配置redis高可用及负载均衡

需求 我们用ES做日志服务,架构是 上游数据来源=>redis=>logstash=>ES redis目前还是单点, 没有做高可用, 现在数据量越来越多, 如果下游消费不出问题还好, redis里面数据来了就走,但是下游一旦出问题, 分给redis的内存半小时就撑满了. 看到redis3.0 beta版本已经提供了集群功能, 但是需要client以集群模式接入, 我们这么多上游用户, 不太可能统一要求他们改造. 公司也有硬件的LB, 同事在E公司的时候就是用的硬件LB. 但接入还要申请,

MySQL主主复制+LVS+Keepalived实现MySQL高可用性

MySQL主主复制+LVS+Keepalived实现MySQL高可用性 MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换. 这篇文章下面要介绍如何通过LVS+Keepalived的方式来是实现MySQL的高可用性,同时解决以上问题. Keepalived和L

LVS+Keepalived+IIS 配置过程高可用负载均衡web服务器

1. 基本规划 一共5个IP地址,4台服务器,两台做LVS+Keepalived高可用负载均衡,两台做Web 服务器. LVS的IP地址是: 192.168.0.181 192.168.0.182 web服务器的IP地址是 192.168.0.183 192.168.0.184 虚拟IP(VIP)地址是: 192.168.0.188 2. 配置IIS IIS上最重要的配置就是环回网卡配置,配置完成后还需要修改一下网卡的IP和工作模式.具体步骤如下 (1)配置环回网卡 打开控制面板,点击硬件,然后

lvs+keepalived实现高可用的web负载均衡

拓扑图 安装keepalived [[email protected] ~]# yum install -y keepalived 修改keepalived MASTER    配置文件 [[email protected] ~]# vim /etc/keepalived/keepalived.conf  ! Configuration File for keepalived   global_defs {    notification_email {      [email protecte

MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性

MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换. 这篇文章下面要介绍如何通过LVS+Keepalived的方式来是实现MySQL的高可用性,同时解决以上问题. Keepalived和LVS介绍 Keepalived是一个基于VRRP(虚拟路由冗余协议)可用

【转载】tomcat+nginx+redis实现均衡负载、session共享(一)

http://www.cnblogs.com/zhrxidian/p/5432886.html 在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) 2.不知道的用户可能会想网站是不是被攻击了,降低了对网站的信任程度,从而导致失去部分潜在客户,这点尤其对金融互联网公司不利. 在查了一些资料后,决定采用Tomcat + Nginx + Redis来实现

Centos7+LVS+Keepalived实现Exchange2016高可用性

说到Exchange的话题,相信管理员都很敏感,为什么这么说呢,因为作为一个Exchange管理员的话,Exchange的服务运行状态是一个管理员最关心的问题,只要提高Exchange高可用性,管理员的工作相对比较轻松一点,如果Exchange不做高可用的话,只要其中一个服务有问题就会导致所有相关用户服务不可用,当然说到这,我们再说说Exchange2016的高可用性配置介绍,我们前面文章中也有介绍到,Exchange2016已经将角色集中到了一个Mailbox功能上,只要发布一个Mailbox

LVS+keepalived DR模式配置高可用负载均衡集群

实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave       10.0.100.204 WEB1-Tomcat 10.0.2.29 gateway:10.0.2.253 WEB2-Tomcat 10.0.100.202 (注意:应保持所有服务器的时间一致) Install LVS # ln -s /usr/src/kernels/2.6.32-431.el6.i686/ /usr/src/linux //若找不到这个目录则先安装ker