设为首页 收藏本站
查看: 2579|回复: 0

[经验分享] corosync+pacemaker实现web集群高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-1-26 09:31:19 | 显示全部楼层 |阅读模式
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内部结构
600px-Stack.jpg
群集组件说明

    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
拓扑图
QQ截图20150126092834.png

安装配置
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
#查看初始化成员节点通知是否正常发出
grep  TOTEM /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>] ...
        [symmetrical=<


定义全局配置并提交
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 first
crm(live)configure#
资源类型:

添加资源之前必须要知道当前集群所支持的RA类型,corosync支持heartbeatLSB和ocf等类型的资源代理。目前较为常用的类型为LSB和OCF两类,STONITH类专为stonith设备而用。
查看当前集群所支持的RA类型列表
crm(live)# ra 在资源列表目录下
crm(live)ra# classes    查看资源的类型
lsb
ocf / heartbeat pacemaker
service
stonith
crm(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   VirtualDomain  Xinetd         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
VirtualDomain  Xinetd         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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41455-1-1.html 上篇帖子: 千万并发压测环境php5.4.34+opcache环境整合 下篇帖子: 集群环境中服务器banner的重要性[仅限四层转发,非七层]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表