Corosync+pacemaker高可用集群实现

目录:

    1. 实验规划
    2. 实验准备
    3. 软件安装
    4. Corosync配置文件
    5. 高可用功能实现
    6. 资源粘性实例
    7. 注意事项
  1. 实验规划
    1. 有两个结点分别为RS1和RS2 IP地址分别为192.168.1.127和192.168.1.128
    2. 高可用的访问VIP地址为192.168.1.122
    3. 高可用服务为httpd服务、
    4. 系统为CentOS Linux release 6.0 (Final)
  2. 实验准备
1.配置RS1的IP地址(/etc/sysconfig/network-scripts/ifcfg-eth0)    
        DEVICE="eth0"
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        BOOTPROTO=static
        IPADDR=192.168.1.127
        NETMASK=255.255.255.0
        GATEWAY=192.168.1.1
        DNS1=192.168.1.1
    同理:RS2的配置如下:
        DEVICE="eth0"
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        BOOTPROTO=static
        IPADDR=192.168.1.128
        NETMASK=255.255.255.0
        GATEWAY=192.168.1.1
        DNS1=192.168.1.1
    2.配置主机名和/etc/hosts文件
        vim /etc/sysconfig/network 中的HOSTNAME=RS1,同理将RS2中的改为RS2.
        vim /etc/hosts 文件把自己127.0.0.1解析为自己,并添加
        192.168.1.127 RS1
        192.168.1.128 RS2这两行。
    3.设置两个主机能够进行ssh密钥认证通信。
        在RS1和RS2上执行同样的操作
        #ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘
        #ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
        测试成功:
            #ssh RS1 ‘ifconfig‘
    4.同步时间:
        在RS1上安装ntp并开启服务同步
        #yum install ntp -y
        #/etc/init.d/ntpd start
        注意RS2无法进行ntpdate同步,出现no server suitable for synchronization found错误:
        则修改:/etc/ntp.conf,在最后加入
        server 127.127.1.0
        fudge 127.127.1.0 stratum 8 
        在RS2上安装ntpdate:
        #yum install ntpdate -y
        #crontab -e
        */5 * * * * /usr/sbin/ntpdate 192.168.1.127
    5.此处关闭两个节点的防火墙和selinux
        [[email protected] ~]# service  iptables stop
        [[email protected] ~]# setenforce 0
        
        [[email protected] ~]# service  iptables stop
        [[email protected] ~]# setenforce 0

4. 软件安装

    1. 首先要解决安装包之间的依赖。

libibverbs, librdmacm, lm_sensors, libtool-ltdl, openhpi-libs, openhpi, perl-TimeDate

 #yum install libibverbs  librdmacm lm_sensors libtool-ltdl openhpi-libs openhpi perl-TimeDate

b.  安装corosync和pacemaker,下载所需要如下软件包至本地.

注意:由于pacemaker对heartbeat有依赖作用,所以要安装上heartbeat。

        cluster-glue
        cluster-glue-libs
        heartbeat
        resource-agents
        corosync
        heartbeat-libs
        pacemaker
        corosynclib
        libesmtp
        pacemaker-libs
        pssh
        python-pssh
        crmsh
       我们要想使用pacemaker配置的话需要安装一个pacemaker的接口,它的这个程序的接口叫crmshell,它在新版本的 pacemaker已经被独立出来了,不再是pacemaker的组成部分了,早期装上pacemaker就会自带有crmshell,因此要想用 crmshell的话得去安装crmshell,而安装crmshell又依赖于pssh的相关包,因此得安装这两个组件,(这里的这两个包是自己制件 的),哪个节点配置就安装在哪个节点上就可以了,也无需两个节点都安装这两个包。
       #yum localinstall --nogpgcheck *.rpm

5.  配置Corosync

1.首先复制一个配置文件:
    #cp corosync.conf.example corosync.conf
2.修改配置文件内容:
    # vim /etc/corosync/corosync.conf   编辑配置文件修改如下内容
