说明:
如图:
1 本实验有两个接点node1.a.rog node2.a.org 相对应的ip分别是
192.168.0.21 192.168.0.22
2 集群的服务时apache 的httpd服务
3 提供web服务的地址为192.168.0.100
配置过程:
Vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.21
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=00:0c:29:a2:fa:bb
2 所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:#############分别在两节点上进行 |
192.168.0.21 node1.a.org node1
192.168.0.22 node2.a.org node2
3 配置主机名,使其与使用" uname –n" 显示的一致,分别在各节点执行如下的命令,使其生效 Hostname node1.a.org
|
Vim /etc/ sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node1.a.com
4 设定两节点间可以基于密钥进行ssh通信,并且可以不用密码以root身份互相访问 |
Node1:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
Node2:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
cluster-glue-1.0.6-1.6.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm openais-1.1.3-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm openaislib-1.1.3-1.6.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm pacemaker-1.0.11-1.2.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm
pacemaker-libs-1.0.11-1.2.el5.i386.rpm
Cd /root/cluster
yum -y --nogpgcheck localinstall *.rpm
配置corosync 。以下命令在node1.a.rog上执行 |
cd /etc/corosync
cp corosync.conf.example corosync.conf
vim corosync.conf
# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem { ##定义多个node节点之间实现心跳信息传递的相关协议详细信息
version: 2
secauth: off ##是否打开安全认证
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.0.0 ##通过哪个网段进行通信
mcastaddr: 226.94.1.1 ##多播地址
mcastport: 5405 ##多播端口
}
}
logging {
fileline: off
to_stderr: no ##是否将错误信息发送到标准错误输出
to_logfile: yes ##是否写入日志文件
to_syslog: yes ##是否写到系统日志进程上去
logfile: /var/log/cluster/corosync.log ##需要手动去建立这个路径
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service {
ver:0
name:pacemaker ##表明我们要启动pacemaker
}
aisexec {
user:root ##定义启动的身份和组
group:root
}
corosync-keygen ###在/etc/corosync下生成authkey文件
scp -p corosync authkey node2:/etc/corosync/
mkdir /var/log/cluster ##创建corosync生成的日志文件所在的目录
ssh node2 'mkdir /var/log/cluster' ##在node1上使用ssl为node2创建目录
/etc/init.d/corosync start
在node1上验证corosync配置的正确性,如下所示,证明我们corosync的配置过程没有问题 |
在node1上查看corsync引擎是否正常启动:
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
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 ]
8 配置集群的工作属性: 由于corosync默认启用了stonith,而当前集群没有相应的stonith设备,所以这个默认配置目前上不可用,我们可以通过一个检查语法或者逻辑错误的命令来验证,如出现以下信息说明有错误,因此我们就要禁用stonith来避免这种错误
|
# crm_verify –L
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity Errors found during check: config not valid -V may provide more details
# crm configure property stonith-enabled=false
# commit #########提交会立即生效
# crm configure show
node node1.a.org
node node2.a.org
property $id="cib-bootstrap-options"
dc-version="1.0.111554a83db0d3c3e546cfd3aaff6af1184f79ee87"
cluster-infrastructure="openais"
expected-quorum-votes="2"
stonith-enabled="false
# crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.100 ##为web集群创建一个ip地址源,能够在通过集群提供web服务时使用
# crm status ##通过这个命令可以看出ip资源已经在node1.a.org上启动
============
Last updated: Tue Jun 14 19:31:05 2011
Stack: openais
Current DC: node1.a.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============
Online: [ node1.a.org node2.a.org ]
WebIP (ocf::heartbeat:IPaddr): Started node1.a.org ####ip资源已在node1上启用 ,当然也可以在node1 上执行ifconfig命令,eth0的别名的ip
在node2上停止node1的corosync服务会 |
# ssh node1 ‘/etc/init.d/corosync stop’
# crm status 再次查看集群的工作状态
============
Last updated: Tue Jun 14 19:37:23 2011
Stack: openais
Current DC: node2.a.org - partition WITHOUT quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============
Online: [ node2.a.org ]
OFFLINE: [ node1.a.org ]
通过上面的信息我们发现node1.a.org已经离线,但是Webip的资源却没有在node2.a.org上启动,因为这时候的集群状态是“without quorum",没有了quorum,node2就不能接管资源,集群就不能正常运行了。我们可以同过下面的命令忽略quorum不能满足集群状态的检查 |
# crm configure property no-quorum-policy=ignore
# crm configure rsc_defaults resource-stickiness=100#############
将Webip资源的黏性值设为100,这样可以使当node1出现故障时,资源流转到node2上,
当node1又恢复正常时,资源不会再流回到node1,避免了资源在流动过程中造成的无法正常访问,
保证了集群的高可用性
10 结合上面已经配置好的ip地址资源,将此集群配置成为一个active/passive模型的web(httpd)服务集群 |
1)在每个节点上安装httpd,并在每个节点上添加网页文件 |
node1:
Yum install -y httpd
echo "<h1>Node1.a.org</h1>" > /var/www/html/index.html
node2:
echo "<h1>Node2.a.org</h1>" > /var/www/html/index.html
chkconfig httpd off #######开机不会自动启动httpd
# crm configure primitive Webserver lsb:httpd
# crm configure commit #######提交生效
# crm configure show ############ 显示资源的信息状态
# crm status ##########可以看出新建的资源在node2上启动,这是集群尽量负载均衡资源的
3)把这两个资源在同一接点上运行有两种方法: 1把这两种资源配置组 2将两个资源定义成约束(排列,次序) 下面我们将这两种资源定义成组
|
#crm configure group Web WebIP Webserver #############其中Web是组名
# crm configure commit
# crm configure show
这样就将WebIP Webserver 添加到组Web中了。使他们在同一个接点上运行了。
这时,我们再查看下资源的运行 状态
# crm status
可以看出这两个起源都在node1上运行了
11 验证集群的工作是否正常,在浏览器中输入http://192.168.0.100
|
在node2上关闭node1的corosync,再次在浏览器中输入ip查看显示的网页信息 |
这样就我们就简单实现web服务的高可用了·····