CoroSync+Pacemaker实现web高可用

一、简介

CoroSync最初只是用来演示OpenAIS集群框架接口规范的一个应用,可以说CoroSync是OpenAIS的一部分,但后面的发展明显超越了官方最初的设想,越来越多的厂商尝试使用CoroSync作为集群解决方案。如Redhat的RHCS集群套件就是基于CoroSync实现。

CoroSync只提供了message layer,而没有直接提供CRM,一般使用Pacemaker进行资源管理。

CoroSync和Pacemaker的配合使用有2种方式:①Pacemaker以插件形式使用  ②Pacemaker独立的守护进程

本文Pacemaker以插件的形式运行。

二、配置web高可用

0、前提

①时间同步、ssh互信、hosts域名通信 (略)

②安装httpd服务,开机不启动

③关闭NetworkManager,开启不启动,开启network服务

1、安装CoroSync、Pacemaker、crmsh

# yum  install corosync pacemaker

CoroSync的软件包组成:

[[email protected] ~]# rpm -ql corosync
/etc/corosync              #CoroSync的配置文件目录
/etc/corosync/corosync.conf.example    #CoroSync的配置样例
/etc/corosync/corosync.conf.example.udpu
/etc/corosync/service.d
/etc/corosync/uidgid.d
/etc/dbus-1/system.d/corosync-signals.conf
/etc/rc.d/init.d/corosync            #CoroSync的服务脚本
/etc/rc.d/init.d/corosync-notifyd
/usr/bin/corosync-blackbox
/usr/libexec/lcrso
/usr/libexec/lcrso/coroparse.lcrso
/usr/libexec/lcrso/objdb.lcrso
/usr/libexec/lcrso/quorum_testquorum.lcrso
/usr/libexec/lcrso/quorum_votequorum.lcrso
/usr/libexec/lcrso/service_cfg.lcrso
/usr/libexec/lcrso/service_confdb.lcrso
/usr/libexec/lcrso/service_cpg.lcrso
/usr/libexec/lcrso/service_evs.lcrso
/usr/libexec/lcrso/service_pload.lcrso
/usr/libexec/lcrso/vsf_quorum.lcrso
/usr/libexec/lcrso/vsf_ykd.lcrso
/usr/sbin/corosync
/usr/sbin/corosync-cfgtool
/usr/sbin/corosync-cpgtool
/usr/sbin/corosync-fplay
/usr/sbin/corosync-keygen            #生成节点message layer通信秘钥
/usr/sbin/corosync-notifyd
/usr/sbin/corosync-objctl
/usr/sbin/corosync-pload
/usr/sbin/corosync-quorumtool
/usr/share/doc/corosync-1.4.1
/var/lib/corosync
/var/log/cluster
# yum  install  -y  crmsh-1.2.6-4.el6.x86_64.rpm  pssh-2.3.1-2.el6.x86_64.rpm      ###crmsh依赖于pssh

从pacemaker 1.1.8开始,crm发展成了一个独立项目,叫crmsh。也就是说,我们安装了pacemaker后,并没有crm这个命令,我们要实现对集群资源管理,还需要独立安装crmsh。

2、配置CoroSync

[[email protected] corosync]#  cat  /etc/corosync/corosync.conf
compatibility: whitetank      ##是否兼容旧版本

totem {
        version: 2            ##版本号,无法修改
        secauth: off          ##安全认证,当使用aisexec时,会非常消耗CPU 
        threads: 0            ##线程数,根据CPU个数和核心数确定 
        interface {
                ringnumber: 0
                bindnetaddr:192.168.192.0  ##绑定心跳网络IP地址
                mcastaddr: 226.94.1.1        ##组播地址
                mcastport: 5405              ##组播端口
                ttl: 1                       ##组播的ttl值
        }
}

