Corosync+Pacemaker构建高可用集群


一、概述:
1.1 AIS和OpenAIS简介
AIS应用接口规范,是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放、高移植性的程序接口。是在实现高可用应用过程中是亟需的。服务可用性论坛(SA Forum)是一个开放性论坛,它开发并发布这些免费规范。使用AIS规范的应用程序接口(API),可以减少应用程序的复杂性和缩短应用程序的开发时间,这些规范的主要目的就是为了提高中间组件可移植性和应用程序的高可用性。
OpenAIS是基于SA Forum 标准的集群框架的应用程序接口规范。OpenAIS提供一种集群模式,这个模式包括集群框架,集群成员管理,通信方式,集群监测等,能够为集群软件或工具提供满足 AIS标准的集群接口,但是它没有集群资源管理功能,不能独立形成一个集群。
1.2 corosync简介
Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程,corosync最初只是用来演示OpenAIS集群框架接口规范的一个应用,可以说corosync是OpenAIS的一部分,但后面的发展明显超越了官方最初的设想,越来越多的厂商尝试使用corosync作为集群解决方案。如RedHat的RHCS集群套件就是基于corosync实现。
corosync只提供了message layer,而没有直接提供CRM,一般使用Pacemaker进行资源管理。
1.3 pacemaker简介
pacemaker就是Heartbeat 到了V3版本后拆分出来的资源管理器(CRM),用来管理整个HA的控制中心,要想使用pacemaker配置的话需要安装一个pacemaker的接口,它的这个程序的接口叫crmshell,它在新版本的 pacemaker已经被独立出来了,不再是pacemaker的组成部分。
(1)pacemaker 内部结构
这里写图片描述
(2)群集组件说明:
stonithd:心跳系统。
lrmd:本地资源管理守护进程。它提供了一个通用的接口支持的资源类型。直接调用资源代理(脚本)。
pengine:政策引擎。根据当前状态和配置集群计算的下一个状态。产生一个过渡图,包含行动和依赖关系的列表。
CIB:群集信息库。包含所有群集选项,节点,资源,他们彼此之间的关系和现状的定义。同步更新到所有群集节点。
CRMD:集群资源管理守护进程。主要是消息代理的PEngine和LRM,还选举一个领导者(DC)统筹活动(包括启动/停止资源)的集群。
OpenAIS:OpenAIS的消息和成员层。
Heartbeat:心跳消息层,OpenAIS的一种替代。
CCM:共识群集成员,心跳成员层。
功能概述
CIB使用XML表示集群的集群中的所有资源的配置和当前状态。CIB的内容会被自动在整个集群中同步,使用PEngine计算集群的理想状态,生成指令列表,然后输送到DC(指定协调员)。Pacemaker 集群中所有节点选举的DC节点作为主决策节点。如果当选DC节点宕机,它会在所有的节点上, 迅速建立一个新的DC。DC将PEngine生成的策略,传递给其他节点上的LRMd(本地资源管理守护程序)或CRMD通过集群消息传递基础结构。当集群中有节点宕机,PEngine重新计算的理想策略。在某些情况下,可能有必要关闭节点,以保护共享数据或完整的资源回收。为此,Pacemaker配备了stonithd设备。STONITH可以将其它节点“爆头”,通常是实现与远程电源开关。Pacemaker会将STONITH设备,配置为资源保存在CIB中,使他们可以更容易地监测资源失败或宕机。
(3)CRM中的几个基本概念:
资源粘性:资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数表示移离,-inf表示正无穷,inf表示正无穷。
资源黏性值范围及其作用:
0:默认选项。资源放置在系统中的最适合位置。这意味着当负载能力“较好”或较差的节点变得可用时才转移资源。
此选项的作用基本等同于自动故障回复,只是资源可能会转移到非之前活动的节点上;
大于0:资源更愿意留在当前位置,但是如果有更合适的节点可用时会移动。值越高表示资源越愿意留在当前位置;
小于0:资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置;
INFINITY:如果不是因节点不适合运行资源(节点关机、节点待机、达到migration-threshold 或配置更改)而强制资源转移,
资源总是留在当前位置。此选项的作用几乎等同于完全禁用自动故障回复;
-INFINITY:资源总是移离当前位置;
资源类型:
primitive(native):基本资源,原始资源
group:资源组
clone:克隆资源(可同时运行在多个节点上),要先定义为primitive后才能进行clone。主要包含STONITH和集群文件系统(cluster filesystem)
master/slave:主从资源,如drdb(下文详细讲解)
RA类型:
Lsb:linux表中库,一般位于/etc/rc.d/init.d/目录下的支持start|stop|status等参数的服务脚本都是lsb
ocf:Open cluster Framework,开放集群架构
heartbeat:heartbaet V1版本
stonith:专为配置stonith设备而用
(4)pacemaker 支持集群
基于OpenAIS的集群
这里写图片描述
基于心跳信息的传统集群架构
这里写图片描述
1.4Corosync+Pacemaker 支持集群
可实现多种集群模型,包​括​ Active/Active, Active/Passive, N+1, N+M, N-to-1 and N-to-N
主从架构集群:许多高可用性的情况下,使用Pacemaker和DRBD的双节点主/从集群是一个符合成本效益的解决方案
这里写图片描述
多节点备份集群:支持多少节点,Pacemaker可以显着降低硬件成本通过允许几个主/从群集要结合和共享一个公用备份节点
这里写图片描述
共享存储集群(多个节点多个服务):有共享存储时,每个节点可能被用于故障转移,Pacemaker甚至可以运行多个服务
这里写图片描述
二、在CentOS 6.4(64位)上配置基于corosync的Web高可用
环境部署:
(1)本实验共有两个测试节点:
node1:10.33.100.77
node2:10.33.100.99
(2)集群服务为apache的httpd服务;
(3)提供web服务的地址为10.33.100.88;
这里写图片描述
2.1 基本前提配置:
两个节点要实现时间同步、ssh互信、hosts名称解析、详细过程参见heartbeat配置博文,这里不再赘述
安装httpd

