简介

Keepalived是HA Cluster(High Availability Cluster,高可用集群)的一个服务软件,用来防止单点故障。

Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议),以软件的形式实现服务器热备功能。通常情况下是将两台linux服务器组成一个热备组(master-backup),同一时间热备组内只有一台主服务器(master)提供服务,同时master会虚拟出一个共用IP地址(VIP),这个VIP只存在master上并对外提供服务;如果Keepalived检测到master宕机或服务故障,备用服务器(backup)会自动接管VIP成为master,Keepalived并将master从热备组移除,当master恢复后,会自动加入到热备组,默认再抢占成为master,起到故障转移功能。

高可用集群主要有两种实现模式:主备模式和主主模式:
主备模式:一个或多个VIP,一台主机对外提供服务,另外一台做备用机,当主服务器出现问题,备用服务器接管IP继续提供服务;
主主模式:两个或多个VIP,两台主机都对外提供服务,可以是同一个服务,也可以是不同的服务,这种模式提高了硬件的投入,也对负载均衡起到一定的效果。

Keepalived主要有三个模块,分别是ipvs wrapper、checkers、vrrp stack。ipvs wrapper模块为Keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析;checkers负责健康检查,包括常见的各种检查方式;vrrp stack模块是来实现VRRP协议的。

配置文件

Keepalived的默认配置文件为/etc/keepalived/keepalived.conf,其主程序文件为/usr/sbin/keepalived。Keepalived的配置文件的组成主要分为三部分,而每个部分下面又包含着各自的子段,其组成及配置如下:

1、GLOBAL CONFIGURATION:全局配置段,包括 Global definitions、Static routes/address/rules

Global definitions:用于定义全局设置,常用的参数及示例如下:

global_defs {
notification_email {  #指定报警邮件发往的邮箱地址
root@localhost
}
notification_email_from keepalived@localhost  #指定报警邮件的发件人
smtp_server 127.0.0.1  #指定邮件服务器的地址
smtp_connect_timeout 30  #指定邮件服务器的连接超时时长
router_id node1  #设置路由器的标识
vrrp_mcast_group4 224.0.100.19  #设置vrrp的广播地址,在同一个HA Cluster中要确保其广播地址一致,才能接收到对应的vrrp报文
vrrp_strict  #执行严格的vrrp协议检查,下列情况将会阻止启动keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。
}

Static routes/address/rules:用于配置keepalived中不会被vrrp移除的静态地址、路由或者规则,基本不用。

2、VRRPD CONFIGURATION:vrrp相关配置段

VRRP instance(s):定义vrrp同步组。

vrrp_instance VIP_1 {    #定义vrrp实例,VIP_1为自定义实例名
state MASTER|BACKUP #指定此虚拟路由器在vrrp组的角色
interface eno16777736 #绑定物理接口
virtual_router_id 14 #唯一标识id,用于区分vrrp实例,范围为0-255
priority 100 #设定优先级,范围为1-254
advert_int 1 #发送vrrp通告的时间间隔
nopreempt|preempt #设定工作模式为非抢占或抢占模式
preempt_delay 300 #在抢占式模式下,节点上线后触发新选举的延迟时长
authentication { #设置vrrp实例协商的方式及密码
auth_type PASS #定义认证类型为简单密码认证
auth_pass 571f97b2 #定义密码串,最长不超过8个字符
}
virtual_ipaddress { #在绑定的物理接口上添加虚拟ip地址
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
10.1.0.91/16 dev eno16777736
}
track_interface { #配置需要监控的网络接口,一旦接口出现故障该vrrp实例转为FAULT状态
eth0
eth1
...
}
track_script { #调用在vrrp_script中定义的脚本,根据脚本进行监控调整
<SCRIPT_NAME>
<SCRIPT_NAME> weight <-254..254>
}
notify_master <STRING>|<QUOTED-STRING> #当前节点成为主节点时触发的通知脚本
notify_backup <STRING>|<QUOTED-STRING> #当前节点转为备节点时触发的通知脚本
notify_fault <STRING>|<QUOTED-STRING> #当前节点转为fault状态时触发的通知脚本
notify_stop <STRING>|<QUOTED-STRING> #当前节点停止时所触发的通知脚本
}

VRRP script(s):定义周期性执行的脚本,用于检查相应的服务或ip状态。

vrrp_script <SCRIPT_NAME> {    #定义周期执行的脚本,vrrp instances会根据脚本的退出码来调整优先级
script <STRING>|<QUOTED-STRING> #定义执行脚本的存放路径
interval INT #定义调用执行脚本的周期,默认为1s
timeout <INTEGER> #脚本执行超时时间,脚本执行超时后,则被认为失败
rise <INTEGER> #定义脚本检查成功多少次,才认可当前的状态为正常
fall <INTEGER> #定义检查失败多少次,才认为当前状态为失败
}

3、LVS CONFIGURATION:LVS配置段

Virtual server(s):用于定义虚拟服务器的设置,虚拟服务器可以用ip port、fwmark、virtual server group(s)来定义。

virtual_server IP port | virtual_server fwmark <int>  |virtual_server group string
{
delay_loop <INT> #健康检查的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #lvs调度方法
lb_kind NAT|DR|TUN #集群类型
persistence_timeout <INT> #持久连接时长
protocol TCP|UDP|SCTP #服务协议
sorry_server <IPADDR> <PORT> #备用服务器
real_server <IPADDR> <PORT>{
weight <INT> #指定权重,默认是1
notify_up <STRING>|<QUOTED-STRING> #服务器健康检查成功时执行的脚本
notify_down <STRING>|<QUOTED-STRING> #服务器健康检查失败时执行的脚本
HTTP_GET|SSL_GET { #应用层检测
url {
path <URL_PATH> #定义要监控的URL
status_code <INT> #健康状态的响应码
digest <STRING> #健康状态的响应的内容的校验码
}
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向哪个IP地址发起健康状态检测请求,默认是real server的ip地址
connect_port <PORT> #向哪个PORT发起健康状态检测请求,默认是real server的端口
bindto <IP ADDRESS> #发起连接的接口的ip地址
bind_port <PORT> #发起连接的接口的地址端口
connect_timeout <INTEGER> #连接请求的超时时长
}
TCP_CHECK {
connect_ip <IP ADDRESS> #向哪个IP地址发起健康状态检测请求,默认是real server的ip地址
connect_port <PORT> #向哪个PORT发起健康状态检测请求,默认是real server的端口
bindto <IP ADDRESS> #发起连接的接口的ip地址
bind_port <PORT> #发起连接的接口的地址端口
connect_timeout <INTEGER> #连接请求的超时时长
}
}
}

配置实例:主主模式

#一台主机配置VIP_1、VIP_2互为主备
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
} vrrp_instance VIP_1 {
state MASTER
interface eno16777736
virtual_router_id 14
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97b2
}
virtual_ipaddress {
10.1.0.91/16 dev eno16777736
}
} vrrp_instance VIP_2 {
state BACKUP
interface eno16777736
virtual_router_id 15
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 578f07b2
}
virtual_ipaddress {
10.1.0.92/16 dev eno16777736
}
}
#一台主机配置VIP_1、VIP_2互为主备
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
vrrp_mcast_group4 224.0.100.19
} vrrp_instance VIP_1 {
state BACKUP
interface eno16777736
virtual_router_id 16
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97b2
}
virtual_ipaddress {
10.1.0.91/16 dev eno16777736
}
} vrrp_instance VIP_2 {
state MASTER
interface eno16777736
virtual_router_id 17
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 578f07b2
}
virtual_ipaddress {
10.1.0.92/16 dev eno16777736
}
}

实现高可用-Keepalived的更多相关文章

  1. 解决nginx负载均衡高可用keepalived只针对物理机的问题

    在高可用keepalived软件,在默认的情况下仅仅在对方机器宕机或keepalived停掉的时候才会接管业务. 但是在实际工作过程中,例如在nginx负载均衡工作实例中,nginx服务已停止,而ke ...

  2. 高可用Keepalived+LVS搭建流程

    本流程搭建1个master,1个backup节点的Keepalived,使用lvs轮询2个节点的服务. 一.使用版本 CentOS 7.7 Keepalived 1.3.5 ipvsadm 1.27( ...

  3. nginx1.14.0版本高可用——keepalived双机热备

    nginx不支持主从,所以我们需要使用keepalive支持高可用. keepalived重要知识点 在局域网内,每个主机上各安装一个keepalived,注意关闭防火墙firewalld,然后设定一 ...

  4. 部署高可用keepalived组件

    本文档讲解使用 keepalived 和 haproxy 实现 kube-apiserver 高可用的步骤: keepalived 提供 kube-apiserver 对外服务的 VIP: hapro ...

  5. Centos7部署k8s[v1.16]高可用[keepalived]集群

    实验目的 一般情况下,k8s集群中只有一台master和多台node,当master故障时,引发的事故后果可想而知. 故本文目的在于体现集群的高可用,即当集群中的一台master宕机后,k8s集群通过 ...

  6. linux 高可用----keepalived+lvs

    什么是高可用? HA(high availability)即高可用性:就是在高可用集群中发生单点故障时,能够自动转移资源并切换服务,以保证服务一直在线的机制. LVS LVS:(linux virtu ...

  7. mysql系列之8.mysql高可用 (keepalived)

    环境: centos6.5_x64 准备: 两台mysql机器 主1 master:  192.168.32.130 主2 backup:  192.168.32.131 VIP: 192.168.3 ...

  8. Ansible实现主备模式的高可用(Keepalived)

    前言 Ansible是一款极其简单的IT自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序 ...

  9. 14、高可用keepalived搭建及切换

    keepalived主从切换试验: 1.先搭建192.168.1.20与192.168.1.21的主主架构     192.168.1.76为VIP 2.在2机都安装keepalived  tar - ...

随机推荐

  1. css 盒模型 文档流 几种清除浮动的方法

    盒模型 1.box-sizing: content-box 是普通的默认的一种盒子表现模式 盒子大小为 width + padding + border   content-box:此值为其默认值,其 ...

  2. Highcharts - Pie Chart

    1. 饼状图(Pie Chart)示例: <div id="container" style="height: 400px"></div> ...

  3. Multidex (方法数超过限制的处理)

    报错 : Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(10)、ArcGIS Runtime SDK支持的空间数据类型

    1.前言 移动端的数据来源非常重要,它决定了移动端功能的实现.早期的ArcGIS Android API中,主要以接入在线的数据源为主,因此主要实现在线的地图浏览.查询和路径分析.地理处理等从操作:在 ...

  5. github代码上传教程

    github 上传代码步骤 一.git以及Github Git是个正快速成长的版本控制系统,它由GitHub维护. 优势: 1.支持离线开发,离线Repository. 2.强大的分支功能,适合多个独 ...

  6. 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像

    什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建. 下面通过一个具体的例子来学习d ...

  7. IOS 摇一摇的方法

    ● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单) ● 判断摇一摇的步骤:实现3个摇一摇监听方法 ● ...

  8. 设计模式——简单工厂模式(SimpleFactory Pattern)

    最近做项目总是遇到这样或者那样的问题,代码不够简洁,代码可扩展性不够好,耦合度又太高了,导致经常有种想去重构又无从下手的感觉. 无意间翻出了之前买的一本书<大话设计模式>读了一遍,受益匪浅 ...

  9. 【[NOI2013]矩阵游戏】

    我们看到了及其可怕的数据范围 这个样子都没有办法直接读入的数据范围应该怎么算 我们观察一下递推式\(f[i][j]=a*f[i][j]+b(j!=1)\) \(f[i][1]=c*f[i-1][m]+ ...

  10. cblas_sgemm cblas.h

    BLAS(Basic Linear Algebra Subprograms)库,是用Fortran语言实现的向量和矩阵运算库,是许多数值计算软件库的核心, 但也有一些其它的包装, 如cblas是C语言 ...