Linux高可用集群(一):Corosync/Openais + Pacemaker 实现高可用集群

Corosync简介:

Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais,它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync,它的代码60%左右来源于Openais.Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.


通过本文您将了解到:

1.Corosync的安装,简单配置

2.通过pacemaker来管理高可用集群

3.Crm命令的使用

4.定义资源,资源组和资源策略

更多pacemaker的使用详情请访问:pacemaker官方网站http://www.clusterlabs.org/


本文采用rpm包来安装Corosync,openaispacemaker,使用RPM包,需要注意的是之间的依赖关系:pacemaker依赖于heartbeatv3,所以我们需要还需要安装heartbeatv3。

我们配置两台虚拟机来模拟安装整个过程,通过corosync定义两个资源ipaddrhttpd来说明在crm命令行里如何定义资源。

node1.a.org172.16.14.11

node2.a.org172.16.14.12

Ipaddr:172.16.14.10#提供web服务的虚拟IP


注意:

1.节点之间可以不需要使用SSH互相访问

2.主机名要和uname-n一致,并且使用FQDN格式的主机名

3.借助于/etc/hosts文件来保持节点之间的联系,而不要使用DNS


一.安装,配置corosync,pacemaker,并启动服务

(1)给节点配置静态IP,编辑/etc/hosts文件,node1为例,以下配置在node2主机上也做相应的更改。

Ifconfig eth0 172.16.14.11 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=statci ONBOOT=yes IPADDR=172.16.14.11 NETMASK=255.255.0.0 HWADDR=00:0c:29:1e:76:f5 vim /etc/hosts # 添加下面两行,域名解析 172.16.14.11 node1.a.org node1 172.16.14.12 node2.a.org node2 vim /etc/sysconfig/network # 修改network值,既主机名 HOSTNAME=node1.a.rog 在shell命令行里执行hostname命令使主机名生效 hostname node1.a.org

(2)SSH生成密钥,以实现各节点无密码SSH通讯

Node1上: ssh-key -t rsa ssh-copy-id -i .ssh/id_rsa.pub root@node2.a.org Node2上: ssh-key -t rsa ssh-copy-id -i .ssh/id_rsa.pub root@node1.a.org


(3)下载,安装相关软件

相关软件包:

cluster-glue-1.0.6-1.6.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm

heartbeat-3.0.3-2.3.el5.i386.rpm

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

ldirectord-1.0.1-1.el5.i386.rpm

libesmtp-1.0.4-5.el5.i386.rpm

openais-1.1.3-1.6.el5.i386.rpm

openaislib-1.1.3-1.6.el5.i386.rpm

pacemaker-1.0.11-1.2.el5.i386.rpm

pacemaker-libs-1.0.11-1.2.el5.i386.rpm

perl-TimeDate-1.16-5.el5.noarch.rpm

resource-agents-1.0.4-1.1.el5.i386.rpm

下载完毕后,放在同一个文件夹下,比如/tmp/corosync,使用yumlocalinstall安装

yum localinstall --nogpgcheck corosync* pacemaker-1.0.11-1.2.el5.i386.rpm cluster-glue-* resource-agents-1.0.4-1.1.el5.i386.rpm pacemaker-libs-1.0.11-1.2.el5.i386.rpm heartbeat-* libesmtp-1.0.4-5.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm -y

openais并不是不是必须的,这里我们也把它装上

rpm-ivhopenais*.rpm

复制配置文件样本

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

我们来看下它的主配置文件,在/etc/corosync/corosync.conf,内容如下

totem表明白HA多个节点之间实现心跳信息传递的相关协议简称

Bindnetaddr只需要改这个,掩码它会自动运算

Loggin

To_logfile记录到日志文件

To_syslog记录到系统日志

#默认两个log都是yes,建议关掉一个,节约i/o资源

debug

Timestamp记录时间戳

Logger_subsys{#子系统相关设置

Subsys:AMF

Debug:off#关闭就行,用不到AMF

}

service{#定义一个服务来使用pacemaker

ver:0#版本

name:pacemaker

}

aisexec{#定义corosnyc的工作用户,需要使用root用户

user:root

group:root

}

vim /etc/corosync/corosync.conf # 修改下列值 bindnetaddr 172.16.14.0 # 添加 service { ver: 0 name: pacemaker } aisexec { # 定义corosnyc的工作用户,需要使用root用户 user: root group: root } mkdir -v /var/log/cluster 创建日志文件目录 corosync-keygen # 生成corosync密钥,它取墒池里的随机数1024位,它不是一个文本文件,权限是400 ssh node2 'mkdir -v /var/log/cluster '


(3)启动服务

通过grep来检查,totem,,Enginepacemaker等信息,看是否正常,node1node2都需要

查看corosync引擎是否正常启动:

#grep-e"CorosyncClusterEngine"-e"configurationfile"/var/log/messages

Jun1419:02:08node1corosync[5103]:[MAIN]CorosyncClusterEngine('1.2.7'):startedandreadytoprovideservice.

Jun1419:02:08node1corosync[5103]:[MAIN]Successfullyreadmainconfigurationfile'/etc/corosync/corosync.conf'.

Jun1419:02:08node1corosync[5103]:[MAIN]CorosyncClusterEngineexitingwithstatus8atmain.c:1397.

Jun1419:03:49node1corosync[5120]:[MAIN]CorosyncClusterEngine('1.2.7'):startedandreadytoprovideservice.

Jun1419:03:49node1corosync[5120]:[MAIN]Successfullyreadmainconfigurationfile'/etc/corosync/corosync.conf'.

查看初始化成员节点通知是否正常发出:

#grepTOTEM/var/log/messages

Jun1419:03:49node1corosync[5120]:[TOTEM]Initializingtransport(UDP/IP).

Jun1419:03:49node1corosync[5120]:[TOTEM]Initializingtransmit/receivesecurity:libtomcryptSOBER128/SHA1HMAC(mode0).

Jun1419:03:50node1corosync[5120]:[TOTEM]Thenetworkinterface[192.168.0.5]isnowup.

Jun1419:03:50node1corosync[5120]:[TOTEM]Aprocessorjoinedorleftthemembershipandanewmembershipwasformed.

检查启动过程中是否有错误产生:

#grepERROR:/var/log/messages|grep-vunpack_resources

查看pacemaker是否正常启动:

#greppcmk_startup/var/log/messages

Jun1419:03:50node1corosync[5120]:[pcmk]info:pcmk_startup:CRM:Initialized

Jun1419:03:50node1corosync[5120]:[pcmk]Logging:Initializedpcmk_startup

Jun1419:03:50node1corosync[5120]:[pcmk]info:pcmk_startup:Maximumcorefilesizeis:4294967295

Jun1419:03:50node1corosync[5120]:[pcmk]info:pcmk_startup:Service:9

Jun1419:03:50node1corosync[5120]:[pcmk]info:pcmk_startup:Localhostname:node1.a.org

如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync

sshnode2--/etc/init.d/corosyncstart

注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动;

使用如下命令查看集群节点的启动状态:

crmstatus


为了节点资源一致,要保证节点之间的时间相差不超过1s,要求不是特别严格,但是有些资源要求很严格,必须不超过1s

corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:

#crm_verify-L

crm_verify[5202]:2011/06/14_19:10:38ERROR:unpack_resources:Resourcestart-updisabledsincenoSTONITHresourceshavebeendefined

crm_verify[5202]:2011/06/14_19:10:38ERROR:unpack_resources:EitherconfiguresomeordisableSTONITHwiththestonith-enabledoption

crm_verify[5202]:2011/06/14_19:10:38ERROR:unpack_resources:NOTE:ClusterswithshareddataneedSTONITHtoensuredataintegrity

Errorsfoundduringcheck:confignotvalid

-Vmayprovidemoredetails

我们里可以通过如下命令先禁用stonith

#crmconfigurepropertystonith-enabled=false


二.crm交互模式简介,添加IPweb服务资源

1crm交互模式简介

sehll命令行里输入crm可以进入交互式配置模式,输入help可以查看帮助信息

#node进入节点模式,可以设置节点standby或者online

#configure进制配置模式,在里面可以定义资源和资源的策略

#ra资源代理,在里面可以通过使用list命令来查看可以用到的资源代理,资源代理既服务的启动脚本。


进入ra模式下有一个classes命令,用于显示资源代理的种类,可以看到有heartbeatlsbosfstonith这些常见的类型


listlib可以显示支持的lsb脚本,这些都是/etc/init.d/下面有的启动脚本

#显示ocf

listocfheartbeat

listocfpacemaker


(2)定义ipaddr资源WebIP

#查看定义Ipaddr资源的帮助信息

metaocf:heartbeat:Ipaddr

#进入configure模式

cd

configure

#先指定资源类型:资源名字:资源代理

primitiveWebIPocf:heartbeat:IPaddrparamsip=172.16.14.10

SHOW#查看刚才建立的资源


#确保无错

commit

up#回到上一级,也可以使用cd

status#查看资源运行情况


查看我们定义的vip时候流转到node1上,已经流转过来了



三.假设节点当机,查看不同的情况,了解定义资源组,和资源粘性值

(1)模拟node1当机,我们将它的corosync服务关闭,注意如果你是从node1上启动可以直接在node1上关闭,如果是再node2上启动,需要在node2上使用sshnode1--/etc/init.d/corosyncstop来关闭


这是因为我们没有关闭quorum,这样node1关闭后,就直接使HA失效了,我们将quorum关闭,在shell命令行里输入下列命令。

crmconfigurepropertyno-quorum-policy=ignore

再次查看状态,WebIP流转到node2


我们将node1服务启动,在node2上输入

sshnode1--/etc/init.d/corosyncstart

再次查看状态,发现WebIP又流转回去了。


2)配置一个http服务资源WerbServer

首先,在两个节点上安装httpd服务

yuminstallhttpd

定义httpd资源WebServer

crmralistlsb

metalsb:httpd

mateocf:hearbeat:apache

primitiveWebServerlsb:httpd

status


发现在node2上,虽然实现了负载均衡,但是我们的目的是组成HA,不符合要求,我们需要把他们定义一个组,这样两个资源就在一个节点上启动

configure

helpgroup如何定义组

groupWebWebIPWebSever

commit

show


cd

status

但是我们使用了HA,所以web服务一定不能让它开机启动,所以

chkconfighttpdoff

测试下网页看是否在node1上,在浏览器里输入172.16.14.10


(3)定义资源的粘性值

在实际应用中,如果两台主机的性能差不多,当主节点当机后,次节点接受web资源,而当主节点恢复的时候,次节点又需要将WEB资源还给主节点,这就造成了一段时间内服务不可访问,降低了高可用性,这时候,我们就需要定义资源的粘性值

资源根据粘性值在决定当主节点会否后,是否离开当前节点。

正数:更喜欢呆在当前节点

负数:迫不及待的离开当前节点

node2上定义

crmconfigurersc_defaultsresource-stickiness=100

然后停掉node1

网页立刻到node2


我们在将node1给启动

网页依然在node2上,粘性生效















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值