Corosync详解

OpenAIS概述

OpenAIS是基于SA Forum 标准的集群框架的应用程序接口规范。OpenAIS提供一种集群模式,这个模式包括集群框架,集群成员管理,通信方式,集群监测等,能够为集群软件或工具提供满足 AIS标准的集群接口,但是它没有集群资源管理功能,不能独立形成一个集群。OpenAIS组件包括AMF,CLM,CKPT,EVT,LCK,MSG,TMR,CPG,EVS等,因OpenAIS分支不同,组件略有不同。(下面介绍)OpenAIS主要包含三个分支:Picacho,Whitetank,Wilson。Wilson把Openais核心架构组件独立出来放在Corosync(Corosync是一个集群管理引擎)里面。(详细请查看官方文档)

Corosync概述

Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程(可以说Corosync是OpenAIS工程的一部分)。Corosync包含OpenAIS的核心框架用来对Wilson的标准接口的使用、管理。它为商用的或开源性的集群提供集群执行框架。目前Corosync分为1版本和2版本,1版本不具有投票功能,2版本具有投票功能。

Pacemaker概述

Pacemaker概述

Pacemaker是一个集群资源管理器,它利用首选集群基础设施(OpenAIS 或heartbeat)提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。Pacemaker是从Heartbeat V3版本中分裂出来的专门用于提供高可用集群的CRAM组件。

Pacemaker特点

  1. 主机和应用程序级别的故障检测和恢复

  2. 几乎支持任何冗余配置

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

  4. 配置策略处理法定人数损失(多台机器失败时)

  5. 支持应用启动/关机顺序

  6. 支持,必须/必须在同一台机器上运行的应用程序

  7. 支持多种模式的应用程序(如主/从)

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

Pacemaker内部组件

  1. crmd(资源管理守护进程):主要作为pengine和lrm的消息代理,它同时也得选举一个leader去协调管理集群的活动(包括集群资源的停止和启动)

  2. stonithd(心跳系统):在 Pacemaker 中,STONITH设备被当成资源(并且是在CIB中配置)从而轻松地监控,然而Stonithd会注意理解STONITH拓扑,比如它的客户端请求隔离一个节点,它会重启那个机器。

  3. cib(集群信息库):CIB在系统中充当的是当前集群中各资源原始配置以及之后动态变化了的状态,统计信息收集分发中心,是一个不断更新的信息库(包含所有群集选项,节点,资源以及他们的相互关系和当前状态的定义)。当他收集到任何资源的变化,以及节点统计信息的变化后,都会集成整合到一起组成当前集群最新的信息,并分发到集群各个节点。

  4. pengine(策略引擎):主要负责将CRM发过来的一些信息按照配置文件中的各种设置(基于目前的状态和配置)计算集群的下一个状态。产生一个包括一系列行动和依赖关系的过渡图。

Corosync+Pacemaker组合

Corosync和Pacemake的安装

结构部署图

前期准备

1.检查/etc/sysconfig/network中的主机名和uname -n 的结果相同

[root@Clone3 ~]# cat /etc/sysconfig/network | grep "HOSTNAME" | cut -d "=" -f2 > network.txt
[root@Clone3 ~]# uname -n > hostname.txt
[root@Clone3 ~]# diff network.txt hostname.txt

2.配置DNS

A.修改/etc/resolv.confB.修改/etc/hosts.conf
    [root@Clone3 ~]# vim /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6    
    192.168.80.130  Clone2    
    192.168.80.131  Clone3    
    192.168.80.132  Clone4

3.配置互信ssh

生成ssh的公钥和密钥
    [root@Clone3 ~]# ssh-keygen -t rsa 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:66:03:85:51:93:de:e9:7b:ed:b1:42:36:d6:05:bc:17 root@Clone3
    The key's randomart p_w_picpath is:
    +--[ RSA 2048]----+
    |      .++.   .   |
    |      ....    oE |
    |      .. . .   o.|
    |       .. o   . o|
    |        S.   . o |
    |       o .. = .  |
    |           = o.  |
    |          . o .o |
    |           . oo  |
    +-----------------+
