一、基础知识:

1 简介:

    Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。

2 Corosync执行高可用应用程序的通信组系统,它有以下特征:

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

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

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

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

3 Pacemaker的关键特性:

3.1 监测并恢复节点和服务级别的故障。

3.2 存储无关,不需要共享存储。(而drbd在里就有了用武之地。)

3.3 资源无关,任何能用脚本控制的资源都可作为集群服务来管理

二、案例

1 拓扑图:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第1张图片

2 案例说明:

    通过Corosync+openais+pacemaker来实现高可用性群集,通过drbd来实现存储的高可用性;

3 配置步骤:

3.1 配置corosync:

配置node1

配置网卡参数:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第2张图片

wps_clip_p_w_picpath-25919

保持时间一致性【从主板上读取时间】:

# hwclock -s

编辑主机名:

# vim /etc/sysconfig/network

wps_clip_p_w_picpath-15679

# hostname node1.a.com

编辑hosts文件:

# vim /etc/hosts

wps_clip_p_w_picpath-4073

配置node2

配置网卡参数:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第3张图片

wps_clip_p_w_picpath-12388

保持时间一致性:

# hwclock -s

编辑主机名:

# vim /etc/sysconfig/network

wps_clip_p_w_picpath-3363

# hostname node2.a.com

编辑hosts文件:

# vim /etc/hosts

wps_clip_p_w_picpath-7556

在node1和node2中导入相应的安装包;

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第4张图片

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第5张图片

配置node1节点的corosync

挂载光盘:

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

使用yum安装相应的软件包:

# yum localinstall -y corosync/*.rpm --nogpgcheck

通过样例文件,生成corosync的配置文件:

# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

编辑corosync的配置文件:

# vim /etc/corosync/corosync.conf

心跳探测;

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第6张图片

通过corosync启用pacemaker:

wps_clip_p_w_picpath-3188

添加openis的一些选项:

wps_clip_p_w_picpath-2662

创建corosync日志文件:

# mkdir /var/log/cluster

群集验证:

# corosync-keygen

wps_clip_p_w_picpath-698

启动corosync服务:

# service corosync start

wps_clip_p_w_picpath-9394

查看群集节点状态:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第7张图片

配置node2的corosync:

挂载光盘:

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

使用yum安装相应的软件包:

# yum localinstall -y corosync/*.rpm --nogpgcheck

通过样例文件,生成corosync的配置文件:

# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

编辑corosync的配置文件:

# vim /etc/corosync/corosync.conf

心跳探测;

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第8张图片

通过corosync启用pacemaker:

wps_clip_p_w_picpath-16980

添加openis的一些选项:

wps_clip_p_w_picpath-10689

创建corosync日志文件:

# mkdir /var/log/cluster

群集验证,与node1的authkey必须相同:

# scp node1:/etc/corosync/authkey /etc/corosync/

启动corosync服务:

# service corosync start

wps_clip_p_w_picpath-23576

查看群集节点状态

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第9张图片

3.2 配置node1的资源:只需要在一个节点上配置即可;

安装httpd服务:

# rpm -ivh /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm

配置资源:

[root@node1 ~]# crm

crm(live)# configure

禁用stonith,解决stonith的错误:

crm(live)configure# property stonith-enabled=false

定义群集ip资源:

crm(live)configure# primitive webip ocf:heartbeat:IPaddr  params ip=192.168.2.100

定义群集服务资源:

crm(live)configure# primitive webserver lsb:httpd

做资源约束,将多个资源加入到同一个组中:

crm(live)configure# group web webip webserver

关闭票数功能:

crm(live)configure# property no-quorum-policy=ignore

查看资源

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第10张图片

提交编辑的资源:

crm(live)configure# commit

配置node2的资源,node2的资源不需要配置:

安装httpd服务:

# rpm -ivh /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm

查看node2的资源:

[root@node2 ~]# crm

crm(live)# configure

crm(live)configure# show

node node1.a.com

node node2.a.com

primitive webip ocf:heartbeat:IPaddr \

params ip="192.168.2.100"

primitive webserver lsb:httpd

group web webip webserver

property $id="cib-bootstrap-options" \

dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \

cluster-infrastructure="openais" \

expected-quorum-votes="2" \

stonith-enabled="false" \

no-quorum-policy="ignore"

crm(live)configure# exit

3.3 配置DRBD

