`
qianshangding
  • 浏览: 127879 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

keepalived安装部署及Flume+keepalived高可用

 
阅读更多

Keepalived简介

keepalived是一款失效转发机制的软件, 基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。它的作用是检测web服务器的状态,一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived工作机制

在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。

VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。

在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。
由于安全性考虑,VRRP包使用了加密协议进行加密。

初始化

路由器启动时,如果路由器的优先级是255(最高优先级,路由器拥有路由器地址),要发送VRRP通告信息,并发送广播ARP信息通告路由器IP地址对应的MAC地址为路由虚拟MAC,设置通告信息定时器准备定时发送VRRP通告信息,转为MASTER状态;否则进入BACKUP状态,设置定时器检查定时检查是否收到MASTER的通告信息。


MASTER服务器

主机状态下的路由器要完成如下功能:
设置定时通告定时器;
用VRRP虚拟MAC地址响应路由器IP地址的ARP请求;
转发目的MAC是VRRP虚拟MAC的数据包;
如果是虚拟路由器IP的拥有者,将接受目的地址是虚拟路由器IP的数据包,否则丢弃;
当收到shutdown的事件时删除定时通告定时器,发送优先权级为0的通告包,转初始化状态;
如果定时通告定时器超时时,发送VRRP通告信息;
收到VRRP通告信息时,如果优先权为0,发送VRRP通告信息;否则判断数据的优先级是否高于本机,或相等而且实际IP地址大于本地实际IP,设置定时通告定时器,复位主机超时定时器,转BACKUP状态;否则的话,丢弃该通告包;


BACKUP服务器
备机状态下的路由器要实现以下功能:
设置主机超时定时器;
不能响应针对虚拟路由器IP的ARP请求信息;
丢弃所有目的MAC地址是虚拟路由器MAC地址的数据包;
不接受目的是虚拟路由器IP的所有数据包;
当收到shutdown的事件时删除主机超时定时器,转初始化状态;
主机超时定时器超时的时候,发送VRRP通告信息,广播ARP地址信息,转MASTER状态;

收到VRRP通告信息时,如果优先权为0,表示进入MASTER选举;否则判断数据的优先级是否高于本机,如果高的话承认MASTER有效,复位主机超时定时器;否则的话,丢弃该通告包;


ARP查询处理

当内部主机通过ARP查询虚拟路由器IP地址对应的MAC地址时,MASTER路由器回复的MAC地址为虚拟的VRRP的MAC地址,而不是实际网卡的 MAC地址,这样在路由器切换时让内网机器觉察不到;而在路由器重新启动时,不能主动发送本机网卡的实际MAC地址。如果虚拟路由器开启的ARP代理 (proxy_arp)功能,代理的ARP回应也回应VRRP虚拟MAC地址;


安装Keepalived


下载地址:http://www.keepalived.org/download.html
安装keepalived依赖组件:
yum install -y openssl-devel openssl
yum install -y popt-devel

编译安装:
tar zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make && make install

配置为服务:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

可以这样启动/停止:
service keepalived start|stop|reload|restart|condrestart|status

设为开机启动:
chkconfig keepalived on

查看keepalived日志:
tail -f  /var/log/message

keepalived+flume搭建高可用采集框架

下面以keepalived+flume为例,通过keepalived虚拟ip搭建Flume的高可用框架:
主服务器IP:10.0.1.68
从服务器IP:10.0.1.69
虚拟IP:10.0.1.71
主从服务器分别安装Nginx和Keepalived,可以将网站的域名解析到虚拟IP:10.0.1.254,这样主从服务器可以轮流的接管该虚拟IP,保证网站正常的对外访问。
主服务器(10.0.1.68)Keepalived的配置:
[root@testcluster68 data]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	517894513@qq.com	#这里可以定义多个报警邮箱
   }
   notification_email_from 516973786@qq.com
   smtp_server smtp.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}


vrrp_script check_port {
   script "/data/check_port.sh"
   interval 2     #检测的间隔
   weight 2    #如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少;如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加;其他情况,维持原本prority的优先级。
}

vrrp_instance VI_1 {
    state MASTER     #显示定义为主服务器
    interface eth0   #绑定的网口,该网口即上面提到的两个IP的接口
    virtual_router_id 51     #定义的ID,官方的是51,主从服务器必须一致
    mcast_src_ip 10.0.1.68   #主服务器的IP
    priority 100    #优先级,任意定义,但是一定要比从服务器高
    advert_int 1    #VRRPMulticast广播周期秒数
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {   #绑定的虚IP
        10.0.1.71
    }
    track_script {
        check_port    #调用检测脚本
    }
}

从服务器(10.0.1.69)Keepalived的配置:
[root@testcluster69 data]# vi /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
   notification_email {
        517894513@qq.com    #这里可以定义多个报警邮箱
   }
   notification_email_from 516973786@qq.com  #报警人
   smtp_server smtp.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script check_port {
   script "/data/check_port.sh"
   interval 2    #检测的间隔
   weight 2      #如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少;如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加;其他情况,维持原本prority的优先级。
}

vrrp_instance VI_1 {
    state BACKUP     #显示定义为从服务器
    interface eth0   #绑定的网口,该网口即上面提到的两个IP的接口
    virtual_router_id 51    #定义的ID,官方的是51,主从服务器必须一致
    mcast_src_ip 10.0.1.69   #从服务器的IP
    priority 100    #优先级,任意定义,但是一定要比从服务器高
    advert_int 1     #VRRPMulticast广播周期秒数
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {   #绑定的虚IP
        10.0.1.71
    }
    track_script {
        check_port    #调用检测脚本
    }
}

主从服务器的check_port.sh脚本:
这是脚本检查flume进程是否存在,如果不存在就killall keepalived,来达到主从切换的作用,这样keepalived的Backup服务器就无法收到Master服务器的消息,就会促使Backup服务器选举出Master服务器。
[root@testcluster68 data]# cat check_port.sh 
#!/bin/bash
N=`ps aux|grep flume | grep -v grep | wc -l`
if [ $N -eq 0 ];then
 killall keepalived
fi
<pre name="code" class="java">[root@testcluster68 data]# chmod 755 check_port.sh
修改成可执行的文件。

启动主从服务器后,查看主服务器的IP情况:
[root@testcluster68 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 74:d4:35:2e:dd:9b brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.68/24 brd 10.0.1.255 scope global eth0
    inet 10.0.1.71/32 scope global eth0
    inet6 fe80::76d4:35ff:fe2e:dd9b/64 scope link 
       valid_lft forever preferred_lft forever

查看从服务器的IP情况:
[root@testcluster69 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 74:d4:35:2e:dd:92 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.69/24 brd 10.0.1.255 scope global eth0
    inet6 fe80::76d4:35ff:fe2e:dd92/64 scope link 
       valid_lft forever preferred_lft forever
可见虚拟IP已经绑定到10.0.1.68。


现在我们关闭主服务器的Flume进程,查看主服务器的虚拟IP变化:
[root@testcluster68 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 74:d4:35:2e:dd:9b brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.68/24 brd 10.0.1.255 scope global eth0
    inet6 fe80::76d4:35ff:fe2e:dd9b/64 scope link 
       valid_lft forever preferred_lft forever
虚拟IP被移除,keepalived进程也被kill。

查看从服务器的虚拟IP变化:
[root@testcluster69 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 74:d4:35:2e:dd:92 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.69/24 brd 10.0.1.255 scope global eth0
    inet 10.0.1.71/32 scope global eth0
    inet6 fe80::76d4:35ff:fe2e:dd92/64 scope link 
       valid_lft forever preferred_lft forever
从服务器挂载了虚拟IP

分享到:
评论

相关推荐

    keepalived+nginx+tomcat+redis+mysql所需的jdk包

    这个压缩包包含了"keepalived+nginx+tomcat+redis+mysql"所需的基础组件,特别是Java Development Kit(JDK)。下面我们将详细探讨这些组件及其在IT领域的应用。 首先,JDK是Java编程语言的基石,它提供了编译、...

    Haproxy+Keepalived+Nginx+Lamp+Nfs实现高可用集群练习1

    在本实验中,我们将安装和配置 Keepalived 服务,以便实现高可用性和负载均衡。 4. Nginx 的安装和配置 Nginx 是一个流行的开源 Web 服务器,可以用来实现高性能和高可用性。在本实验中,我们将安装和配置 Nginx ...

    Keepalived+nginx+tomcat+redis_session_share

    ### Keepalived+nginx+tomcat+redis_session_share #### 环境配置与实现原理 本案例通过搭建一个基于`Keepalived`、`nginx`、`Tomcat`及`Redis`的服务集群来实现应用服务的高可用性和负载均衡,并通过`Redis`实现...

    PHP高级工程师必知必会Nginx+keepalived+MongoDB+haproxy+Sphinx实现分布式集群部署实战视频

    **定义**:Keepalived是一款开源的高可用解决方案软件包,主要用于实现Linux平台下的IPVS(Internet Protocol Virtual Server)管理和服务自动故障转移。 - **核心功能**: - IPVS管理:维护一个虚拟服务器集群,...

    Keepalived+Nginx+Tomcat 高可用集群搭建实战记录

    Keepalived+Nginx+Tomcat 高可用集群搭建实战记录 Keepalived 是一种高可用性解决方案,可以与 Nginx 和 Tomcat 配合使用来实现高可用集群。下面是 Keepalived+Nginx+Tomcat 高可用集群搭建的实战记录。 ...

    Haproxy+Keepalived+Nginx+Lamp+Nfs实现高可用集群1

    【标题】:“Haproxy+Keepalived+Nginx+Lamp+Nfs实现高可用集群1” 【描述】:“在互联网服务中,高可用性是关键。本案例将通过Haproxy、Keepalived、Nginx、LAMP(Linux、Apache、MySQL、PHP)和NFS(网络文件系统...

    lvs+Keepalived+nginx高可用负载均衡搭建部署方案

    lvs+Keepalived+nginx高可用负载均衡搭建部署方案

    线上一键部署keepalived+nginx

    "线上一键部署keepalived+nginx"的主题旨在通过自动化脚本来实现这两个组件的快速、高效安装和配置,确保服务的持续可用性。Keepalived和Nginx是两个广泛使用的开源工具,它们在提供高可用性和负载均衡解决方案上...

    mysql+mycat+keepalived+haproxy集群(生产环境实测).doc

    在搭建MySQL高可用集群时,源码编译安装是确保系统与特定版本兼容的一种方式。对于CentOS 7.3系统,我们需要MySQL 5.7.24版本的源码包`mysql-5.7.24.tar.gz`以及JDK 1.8.0_11。首先,作为`root`用户,我们需要配置好...

    keepalived+haproxy+mycat配置文件.rar

    总之,`keepalived+haproxy+mycat` 的组合为 MySQL 数据库提供了高可用性和负载均衡的解决方案,能够在保障服务稳定的同时,提升系统的处理能力和容错性。通过合理配置和维护,可以有效地应对大规模业务场景下的...

    Nginx++Keepalived+Tomcat负载均衡&动静分离

    Nginx++Keepalived+Tomcat负载均衡&动静分离配置 本文主要介绍了Nginx、Keepalived和Tomcat的负载均衡和动静分离配置,旨在帮助读者了解如何搭建高可用、高性能的Web应用系统。 一、环境准备 在开始配置之前,...

    Mysql双主热备+LVS+Keepalived高可用操作记录(个人精华版)

    本篇文章详细记录了Mysql双主热备+LVS+Keepalived高可用操作过程,可作为线上长期的实操手册.特此分享,希望能帮助到有用到的朋友.

    Centos下Mysql+Keepalived双主热备高可用环境完整部署记录(个人珍藏版)

    至此,MySQL双主热备与Keepalived高可用环境已经部署完成。 总结,这个方案的关键在于MySQL的主主复制和Keepalived的故障切换。主主复制确保了数据的一致性,而Keepalived则提供了高可用性,当一台服务器出现故障时...

    Keepalived+Nginx实现高可用Web负载均衡

    ### Keepalived+Nginx 实现高可用Web负载均衡 #### 场景需求 在现代互联网应用中,网站和应用程序需要处理大量的用户请求,并确保即使在服务器出现故障的情况下也能持续提供服务。为了满足这一需求,通常采用高可用...

    LVS+Keepalived+MySQL半同步主主复制高可用方案.docx

    【LVS+Keepalived+MySQL半同步主主复制高可用方案】 1. 方案概述 LVS(Linux Virtual Server)结合Keepalived构建的高可用解决方案,通常用于实现负载均衡和故障转移,以提高系统的整体可用性。在这个方案中,MySQL...

    keepalived+nginx+tomcat+redis+mysql所需的包

    keepalived+nginx+tomcat+redis+mysql所需的包,里面包含了三个tomcat与Redis做session共享的jar,编译安装Mysql所需要Boost库和Cmake的包。

    Role部署LNMP+HAproxy+keepalived高可用.docx

    "Role部署LNMP+HAproxy+keepalived高可用" 本文将详细介绍如何使用Ansible搭建高可用的LNMP(Linux、Nginx、Mysql、PHP)环境,并使用HAproxy和keepalived实现负载均衡和高可用性。 一、Ansible简介 Ansible是一种...

    keepalived+haproxy、keepalived+lvs配置实例

    抢占:在master故障时允许优先级更高的backup成为master; 通告协议:使用IANA所指定的组播地址224.0.0.18进行VRRP通告; VRRP追踪:基于接口状态来改变其VRRP优先级来确定最佳的VRRP路由器成为master;

    第三十三章:Lvs+Keepalived+Nginx+Tomcat高可用集群1

    LVS+Keepalived+Nginx+Tomcat 高可用集群项目 本文主要讲述了如何构建一个高可用集群项目,使用 LVS、Keepalived、Nginx 和 Tomcat 实现高可用性和负载均衡。该项目的架构中,Keepalived 负责对 LVS 架构中的调度器...

    Keepalived+HAProxy实现MySQL高可用负载均衡的配置

    总的来说,Keepalived和HAProxy的组合为MySQL提供了高可用性和负载均衡能力。当主MySQL服务器出现问题时,Keepalived会自动将VIP切换到备份服务器,同时HAProxy会根据新的配置继续进行负载均衡。这种方案不仅提高了...

Global site tag (gtag.js) - Google Analytics