将公约复制到替他节点上
    [root@Clone3 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@Clone2
    The authenticity of host 'clone2 (192.168.80.130)' can't be established.
    RSA key fingerprint is d7:64:9b:c6:a0:81:61:70:8a:df:d4:b4:a4:01:54:08.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'clone2,192.168.80.130' (RSA) to the list of known hosts.
    root@clone2's password: 
    Now try logging into the machine, with "ssh 'root@Clone2'", and check in:
      .ssh/authorized_keys    
    to make sure we haven't added extra keys that you weren't expecting.

Corosync安装
1.yum源安装

[root@Clone3 ~]# yum install corosync

2.编译安装

下载:
    [root@Clone3 ~]# wget http://build.clusterlabs.org/corosync/releases/corosync-2.4.2.tar.gz解压:
    [root@Clone3 ~]# tar -xzf corosync-2.4.2.tar.gz 
安装必要软件:
    [root@Clone3 ~]# yum install gcc ncc-devel libqb libqb-devel
编译安装:
    [root@Clone3 ~]#  cd corosync-2.4.2
    [root@Clone3 corosync-2.4.2]# ./configure --prefix=/usr/local/corosync 
--sbindir=/usr/local/sbin --bindir=/usr/local/bin --sysconfdir=/etc
    [root@Clone3 corosync-2.4.2]# make && make install

Corosync配置文件详解

[root@Clone3 ~]# vim /etc/corosync/corosync.conf
totem {        version: 2                //版本号
        crypto_cipher: none        
        crypto_hash: none
        secauth:on      //是否开启认证
        thread:0        //实现认证时,并发线程数,0表示默认
        interface {
                ringnumber: 0      //环号码,为这个网卡定义一个唯一的环号码,以避免心跳信息环发送
                bindnetaddr: 192.168.1.0    //绑定的网络地址
                mcastaddr: 239.255.1.1      //广播地址
                mcastport: 5405            //广播端口
                ttl: 1                     //只向外播一次
        }
}
logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        logfile: /var/log/cluster/corosync.log
        to_syslog: yes        debug: off
        timestamp: on
        logger_subsys {
                subsys: QUORUM                debug: off
        }       
}  
service {               //定义一个服务来启动pacemaker
    ver: 0              //定义版本
    name: pacemaker    //这个表示启动corosync时会自动启动pacemaker}
aisexec {                 //表示以哪个用户的身份去运行
    user: root
    group: root         
}

yum源安装

[root@Clone3 ~]# yum install pacemaker

后续步骤
1.使用命令生成corosync密钥,并复制到各个节点

[root@Clone3 ~]# corosync-keygen
[root@Clone3 ~]# scp /etc/corosync/authkey root@Clone2:/etc/corosync/

2.复制corosync配置文件到各个节点

[root@Clone3 ~]# scp /etc/corosync/corosync.conf root@Clone2:/etc/corosync/corosync.conf

3.下载并安装crmsh,pssh

[root@Clone3 ~]# wget 
[root@Clone3 ~]# wget 
[root@Clone3 ~]# yum install pssh-2.3.1-2.el6.x86_64.rpm crmsh-1.2.6-4.el6.x86_64.rpm

启动并检验

[root@Clone3 ~]# crm_mon

注:由于pacemaker的配置内容比较多,所以我将在下一篇博客中重点来讲crmsh来配置高可用资源,以及常用服务器使用corosync+pacemaker搭建的高可用


Hearbeat实现高可用:http://www.crazyrui.pw:8088/index.php/2017/07/31/heartbeat/

                             或:  http://lnsane784.blog.51cto.com/1226518/1952393

自动化部署工具ansible:http://www.crazyrui.pw:8088/index.php/2017/07/27/linux_ansiable/

                                或:http://lnsane784.blog.51cto.com/1226518/1951496

LVS负载均衡:http://www.crazyrui.pw:8088/index.php/2017/07/24/linux_lvs/

                或:http://lnsane784.blog.51cto.com/1226518/1950589

DHCP,HTTPD,TOMCAT搭建:http://www.crazyrui.pw:8088/index.php/category/linux-server/