在node1中新建一个分区:

# fdisk /dev/sda

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第11张图片

wps_clip_p_w_picpath-25854

wps_clip_p_w_picpath-22027

使内核从新读取分区表:

# partprobe /dev/sda

在node2中新建一个分区:

# fdisk /dev/sda

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第12张图片

wps_clip_p_w_picpath-10340

wps_clip_p_w_picpath-7113

使内核从新读取分区表:

# partprobe /dev/sda

在node1和node2上安装drbd服务:

导入drbd相关的软件包:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第13张图片

安装drbd服务:

# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm

安装drbd的内核模块:

# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

在node1编辑drbd主配置文件:

# vim /etc/drbd.conf

读取样例文件内容:底行模式

:r /usr/share/doc/drbd83-8.3.8/drbd.conf

wps_clip_p_w_picpath-8336

编辑通用资源:

# vim /etc/drbd.d/global_common.conf

添加下面的代码:

global {

        usage-count yes;

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;

        startup {

                wfc-timeout  120;                degr-wfc-timeout 120;

         }           disk {

                  on-io-error detach;                  fencing resource-only;

          }  

        net {

                cram-hmac-alg "sha1";                shared-secret  "mydrbdlab";

         }  

        syncer {

                  rate  100M;

         }  

}

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第14张图片

编辑详细资源:

# vim /etc/drbd.d/web.res

resource  web {

        on node1.a.com {

        device   /dev/drbd0;

        disk    /dev/sda5;

        address  192.168.2.10:7789;

        meta-disk       internal;

        }  

        on node2.a.com {

        device   /dev/drbd0;

        disk    /dev/sda5;

        address  192.168.2.20:7789;

        meta-disk       internal;

        }  

}

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第15张图片

初始化node2的drbd:

# drbdadm create-md web

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第16张图片

在node2编辑drbd主配置文件:

# vim /etc/drbd.conf

读取样例文件内容:底行模式

:r /usr/share/doc/drbd83-8.3.8/drbd.conf

wps_clip_p_w_picpath-817

编辑通用资源:

# vim /etc/drbd.d/global_common.conf

添加下面的代码:

global {

        usage-count yes;

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;

        startup {

                wfc-timeout  120;                degr-wfc-timeout 120;

         }           disk {

                  on-io-error detach;                  fencing resource-only;

          }  

        net {

                cram-hmac-alg "sha1";                shared-secret  "mydrbdlab";

         }  

        syncer {

                  rate  100M;

         }  

}

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第17张图片

编辑详细资源:

# vim /etc/drbd.d/web.res

resource  web {

        on node1.a.com {

        device   /dev/drbd0;

        disk    /dev/sda5;

        address  192.168.2.10:7789;

        meta-disk       internal;

        } 

        on node2.a.com {

        device   /dev/drbd0;

        disk    /dev/sda5;

        address  192.168.2.20:7789;

        meta-disk       internal;

        }  

}

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第18张图片

初始化node2的drbd:

# drbdadm create-md web

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第19张图片

共同启动node1和node2的drbd服务:

wps_clip_p_w_picpath-1910

wps_clip_p_w_picpath-19176

查看drbd设备状态:

wps_clip_p_w_picpath-4194

wps_clip_p_w_picpath-25327

将node1的设备调整为主设备:

# drbdadm   -- --overwrite-data-of-peer primary web

此时node1的设备和node2的设备将处于同步状态;

在node1上格式化分区/dev/drbd0:

# mkfs -t ext3  -L drbdweb  /dev/drbd0

将分区/dev/drbd0挂在到httpd主站点上:

# mount /dev/drbd0 /var/www/html/

创建httpd站点页面:

# echo "hello" >/var/www/html/index.html

4 测试:

4.1 在node1为主站点时:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第20张图片

查看网卡信息:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第21张图片

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第22张图片

查看节点上分区的状态:

wps_clip_p_w_picpath-8804

wps_clip_p_w_picpath-16183

4.2 当关闭node1的corosync服务后:

wps_clip_p_w_picpath-18811

手工将node2的/dev/drbd0调整为主设备:

wps_clip_p_w_picpath-1446

wps_clip_p_w_picpath-2224

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第23张图片

查看网卡信息:

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第24张图片

HA高可用性群集--(Corosync+openais+pacemaker+web+drbd)_第25张图片