高可用集群(ha)之Corosync和pacemaker简介

一、Corosync简介和pacemaker简介


   1、Corosync

   Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点(node)之间提供心跳信息传递这样的一个角色;


   Corosync执行高可用应用程序的通信组系统它有以下特征:

一个封闭的程序组A closed process group communication model通信模式这个模式提供一种虚拟的同步方式来保证能够复***务器的状态。
一个简单可用性管理组件A simple availability manager这个管理组件可以重新启动应用程序的进程当它失败后。
一个配置和内存数据的统计A configuration and statistics in-memory database内存数据能够被设置回复接受通知的更改信息。
一个定额的系统A quorum  system,定额完成或者丢失时通知应用程序。


   2、pacemaker

   pacemaker(直译心脏起搏器)是一个群集资源管理器。它实现最大可用性群集服务亦称资源管理的节点和资源级故障检测和恢复使用您的首选集群基础设施OpenAIS的或Heaerbeat提供的消息和成员能力。

   它可以做乎任何规模的集群并配备了一个强大的依赖模型使管理员能够准确地表达群集资源之间的关系包括顺序和位置。几乎任何可以编写脚本可以管理作为心脏起搏器集群的一部分。

   pacemaker的特点:

主机和应用程序级别的故障检测和恢复
几乎支持任何冗余配置
同时支持多种集群配置模式
配置策略处理法定人数损失多台机器失败时
支持应用启动/关机顺序
支持必须在同一台机器上运行的应用程序
支持多种模式的应用程序如主/从
可以测试任何故障或群集的群集状态
现在最主流的资源管理器


  3、corosync和pacemaker结合的两种方式:

pacemaker作为corosync的插件运行;
pacemaker作为独立的守护进程运行;

   注:由于corosync的早期版本不具备投票能力,所以集群内的节点总数应为奇数,并且大于2

在corosync1.0的时候,其本身不具备票务功能(votes),不过在corosync2.0之后引入了votequorum

cman(DC)+corosync(如果想用pacemaker又想用cman,只能把cman当成corosync的插件来用)



二、安装Corosync和Pacemaker

准备工作:

   1、规划

       域名:node1.test.com    IP:172.16.12.101    hostname:node1

       域名:node2.test.com    IP:172.16.12.102    hostname:node2


   2、配置本地hosts,解析各节点域名

[root@node1 ~]# vim /etc/hosts
//添加如下内容
172.16.12.101node1.test.com
172.16.12.102node2.test.com


   3、同步各节点时间

[root@node1 ~]# ntpdate 172.16.0.1


   4、基于密钥,各节点配置无密码登录

[root@node1 ~]# ssh-keygen  -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]


   5、配置yum源(EPEL源)

   下载地址:epel-release-5-4.noarch

[root@node1 ~]# rpm -ivh epel-release-5-4.noarch.rpm
warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
1:epel-release           ########################################### [100%]
[root@node1 src]# rpm --import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


   6、关闭防火墙  

[root@node1 ~]# vim /etc/selinux/config
//修改如下内容
SELINUX=disabled


   7、安装corosync与pacemaker

[root@node1 ~]# yum install -y corosync*
[root@node1 ~]# yum install -y pacemaker*


   以上操作,需要在所有节点上均操作一遍



三、配置Corosync

   1、提供配置文件

[root@node1 ~]# cd /etc/corosync/
//corosync.conf.example是模板配置文件
[root@node1 corosync]# cp corosync.conf.example corosync.conf


    2、修改配置文件

