3t4342 发表于 2015-1-26 09:31:19

corosync+pacemaker实现web集群高可用

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

pacemaker是个资源管理器,不提供心跳信息。
heartbeat3.0拆分后的组成部分:
    heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及他们之前通信。

    cluster-glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即LRM和STONITH。

    resource-agent:用来控制服务启停,监控服务器状态的脚本集合

    pacemaker:也就是cluster resource manager(CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。

pacemaker特点
    主机和应用程序级别的故障检测和恢复

    几乎支持任何冗余配置

    同时支持多种集群配置模式

    配置策略处理法定人数损失

    支持应用启动/关机顺序

    支持多种模式的应用程序

    可以测试任何故障或集群的群集状态


pacemaker内部结构

群集组件说明

    stonithd:心跳系统

    lrmd:本地资源管理守护进程。它提供了一个通用的接口支持的资源类型,直接调用资源代理。

    pengine:策略引擎。

    cib:群集信息库。

    crmd:群集资源管理守护进程。主要消息代理的PEnine和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中,使他们可以更容易地监测资源失败或宕机。

实验操作centos6.X
拓扑图


安装配置
yum install corosync pacemaker -y
cd /etc/corosync/
cp corosync.conf.example corosync.conf
#修改配置文件
vim corosync.conf
compatibility: whitetank
totem {    #指定心跳信息传递的参数
      version: 2                  
      secauth: off            #是否开启安全认证
      threads: 0            #开启线程的个数
      interface {
                ringnumber: 0    #标识一个通信接口
                bindnetaddr: 10.10.0.0#指定心跳报文传输的网段
                mcastaddr: 226.94.1.1    #指定心跳报文发送的组播地址
                mcastport: 5405      #指定端口
                ttl: 1                #生命周期,跨3层的话需要加大一点,不然对方接收不到,最大255
      }
}
logging {
      fileline: off
      to_stderr: no    #是否发送标准错误输出
      to_logfile: yes#是否记录到日志文件中
      to_syslog: no    #是否记录到syslog,二者选其一即可
      logfile: /var/log/cluster/corosync.log    #日志文件的路径
      debug: off      #是否开启调试信息
      timestamp: on    #日志中是否协商时间戳
      logger_subsys {
                subsys: AMF    #是否记录AMF
                debug: off    #是否开启AMF的调试信息
      }
}
amf {
      mode: disabled      #AMF的状态
}
service {            #corosync启动时也将pacemaker启动
    ver:0
    name: pacemaker
}
aisexec {            #指定ais的用户和组的身份
    user:root
    group:root
}

#生成密钥
corosync-keygen
ll /etc/corosync/    #保证authkey的权限为400
#拷贝到node2

scp -p authkey corosync.conf node2:/etc/corosync/
#自从RH6之后就不再提供pacemaker的命令行工具,我们需要单独安装crmsh,它依赖pssh,另外可以使用pcs代替crmsh,下面会单独讲pcs使用。
rpm -ivh crmsh-2.1-1.6.i686.rpm pssh-2.3.1-4.1.i686.rpm
#两个节点都需要启动corosync

service corosync start
#查看corosync引擎是否正常启动 grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log #查看初始化成员节点通知是否正常发出 grepTOTEM /var/log/cluster/corosync.log#查看pacemaker是否正常启动grep pcmk_startup /var/log/cluster/corosync.log   
#检查启动过程中是否有错误产生 grep ERROR: /var/log/cluster/corosync.log#在node2上启动服务并查看日志信息ssh node2 'service corosync start'crm_mon#查看集群状态crm start    #查看集群状态

接下来要给两个节点定一下资源配置,所有的操作都是在crm命令下进行的。
#crm
crm(live)# 进入crm模式并且按两下Tab键补全
?         cd          configure   exit      history   options   ra          site      up      
bye         cib         end         help      node      quit      resource    status
crm(live)# help查看每个命令的意思
This is crm shell, a Pacemaker command line interface.
Available commands:
    cib            manage shadow CIBs
    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
    quit,bye,exit    exit the program
crm(live)# configure
crm(live)configure#
?                  colocation         exit               load               op_defaults      refresh            save               user
bye                commit             fencing_topology   location         order            rename             schema             verify
cd               default-timeouts   filter             master             primitive          role               show               xml
cib                delete             graph            modgroup         property         rsc_defaults       simulate      
cibstatus          edit               group            monitor            ptest            rsc_template       template      
clone            end                help               ms               quit               rsc_ticket         up            
collocation      erase            history            node               ra               rsctest            upgrade      
crm(live)configure# order help 还可以用这种方式查看命令使用格式
usage: order <id> {kind|<score>}: <rsc>[:<action>] <rsc>[:<action>] ...
      

定义全局配置并提交
crm(live)#configure property stonith-enabled=false 禁止stonith设备正常情况下不应该禁止但是我们这里不考虑stonith设备
crm(live)#configure property no-quorum-policy=ignore 忽略法定投票因为节点就两个不可能超过半数票
crm(live)#
crm(live)# configure必须在configure目录下执行
crm(live)configure# verify
crm(live)configure# commit
INFO: apparently there is nothing to commit
INFO: try changing something firstcrm(live)configure#
资源类型:

添加资源之前必须要知道当前集群所支持的RA类型,corosync支持heartbeatLSB和ocf等类型的资源代理。目前较为常用的类型为LSB和OCF两类,STONITH类专为stonith设备而用。
查看当前集群所支持的RA类型列表
crm(live)# ra 在资源列表目录下
crm(live)ra# classes    查看资源的类型
lsb
ocf / heartbeat pacemaker
service
stonithcrm(live)ra#
查看OCF类型下的资源代理
crm(live)ra# list ocf
CTDB         ClusterMon   Dummy          Filesystem   HealthCPU      HealthSMART    IPaddr         IPaddr2      IPsrcaddr      LVM            MailTo
Route          SendArp      Squid          Stateful       SysInfo      SystemHealth   VirtualDomainXinetd         apache         conntrackd   controld
dhcpd          ethmonitor   exportfs       mysql          mysql-proxy    named          nfsserver      nginx          pgsql          ping         pingd
postfix      remote         rsyncd         rsyslog      slapd          symlink      tomcat crm(live)ra# list ocf heartbeat
CTDB         Dummy          Filesystem   IPaddr         IPaddr2      IPsrcaddr      LVM            MailTo         Route          SendArp      Squid
VirtualDomainXinetd         apache         conntrackd   dhcpd          ethmonitor   exportfs       mysql          mysql-proxy    named          nfsserver
nginx          pgsql          postfix      rsyncd         rsyslog      slapd          symlink      tomcat   
crm(live)ra#
为集群添加资源

IP资源名:node1,IP类型:ocfheartbeat,IPaddr IP:10.10.0.224,启动监控程序,检测到失败后的方式为重启服务。
crm(live)# configure
crm(live)configure# primitive node1ip ocf:heartbeat:IPaddr params ip=10.10.0.224 op monitor interval=30s timeout=20s on-fail=restart
crm(live)configure# verify   #校验
crm(live)configure# commit

查看IP是否生效
ifconfig
用浏览器查看服务是否正常

停掉node1,看是否node2能够正常提供服务,这是实现高可用最重要的一步。
crm(live)# node standby 让当前节点自动成为备用节点
crm(live)# node standby
crm(live)# status

资源约束1、位置约束Location       定义资源更倾向运行在哪一个节点上:数值越大倾向性超高
       inf无穷大    n    -n    -inf负无穷但凡有可能就不会运行在这个节点上2、排列约束Order       资源运行在同一节点的倾向性
       inf    -inf就代表那种老死不相往来的状态
3、顺序约束Colocation       定义资源的启动与关闭次序就如我们定义的三个资源他们的启动顺序应该是webip,webstore,webserver那就给它们定义一个顺序约束吧crm(live)configure# order webip_webstore_webserver mandatory: webip webstore webserver
crm(live)configure# verify
crm(live)configure# commit



页: [1]
查看完整版本: corosync+pacemaker实现web集群高可用