`
QING____
  • 浏览: 2250808 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

keepalived学习总结

 
阅读更多

    “Keepalived是一个C语言写的路由软件,它的主要目标是向linux系统和基础组件提供简单而健壮的负载均衡和高可用设施。负载均衡框架依赖于广泛使用的LVS(IPVS)内核,它提供了layer4(传输层)负载均衡。keepalived实现了一组检测器(checkers),根据负载均衡器的健康状态,动态的、自适应的维护管理它们。另一方面,高可用性是通过VRRP协议实现,VRRP协议是路由器(router,具有路由功能的软硬件,比如LVS)failover的基石。此外,keepalived实现了一组hooks,hooks关系到一些VRRP状态机,这些状态机提供了底层的、高速的协议交互。Keepalived框架能够独立使用(LVS不是必须的),或者与其他系统一起来提供弹性的基础架构。”

 

    简单而言,keepalived基于VRRP协议,实现了路由器故障转移,解决了负载均衡器的单点故障问题,实现了高可用性。我们需要首先简单了解一下VRRP协议的基本工作原理。

    VRRP,全称“Virtual Router Redundancy Protocol”,即虚拟路由器冗余协议。路由器将会把接收到的数据包发送给目标服务器,如果目标地址不在本网段,则路由给下一个路由器;当路由器故障时,那么本网段内所有以此路由器作为默认路由的下一跳的主机将无法与外部通讯,即单点问题。VRRP就是为了解决此问题而提出的,它为具有多播组播或者广播能力的局域网设计。

    VRRP将局域网中的一组路由器组成一个虚拟路由器,它包括一个Master(活跃的)和多个Backup(备份)路由器,为了便于理解,这里的路由器,我们暂且认为是部署keepalived的服务器节点。每个路由器都有自己的IP,此外还有一个VIP,此IP由Master持有,网络主机与持有VIP的路由器通讯。如果Master故障,那么backup将通过选举策略选出一个新的Master,重新持有此虚拟IP,继续向网络内的主机提供路由服务,从而避免了路由器的单点问题。

    VRRP路由器组中,按照优先级选择Master,优先级为0~255,0表示VIP持有者主动放弃Master角色;优先级较高的路由器将会绑定到VIP上,此后Master将周期性的发送VRRP通知报文(广播),如果backup在连续三个通知间隔时间内收不到VRRP或者收到优先级为0的通知,则启动新一轮的VRRP选举。

    为了安全,VRRP路由器组中的路由器,都需要明确指定VRID和报文加密的密码,以避免恶意修改VRRP通知信息。这些我们都可以在keepalived配置方式中得以体现。

 

一、Keepalived简介

    Keepalived由原生的ANS/IOS C编写,此软件围绕一个中央IO复用器,以提供实时的网络设计;设计的重点就是在各个元素之间提供模块化,这就是创建一个核心libary的原因,以移除重复的代码。另一方面,主要目标就是创建一个安全、稳定的代码,以确保产品的健壮性和稳定性。

    为了确保其健壮性和稳定性,守护进程(daemon)被拆分为3个不同的进程;整体设计是一个轻量级的父进程负责监控2个forked子进程。这两个子进程,一个负责VRRP框架,另一负责健康监测(healthchecking);每个子进程都有自己的调度IO复用器,这样VRRP调度的抖动(jitter)进行了优化,因为VRRP调度,比healthcheckers更加合理和重要;同时这种设计,最小化了健康监测进程对外部librairies的使用,最小化了子进程自己的操作和空主轮询(idle mainloop)以避免内部故障。父进程监控框架称之为watchdog,设计方式为:每个子进程打开一个accpet unix domain socket,父进程与这些socket建立链接,并间歇性发送“hello”数据包,如果父进程不能通过链接将hello数据包发给子进程,那么它只需简单的重启子进程即可。watchdog的这种设计有2个好处,首先所有的hello数据包均是由父进程通过IO复用器调度器(scheduler)发送给子进程,这样它可以检测到子进程调度框架的死锁(然后重启它们),此外可以通过“sysV”信号检测死的子进程。

    Keepalived可以不需要LVS的支持,即可单独使用。

 

二、安装与配置

    宿主机器:Centos 2.6.32 64位。(通过“uname -r”指令查看)

   1、下载最新版keepalived,解压。

    2、执行“./configure --prefix=/usr/local/keepalived”,此处最好指定prefix的路径,以便维护。如果此指令正常执行,应该输出如下信息

Keepalived configuration
------------------------
Keepalived version       : 1.2.19
Compiler                 : gcc
Compiler flags           : -g -O2 -DFALLBACK_LIBNL1
Extra Lib                : -lssl -lcrypto -lcrypt  -lnl  
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
IPVS use libnl           : Yes
fwmark socket support    : Yes
Use VRRP Framework       : Yes
Use VRRP VMAC            : Yes
SNMP support             : No
SHA1 support             : No
Use Debug flags          : No

 

    其中“IPVS”和“VRRP”相关的配置必须为“YES”,如果你在此过程中出现错误,极有可能时缺少必要的lib,请你按需安装,如下为参考列表:popt-devel(解析命令行选项),openssl、openssl-devel,libssl-dev,libnl-devel,ipvsadm,还有“gcc”(编译C文件,需要首先安装);对于linux系统,通常上述lib都已经安装,不过libnl-devel可能需要手动安装。

    如果上述一切正常则继续执行“make && make install”,安装完毕。那么我们将会在“/usr/local/keepalived”目录中得到keepalived安装后的配置文件和执行bin。

    配置文件在“/usr/local/keepalived/etc/keepalived”目录下,同时在samples目录下还有一些可以参考的例子。可执行文件在“/usr/local/keepalived/sbin”目录下。大部分运维人员比较倾向于使用service方式启动这些比较常用的服务。接下来我们只需简单的操作几个文件可以:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#可以通过service启动keepalived服务

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
 
mkdir -p /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
##配置文件路径,可以通过在/etc/init.d/keepalived文件中修改

 

    3、接下来我们测试一种场景:我们有一个web站点,使用nginx做负载均衡,2个nginx一主一备,它们之间使用keepalived来监控健康状况并支持自动切换。

    集群部署拓扑结构:

    1)nginx_1,内网IP:192.168.1.100,外网IP为61.172.xxx.10

    2)nginx_2,内网IP:192.168.1.101,外网IP为61.172.xxx.11

    3)虚拟IP:61.172.xxx.231,需要注意,虚拟IP也需要向运营商申请,只是这个IP暂且不需要映射到具体的物理机器罢了(无MAC映射)。不过,如果你的VIP不需要对外部访问可用,完全可以使用局域网IP作为VIP。

    在上述两个节点上都部署keepalived。

    我们的站点域名解析到了虚拟IP上,根据Keepalived工作原理,那么其中一个keepalived节点(俗称router)持有VIP,即为Master,另一个keepalived为backup;web流量将会转发到Master节点上的nginx上,如果此上的nginx(或者keepalived)故障失效,那么另一个节点接管(takeover)为Master并持有VIP,那么web流量也会转发到此节点,这样就达成了“nginx”故障转移的设计要求。

 

    4、nginx安装:参见其他文档,核心配置摘要如下:

server {
        listen 80;
        server_name localhost;
        location / {
		root html;
		index index.html index.html;##一个静态资源服务。
    	 }
}

 

    5、keepalived Master配置:

global_defs {
    #通知email,根据实际情况配置
    notification_email {
        #收件人
        admin@example.com
    }
    #发信人,可以伪装任意地址
    notification_email_from admin@example.com
    #server地址,保持不变
    smtp_server 127.0.0.1
    stmp_connect_timeout 30
    #节点名标识,好像并没有太大意义,建议和backup保持一致
    router_id NGINX_DEVEL
}
vrrp_script chk_http_port {
    script "/usr/local/keepalived/chk_nginx.sh"
    #执行脚本的间隔时间
    interval 3
    weight 2
} 
vrrp_instance VI_NGINX {
    #标记为master,其实选举并不根据此值,而是根据权重。
    state MASTER
    #选择网卡,如果你的VIP是外网,就选择外网网卡接口,否则就选择内网。
    #本次测试,eth0为外网网卡
    interface eth0
    #虚拟路由ID,小于255,最终用于构成虚拟MAC地址
    #必须与backup一致
    virtual_router_id 100
    #优先级,0-254
    priority 200
    #通知间隔,单位:秒
    advert_int 5
   
    authentication {
        auth_type PASS
        #通知使用的秘钥,backup保持一致。
        auth_pass 123456
    }
    track_script {
        chk_http_port     #添加脚本执行
    } 
    virtual_ipaddress {
        #虚拟IP,backup保持一致,可以有多个。
        61.172.xxx.231
    }
}

    6、keepalived Backup配置:

global_defs {
    notification_email {
        admin@example.com
    }
    notification_email_from admin@example.com
    smtp_server 127.0.0.1
    stmp_connect_timeout 30
    router_id NGINX_DEVEL
}

vrrp_script chk_http_port {
    script "/usr/local/keepalived/chk_nginx.sh"
    #执行脚本的间隔时间
    interval 3
    weight 2
}

vrrp_instance VI_NGINX {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 200
    advert_int 5
   
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
        chk_http_port
    }
 
    virtual_ipaddress {
        61.172.xxx.231
    }
}

    

    7、配置文件中,有一个track_script,此脚本将会间歇性被调用。我们可以在此脚本中执行一些探测程序,比如检测nginx的活性:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
  /usr/local/nginx/sbin/nginx #nginx命令的路径
  sleep 3
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    killall keepalived
  fi
fi

    脚本的意思为:检测nginx进程是否已经启动,如果没有启动(或者已经失效)则立即启动,如果启动失败,则关闭keepalived;关闭的keepalived节点为Master,那么VIP会被释放,通过VRRP触发新一轮选举,最终backup接管VIP并继续服务。

 

    nginx进程失效,keepalived会负责重启它,如果keepalived节点失效,则需要人工启动。

    8、启动keepalived:

    如果你执行的是默认安装,则可以到“/usr/local/keepalived/sbin”,执行“./keepalived”。如果基于service方式启动,则“service keepalived start”即可。我们可以看到,启动了三个keepalived进程。关闭keeaplived,可以直接使用“killall keepalived”。

    我们还可以使用“./keepalived -h”查看其他帮助指令。

    9、其他:

    开发可以通过“ifconfig”指令查看服务器各个网络接口的信息,不要配置错了网络接口,否则VIP无法绑定。当然也可以通过此指令来查看VIP是否绑定到了指定的网卡上。

分享到:
评论

相关推荐

    keepalived权威指南

    总结而言,《keepalived权威指南》不仅深入讲解了Keepalived的核心组件和关键技术,还提供了丰富的实践案例,是学习和掌握Keepalived不可或缺的资源。无论是对于初学者还是有经验的网络工程师,阅读并理解这本书的...

    Keepalived权威指南(中文)

    ### Keepalived权威指南知识点梳理 #### 一、VRRP简介 - **VRRP概念**:虚拟路由冗余协议(Virtual Router Redundancy Protocol, VRRP)是一...通过对Keepalived的学习和掌握,可以显著提高系统的可用性和用户体验。

    高并发nginx+keepalived部署教程

    通过本文的介绍,我们不仅深入了解了Nginx与Keepalived的核心概念及其在高并发场景下的应用,还具体学习了如何通过这些工具构建一套完整的高可用、高并发网站部署方案。通过合理规划和细致操作,能够显著提升网站的...

    keepalived +nginx 终于搞定了

    总结来说,`keepalived + nginx`的组合提供了高可用的Web服务解决方案,通过`keepalived`的故障检测和VIP漂移,以及`nginx`的反向代理和负载均衡,实现了服务的不间断运行。在具体实践中,需要深入了解这两个工具的...

    企业级Nginx负载均衡与keepalived高可用实战

    #### 六、总结与展望 本课程由国内知名运维架构大师老男孩老师主讲,旨在帮助学员掌握Nginx负载均衡技术及Keepalived高可用方案。通过理论结合实践的方式,让学员能够快速上手,为企业级项目提供可靠的技术支持。...

    keepalived安装配置.docx

    ### Keepalived安装与配置详解 #### 一、概述 Keepalived 是一款优秀的...通过本文档的学习,您应该已经掌握了 Keepalived 的安装、配置以及工作原理的基础知识。希望这些内容能帮助您更好地理解和使用 Keepalived。

    LVS-DR+keepalive+ldirectord构建高可用负载均衡群集试验手册

    ### LVS-DR+Keepalived+Ldirectord构建高可用负载均衡群集知识点解析 #### 1. LVS-DR (Linux Virtual Server - Direct Routing) 概述 ...通过以上实验步骤的学习和实践,可以帮助我们更好地理解和掌握这一关键技术。

    openstack上实施keepalived

    根据提供的信息,我们可以总结出以下相关的IT知识点: ### 一、OpenStack Neutron 扩展功能 #### 1. Neutron扩展列表 OpenStack Neutron是用于提供网络服务的一个组件,它通过各种插件和扩展提供了丰富的网络功能...

    linux运维学习笔记:lvs+keepalived集群部分Shell企业案例.pdf

    Linux运维学习笔记中关于LVS+Keepalived集群部分的Shell企业案例涉及了高可用负载均衡技术的搭建和管理。这里将详细探讨这些案例中涉及的知识点。 ### LVS和Keepalived概述 LVS(Linux Virtual Server)是一个负载...

    利用ansible安装keepalived和haproxy集群

    总结,本过程涉及到的主要知识点有:Ansible自动化运维、Keepalived的高可用架构、HAProxy的负载均衡原理以及如何结合这些工具实现一个完整的集群部署。通过这个实践,我们可以学习到如何利用自动化工具提升运维效率...

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

    通过本实战视频的学习,我们了解了如何利用Nginx + keepalived + MongoDB + haproxy + Sphinx这一组合来构建一套完整的分布式集群部署方案。该方案不仅能够有效应对高并发访问带来的挑战,还具备良好的扩展性和可...

    第53节--MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat

    总结,通过学习“第53节--MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat”,我们可以掌握如何构建一个高可用、负载均衡的数据库环境,这对于处理大规模数据服务的IT企业至关重要。而提供的"Dubbo视频教程-...

    LVS+keeplaived操作手册

    ### LVS+Keepalived操作手册 #### 一、LVS简介 LVS(Linux Virtual Server)是一个由章文嵩博士发起的开源项目,旨在提供一个...通过本手册的学习,用户可以快速掌握如何搭建基于LVS+Keepalived的高可用服务器集群。

    胡伟煌 Linux学习笔记

    Linux学习笔记的知识点总结,涵盖了Linux文件系统、Linux介绍、Linux文件权限、Shell简介、运维工具、Ansible的使用、Supervisor的使用、Confd的使用、NFS的使用、ceph-fuse的使用、Git、Nginx、Keepalived、TCP/IP...

    centos学习文档资源

    - **Keepalived**:支持更强大的高可用性解决方案。 - **SystemTap**:升级至 1.8,提供更强大的系统监控工具。 - **lscpu 和 chcpu**:用于 CPU 操作的新命令。 - **SciPy**:新增科学计算库。 - **Valgrind**...

    keepalive中文文档

    **标题与描述解析** 标题"keepalive中文文档"指出,我们关注的是与"keepalive"相关的技术内容,而这份资源是用中文编写的,适用...通过深入学习,我们可以更好地掌握如何利用Keepalived来优化网络服务的稳定性和性能。

    5.24阶段考实验keep+lvs+web+nfs+磁盘阵列.docx

    根据提供的文档标题、描述以及部分内容,我们可以总结出本次实验涉及的主要技术知识点包括:Keepalived 配置与应用、LVS(Linux Virtual Server)负载均衡器的使用、Web服务器搭建与配置、NFS(Network File System...

    mycat安装教程及使用与详细的配置文件解释与示例

    总结:这份教程将详细介绍如何安装Mycat服务器,配置Keepalived和HAProxy实现高可用,解析Mycat的配置文件,以及如何使用Mycat的Web管理界面监控系统。通过实例,用户将学习如何在实际项目中部署和管理Mycat,从而...

    LVS+Keepalive for centos7-可实施文档.docx

    通过对 LVS 和 Keepalived 的深入了解,以及具体的部署步骤和技术细节的学习,可以帮助 IT 人员更好地管理和维护这种类型的系统架构。此外,通过实践操作,还可以进一步探索如何优化和调整该架构以适应不同的应用...

    Linux-运维入门到高级全套系列.pdf

    最后,Linux运维面试总结部分提供了面试技巧总结和面试题目总结,帮助求职者做好面试准备,顺利通过面试,获得满意的工作机会。 整套系列书籍内容丰富,从基础到深入,既适合Linux初学者,也适合有一定基础希望继续...

Global site tag (gtag.js) - Google Analytics