# Please read the corosync.conf.5manual page
compatibility: whitetank    //兼容08.以前的版本
//totem定义集群内各节点间是如何通信的,totem本是一种协议,专用于corosync专用于各节点间的协议,协议是有版本的
totem {
version: 2//版本号2
secauth: on   //安全认证,是否打开,最好打开
threads: 0//用于安全认证开启并行线程数
interface{
ringnumber: 0//环号码,如果一个主机有多块网卡,避免心跳信息回流
bindnetaddr: 172.16.0.0//网络地址(节点所在的网络地址)
mcastaddr: 226.77.12.100//组播地址224.0.1.0 ~ 238.255.255.255 用户可用组播地址(临时组播地址,全网有效)
//bindip绑定的网络 与 mcust组播地址 实现各个节点在心跳信息层的心跳信息与事务信息的侦听联系
mcastport: 5405//组播端口
ttl: 1//只向外一跳心跳信息,避免组播报文环路
}
}
logging {
fileline: off  
to_stderr: no    //日志信息是否发往错误输出(否)
to_logfile: yes    //是否记录日志文件
to_syslog: yes    //是否记录于syslog日志-->此类日志记录于/var/log/message中
logfile: /var/log/cluster/corosync.log    //日志文件存放位置
debug: off    //只要不是为了排错,最好关闭debug,它记录的信息过于详细,会占用大量的磁盘IO.
timestamp: on    //记录日志的时间戳
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
//让pacemker在corosync以一个插件来用,corosync启动后会自动启动pacemaker
service {
ver: 0
name: pacemaker
}
//启用ais功能时以什么身份来运行,默认为root,aisexec区域也可以不写
aisexec {
user :root
group:root
}


   3、生成密钥文件

       authkys 保证各个节点在心跳信息层传输信息和事务的安全

       注:corosync生成key文件会默认调用/dev/random随机数设备一旦系统中断的IRQS的随机数不够用将会产生大量的等待时间因此为了节约时间我们在生成key之前将random替换成urandom以便节约时间但在实际生产环境中请勿使用不安全。

[root@node1 dev]# cd /etc/corosync/
[root@node1 corosync]# mv /dev/{random,ran.bak}
[root@node1 corosync]# ln -sv /dev/{urandom,random}
[root@node1 corosync]# corosync-keygen
[root@node1 corosync]# chmod 400authkey
[root@node1 corosync]# rm /dev/random
[root@node1 corosync]# mv /dev/{ra.bak,random}


   4、将key文件authkey与配置文件corosync.conf复制到node2上

[root@node1 corosync]# scp -p authkey corosync.conf node2.test.com:/etc/corosync/


   5、安装crmsh

     从pacemaker 1.1.8开始crm sh 发展成一个独立项目pacemaker中不再提供因此需要自行下载安装crmsh依赖于pssh因此需要一并下载

       ①、crmsh下载地址:crmsh-1.2.6-4.el6.x86_64.rpm

       ②、pssh下载地址:pssh-2.3.1-2.el6.x86_64.rpm

[root@node1 ~]# yum -y --nogpgcheck localinstall crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm



四、启动Corosync

   1、启动节点上的corosync

[root@node1 ~]# ssh node2.gulong.com "service corosync start"
[root@node1 ~]# service corosync start


   2、查看corosync启动信息

       ①、查看corosync引擎是否正常启动

[root@node1 ~]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log

wKioL1NbjszRPNQ7AAC_0W_XYAw429.jpg


       ②、检查启动过程中是否有错误产生


[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log

wKioL1NbkVLxMLDvAAGbSn8Wl9Y327.jpg

   上面的错误信息表示packmaker不久之后将不再作为corosync的插件运行因此建议使用cman作为集群基础架构服务此处可安全忽略。


       ③、查看pacemaker是否正常启动

[root@node1 ~]# grep pcmk_startup /var/log/cluster/corosync.log

wKioL1NblU2wDxmGAAHs0I30NiU717.jpg


    3、查看集群状态

[root@node1 ~]# crm status

wKioL1NblkTweVueAAD7f_R0XuM599.jpg

   node1,node2都在线



五、pacemaker资源管理器(CRM)命令注解

   1、crm有两种工作方式

       ●批处理模式:就是在命令行中直接输入命令(如上个命令执行时使用的crm status)

       ●交互式模式(crm(live)#):入到crmsh中交互执行


   2、crm命令介绍

       ①、一级子命令

[root@node1 ~]# crm
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     //编辑集群配置信息
    node             nodes management     //集群节点管理子命令
    options          user preferences     //用户优先级
    history          CRM cluster history
    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 #返回第一级crm(live)#
    quit,bye,exit    exit the program     //退出crm(live)交互模式


       ②、resource子命令:所有的资源状态,都在此控制

crm(live)resource# help
vailable commands:
        status           show status of resources     //显示资源状态信息
        start            start a resource     //启动一个资源
        stop             stop a resource     //停止一个资源
        restart          restart a resource     //重启一个资源
        promote          promote a master-slave resource     //提升一个主从资源
        demote           demote a master-slave resource     //降级一个主从资源
        manage           put a resource into managed mode
        unmanage         put a resource into unmanaged mode
        migrate          migrate a resource to another node     //将资源迁移到另一个节点上
        unmigrate        unmigrate a resource to another node
        param            manage a parameter of a resource     //管理资源的参数
        secret           manage sensitive parameters     //管理敏感参数
        meta             manage a meta attribute     //管理源属性
        utilization      manage a utilization attribute
        failcount        manage failcounts     //管理失效计数器
        cleanup          cleanup resource status     //清理资源状态
        refresh          refresh CIB from the LRM status     //从LRM(LRM本地资源管理)更新CIB(集群信息库),在
        reprobe          probe for resources not started by the CRM     //探测在CRM中没有启动的资源
        trace            start RA tracing     //启用资源代理(RA)追踪
        untrace          stop RA tracing     //禁用资源代理(RA)追踪
        help             show help (help topics for list of topics)     //显示帮助
        end              go back one level     //返回一级(crm(live)#)
        quit             exit the program     //退出交互式程序


       ③、configure子命令:所有资源的定义都在此子命令下完成

crm(live)# configure
crm(live)configure# help
Available commands:
        node             define a cluster node     //定义一个集群节点
        primitive        define a resource     //定义资源
        monitor          add monitor operation to a primitive     //对一个资源添加监控选项(如超时时间,启动失败后的操作)
        group            define a group     //定义一个组类型(将多个资源整合在一起)
        clone            define a clone     //定义一个克隆类型(可以设置总的克隆数,每一个节点上可以运行几个克隆)
        ms               define a master-slave resource     //定义一个主从类型(集群内的节点只能有一个运行主资源,其它从的做备用)
        rsc_template     define a resource template     //定义一个资源模板
        location         a location preference     //定义位置约束优先级(默认运行于那一个节点(如果位置约束的值相同,默认倾向性那一个高,就在那一个节点上运行))
        colocation       colocate resources     //排列约束资源(多个资源在一起的可能性)
        order            order resources     //资源的启动的先后顺序
        rsc_ticket       resources ticket dependency
        property         set a cluster property     //设置集群属性
        rsc_defaults     set resource defaults     //设置资源默认属性(粘性)
        fencing_topology node fencing order #隔离节点顺序
        role             define role access rights     //定义角色的访问权限
        user             define user access rights     //定义用用户访问权限
        op_defaults      set resource operations defaults     //设置资源默认选项
        schema           set or display current CIB RNG schema
        show             display CIB objects     //显示集群信息库对
        edit             edit CIB objects     //编辑集群信息库对象(vim模式下编辑)
        filter           filter CIB objects     //过滤CIB对象
        delete           delete CIB objects     //删除CIB对象
        default-timeouts set timeouts for operations to minimums from the meta-data
        rename           rename a CIB object     //重命名CIB对象
        modgroup         modify group     //改变资源组
        refresh          refresh from CIB     //重新读取CIB信息
        erase            erase the CIB     //清除CIB信息
        ptest            show cluster actions if changes were committed
        rsctest          test resources as currently configured
        cib              CIB shadow management
        cibstatus        CIB status management and editing
        template         edit and import a configuration from a template
        commit           commit the changes to the CIB     //将更改后的信息提交写入CIB
        verify           verify the CIB with crm_verify     //CIB语法验证
        upgrade          upgrade the CIB to version 1.0
        save             save the CIB to a file     //将当前CIB导出到一个文件中(导出的文件存于切换crm 之前的目录)
        load             import the CIB from a file     //从文件内容载入CIB
        graph            generate a directed graph
        xml              raw xml
        help             show help (help topics for list of topics)     //显示帮助信息
        end              go back one level     //回到第一级(crm(live)#)
        quit             exit the program      //退出crm交互模式


       ④、node子命令:节点管理和状态命令

crm(live)resource# cd ..
crm(live)# node
crm(live)node# help
Node management and status commands.
Available commands:
    status           show nodes status as XML     //以xml格式显示节点状态信息
    show             show node     //命令行格式显示节点状态信息
    standby          put node into standby     //模拟指定节点离线(standby在后面必须的FQDN)
    online           set node online     // 节点重新上线
    maintenance      put node into maintenance mode
    ready            put node into ready mode
    fence            fence node     //隔离节点
    clearstate       Clear node state     //清理节点状态信息
    delete           delete node     //删除 一个节点
    attribute        manage attributes
    utilization      manage utilization attributes
    status-attr      manage status attributes
    help             show help (help topics for list of topics)
    end              go back one level
    quit             exit the program


       ⑤、ra子命令:资源代理类别都在此处

crm(live)node# cd ..
crm(live)# ra
crm(live)ra# help
Available commands:
        classes          list classes and providers     //为资源代理分类
        list             list RA for a class (and provider)    //显示一个类别中的提供的资源
        meta             show meta data for a RA     //显示一个资源代理序的可用参数(如meta ocf:heartbeat:IPaddr2)
        providers        show providers for a RA and a class
        help             show help (help topics for list of topics)
        end              go back one level
        quit             exit the program











你可能感兴趣的:(crm,pacemaker,corosync)