2011年(7)
分类: LINUX
2011-09-15 22:01:54
前言:
1.Corosync/Openais Pacemaker
集群资源管理器,诞生自08年,在2008年,Openais分裂为Openais和Corosync(2008)。
Corosync功能:提供一种机制:让HA多个节点之间能够传递心跳,计算quorum,决定集群的运行属性
与heartbeat作比较:
在可配置性,管理接口方面有不小改进
发展前景 优于 Heartbeat
比heartbeat功能更强大
结论,使用Corosync是将来的一种趋势,构建HA尽可能采用Corosync
2.pacermaker
由heartbeat v3分裂出来的项目
提供了一个CRM的命令行接口,实现整个集群的配置监控等各种工作,不需要其他任何辅助程序。
附:提供的图形化配置工具:hb_gui
3.RPM安装包:
由于pacemaker依赖于heartbeat,RPM安装pacemaker需要安装heartbeat,编译安装则不需要
以下为需要安装的软件包:
cluster-glue 早先的Openais分裂出来的项目,被corosnyc借助来实现
pacemaker
corosync
heartbeat 仅安装,不需要启动,为pacemaker提供依赖关系
openais 非必须安装,因为corosnyc并非完全依赖于openais
被corosnyc依赖的两个RPM包:
libesmtp
per-Timedate
graphviz 图形测试依赖于该软件包
安装与配置过程:
一.架构:
以两节点的HA为例,演示安装和配置使用corosync
(另:可以自己摸索使用三节点HA)
附:与heartbeat不同,corosync不再要求必须为每个节点配置两块网卡
1.使用两个高可用节点:node1与node2,且两个节点名字与uname -n所展现出来的名字保持一致。
另外,保证两者可以通过FQDN格式主机名的方式互相访问,为了实现这一目的,我们通过编辑/etc/hosts下的文件而不是DNS来完成主机名解析,否则,DNS故障会导致集群出现问题。
附:原则上,不能将集群服务的机制构建在别的服务基础之上。
2.由于配置过程中很多情况下需要在一个节点上启动另一个节点,所以要求双方必须通过SSH且无口令的方式实现通信。
3.要求双节点之间通过某IP地址实现互相通信,但对外提供服务依然使用VIP。
IP地址规划:
vip:172.16.44.1
node1:172.16.44.41
node2:172.16.44.42
二.安装过程:
准备工作:两台干净的,未配置过任何服务的虚拟机,依照上面提到的架构配置好IP地址,网卡使用桥接的方式与物理机相连。
1、配置主机名
在node1节点下:
vim /etc/sysconfig/network
将HOSTHAME条目改为:
HOSTNAME=node1.a.org
保存退出
使用hostname node1.a.org使配置立即生效
使用命令检查以上配置是否成功:
uname -n
并在node2节点上完成同样的配置
2、使用非DNS方式实现主机名解析
vim /etc/hosts
添加以下条目:
172.16.44.41 node1.a.org
172.16.44.41 node2.a.org
在node2上完成对应配置
在node1上检查配置是否成功:
ping node2.a.org
3、ssh密钥生成
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub
在node2完成对应配置
检查,保证双方能够通过无密码的方式进行通信:
在node2上:ssh node1 'ifconfig'
在node1上:ssh node2 'ifcongig'
4:下载安装软件(这里使用基于FTP的yum源):
在node1上:
目录下载对应软件包
mirror corosync/
拷贝至node2
scp -r node2:/root
测试软件包依赖关系:
rpm -ivh corosync
使用yum进行本地安装
yum --nogpgcheck localinstall *.rpm
并在node2上完成同样的安装
三.corosync的配置和启动:
1.完成配置文件的编辑:
在node1上:
cd /etc/corosync
cp corosync.conf.example corosync.conf
# 创建corosync配置文件
vim corosync.conf
bindnetaddr:172.16.0.0
# 修改监听的地址
# 为节省服务器资源,一般以下两个选项会关掉一个
to_logfile: yes
to_syslog: yes
添加:
service {
ver:0
name:pacemaker
}
ai***ec {
user:root
group:root
}
保存退出
创建corosync生成日志所在的目录:
mkdir /var/log/cluster
生成节点通信时用到的认证密钥:
corosync-keygen
在node2上:
完成相同配置
2.尝试进行启动
在node1上:
/etc/init.d/corosync start
查看corosync引擎是否正常启动:
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
查看初始化成员节点通知是否正常发出:
grep TOTEM /var/log/messages
检查启动过程中是否有错误产生:
grep ERROR: /var/log/messages | grep -v unpack_resources
查看pacemaker是否正常启动:
grep pcmk_startup /var/log/messages
若均无问题,在node2上启动的corosync
ssh node2 -- /etc/init.d/corosync start
附:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动;
使用如下命令查看集群节点的启动状态:
crm status
Last updated: Tue Jun 14 19:07:06 2011
Stack: openais
Current DC: node1.a.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
0 Resources configured.
Online: [ node1.a.org node2.a.org ]
从上面的信息可以看出两个节点都已经正常启动,并且集群已经在正常工作状态。
3.同步两个节点的时间
注:在两个节点上的时间相差不应该超过一秒钟
分别在node1和node2上使用date查看当前时间
若相差过大,则使用hwclock命令同步时间
在node1上:
hwclock -s
ssh node2 hwclock -s
四:配置高可用服务
1.配置前准备
附:定义高可用服务的接口有两种:
1.HB_GUI或者类似RedHat那种的某些图形界面的web接口
2.使用pacemaker专门提供的命令行接口:crm
附:使用crm configure show可以用来查看当前配置信息
使用crm_verify -L 检查当前配置问题
crm_verify -L
会提示目前集群服务没有stonith设备,没有stonith服务 而启动stonith服务会导致一个集群内出现资源征用进而 导致资源损坏。所以,我们首先禁用stonith服务。
禁用stonith,使用以下命令:
crm configure property stonith-enabled=false
或者:
crm 回车进入crm命令行模式
crm(live): property stonith-enabled=false
crm(live): commit
com(live): exit
--------------------------------------------------
Resource type资源类型:
primitive 主资源 本地运行,只能运行在某一特定节点上
group 组资源 多个资源归为一个组内,统一管理
clone(OCFS2,stonith)克隆资源,需要在多个节点同时启动,没有主次之分
Master-Slave (drbd):类克隆资源 有主次之分,需要在两个节点上同时运行
---------------------------------------------------
要配置我们规划的高可用集群,现在需要两个资源:
IP地址
http服务
这两者都要用到资源代理
附:
使用 classes 显示资源代理的种类
heartbeat
lsb
ocf/heartbeat pacemaker
stonith
查看特定种类的资源代理
list lsb
list ocf heartbeat
list ocf pacemaker
info;meta
查看一个资源的详细说明信息
e.g.
meta ocf:heartbeat:IPaddr
2.配置两个资源:IP和web服务
附:使用configure命令
格式为:
资源类型 资源名字 资源代理 params 参数
1)定义node1的IP地址资源:
crm命令行下:
configure
primitive WebIP ocf:heartbeat:IPaddr params ip=172.16.44.1
commit
cd
status 查看资源的启动位置
若显示:
eth0:0
其下有
inet addr:172.16.44.1
之类字段,则配置成功
2)配置web资源
安装httpd
yum -y install httpd
查看是否有httpd
crm ra list lsb是否有httpd
配置过程:
configure
primitive WebServer lsb:httpd
commit
配置一个组:
group Web WebIP WebServer
commit
分别在两个节点上停止httpd自动启动
chkocnfig httpd off
创建两个网页文件进行验证:
node1:
echo "node1.a.org">/var/www/html/index.html
node2:
echo "node2.a.org">/var/www/html/index.html
然后可以在物理机上访问集群服务的网页,以检查配置是否成功。
关掉node1的corosync服务
ssh node1 '/etc/init.d/corosync stop'
此时再访问网页会没有响应
使用crm status检查错误
会提示:
Current DC:node2.a.org - partition WITHOUT quorum
表示没有法定票数,集群不能运行
但2节点集群是特殊集群,即便没有票数也应该运行起来
更改no-quorum策略
ssh node1 '/etc/init.d/corosync start'
crm configure property no-quorum-policy=ignore
附:策略类型
ignore 忽略
freeze 冻结
stop 停止
suicide 牺牲
定义资源粘性,以便停止无意义的资源流转:
crm configure rsc_defaults resource-stickiness=100
停止服务然后在启动服务,查看资源流转情况:
ssh node1 /etc/init.d/corosync stop
ssh node1 /etc/init.d/corosync start
在物理机上访问集群网页,若节点未流转回原节点,则配置成功。
附:
从迁移资源到决定在已降级集群中停止哪些资源的整个过程是通过修改分数来实现的。分数按每个资源来计算,资源分数为负的节点都无法运行该资源。在计算出资源分数后,集群选择分数最高的节点。INFINITY(无穷大)目前定义为 1,000,000。加减无穷大遵循以下3个基本规则:
1)任何值 + 无穷大 = 无穷大
2)任何值 - 无穷大 = -无穷大
3)无穷大 - 无穷大 = -无穷大
定义资源约束时,也可以指定每个约束的分数。分数表示指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过使用不同的分数为既定资源创建更多位置约束,可以指定资源要故障转移至的目标节点的顺序。