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

一、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,定额完成或者丢失时通知应用程序。


二、pacemaker简介

        pacemaker(直译心脏起搏器)是一个群集资源管理器。它实现最大可用性群集服务亦称资源管理的节点和资源级故障检测和恢复使用您的首选集群基础设施OpenAIS的或Heaerbeat提供的消息和成员能力。

      它可以做乎任何规模的集群并配备了一个强大的依赖模型使管理员能够准确地表达群集资源之间的关系包括顺序和位置。几乎任何可以编写脚本可以管理作为心脏起搏器集群的一部分。

pacemaker 特点

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

  • 几乎支持任何冗余配置


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


  • 配置策略处理法定人数损失多台机器失败时


  • 支持应用启动/关机顺序


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


  • 支持多种模式的应用程序如主/从


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


  • 现在最主流的资源管理器


三、Corysync与Pacemaker 安装    

1、实验环境

节点服务器域名 IP地址 操作系统
软件版本
node1.gulong.com 172.16.8.5
Centos6.5

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64

node2.gulong.com 172.16.8.8 Centos6.5

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64


2.前提条件

为了配置一台Linux主机成为HA的节点通常需要做出如下的准备工作

所有节点的主机名称和对应的IP地址解析服务可以正常工作且每个节点的主机名称需要跟"uname -n“命令的结果保持一致

node1的配置

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

[root@node1 ~]# hostname node1.gulong.com
[root@node1 ~]# vim /etc/hosts
//添加如下内容
172.16.8.8  node2.gulong.com
172.16.8.5  node1.gulong.com


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

[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1为时间服务器


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

[root@node1 ~]# ssh-keygen  -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]


node2的配置

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

[root@node2 ~]# hostname node2.gulong.com
[root@node2 ~]# vim /etc/hosts
//添加如下内容
172.16.8.8  node2.gulong.com
172.16.8.5  node1.gulong.com


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

[root@node2 ~]# ntpdate 172.16.0.1 //172.16.0.1为时间服务器


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

[root@node2 ~]# ssh-keygen  -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]


3.配置yum源(EPEL源)

node1

[root@node1 ~]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node1 ~]# 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


node2

[root@node2 ~]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node2 ~]# 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 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


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:

[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 详细配置

在node1上修改配置

1.提供配置文件

[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp corosync.conf.example corosync.conf


2.修改配置文件

[root@node1 corosync]# vim corosync.conf

内容如下:

# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
        version: 2
        secauth: on   //启动认证
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 172.16.0.0  //修改心跳线网段为节点的网段
                mcastaddr: 226.77.167.71 //组播地址用于传播心跳信息
                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
}


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

wKioL1NSbzviUpNyAAC2NXmRe2w660.jpg


确保key权限为400

wKioL1NSb-3SUxBbAAFOdrw9Pn8431.jpg


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

[root@node1 corosync]# scp -p authkey corosync.conf node2.gulong.com:/etc/corosync/


5、安装crmsh

  从pacemaker 1.1.8开始crm sh 发展成一个独立项目pacemaker中不再提供因此需要自行下载安装crmsh依赖于pssh因此需要一并下载

(1)crmsh下载地址

http://pan.baidu.com/s/1o6oa2Pc

(2)pssh下载地址

http://pan.baidu.com/s/10AlYI


(3)安装这2个包

#yum -y --nogpgcheck localinstall crmsh*.rpm pssh*.rpm

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


五、启动Corosync

1.启动corosync

[root@node1 ~]# ssh node2.gulong.com "service corosync start"
[root@node1 ~]# service corosync start

wKiom1NSd47xDd26AADnkPG-hsQ773.jpg


2.查看corosync启动信息

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

wKioL1NSeFzRT_W1AAHT2TBUiUg986.jpg


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

[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log

wKioL1NSeZeiUXOvAALIWO6SzDU770.jpg

上面的错误信息表示packmaker不久之后将不再作为corosync的插件运行因此建议使用cman作为集群基础架构服务此处可安全忽略。


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

[root@node1 ~]# grep pcmk_startup /var/log/cluster/corosync.log

wKioL1NSeg_iFgqNAAIyGM484Rc513.jpg


3、查看集群状态

[root@node1 corosync]# crm status

wKiom1NSfGqAsEAIAAKjY2Pvdq8996.jpg

大家可以看到集群运行正常,node1与node2都在线 ,但是还没有配置资源 ,在下一篇博客中我们重点来讲解如何用pacemaker来增加各种资源!

你可能感兴趣的:(corosync,高可用集群)