一、HA集群中的相关术语

1.节点(node)

运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节点/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘,文件系统,网络地址和应用服务等,主节点上一般运行着一个或多个应用服务,而备节点一般处于监控状态

2.资源(resource)

资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其他节点接管,HA集群软件中,可以当做资源的实体有:

(1)磁盘分区、文件系统

(2)IP地址VIP

(3)应用程序服务

(4)NFS文件系统

3.事件(event)

也就是集群中可能发生的事情,例如节点系统故障,网络连通故障,网卡故障,应用程序故障等,这些事情都会发生节点资源发生转移,HA的测试也是基于这些事情来进行的

4.动作(action)

事件发生时HA的响应方式,动作是由shell脚本控制的,例如当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动,进而接管故障节点的资源

二、keepalived简介

keepalived 是linux下一个轻量级的高可用解决方案,它与HACMP实现功能类似,都可以实现服务或者网络的高可用,但是又有差别:hacmp是一个专业的、功能完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,检测集群中的系统服务,在集群节点间转移共享ip地址所有者等,hacmp功能强大,但是部署和使用相对麻烦,同时也是商业化软件,与hacmp相比,keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然他没有hacmp功能强大,但是keepalived部署使用相对简单,所有配置只需要一个配置文件即可完成.

三、keepalived的用途

keepalived起初是为lvs设计的,专门用来监控集群系统中各个服务节点的状态,它根据layer3,4 & 5交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,keepaived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将此服务节点重新加入到集群中,这些工作全部自动完成,不需要人工干预,需要人工完成的只是修复故障节点。

keepalived后来又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,它出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断的、稳定的运行,因此,keepalived一方面具有服务器状态监测和故障隔离功能,另一方面也具有HA Cluster功能,下面详细介绍下VRRP协议的实现过程

四、VRRP协议与工作原理

在现实的网络环境中,主机之间的通信都是通过配置静态路由完成的,而主机之间的路由器一旦出现故障,通信就会失败,因此在这种通信模式中,路由器就成了一个单点瓶颈,为了解决这个问题就引入了VRRP协议

VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换不影响主机间的数据通信,这其中涉及两个概念:物理路由器和虚拟路由器

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,二在虚拟路由器内部,是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称之为主路由器(处于master状态角色)。它拥有对外提供的虚拟ip,提供各种网络功能,比如arp请、icmp、数据转发等,二其他物理路由器不拥有对外提供的虚拟ip,也不提供对外网络功能,仅仅接收master的vrrp状态通告信息,这些路由器被统称为备份路由器(处于backup角色)。当主路由器失效时,处于backup角色的备份路由器将重新进行选举,产生一个新的主路由器进入master角色继续对外服务,整个切换过程对于用户来说完全同名

在一个虚拟路由器中,只有处于master角色的路由器会一直发送vrrp数据包,处于backup角色的路由器只接受master发过来的报文信息,用来监控master运行状态,因此,不会发生master抢占的现象,除非它的优先级更高,而当master不可用时,backup也就无法收到master发过来的报文信息,于是就认定master出现故障,接着多台backup就会进行选举,优先级最高的backup将成为新的master,这种选举并进行角色的过程非常快,因此也就保证了服务的持续可用性

五、keepalived的体系结构

keepaived是一个高度模块化的软件,结构简单,但扩展性很强,下图是官方给出的keepalived的体系结构

可以看出来,keepalived的体系结构从整体上分为两层,分别是用户空间层和内核空间层。下面介绍一个keepalived两层结构的详细组成及实现的功能。

内核空间层处于最底层,它包括ipvs和netlink两个模块。ipvs模块是keepalived引入的一个第三方模块,通过ipvs可以实现基于ip的负载均衡集群。ipvs默认包含在lvs集群软件中。

这里有一个误区,由于keepalived可以和ipvs一起很好的工作,所以很多初学者都认为keepalived是一个负载均衡的软件,这种理解是错误的

内核模块:

IPVS:主要用于通过IPVS跟lvs进行整合,是lvs的核心模块,跟lvs一块使用的

NETLINK:主要实现一些网络的功能

用户模块:主要用于高可用

checker:检查服务状态

vrrp stack:用于DS高可用

六、keepalived的安装与配置

yum install keepalived

yum安装keepalived默认配置文件在/etc/keepalived/keepalived.conf

配置文件主要分为三类分别是:

(1)全局配置

(2)VRRP配置

(3)LVS配置

keepalived:
yum install keepalived
vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived

#全局配置

global_defs {

notification_email {

#收件人地址

}

#邮件服务器

}

VRRP配置DS1

vrrp_instance VI_1 {

state MASTER #角色类型MASTER|BACKUP

interface ens33 #网卡名称

virtual_router_id 51 #虚拟路由id(需要与BACKUP一致)

priority 100 #优先级

advert_int 1 #没1秒检查一次

#nopreempt #非抢占模式



authentication {

auth_type PASS #认证类型 主备之间必须一样

auth_pass 1111 #认证密码 主备之间必须一样

}

virtual_ipaddress {

192.168.254.250 #虚拟ip(vip)

}

} #LVS配置

