Linux 高可用(HA)集群之Corosync详解

来源:互联网 发布:淘宝打折设置 编辑:程序博客网 时间:2024/05/06 00:36

大纲

一、Corosync 概述

二、Corysync与Pacemaker 安装

三、Corosync 详细配置

四、Corosync 启动信息


一、Corosync 概述(注:本文的理论部分主要参考,“孟三的博客http://blog.sina.com.cn/s/blog_7695e9f40100pcnz.html)     
1.简单概述

   要说明corosync的由来,首先我们得从AIS说起,然后说明OpenAIS,最后才会说到corosync。

2.AIS概述

   应用接口规范(AIS)是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放、高移植性的程序接口。是在实现高可用应用过程中是亟需的。服务可用性论坛(SA Forum)是一个开放性论坛,它开发并发布这些免费规范。使用AIS规范的应用程序接口(API),可以减少应用程序的复杂性和缩短应用程序的开发时间,这些规范的主要目的就是为了提高中间组件可移植性和应用程序的高可用性。SAF AIS是一个开放性工程,在不断更新中。

3.OpenAIS概述

   OpenAIS是基于SA Forum 标准的集群框架的应用程序接口规范。OpenAIS提供一种集群模式,这个模式包括集群框架,集群成员管理,通信方式,集群监测等,能够为集群软件或工具提供满足 AIS标准的集群接口,但是它没有集群资源管理功能,不能独立形成一个集群。OpenAIS组件包括AMF,CLM,CKPT,EVT,LCK,MSG,TMR,CPG,EVS等,因OpenAIS分支不同,组件略有不同。(下面介绍)OpenAIS主要包含三个分支:Picacho,Whitetank,Wilson。Wilson是最新的,比较稳定的版本是从openais 1.0.0到openais1.1.4。Whitetank现在是主流分支版本,比较稳定的版本是openais0.80到openais0.86。Picacho第一代的OpenAIS的分支,比较稳定的版本是openais0.70和openais0.71。现在比较常用的是Whitetank和Wilson,两者之间有很多不同。OpenAIS从Whitetank升级到Wilson版本后,组件变化很大,Wilson把Openais核心架构组件独立出来放在Corosync(Corosync是一个集群管理引擎)里面。Whitetank包含的组件有AMF,CLM,CKPT,EVT,LCK ,MSG, CPG,CFG,EVS, aisparser, VSF_ykd,bojdb等。而Wilson只含有AMF,CLM,CKPT,LCK, MSG,EVT,TMR(TMR,Whitetank里面没有),这些都是AIS组件。其他核心组件被放到了Corosync内。Wilson被当做Corosync的一个插件。(详细请查看官方文档)

4.Corosync概述

   Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。OpenAIS从openais0.90开始独立成两部分,一个是Corosync;另一个是AIS标准接口Wilson。Corosync包含OpenAIS的核心框架用来对Wilson的标准接口的使用、管理。它为商用的或开源性的集群提供集群执行框架。Corosync执行高可用应用程序的通信组系统,它有以下特征:

  • 一个封闭的程序组(A closed process group communication model)通信模式,这个模式提供一种虚拟的同步方式来保证能够复制服务器的状态。

  • 一个简单可用性管理组件(A simple availability manager),这个管理组件可以重新启动应用程序的进程当它失败后。

  • 一个配置和内存数据的统计(A configuration and statistics in-memory database),内存数据能够被设置,回复,接受通知的更改信息。

  • 一个定额的系统(A quorum  system),定额完成或者丢失时通知应用程序。

5.AIS、OpenAIS,Corosync的关系

(1).AIS与Whitetank的关系

由图3,可以看出,OpenAIS的分支版本Whitetank除了包含AIS标准的应用程序接口,同时也有自己独立的管理模块,这些独立的模块为图3中浅黄色部分,包含CPG,CFG,EVS, aisparser, VSF_ykd,bojdb等控制模块。

c1

(2).AIS与Wilson的关系

当OpenAIS到了Wilson以后,OpenAIS一分为二,Wilson的组件基本都是AIS组件。其他控制的核心组件被添加到Corosync中,关系如图4所示。

c2

(3).Corosync与OpenAIS关系

图5所示,Wilson与Whitetank的主要区别在于Wilson相比Whitetank缺少核心架构。Wilson 作为Corosync的插件支持SA Forum 。

c3

6.OpenAIS集群实例

(1).CMAN

   CMAN是红帽RHCS套件的核心部分,CCS是CMAN集群配置系统,配置cluster.conf,而cluster.conf其实就是openais的配置文件,通过CCS映射到openais。

(2).Pacemaker1.x+corosync1.x

   Pacemaker升级到1.0版本后,从Heartbeat独立出来,Pacemaker achieves maximum availability for your cluster services by detecting and recovering from node and service-level failures. It achieves this by utilizing the messaging and membership capabilities provided by your preferred cluster infrastructure (currently either Corosync or Heartbeat)

7.总结

   简单的说,AIS就是一个通用的应用程序编程接口,OpenAIS是AIS的子项目,标准的集群框架的应用程序接口规范,而corosync是OpenAIS是具体实现。这样说大家应该很好理解吧!

8.corosync版本

官方网站:http://corosync.github.io/corosync/ ,目前官方同在维护两个版本分别为,

  • corosync 1.x –> corosync 1.4.6(最新) 代号:flatiron

  • corosync 2.x –> corosync 2.3.1(最新) 代号:needle

9.corosync与pacemaker组合

   从上图中我们可以看到,不管heartbeat,还是corosync都是高可用集群中的Cluster Messaging Layer(集群信息层),是主要传递发集群信息与心跳信息的,并没有资源管理功能,资源管理还得依赖于上层的crm(Cluster resource Manager,集群资源管理器),最著名的资源管理器,就是pacemaker,它是heartbeat v3分离出去的子项目。而现在corosync+pacemaker成了高可用集群中的最佳组合。好了,到这里corosync与pacemaker的基础知识就说到这里了,下面我们来看看怎么安装corosync与pacemaker。

二、Corysync与Pacemaker 安装

1.环境说明

(1).操作系统

  • CentOS 6.4 X86_64位系统

(2).软件环境

  • corosync-1.4.1-15.el6_4.1.x86_64

  • pacemaker-1.1.8-7.el6.x86_64

(3).拓扑环境

2.前提条件

node1:

(1).各节点之间主机名互相解析

1
2
3
4
5
6
7
8
9
[root@node1 ~]# uname -n 
node1.test.com
[root@node1 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6  
192.168.18.201  node1.test.com  node1  
192.168.18.202  node2.test.com  node2
[root@node1 ~]# ping node1 
[root@node1 ~]# ping node2

(2).各节点之间时间同步    

1
[root@node1 ~]# ntpdate 210.72.145.44

(3).各节点之间ssh互信   

1
2
[root@node1 ~]# ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ''   
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2.test.com

node2:

(1).各节点之间主机名互相解析

1
2
3
4
5
6
7
8
9
[root@node2 ~]# uname -n 
node2.test.com
[root@node2 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6  
192.168.18.201  node1.test.com  node1  
192.168.18.202  node2.test.com  node2
[root@node2~]# ping node1 
[root@node2 ~]# ping node2

(2).各节点之间时间同步    

1
[root@node2 ~]# ntpdate 210.72.145.44

(3).各节点之间ssh互信   

1
2
[root@node2 ~]# ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ''   
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1.test.com

3.配置yum源(EPEL源)

node1:

1
2
3
4
5
6
7
[root@node1 src]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node1 src]# rpm -ivh epel-release-5-4.noarch.rpm
warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
1:epel-release           ########################################### [100%]
[root@node1 src]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@node1 src]# yum list

node2:

1
2
3
4
5
6
7
[root@node2 src]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node2 src]# rpm -ivh epel-release-5-4.noarch.rpm
warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
1:epel-release           ########################################### [100%]
[root@node2 src]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@node2 src]# yum list

