keepalived起初是为LVS设计的,专门用来监控LVS集群系统中各个real server的健康状况的,后来又在其中实现了VRRP协议,VRRP即virtual router redundancy protocol(虚拟路由器冗余协议)的缩写,VRRP的目的是为了解决静态路由出现的单点故障问题,它能够保证网络的不间断、稳定的运行。所以,keepalived一方面具有对服务器进行健康检测的功能,另一方面也具有HA cluster的功能。

VRRP通过一种竞选协议来动态的将路由任务交给LAN中VRRP虚拟路由器中的某台VRRP路由器

VRRP路由器:即运行VRRP协议的服务器,作为VRRP路由器来使用,是物理意义上的服务器。

VRRP虚拟路由器:一般由两台物理的VRRP路由器组成,它们之间具有高可用(fail over)的功能,一起组成一台虚拟意义上的VRRP路由器对外提供服务。

所以一般是两台服务器上运行VRRP协议,是两台VRRP路由器,这两台VRRP路由器组成一个VRRP虚拟路由器。两台VRRP路由器一台为master, 一台为backup,如果master挂掉,backup会变成新的master,接管服务,提供路由功能。

VRRP虚拟路由器,有一个虚拟IP——VIP,客户端就是利用这个IP地址做为静态路由来访问服务的,所以VRRP协议解决了VIP的高可用,单点故障功能。

VRRP虚拟路由器,不管谁是master,对外都是相同的MAC和IP(VIP),客户端并不需要因为master的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。

VRID:虚拟路由器有一个VRID(virtual_router_id,取值范围0~255)的属性来标志自己,所有组成该虚拟路由器的VRRP路由器的配置文件中的VRID都必须相同。因为虚拟路由的MAC地址中包含了VRID,因为MAC地址和IP地址不能变,所以为了保证在切换master时,MAC地址不变,所有的VRRP路由器的VRID必须相同。
VRRP解决静态路由单点故障的原理

在一个VRRP虚拟路由器中,只有作为master的VRRP路由器会一直发送VRRP广告包,backup不会抢占master,除非他的优先级更高。当master不可用时(backup收不到广告包),多台backup中优先级最高的这台会进行抢占,成为新的master。这种抢占是非常快速的(<1s),来保证路由服务的连续性。而keepalived实现了VRRP协议。

KeepAlived的安装:

yum install keepalived;

查看配置文件:

[root@localhost ~]# rpm -ql keepalived
/etc/keepalived
/etc/keepalived/keepalived.conf
/etc/rc.d/init.d/keepalived
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/sbin/keepalived
/usr/share/doc/keepalived-1.2.13
... ...

KeepAlived˜的配置

上面所示keepalived的配置文件位于:/etc/keepalived/keepalived.conf,一般而言keepalived的配置文件分为三部分:

1> 全局配置:主要是设置在发生master切换时,对管理员的报警信息,包括一些email的配置信息,一个标志是哪台VRRP路由器发生故障的——router_id;

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 lvs_125
}

notification_email:邮件的接受者;

notification_email_rom: 邮件发送者;

smtp_server: 邮件服务器地址;

smtp_connect_timeout: 邮件发送超时时间;

router_id: VRRP路由器标志id,标志是哪台VRRP路由器发生故障;

2> VRRPD配置:是keepalived的核心,主要配置vrrp_instance,即配置VRRP实例,也即配置VRRP路由器:

vrrp_instance vi_1 {
state MASTER
interface eth0
virtual_router_id 61
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 308537
}
virtual_ipaddress {
192.168.137.135
}
}

state: 指定初始状态下,哪个VRRP路由器是master,取值有MASTER/BACKUP;

interface: vi_1 实例绑定的网卡;

virtual_router_id: 指定虚拟路由器的VRID值,范围0~255,master和backup的VRID值必须相同;

priority: 该实例的优先级;

advert_int: 检查间隔,默认1s;

authentication: 加密验证报文,master和backup的配置必须相同;

virtual_ipaddress: 指定VIP;

3> LVS˜配置:改配置部分只有在使用keepalived来配置和管理LVS时才需要,如果仅仅使用keepalived来做HA,该部分的配置完全是不需要的。