compatibility: whitetank    #这个表示是否兼容0.8之前的版本
totem {    #图腾,这是用来定义集群中各节点中是怎么通信的以及参数
        version: 2        #图腾的协议版本,它是种协议,协议是有版本的,它是用于各节点互相通信的协议,这是定义版本的
        secauth: on        #表示安全认证功能是否启用的
        threads: 0        #实现认证时的并行线程数,0表示默认配置
        interface {        # 指定在哪个接口上发心跳信息的,它是个子模块
                ringnumber: 0    #环号码,集群中有多个节点,每个节点上有多个网卡,别的节点可以接收,同时我们本机的别一块网卡也可以接收,为了避免这些信息在这样的环状发送,因此要为这个网卡定义一个唯一的环号码,以避免心跳信息环发送。这里只有一张网卡,就不会形成环路。
                bindnetaddr: 192.168.1.0       # 绑定的网络地址
                mcastaddr: 226.94.1.1    #多播地址,一对多通信
                mcastport: 5405        # 多播端口
                ttl: 1        # 表示只向外播一次
        }
}
logging {        # 跟日志相关
        fileline: off
        to_stderr: no        # 表示是否需要发送到错误输出
        to_logfile: yes        #是不是送给日志文件
        to_syslog: no        #是不是送给系统日志
        logfile: /var/log/cluster/corosync.log        #日志文件路径
        debug: off        #是否启动调试
        timestamp: on        #日志是否需要记录时间戳
        logger_subsys {        #日志的子系统
                subsys: AMF
                debug: off
        }
}
amf {        # 跟编程接口相关的
        mode: disabled
}
service {  #定义一个服务来启动pacemaker
    ver: 0    #定义版本
    name: pacemaker  #这个表示启动corosync时会自动启动pacemaker
}
aisexec {  #表示启动ais的功能时以哪个用户的身份去运行的
    user: root
    group: root  #其实这个块定义不定义都可以,corosync默认就是以root身份去运行的
}
3.生成节点之间通信的密钥文件:
    # corosync-keygen
    这个可能熵池中的随机数不够,可以这样
    [[email protected] corosync]# mv /dev/random /dev/m
    [[email protected] corosync]# ln /dev/urandom /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.
    Writing corosync key to /etc/corosync/authkey.
    [[email protected] corosync]# rm -ef /dev/random 
    rm: invalid option -- ‘e‘
    Try `rm --help‘ for more information.
    [[email protected] corosync]# rm -rf /dev/random 
    [[email protected] corosync]# mv /dev/m /dev/random
4.将配置好的文件发给其他节点:
    # scp /etc/corosync/{authkey,corosync.conf} RS2:/etc/corosync/
5.在节点上建立日志文件存的地方
[[email protected] corosync]# mkdir /var/log/cluster
[[email protected] corosync]# ssh RS2 ‘mkdir /var/log/cluster‘
6.启动Corosync
 1.查看corosync引擎是否正常启动:
   # grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
 2.查看初始化成员节点通知是否正常发出:
   # grep  TOTEM  /var/log/messages
 3.检查启动过程中是否有错误产生:
   # grep ERROR: /var/log/messages | grep -v unpack_resources
 4.查看pacemaker是否正常启动:
   # grep pcmk_startup /var/log/messages
 5.如果以上没有问题那么启动RS2(远程启动)
   [[email protected] corosync]# ssh RS2 ‘/etc/init.d/corosync start‘
   Starting Corosync Cluster Engine (corosync): [  OK  ]
 6.查看启动情况:
    [[email protected] ~]# crm status
    Last updated: Sun May 24 15:58:18 2015
    Last change: Sun May 24 15:55:52 2015
    Stack: classic openais (with plugin)
    Current DC: RS1 - partition with quorum
    Version: 1.1.11-97629de
    2 Nodes configured, 2 expected votes
    0 Resources configured
    Online: [ RS1 RS2 ]

6.  高可用功能实现

1)由于这里没有STONITH设备,所以关闭STONITH设备

2)为集群添加资源

corosync支持heartbeat,LSB和ocf等类型的资源代理,目前较为常用的类型为LSB和OCF两类,stonith类专为配置stonith设备而用;

1)可以通过如下命令查看当前集群系统所支持的类型:

# crm ra classes

heartbeat

lsb

ocf / heartbeat pacemaker

stonith

2)如果想要查看某种类别下的所用资源代理的列表,可以使用类似如下命令实现:

# crm ra list lsb

# crm ra list ocf heartbeat

# crm ra list ocf pacemaker

# crm ra list stonith

3)配置web集群的IP地址资源,cib的语法如下:

语法:

primitive <rsc> [<class>:[<provider>:]]<type>

[params attr_list]

[operations id_spec]

[op op_type [<attribute>=<value>...] ...

op_type :: start | stop | monitor

例子:

primitive apcfence stonith:apcsmart \

params ttydev=/dev/ttyS0 hostlist="node1 node2" \

op start timeout=60s \

op monitor interval=30m timeout=60s

配置命令:

            # crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.1.122

如果想要在RS1上看WebIP的信息;

可以再RS1上直接 #ip addr show;

现在如果将RS1的Corosync关闭之后就可以看到高可用的作用,如下:(在RS2上关闭RS1的服务) 此时注意在cib中不能有location cli-prefer-WebIP WebIP role=Started inf: RS1,这个是资源粘性,说明即使是RS1宕机之后也不能转移资源。

    [[email protected] ~]# ssh RS1 ‘/etc/init.d/corosync stop‘
    Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]
    Waiting for corosync services to unload:.[  OK  ]
    You have new mail in /var/spool/mail/root

但是这里并没有转移,这个就是因为quorum法定票数的问题,由于现在来说,两个节点的票数都是一样多的,所以这里就默认,两边节点票数一样多的话就会stop,所以这里可以配置参数

     # crm configure property no-quorum-policy=ignore 
     这里表示如果集群分裂的话就忽略,运行的结点继续提供服务。

7.    资源粘性

由上图看出,RS1上线之后并没有进行资源的转移,这是由于资源粘性的原因:

如下是关于资源粘性的解释:

0:这是默认选项。资源放置在系统中的最适合位置。这意味着当负载能力“较好”或较差的节点变得可用时才转移资源。此选项的作用基本等同于自动故障回复,只是资源可能会转移到非之前活动的节点上;

大于0:资源更愿意留在当前位置,但是如果有更合适的节点可用时会移动。值越高表示资源越愿意留在当前位置;

小于0:资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置;

INFINITY:如果不是因节点不适合运行资源(节点关机、节点待机、达到migration-threshold 或配置更改)而强制资源转移,资源总是留在当前位置。此选项的作用几乎等同于完全禁用自动故障回复;

-INFINITY:资源总是移离当前位置;

1)下面修改一下默认的资源粘性,这样的话一开始在运行的结点上设置默认的资源粘性为100

# crm configure rsc_defaults resource-stickiness=100

此时WebIP资源又转移到了RS1上,那么重新上线之后的结果也是没有转移到RS2上,因为此时的默认的资源粘性都是100,如果要是将在RS2上对WebIP的资源粘性比100大的话,那么会转移到RS2上。

2)下面再配置一个httpd(web)的资源,

首先,在两个结点上都安装上httpd服务,

# yum install httpd -y

注意:安装完成之后将

[[email protected]]# echo RS1 > /var/www/html/index.html

[[email protected]]# echo RS2 > /var/www/html/index.html

service httpd start 开启服务

chkconfig httpd off     去掉开机自动启动,方便集群的管理。

测试httpd是否成功(用浏览器),也可以用curl命令,例如:

curl http://192.168.1.127

其次,配置httpd资源

#crm configure primitive httpd lsb:httpd

此时查看状态会发现,资源默认的分配方式是平均分配,也是就说会将资源轮着分给每一个结点:

3)调整资源约束:

WebIP和httpd服务要在一个节点上才能够提供服务,那么如何约束结点之间的行为,那就是资源约束的功能:

资源约束则用以指定在哪些群集节点上运行资源,以何种顺序装载资源,以及特定资源依赖于哪些其它资源。pacemaker共给我们提供了三种资源约束方法:

1、Resource Location(资源位置):定义资源可以、不可以或尽可能在哪些节点上运行;

2、Resource Collocation(资源排列):排列约束用以定义集群资源可以或不可以在某个节点上同时运行;

3、Resource Order(资源顺序):顺序约束定义集群资源在节点上启动的顺序;

定义约束时,还需要指定分数。各种分数是集群工作方式的重要组成部分。其实,从迁移资源到决定在已降级集群中停止哪些资源的整个过程是通过以某种方式修改分数来实现的。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。在计算出资源分数后,集群选择分数最高的节点。INFINITY(无穷大)目前定义为 1,000,000。

加减无穷大遵循以下3个基本规则:

1)任何值 + 无穷大 = 无穷大

2)任何值 - 无穷大 = -无穷大

3)无穷大 - 无穷大 = -无穷大

定义资源约束时,也可以指定每个约束的分数。分数表示指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过使用不同的分数为既定资源创建更多位置约束,可以指定资源要故障转移至的目标节点的顺序。

4)对WebIP和httpd可要在一起资源的约束

#crm configure collocation http-with-WebIP INFINITY: httpd WebIP

可以看到现在资源在一个节点上运行。

5)先启动WebIP然后启动httpd服务。

#crm configure order httpd-after-WebIP mandatory: WebIP WebSite

6)如果两个节点的性能不一样,总是希望服务能够运行在RS1则个高性能的结点上,那么要定位置约束,例如:

#crm configure location prefer-RS1 httpd rule 200: #uname eq RS1

当RS1宕机之后重新上线就会引起资源重新回到RS1。

注意事项:

1.在Corosync的配置文件中可以进行多播地址的修改,下面是多播地址的知识:

多播地址(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.crmshell中如果不会使用某一个指令可以用help + 命令来查询。

时间: 2024-08-05 11:01:52

Corosync+pacemaker高可用集群实现的相关文章

corosync+pacemaker高可用集群

简介 高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点. 高可用集群的出现是为了减少由计算机硬件和软件易错性所带来的损失.它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度.如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责.因此,对于用户而言,集群永远不会停机.高可用集群软件的主要作用就

[ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-Mitaka 高可用之 认证服务(keystone)    Openstack-Mitaka

Pacemaker+corosync实现高可用集群

一:Pacemaker和corosync概述: Pacemaker(心脏起搏器),是一个集群管理资源器.但是其不提供心跳信息.pacemaker是一个延续的CRM.Pacemaker到了V3的版本以后 拆分了多个项目,其中pacemaker就是拆分出来的资源管理器. Heart 3.0拆分之后的组成部分: *Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各个节点的信息以及他们之间的通信. *Cluster Glue:相当于一个中间层,它用

pacemaker+corosync/heartbeat高可用集群对比及资源代理RA脚本

一.Pacemaker概念 (1)Pacemaker(心脏起搏器),是一个高可用的群集资源管理器.它实现最大可用性资源管理的节点和资源级故障检测和恢复,通过使用首选集群基础设施(Corosync或Heartbeat)提供的消息和成员能力. 它可以监测并恢复节点和服务级别的故障,实现进程级高可用.它适合各种大小集群,可以编写脚本,可以管理作为心脏起搏器集群的一部分.再次说明一下,pacemaker是个资源管理器,不是提供心跳信息的,因为它似乎是一个普遍的误解,corosync/heartbeat的

pacemaker+corosync+haporxy高可用集群部署

# 安装 Corosync以及pacemaker 部署 yum install -y pacemaker pcs psmisc policycoreutils-python corosync fence-agents-all systemctl start pcsd.service systemctl enable pcsd.service # 修改密码(全执行) echo 'HAcluster123' | passwd --stdin hacluster # 验证集群 pcs cluster

高可用集群之Corosync+Pacemaker及用CRM命令和NFS-server构建一个HA高可用集群

红帽5.0使用的是OpenAIS作为内核中的信息通信API,然后借助CMAN作为Messager Layer,再使用ramanager作为CRM进行资源的管理 Corosync具有比heartbeat在设计上更好的信息通信机制 红帽6.0直接使用Corosync用来作为集群的Messager Layer 不同的公司的API机制所调用的库,函数类型,返回方式各不相同,这就必须使用一个标准,使不同公司的API保持最大的兼容 比如你买了华硕的主板使用其他公司的鼠标照样可以使用 应用接口规范(AIS)就

Corosync+Pacemaker+DRBD实现MariaDB的高可用集群

Corosync简介 Corosync是高可用集群中基础事务层 (Messaging Layer)的一个实现方案与heartbeat的功能类似,主要用来传递集群的事务信息,但是Corosync的功能更加强大,正在逐渐地取代heartbeat.Corosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等. Pacemaker简介 Pacemaker是一个集群资源管理器,从heartbeat v3版本中分裂出来,功能强大.它利用集群事务层提供的组件对各节点进行资源管理及监控

corosync+pacemaker构建高可用集群

一.集群简介 引自suse官方关于corosync的高可用集群的框架图: 由图,我们可以看到,suse官方将集群的Architecture Layers分成四层.最低层Messaging/Infrastructure Layer提供了HeartBeat节点间传递心跳信息,即为心跳层.第二层Membership Layer层为集群事务决策层,决定了哪些节点作为集群节点,并传递给集群内所有节点,如果集群中成员拥有的法定票数不大于半数,该怎么作出决策等,通俗点讲,就是投票系统,同时,还提供了构建成员关

corosync+pacemaker and drbd实现mysql高可用集群

DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的,另外的节点是不可读的,连挂载都不可能,只有一个节点是主的,其它节 点都是从的.当做为主主架构时,需要达到几个条件,1.在高可用集群中启用DRBD;  2. 启用分布式文件锁功能,即需要把磁盘格式化为集群文件系统(如GFS2,OCFS2等):3. 把DRBD做成资源. 数据的存储过程: 当某个进程存