4.关闭防火墙与SELinux

node1:

1
2
3
4
5
6
7
8
9
10
11
12
[root@node1 ~]# service iptables stop
[root@node1 ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

node2:

1
2
3
4
5
6
7
8
9
10
11
12
[root@node2 ~]# service iptables stop
[root@node2 ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

5.安装corosync与pacemaker

node1:

1
2
[root@node1 ~]# yum install -y corosync*
[root@node1 ~]# yum install -y pacemaker*

node2:

1
2
[root@node2 ~]# yum install -y corosync*
[root@node2 ~]# yum install -y pacemaker*

三、Corosync 详细配置

1.提供配置文件

1
2
3
4
5
6
7
[root@node1 ~]# cd /etc/corosync/ 
[root@node1 corosync]# ll  
总用量 24  
-rw-r--r-- 1 root root  445 5月  15 05:09 corosync.conf.example  
-rw-r--r-- 1 root root 1084 5月  15 05:09 corosync.conf.example.udpu  
drwxr-xr-x 2 root root 4096 5月  15 05:09 service.d  
drwxr-xr-x 2 root root 4096 5月  15 05:09 uidgid.d

注:大家可以看到提供一个样例文件corosync.conf.example

1
[root@node1 corosync]# cp corosync.conf.example corosync.conf

2.修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@node1 corosync]# cat corosync.conf 
# Please read the corosync.conf.5 manual page  
compatibility: whitetank
totem { 
    version: 2  
    secauth: on #启动认证  
    threads: 2  
    interface {  
        ringnumber: 0  
        bindnetaddr: 192.168.18.0 #修改心跳线网段  
        mcastaddr: 226.99.10.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  
}
#启用pacemaker
service { 
    ver: 0  
    name: pacemaker  
}
aisexec { 
    user: root  
    group: root  
}

注:用 man corosync.conf 可以查看所有选项的意思。

3.生成密钥文件

注:corosync生成key文件会默认调用/dev/random随机数设备,一旦系统中断的IRQS的随机数不够用,将会产生大量的等待时间,因此,为了节约时间,我们在生成key之前讲random替换成urandom,以便节约时间。

1
2
3
4
5
6
7
[root@node1 corosync]# mv /dev/{random,random.bak}  
[root@node1 corosync]# ln -s /dev/urandom /dev/random
[root@node1 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.

4.查看生成的key文件

1
2
3
4
5
6
7
8
[root@node1 corosync]# ll 
总用量 24  
-r-------- 1 root root  128 8月  13 14:16 authkey  
-rw-r--r-- 1 root root  521 8月  13 11:11 corosync.conf  
-rw-r--r-- 1 root root  445 5月  15 05:09 corosync.conf.example  
-rw-r--r-- 1 root root 1084 5月  15 05:09 corosync.conf.example.udpu  
drwxr-xr-x 2 root root 4096 5月  15 05:09 service.d  
drwxr-xr-x 2 root root 4096 5月  15 05:09 uidgid.d

5.将key文件authkey与配置文件corosync.conf复制到node2上

1
2
3
4
5
6
7
8
9
10
11
12
[root@node1 corosync]# scp -p authkey corosync.conf node2:/etc/corosync/ 
authkey                                                                                100%  128     0.1KB/s   00:00  
corosync.conf                                                                          100%  521     0.5KB/s   00:00 
[root@node2 ~]# cd /etc/corosync/ 
[root@node2 corosync]# ll  
总用量 24  
-r-------- 1 root root  128 8月  13 14:16 authkey  
-rw-r--r-- 1 root root  521 8月  13 11:11 corosync.conf  
-rw-r--r-- 1 root root  445 5月  15 05:09 corosync.conf.example  
-rw-r--r-- 1 root root 1084 5月  15 05:09 corosync.conf.example.udpu  
drwxr-xr-x 2 root root 4096 5月  15 05:09 service.d  
drwxr-xr-x 2 root root 4096 5月  15 05:09 uidgid.d

注:corosync 到这里配置全部完成。下面我们进行启动测试!

四、Corosync 启动信息

1.启动corosync

1
2
3
4
[root@node1 ~]# ssh node2 "service corosync start" 
Starting Corosync Cluster Engine (corosync): [确定]  
[root@node1 ~]# service corosync start  
Starting Corosync Cluster Engine (corosync):               [确定]

2.查看corosync启动信息

(1).查看corosync引擎是否正常启动

1
2
3
4
5
6
[root@node1 ~]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log  
Aug 13 14:20:15 corosync [MAIN  ] Corosync Cluster Engine ('1.4.1'): started and ready to provide service.  
Aug 13 14:20:15 corosync [MAIN  ] Successfully read main configuration file'/etc/corosync/corosync.conf'.  
Aug 13 17:08:51 corosync [MAIN  ] Corosync Cluster Engine ('1.4.1'): started and ready to provide service.  
Aug 13 17:08:51 corosync [MAIN  ] Successfully read main configuration file'/etc/corosync/corosync.conf'.  
Aug 13 17:08:51 corosync [MAIN  ] Corosync Cluster Engine exiting with status 18 at main.c:1794.

(2).查看初始化成员节点通知是否正常发出

1
2
3
4
5
6
[root@node1 ~]# grep  TOTEM /var/log/cluster/corosync.log  
Aug 13 14:20:15 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).  
Aug 13 14:20:15 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).  
Aug 13 14:20:15 corosync [TOTEM ] The network interface [192.168.18.201] is now up.  
Aug 13 14:20:15 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.  
Aug 13 14:20:40 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

(3).检查启动过程中是否有错误产生

1
2
3
[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log  
Aug 13 14:20:15 corosync [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.  
Aug 13 14:20:15 corosync [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of 'Clusters from Scratch' (http://www.clusterlabs.org/docfor details on using Pacemaker with CMAN

(4).查看pacemaker是否正常启动

1
2
3
4
5
6
[root@node1 ~]# grep pcmk_startup /var/log/cluster/corosync.log  
Aug 13 14:20:15 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized  
Aug 13 14:20:15 corosync [pcmk  ] Logging: Initialized pcmk_startup  
Aug 13 14:20:15 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615  
Aug 13 14:20:15 corosync [pcmk  ] info: pcmk_startup: Service: 9  
Aug 13 14:20:15 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1.test.com

3.查看集群状态

1
2
3
4
5
6
7
8
9
[root@node1 ~]# crm_mon
Last updated: Tue Aug 13 17:41:31 2013 
Last change: Tue Aug 13 14:20:40 2013 via crmd on node1.test.com  
Stack: classic openais (with plugin)  
Current DC: node2.test.com - partition with quorum  
Version: 1.1.8-7.el6-394e906  
2 Nodes configured, 2 expected votes  
0 Resources configured.
Online: [ node1.test.com node2.test.com ]

注:大家可以看到,集群运行正常,node1与node2都在线,DC是node2节点。但是还没有配置资源,配置资源就要用到pacemaker,在下一篇博客中我们重点讲解pacemaker使用。用pacemaker来增加各种资源。^_^……

原创粉丝点击