virtual_server 192.168.137.135 80 {
delay_loop 3
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 600
protocol TCP
real_server 192.168.137.200 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.137.201 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

主要配置LVS的DS服务器如何向RS进行分发,以及RS服务器的相关配置。

virtual_server: 指定VIP地址和端口;

delay_loop: 指定service polling的时间间隔;

lb_algo: 即load balance algorith,负载均衡的算法;

lb_kind: 即load balance kind,负载均衡的种类(DR/TUN/NAT);

persistence_timeout: 会话保持时间,单位秒;

real_server: 指定RS服务的ip和端口;

TCP_CHECK: 指定Keepalived如何对RS进行健康检查;

注意在backup VRRP路由器上,必须修改:state BACKUP,priotiry 90, router_id最好也修改下 lvs_126。

keepalived健康检查方式

keepalived能够工作在IP/TCP协议栈的IP层,TCP层,及应用层,所以对应的健康检查方式必然也有多种。

TCP健康检查方式,SMTP健康检查方式,HTTP_GET|SSL_GET健康检查方式,MISC_CHECK等等。

上面LVS中的RS的健康检查就是使用了TCP_CHECK。使用keepalived的MISC_CHECK的方式,我们可以自己写脚本来进行健康检查:

real_server 192.168.137.202 80358 {
weight 1
MISC_CHECK {
misc_path "/usr/local/bin/script.sh"
}
}

使用指定的脚本script.sh来进行健康检查。

keepalived初探的更多相关文章

  1. braft初探

    接上一篇<brpc初探>. 什么是RAFT 看内部一个开源项目的时候,一开始我以为他们自己实现了raft协议.但是看了代码之后,发现用的是braft.因为在我们自己bg里一直在提paxos ...

  2. 暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案

    暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案 这是悟空的第 158 篇原创文章 原文链接:首发悟空聊架构 官网:www.passjava.cn 你好,我是悟空. 前言 ...

  3. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  4. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  5. keepalived从机接管后主机恢复不抢占VIP

    在lvs+keepalived环境中,为了减小keepalived主从切换带来的意外风险,,设置主机恢复后不抢占VIP.待进行vrrp协议通告备机不可用时切换.主要修改两个地方.(红色部分) 只需修改 ...

  6. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  7. keepalived 知识备注

    keepalived可用于配置nginx/lvs等负载均衡设备的双机热备. keepalived基于VRRP协议,简单的说就是两个物理路由节点(一主一备),虚拟成一个逻辑上的路由节点. 实际消息的路由 ...

  8. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  9. Windows下PowerShell监控Keepalived

    一.背景 某数据库服务器为CentOS,想要监控Keepalived的VIP是否有问题,通过邮件进行报警,但这台机器不能上外网,现在只能在Windows下通过PowerShell来完成发邮件预警. 二 ...

随机推荐

  1. Python内置函数解析

    我们知道,为了方便使用,python内置了一系列常用及关键的函数,如type().下面将对这些函数进行逐一分析.解释. Python内置函数表: 1. abs():返回绝对值.如abs(-1)= 1. ...

  2. cereal:C++实现的开源序列化库

    闲来无事发现了一个基于C++实现的序列化工具,相比于其他(比如Boost serialization或Google protobuf,恰巧都用过,以后再介绍),使用简单,感觉不错,下面做个摸索. ce ...

  3. BLOCK的应用

    相比看一下枯燥乏味的对于block的讲解,为什么不从大神的代码中领路它的使用方法呢,了解一下大神是如何使用block的呢,见识它的强大.https://github.com/zwaldowski/Bl ...

  4. iOS二十种超酷时尚艺术滤镜汇总【附源码】

    本文总结了20种ios滤镜都是基于GPUImage的,有3种滤镜是GPUImage库中包含的,还有17种是Instagram中的经典滤镜,集成在一个项目中.使用GPUImage可以非常容易创建我们自己 ...

  5. ASP.NET中使用DropDownList实现无刷新二级联动详细过程

    Demo.sql create table Car( [id] int identity, ) not null, ) not null ) go insert into Car ([brand],[ ...

  6. C#检查标准图幅编号

    /// <summary> /// 检查是否为标准图幅编号 /// </summary> /// <param name="MapNumber"> ...

  7. 新增的querySelector、querySelectorAll测试

    从IE9开始DOM开始支持支持CSS的选择器了,DOM提供了两个接口 querySelector 得到一个DOM querySelectorAll 得到一组DOM 一个个的解释这些选择器也没有必要,我 ...

  8. csharp: Flash Player play *.flv file in winform

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. 【Asphyre引擎】Asphyre时隔3年,更名为PXL,全平台支持!

    ps:回忆日志 新版本10月初就推出了,我第一时间(10.2日更新,我当天就看到了)下载下来.发现部分Demo需要XE8才能编译通过,又去下载了一个XE8.折腾完已经深夜,只是粗粗的把Demo都编译了 ...

  10. Linux Shell系列教程之(十四) Shell Select教程

    本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...