[root@Node1 ~]# yum install httpd –y
[root@Node1 ~]# echo "Node1" >/var/www/html/index.html
[root@Node2 ~]# yum install httpd –y
[root@Node2 ~]# echo "Node2" >/var/www/html/index.html

在各节点手动启动httpd服务,并确认其可以正常提供服务,而后停止服务并关闭开机自启

[root@Node1 ~]# chkconfig httpd off 
[root@Node1 ~]# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@Node2 ~]# chkconfig httpd off 
[root@Node2 ~]# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

2.2 安装corosync:
注意,以下所有安装都是需要在所有节点上执行的。
2.2.1 安装依赖:


[root@Node1 ~]# yum install libibverbs librdmacm lm_sensors libtool-ltdl openhpi-libs openhpi perl-TimeDate
[root@Node2 ~]# yum install libibverbs librdmacm lm_sensors libtool-ltdl openhpi-libs openhpi perl-TimeDate

2.2.2 安装集群组件:


[root@Node1 ~]# yum install corosync pacemaker
[root@Node2 ~]# yum install corosync pacemaker

2.2.3 安装crmsh实现资源管理:
从pacemaker 1.1.8开始,crm发展成为一个独立项目crmsh。也就是说安装了pacemaker后,并没有crm这个命令,要实现对集群资源管理,还需要独立安装crmsh,crmsh依赖于pssh。
特别���意:
使用了crmsh,就不在需要安装heartbeat,之前的版本中都需要安装heartbeat以利用其crm进行资源管理。
网上教程大多数都是下载crmsh的rpm包安装,但是实验过程中依赖关系始终无法解决,本文最终使用源码编译安装,安装前确保准备好开发环境
这里写图片描述
下载以下2个安装包
http://download.savannah.gnu.org/releases/crmsh/
这里写图片描述
首先编译安装pssh
这里写图片描述
接着解压crmsh包
这里写图片描述
根据README文档可知安装步骤
这里写图片描述
这里写图片描述
这里写图片描述
./configure报错:没有发现头文件,去crmsh官网查阅资料
这里写图片描述
可知下载cluster-glue-libs-devel和cluster-glue-libs-devel即可(本文实验系统为centos6.4_64位,两个devel包挂载本地光盘yum安装)
这里写图片描述
./configure成功
这里写图片描述
接下来
这里写图片描述
这里写图片描述
测试成功,crmsh安装完毕
这里写图片描述
Node1上执行相同操作

[root@Node1 ~]# tar xf pssh-2.3.1.tar.gz -C /usr/src
[root@Node1 ~]# cd /usr/src/pssh-2.3.1/
[root@Node1 pssh-2.3.1]# vim INSTALL 
[root@Node1 pssh-2.3.1]# python setup.py install
[root@Node1 ~]# tar xf crmsh-1.2.6.tar.bz2 -C /usr/src/
[root@Node1 ~]# cd /usr/src/crmsh-crmsh-1.2.6/
[root@Node1 crmsh-crmsh-1.2.6]# ./autogen.sh 
[root@Node1 crmsh-crmsh-1.2.6]# yum install cluster-glue-libs-devel pacemaker-libs-devel
[root@Node1 crmsh-crmsh-1.2.6]# ./configure 
[root@Node1 crmsh-crmsh-1.2.6]# make
[root@Node1 crmsh-crmsh-1.2.6]# make install
[root@Node1 crmsh-crmsh-1.2.6]# mkdir /var/lib/pacemaker/cores/root

2.3 配置corosync:
2.3.1 主配置文件:
这里写图片描述

# Please read the corosync.conf.5 manual page 
compatibility: whitetank ##这个表示是否兼容0.8之前的版本
totem {              ##图腾用来定义集群中各节点中是怎么通信的以及参数 
        version: 2      ##版本号,只能是2,不能修改 
        secauth: on     ##安全认证,当使用aisexec时,会非常消耗CPU 
        threads: 2      ##实现认证时的并行线程数,根据CPU个数和核心数确定 
        interface {     ##指定发送心跳信息的接口,是个子模块
                ringnumber: 0   ##冗余环号,集群中有多个节点,每个节点上有多个网卡,信息传送时,其它节点可以接收,
##同时本机的另一块网卡也可以接收,为了避免心跳信息的环状发送,因此要为这个网卡定义一个唯一的环号码,可定义对应网卡在一个环内
                bindnetaddr: 10.33.0.0   ##绑定心跳网段 ,这里设定两个节点所在的网络地址
                mcastaddr: 226.99.12.17  ##心跳组播地址,一对多通信
                mcastport: 5405          ##心跳组播使用端口 
                ttl: 1                   ##表示只向外播一次
        } 
}
logging { 
        fileline: off       ##指定要打印的行 
        to_stderr: no       ##是否发送到标准错误输出 
        to_logfile: yes     ##记录到文件 
        to_syslog: no       ##记录到syslog 
        logfile: /var/log/cluster/corosync.log ##日志文件路径
        debug: off        ##是否启动调试 
        timestamp: on     ##是否打印时间戳,利于定位错误,但会消耗CPU 
        logger_subsys {   ##日志的子系统
                subsys: AMF 
                debug: off 
        } 
}
service {              ##定义启动pacemaker的服务
  ver:  0              ##定义版本
  name: pacemaker      ##定义启动时corosync同时启动pacemaker 
}
amf {                  ##跟编程接口相关的
        mode: disabled 
}
aisexec {  ##表示启动ais的功能时以哪个用户的身份去运行的
    user: root
    group: root 
     ##其实这个块定义不定义都可以,corosync默认就是以root身份去运行的
}

补充知识:
多播地址(multicast address)即组播地址,是一组主机的标示符,它已经加入到一个多播组中。在以太网中,多播地址是一个48位的标示符,命名了一组应该在这个网络中应用接收到一个分组的站点。在IPv4中,它历史上被叫做D类地址,一种类型的IP地址,它的范围从224.0.0.0到239.255.255.255,或,等同的,在224.0.0.0/4。在IPv6,多播地址都有前缀ff00::/8。

多播是第一个字节的最低位为1的所有地址,例如01-12-0f-00-00-02。广播地址是全1的48位地址,也属于多播地址。但是广播又是多播中的特例,就像是正方形属于长方形,但是正方形有长方形没有的特点。

2.3.2 生成认证key:
使用corosync-keygen生成key时,由于要使用/dev/random生成随机数,因此如果新装的系统操作不多,如果没有足够的熵
(关于random使用键盘敲击产生随机数的原理可自行google),可能会出现如下提示:
这里写图片描述
此时一直狂敲键盘,直到出现下图中红色标记内容
这里写图片描述
生成密钥文件
这里写图片描述
2.3.3 拷贝配置文件与密钥问价至节点2:
这里写图片描述
2.3.4 启动corosync
这里写图片描述
2.3.5 检查启动情况:
(1)查看corosync引擎是否正常启动:
这里写图片描述
(2)查看初始化成员节点通知是否正常发出:
这里写图片描述
(3)检查启动过程中是否有错误产生:
这里写图片描述
(4)查看pacemaker是否正常启动:
这里写图片描述
(5)查看集群节点状态
这里写图片描述
可能存在的问题:iptables没有配置相关策略,导致两个节点无法通信。可关闭iptables或配置节点间的通信策略。
三、集群资源管理
3.1 crmsh基本介绍

[root@node1 ~]# crm  <--进入crmsh

crm(live)# help   ##查看帮助

This is crm shell, a Pacemaker command line interface.

Available commands:
    cib              manage shadow CIBs       ##CIB管理模块
    resource         resources management     ##资源管理模块
    configure        CRM cluster configuration  ##CRM配置,包含资源粘性、资源类型、资源约束等
    node             nodes management  ##节点管理
    options          user preferences  ##用户偏好
    history          CRM cluster history  ##CRM历史
    site             Geo-cluster support  ##地理集群支持
    ra               resource agents information center ##资源代理配置 
    status           show cluster status ##查看集群状态
    help,?           show help (help topics for list of topics) ##查看帮助 
    end,cd,up        go back one level ##返回上一级
    quit,bye,exit    exit the program  ##退出
crm(live)# configure             <--进入配置模式
crm(live)configure# property    ##切换到property目录下,可以用两次tab键进行补全和查看
usage: property [$id=<set_id>] <option>=<value>    ##property的用法和格式
crm(live)configure# verify       ##检查设置的属性是否正确
crm(live)configure# commit       ##检查没问题就可以提交了
crm(live)configure# show         ##查看当前集群的所有配置信息

(1)查看一下默认配置
这里写图片描述
(2)检查当前配置语法
这里写图片描述
禁用stonith后再次检查配置,无报错
这里写图片描述

crm(live)# ra   <--进入RA(资源代理配置)模式
crm(live)ra# help
This level contains commands which show various information about 
the installed resource agents. It is available both at the top 
level and at the `configure` level.
Available commands:
    classes          list classes and providers    ##查看RA类型
    list             list RA for a class (and provider)  ##查看指定类型(或提供商)的RA
    meta,info        show meta data for a RA   ##查看RA详细信息
    providers        show providers for a RA and a class  ##查看指定资源的提供商和类型

(3)查看当前集群系统所支持的类型
这里写图片描述
(4)查看某种类别下的所用资源代理的列表
这里写图片描述
(5)查看某个资源代理的配置方法

crm(live)ra# info ocf:heartbeat:IPaddr 
Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr) 
This script manages IP alias IP addresses  
It can add an IP alias, or remove one. 
Parameters (* denotes required, [] the default): 
ip* (string): IPv4 address  
    The IPv4 address to be configured in dotted quad notation, for example  
    "192.168.1.1". 

(6)查看集群状态
这里写图片描述
3.2 法定票数问题
在双节点集群中,由于票数是偶数,当心跳出现问题【脑裂】时,两个节点都将达不到法定票数,默认quorum策略会关闭集群服务,为了避免这种情况,可以增加票数为奇数(增加ping节点),或者调整默认quorum策略为【ignore】

property
Set the cluster (crm_config) options.
Usage:
        property [$id=<set_id>] <option>=<value> [<option>=<value> ...]

这里写图片描述
3.3 防​止​资​源​在​节​点​恢​复​后​移​动​
故障发生时,资源会迁移到正常节点上,但当故障节点恢复后,资源可能再次回到原来节点,这在有些情况下并非是最好的策略,因为资源的迁移是有停机时间的,资源在节点间每一次的来回流动都会造成那段时间内节点提供的服务无法被正常访问,特别是一些复杂的应用,如MySQL数据库,其停机时间会更长。为了避免这种情况,可以根据需要,使用本文1.3(3)介绍的资源粘性策略

rsc_defaults
Set defaults for the resource meta attributes.
Usage:
        rsc_defaults [$id=<set_id>] <option>=<value> [<option>=<value> ...]
Example:
        rsc_defaults failure-timeout=3m

这里写图片描述

更多详情见请继续阅读下一页的精彩内容

  • 1
  • 2
  • 下一页

相关内容