virtual_server 192.168.254.250 80 {

delay_loop 3 #健康检查时间间隔

lb_algo rr #负载均衡调度算法

lb_kind DR #负载均衡转发规则

protocol TCP #协议



real_server 192.168.254.18 80 { #要监控的real_server的ip和端口号

weight 1 #权重

TCP_CHECK { #基于tcp协议的检查

connect_timeout 3 #连接时间超时

retry 3 #重连次数

delay_before_retry 3 #重连间隔时间

}

}
real_server </span>192.168.254.19 80<span style="color: #000000;"> {
weight </span>1<span style="color: #000000;">
TCP_CHECK {
connect_timeout </span>3<span style="color: #000000;">
retry </span>3<span style="color: #000000;">
delay_before_retry </span>3<span style="color: #000000;">
}
}

}

上述配置虽然可以预防RS的单点故障,但是DS的单点故障并没有消除,所以需要给DS在加一个备份机器

上述配置中拷贝一份到备机上可以用scp keepalived.conf root@192.168.254.20:/etc/keepalived

需要改写的地方:

state MASTER #角色类型MASTER|BACKUP

priority 55 #优先级(这里需要设置比master机器小的值)

keepalived--小白博客的更多相关文章

  1. python之socket模块详解--小白博客

    主要是创建一个服务端,在创建服务端的时候,主要步骤如下:创建socket对象socket——>绑定IP地址和端口bind——>监听listen——>得到请求accept——>接 ...

  2. MariaDB第四章:视图,事务,索引,外键--小白博客

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结 ...

  3. MariaDB第三章:数据库设计与备份--小白博客

    数据库设计 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式. 2.第二范式(确保表中的每列都和主键相关) 第 ...

  4. Mariadb第一章:介绍及安装--小白博客

    mariadb(第一章)   数据库介绍 1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以 ...

  5. Ansible第二章:palybook介绍与使用--小白博客

    playbook tasks variables templates handlers roles yaml介绍 yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xm ...

  6. Ansible第一章:基础认识--小白博客

    ansible Ansible:Ansible的核心程序Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等.可以通过file来 ...

  7. python第九章:面向对象--小白博客

     面向对象介绍 一.面向对象和面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点 ...

  8. python之yagmail模块--小白博客

    yagmail 实现发邮件 yagmail 可以简单的来实现自动发邮件功能. 安装 pip install yagmail 简单例子 import yagmail #链接邮箱服务器 yag = yag ...

  9. python之configparser模块详解--小白博客

    configparse模块 一.ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类似 ...

  10. python第八章:多任务--小白博客

    多线程threading 多线程特点: #线程的并发是利用cpu上下文的切换(是并发,不是并行)#多线程执行的顺序是无序的#多线程共享全局变量#线程是继承在进程里的,没有进程就没有线程#GIL全局解释 ...

随机推荐

  1. React Fiber源码分析 (介绍)

    写了分析源码的文章后, 总觉得缺少了什么, 在这里补一个整体的总结,输出个人的理解~ 文章的系列标题为Fiber源码分析, 那么什么是Fiber,官方给出的解释是: React Fiber是对核心算法 ...

  2. 第3章 支持和规范 - Identity Server 4 中文文档(v1.0.0)

    IdentityServer实现以下规范: 3.1 OpenID Connect OpenID Connect Core 1.0 (规范) OpenID Connect Discovery 1.0 ( ...

  3. [C# 设计模式] Iterator - 迭代器模式:我与一份奥利奥早餐的故事

    Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...

  4. JQuery官方学习资料(译):Data方法

        你可能经常会想需要通过元素来存储一些数据.在JavaScript中你可能需要给元素添加属性来实现这样的功能,但是在某些浏览器中,你可能还需要处理因此造成的内存泄露问题.JQuery提供了一个简 ...

  5. 自然语言处理NLP快速入门

    自然语言处理NLP快速入门 https://mp.weixin.qq.com/s/J-vndnycZgwVrSlDCefHZA [导读]自然语言处理已经成为人工智能领域一个重要的分支,它研究能实现人与 ...

  6. Numpy数组数据文件的读写

    一.引言 读写数据文件的重要性就不必多说了. 二.读取列表形式数据的文件 1.我们写几行CSV格式(列表形式,两值之间逗号隔开)的数据. id,height,age 1,175,20 2,168,18 ...

  7. iOS----------Xcode9无线调试教程

    软硬件要求: - Xcode 9.0 beat 及以上版本 - macOS 10.12.5 及以上版本 - iOS 11.0 beat 及以上版本 网络连接要求 - 电脑和设备处于同一 Wifi 环境 ...

  8. Bitmap上下合成图片

    合成两张图片,上下叠加的效果: /** * 把两个位图覆盖合成为一个位图,以底层位图的长宽为基准 * * @param backBitmap 在底部的位图 * @param frontBitmap 盖 ...

  9. Android的WebView调试工具(无需Fan墙,可同时调试多个设备,永不过期)

    缘起 前端开发离不开Chrome的开发者工具,尤其是调试Android WebView时.然而,如果使用chrome://Inspect的方法,国内的开发者会惊奇地发现“空白啊”!为此,我发布过这个离 ...

  10. MySQL 基础知识梳理学习(三)----InnoDB日志相关的几个要点

    1.InnoDB的特点 :(1)Fully ACID (InnoDB默认的Repeat Read隔离级别支持):(2)Row-level Locking(支持行锁):(3)Multi-version ...