一、服务介绍

keepalive起初是专为LVS设计的,专门用来监控LVS集群系统红各个服务节点的状态,后来又加入了VRRP的功能,因此不了配合LVS服务外,也可以作为其他服务(nginx,haproxy)的高可用软件,VRRP是virtual router redundancy protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由出现的单点故障问题,他能够保证网络的不间断、稳定的运行。所以,keepalive一方面具有LVS(cluster nodes healthchecks)功能,另一方面也具有LVS directors failover功能。

主要功能:实现LB Master主机和backup主机之间故障转义和自动切换。

二、keepalived故障切换转义原理介绍

2.1 切换原理

keepalived directors高可用对之间的故障切换转移,是通过VRRP协议(virtual router redundancy Protocol虚拟路由器冗余协议)来实现的。
在keepalived Directors正常工作时,主director节点会不断的向备节点广播心跳消息,用以告诉备节点自己还活着,当主节点发生故障时,备节点就无法继续检测到主节点的心跳,进而调用自身的接管程序,接管主节点的IP资源及服务。而当主节点恢复故障时,备节点会释放主节点故障时自身接管的IP资源及服务,恢复到原来的自身的备用角色。

2.1 协议介绍
VRRP协议,全称Virtual Router Redundancy Protocol,中文名,虚拟路由冗余协议,VRRP的出现就是为了解决静态路由的单点故障,VRRP是通过一种竞选协议机制来将路有任务交给某台VRRP路由器。
MASTER和BACKUP
在一个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地址:00-00-5E-00-01-{VRID}。所以,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRP Advertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。
处于安全性考虑,VRRP包使用了加密协议进行加密。

三、keepalived安装、配置、启动

3.1软件的安装

 [root@linux-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.5. (Core)
方法一,直接yum安装:
[root@linux-node2 ~]# yum install keepalived -y
方法二,采用编译安装:
软件下载地址:http://www.keepalived.org/download.html
[root@linux-node1 ~]# wget http://www.keepalived.org/software/keepalived-2.0.12.tar.gz
[root@linux-node1 ~]# mkdir /etc/keepalived
[root@linux-node1 ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ # 拷贝配置文件
[root@linux-node1 ~]# cp /usr/local/sbin/keepalived /usr/sbin/ # 拷贝keepalived命令到环境变量默认目录
[root@linux-node1 ~]# systemctl start keepalived.service # 通过命令启动文件

3.2 MASTER的配置

 [root@linux-node1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc # 可选配置,收件人地址,定义服务故障报警的Email地址,当服务发生主备切换或RS节点有故障时,发送报警邮件。
}
notification_email_from Alexandre.Cassen@firewall.loc # 可选配置,发件人地址。
smtp_server 192.168.200.1 # 定义SMTP服务器
smtp_connect_timeout
router_id proxy_01 # 是路由标识,在一个局域网里面应该是唯一的
vrrp_mcast_group4 224.0.0.19
} vrrp_script chk_nginx_proxy
{
script "/home/scripts/chk_nginx_proxy.sh" #定时执行脚本
interval 2 # 健康检查周期
weight
} vrrp_instance VI_1 { # 定义一个为VI_1的实例(可以定义多个),备节点也要有相同的实例。
state MASTER # 当前实例角色状态
interface eth0 # 选择绑定的网络通信接口
virtual_router_id 77 # 虚拟路由ID标识,最好是数字,MASTER和BACKUP配置相同实例时此ID必须一致
priority 150 # 优先级,数字越大优先级越高,MASTER要高于BACKUP,数值最好相差50以上
advert_int 1 # 同步通知间隔,M端和B端通信检查时间间隔,单位为秒。
authentication { # 权限认证配置
auth_type PASS # 建议为PASS方式还有AH方式
auth_pass 6666 # 密码建议为4位数字
}
virtual_ipaddress {
192.168.7.80 # 虚拟IP,可绑定多个地址,每个地址独占一行。
}
track_script {
chk_nginx_proxy # 追踪脚本
}
}

3.3 检查脚本配置,如果检查nginx服务异常,则停止keepalived服务

 [root@linux-node1 ~]# chmod +x /home/scripts/chk_nginx_proxy.sh
[root@linux-node1 ~]# cat /home/scripts/chk_nginx_proxy.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" -eq ]; then
killall keepalived
fi

3.4 BACKUP的配置

[root@linux-node2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id proxy_02
vrrp_mcast_group4 224.0.0.19
} vrrp_script chk_nginx_proxy {
script "/home/scripts/chk_nginx_proxy.sh"
interval
weight
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.7.80/
}
}

