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

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

大纲
一、Corosync 概述
二、Corysync与Pacemaker 安装
三、Corosync 详细配置
四、Corosync 启动信息

推荐阅读:

Linux 高可用(HA)集群基本概念详解 http://www.linuxidc.com/Linux/2013-08/88522.htm

Linux 高可用(HA)集群之Heartbeat详解 http://www.linuxidc.com/Linux/2013-08/88521.htm

一、Corosync 概述    
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等控制模块。

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

(3).Corosync与OpenAIS关系


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

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).各节点之间主机名互相解析
[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互信 

[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).各节点之间主机名互相解析
[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).各节点之间时间同步   

[root@node2 ~]# ntpdate 210.72.145.44

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

[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:
[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:

[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:
[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:
[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:
12 [root@node1 ~]# yum install -y corosync* 
[root@node1 ~]# yum install -y pacemaker*

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

三、Corosync 详细配置
1.提供配置文件

[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

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

2.修改配置文件
[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,以便节约时间。
[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文件
[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上
[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

[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引擎是否正常启动
[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).查看初始化成员节点通知是否正常发出

[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).检查启动过程中是否有错误产生

[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/doc) for details on using Pacemaker with CMAN

(4).查看pacemaker是否正常启动
[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.查看集群状态
[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来增加各种资源。^_^……



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值