logging {
        fileline: off
        to_stderr: no             ##是否发送到标准错误输出 
        to_logfile: yes           ##是否记录到文件
        to_syslog: yes            ##是否记录到syslog
        logfile: /var/log/cluster/corosync.log    ##日志文件位置
        debug: off
        timestamp: on        ##是否打印时间戳,利于定位错误,但会消耗CPU
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
service {                ##定义pacemaker以插件的形式启动
  ver:  0 
  name: pacemaker  
}

aisexec {                ##corosync启动的身份,由于corosync需要管理服务,需要root身份
  user: root 
  group:  root 
}

amf {
        mode: disabled
}

3、配置CoroSync的认证(authkey)

使用corosync-keygen生成key时,由于要使用/dev/random生成随机数,因此如果新装的系统操作不多,如果没有足够的熵,可能会出现如下提示:

[[email protected] corosync]# corosync-keygen 
Corosync Cluster Engine Authentication key generator. 
Gathering 1024 bits for key from /dev/random. 
Press keys on your keyboard to generate entropy. 
Press keys on your keyboard to generate entropy (bits = 240).

解决办法:在本地随意输入即可,可以通过安装,卸载软件方式解决。

authkey的权限为默认400

4、将配置文件复制到集群节点

5、启动CoroSync

[[email protected] corosync]# service corosync start 
Starting Corosync Cluster Engine (corosync):               [确定] 
[[email protected] corosync]# ssh node2 ‘service corosync start‘ 
Starting Corosync Cluster Engine (corosync): [确定]

检查CoroSync的引擎启动是否成功:

[[email protected] corosync]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages 
Oct 19 19:21:21 node1 corosync[2360]:   [MAIN  ] Corosync Cluster Engine (‘1.4.1‘): started and ready to provide service. 
Oct 19 19:21:21 node1 corosync[2360]:   [MAIN  ] Successfully read main configuration file ‘/etc/corosync/corosync.conf‘.

查看初始化成员节点通知是否正常发出:

[ro[email protected] corosync]# grep  TOTEM  /var/log/messages 
Oct 19 19:21:21 node1 corosync[2360]:   [TOTEM ] Initializing transport (UDP/IP Multicast). 
Oct 19 19:21:21 node1 corosync[2360]:   [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0). 
Oct 19 19:21:22 node1 corosync[2360]:   [TOTEM ] The network interface [192.168.192.208] is now up. 
Oct 19 19:21:23 node1 corosync[2360]:   [TOTEM ] Process pause detected for 1264 ms, flushing membership messages. 
Oct 19 19:21:23 node1 corosync[2360]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.

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

[[email protected] corosync]# grep ERROR: /var/log/messages | grep -v unpack_resources 
Oct 19 19:21:22 node1 corosync[2360]:   [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon. 
Oct 19 19:21:22 node1 corosync[2360]:   [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of ‘Clusters from Scratch‘ (http://www.clusterlabs.org/doc) for details on using Pacemaker with CMAN

查看pacemaker是否正常启动:

[[email protected] corosync]# grep pcmk_startup /var/log/messages 
Oct 19 19:21:22 node1 corosync[2360]:   [pcmk  ] info: pcmk_startup: CRM: Initialized 
Oct 19 19:21:22 node1 corosync[2360]:   [pcmk  ] Logging: Initialized pcmk_startup 
Oct 19 19:21:22 node1 corosync[2360]:   [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615 
Oct 19 19:21:23 node1 corosync[2360]:   [pcmk  ] info: pcmk_startup: Service: 9 
Oct 19 19:21:23 node1 corosync[2360]:   [pcmk  ] info: pcmk_startup: Local hostname: node1.yu.com

这里可能存在的问题:iptables,selinux

6、配置crmsh实现资源管理

crmsh具有补全命令功能,并且交互式,可随时help查看帮助说明

crmsh简介:

[[email protected] ~]# 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# show     ##查看当前配置 
node node1.yu.com 
node node2.yu.com 
property $id="cib-bootstrap-options" \ 
    dc-version="1.1.8-7.el6-394e906" \ 
    cluster-infrastructure="classic openais (with plugin)" \ 
    expected-quorum-votes="2"
crm(live)configure# verify    ##检查当前配置语法,由于没有STONITH,所以报错,可关闭 
   error: unpack_resources:     Resource start-up disabled since no STONITH resources have been defined 
   error: unpack_resources:     Either configure some or disable STONITH with the stonith-enabled option 
   error: unpack_resources:     NOTE: Clusters with shared data need STONITH to ensure data integrity 
Errors found during check: config not valid 
  -V may provide more details
  
crm(live)configure# property stonith-enabled=false   ##禁用stonith后再次检查配置,无报错 
crm(live)configure# verify
crm(live)configure# commit  ##提交配置
crm(live)configure# cd
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  ##查看指定资源的提供商和类型 
    help,?           show help (help topics for list of topics) 
    end,cd,up        go back one level 
    quit,bye,exit    exit the program 
crm(live)ra# classes 
lsb 
ocf / heartbeat pacemaker redhat 
service 
stonith
crm(live)ra# list ocf pacemaker 
ClusterMon    Dummy         HealthCPU     HealthSMART   Stateful      SysInfo       SystemHealth  controld      o2cb      ping          pingd
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.192.208".
nic (string, [eth0]): Network interface 
    The base network interface on which the IP address will be brought 
    online.
……下略……
crm(live)ra# cd 
crm(live)# status  <--查看集群状态 
Last updated: Sun Oct 20 22:06:16 2013 
Last change: Sun Oct 20 21:58:46 2013 via cibadmin on node1.yu.com 
Stack: classic openais (with plugin) 
Current DC: node2.yu.com - partition with quorum 
Version: 1.1.8-7.el6-394e906 
2 Nodes configured, 2 expected votes 
0 Resources configured.
Online: [ node1.yu.com node2.yu.com ]

法定票数问题:

在双节点集群中,由于票数是偶数,当心跳出现问题(脑裂)时,两个节点都将达不到法定票数,默认quorum策略会关闭集群服务,为了避免这种情况,可以增加票数为奇数(如前文的增加ping节点,qdisk),或者调整默认quorum策略为【ignore】。

crm(live)configure# property no-quorum-policy=ignore 
crm(live)configure# show 
node node1.yu.com 
node node2.yu.com 
property $id="cib-bootstrap-options" \ 
    dc-version="1.1.8-7.el6-394e906" \ 
    cluster-infrastructure="classic openais (with plugin)" \ 
    expected-quorum-votes="2" \ 
    stonith-enabled="false" \ 
    no-quorum-policy="ignore" 
crm(live)configure# commit

资源来回转移问题:(防止资源转移后,故障点恢复又转移)

故障发生时,资源会迁移到正常节点上,但当故障节点恢复后,资源可能再次回到原来节点,这样有时候不一定是好事,例如某些繁忙的场景,来回飘逸就会出现问题,这里通过资源粘性来避免

crm(live)configure#  property default-resource-stickiness=INFINITY

7.配置httpd的高可用样例

     ## 配置浮动IP
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.192.222
crm(live)configure# commit
    ##配置httpd
crm(live)configure#primitive web lsb:httpd         op monitor interval="30s" timeout="20s" on-fail="restart"         meta target-role="Started"
crm(live)configure# commit
    ##资源,默认会平均分配在各个不同的几点,将webip和httpd定义为一个组资源,可以将资源运行于同一个节点
crm(live)configure#group web_srv webip web
crm(live)configure# commit
[[email protected] corosync]# crm
crm(live)# status
Last updated: Sun Apr 12 08:31:35 2015
Last change: Sun Apr 12 08:17:47 2015 via cibadmin on node1.yu.com
Stack: classic openais (with plugin)
Current DC: node1.yu.com - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
5 Resources configured.

Online: [ node1.yu.com node2.yu.com ]

 Resource Group: web_srv
     webip      (ocf::heartbeat:IPaddr):        Started node2.yu.com
     web        (lsb:httpd):    Started node2.yu.com

至此httpd的HA完成,后文会详细说明,约束的实现。

时间: 04-12

CoroSync+Pacemaker实现web高可用的相关文章

Corosync+Pacemaker+DRBD+Mysql高可用HA配置

操作系统: CentOS 6.6 x64,本文采用rpm方式安装corosync+pacemaker+drbd,采用二进制版本安装mysql-5.6.29.本文是在Corosync+Pacemaker+DRBD+NFS高可用实例配置基础上进行配置修改,然后进行测试的安装过程. 一.双机配置 1. app1,app2配置hosts文件,以及主机名. [[email protected] soft]# vi /etc/hosts   127.0.0.1   localhost localhost.l

corosync+pacemaker+crmsh实现高可用

目录 1.引言及环境介绍 2.高可用环境部署 3.crmsh接口使用介绍 4.案例 5.总结 1.引言及环境介绍 在上一博文中介绍了一些关于高可用技术的理论基础知识,这一博文则是介绍corosync+pacemakcer这一高可用方案的安装部署,并会以实际的案例来演示高可用的实现,corosync提供集群的信息层(messaging layer)的功能,传递心跳信息和集群事务信息,pacemaker工作在资源分配层,提供资源管理器的功能,并以crmsh这个资源配置的命令接口来配置资源.在进入主题

drbd与corosync/pacemaker 结合构建高可用mariadb服务

drbd与corosync/pacemaker 结合构建高可用mariadb drbd介绍: 高可用节点之间为了使切换节点时数据一致,不得不使用共享存储,共享存储一般只有两种选择:NAS 和 SAN.NAS是文件系统级别的共享,性能低下,访问也受限制,使用时有诸多不变:SAN块级别共享存储,但又太贵.当资金不足时,就可以考虑drbd. drbd是跨主机的块设备镜像系统,一主一从(两个主机只能有一个能进行写操作,slave主机只能接受master主机传过来的数据).drbd是工作于内核中的,工作时

CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用

DRBD (Distributed Replicated Block Device)分布式复制块设备,它是 Linux 平台上的分散式储存系统,通常用于高可用性(high availability, HA)集群中.DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID 1 一般配置在一台服务器内,而 DRBD 是通过网络. DRBD Resource:DRBD所具有的几种属性: resource name:可以使用除空白字符外的任意ACSII表中的字符: drbd设备:drbd的设备的访

corosync+pacemaker+crmsh的高可用web集群的实现

网络规划: node1:eth0:172.16.31.10/16 node2: eth0: 172.16.31.11/16 nfs:   eth0: 172.16.31.12/15 注: nfs在提供NFS服务的同时是一台NTP服务器,可以让node1和node2同步时间的. node1和node2之间心跳信息传递依靠eth0传递 web服务器的VIP是172.16.31.166/16 架构图:跟前文的架构一样,只是节点上安装的高可用软件不一致: 一.高可用集群构建的前提条件 1.主机名互相解析

Linux集群之corosync+pacemaker实现MySQL高可用

一.实验拓扑 二.拓扑说明 分别在两个节点上实现部署MySQL,数据库文件存储在后端的NFS主机上,通过挂载至相应的节点上使用,在两个节点分别安装corosync和pacemaker用于实现MySQL的高可用,通过crmsh程序对pacemaker进行配置,当其中一个节点出现问题时用于前端访问的VIP地址将被移到另一个节点上,并挂载后端的NFS数据库存储文件,然后启动MySQL数据库程序,以实现在两个节点上实现MySQL高可用. 三.架构布置 服务器:CentOS 6.6 x86_64: 数据库

Centos7上利用corosync+pacemaker+crmsh构建高可用集群

一.高可用集群框架 资源类型: primitive(native):表示主资源 group:表示组资源,组资源里包含多个主资源 clone:表示克隆资源 master/slave:表示主从资源 资源约束方式: 位置约束:定义资源对节点的倾向性 排序约束:定义资源彼此能否运行在同一节点的倾向性 顺序约束:多个资源启动顺序的依赖关系 HA集群常用的工作模型: A/P:两节点,active/passive,工作于主备模型 A/A:两节点,active/active,工作于主主模型 N-M:N>M,N个

使用drbd结合corosync实现mysql的高可用集群服务

DRBD:Distributed Replicated Block Dvice 分布式复制块设备,它可以将两个主机的硬盘或者分区做成镜像设备,类似于RAID1的原理,只不过它会将主节点的数据主动通过网络同步到从节点做成镜像,当主节点发生故障,让从节点成为主节点,因为是镜像设备,所以数据不会丢失.corosync在这里的作用就是将drbd通过pacemaker做成高可用服务的资源,以便于主从节点间的自动切换.drbd由于使用各节点之间自身的硬盘设备,因此对于需要共享存储的场景不失为一种节约成本的解

Corosync部署MySQL+DRBD高可用服务

介绍篇 高可用集群主要是有两个或者多个节点进行工作,ha基本组成部分包括四个部分:1.位于最底层的信息和基础架构层(Messaging Layer),主要用于节点之间传递心跳信息,故也称为心跳层.节点之间传递心跳信息可以通过广播,组播,单播等方式.2.第二层为成员关系(Membership)层,这层最重要的作用是主节点通过cluster consensus menbership service(CCM或者CCS)这种服务由第一层提供的信息,来生产一个完整的成员关系.这层主要实现承上启下的作用,承