Keepalived高可用集群的更多相关文章

  1. Keepalived高可用集群应用

    Keepalived高可用集群应用 1.keepalived服务说明 1.1.keepalived介绍 Keepalived是一个用C语言编写的路由软件.该项目的主要目标是为Linux系统和基于Lin ...

  2. Haproxy+keepalived高可用集群实战

    1.1  Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...

  3. Nginx+Keepalived高可用集群应用实践

    Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...

  4. Keepalived高可用集群搭建(转载linuxIDC)

    1.Keepalived简介 Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障.使用多台节点安装keepalived.其 他的节点用来提供真实的服务,同 ...

  5. 基于Keepalived高可用集群的MariaDB读写分离机制实现

    一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...

  6. Linux 笔记 - 第十八章 Linux 集群之(一)Keepalived 高可用集群

    一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.此处只讲高可用集群,负载均衡放在下一篇博客讲解. 高可用集群(High Availability Cluster,简称 HA ...

  7. Keepalived高可用集群介绍

    1.Keepalived服务介绍 Keepalived起初是专为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入了VRRP的功能,因此除了配合LVS服务外,也可以为其他服务(n ...

  8. keepalived高可用集群。

    keepalived故障切换转移原理1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议,2故障转移.keepalived三大功能1实现物理高可用, ...

  9. Linux系统——Keepalived高可用集群

    #### keepalived服务的三个重要功能1. 管理LVS负载均衡软件Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能,这使得 ...

  10. Nginx入门篇(七)之Nginx+keepalived高可用集群

    一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...

随机推荐

  1. Visual Studio 下nuget命令的使用

    从Visual Studio 2012版本开始默认集成了Nuget扩展,在Visual Studio 2010或以下的版本需要单独安装,安装方法如下: 1. “工具”→“扩展和更新...”,弹出扩展管 ...

  2. Ubuntu安装 和 python开发

    在ubuntu上安装pycharm 可以好几种下载办法 1.pycharm之linux版本下载地址: https://download.jetbrains.8686c.com/python/pycha ...

  3. 利用Django实现RESTful API(一)

    RESTful API现在很流行,这里是它的介绍 理解RESTful架构和 RESTful API设计指南.按照Django的常规方法当然也可以实现REST,但有一种更快捷.强大的方法,那就是 Dja ...

  4. 为什么mysql要做主从复制?

    为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主 ...

  5. ZT 二叉树的非递归遍历

    ZT 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...

  6. 16:42 python历史

    python的作者是Guido van Rossum,大牛,2.7版本好像到2020年就不能用了,估计很多公司对此有很多的需求吧.

  7. 改变文件上传input file类型的外观

    当我们使用文件上传功能时,<input type="file">,但是外观有点不符合口味,如何解决这个问题? <input type="file&quo ...

  8. c++ 多态,虚函数、重载函数、模版函数

    c++三大特性:封装.继承.多态.封装使代码模块化,继承扩展已存在的代码,多态的目的是为了接口重用 虚函数实现:虚函数表:指针放到虚函数表 多态:同名函数对应到不同的实现 构造父类指针指向子类的对象 ...

  9. Python的多线程和多进程

    (1)多线程的产生并不是因为发明了多核CPU甚至现在有多个CPU+多核的硬件,也不是因为多线程CPU运行效率比单线程高.单从CPU的运行效率上考虑,单任务进程及单线程效率是最高的,因为CPU没有任何进 ...

  10. django 模板关闭自动转义

    Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全.但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰 ...