使用RHCS实现HA集群
Clients
|
vip
|---------------------|
web1 web2
|---------------------|
|
share storage
例子:实现apache高可用
Clients
|
vip 1.1.1.100
|---------------------|
web1 web2
|---------------------|
|
share storage (nfs,模拟fence设备)
备注:
今天由于没有物理fence设备,在vmware实验环境下,只能特殊增加一个模拟fence设备,虽然一点效果都没有,但是只是为了满足一下cman集群的基本条件。
vip : 1.1.1.100
web1: node1.upl.com 1.1.1.128
web2: node2.upl.com 1.1.1.129
storage: node3.upl.com 1.1.1.130
资源:
vip
httpd
挂载共享存储(今天实验可选)
fence设备:
用于把故障节点进行重置,以保证集群里的独占资源可以被正确访问,保证集群稳定运行。
失效域:
集群中可以有很多节点,其中的一些节点可以是放在同一个失效域,用于表明这些节点是共同够造成一个HA集群,它们之间相互竞争。
n1,n2,n3
n1,n2 ---> apache ha <---组成一个失效域
n2,n3 ---> mysql ha <---组成一个失效域
1、两个节点安装rhcs集群套件。
# yum groupinstall "Clustering" "Cluster Storage"
2、在其中一个节点进行配置
# system-config-cluster &
组播:224.0.0.1 - 239.255.255.254
添加节点: node1.upl.com,node2.upl.com
添加fence : node3.upl.com
类型: global network block device
给节点连接fence
配置失效域
配置全局资源,这些资源对所有失效域都是可见,都可以被它们竞争
ip address
nfs mount
script
配置服务: 把失效域和资源进行绑定。告诉失效域里的节点到底去竞争些什么资源
绑定资源的时候,注意顺序。
同步配置文件到另外一个节点
3、准备好fence设备
在node3.upl.com上去配置
# gnbd_serv -n
4、在集群节点上启动集群
node1,node2上执行:
# service cman start <---构建集群的基本环境,把节点成员关系建立起来。
# service rgmanager start <---进行资源管理。
查看集群的运行状态:
# system-config-cluster &
Cluster Status for webha5143 @ Thu Sep 22 11:26:56 2011
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.upl.com 1 Online, Local, rgmanager
node2.upl.com 2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webserv node1.upl.com started
# clustat -i2
# cman_tool status
# ip addr 才能看到vip
其余管理操作:
手工进行资源切换
# clusvcadm -r webserv -m node2.upl.com
Trying to relocate service:webserv to node2.upl.com...Success
service:webserv is now running on node2.upl.com
验证资源已经切换过去
服务故障,资源是否会被自动切换
手工把当前获得资源的httpd服务关闭
出现故障的时候,一般会发生些什么,查看日志。
# tail -f /var/log/messages
Sep 23 13:49:30 node2 clurgmgrd: [2993]: <err> script:httpd: status of /etc/rc.d/init.d/httpd failed (returned 3)
Sep 23 13:49:30 node2 clurgmgrd[2993]: <notice> status on script "httpd" returned 1 (generic error)
Sep 23 13:49:30 node2 clurgmgrd[2993]: <notice> Stopping service service:webserv
Sep 23 13:49:41 node2 clurgmgrd[2993]: <notice> Service service:webserv is recovering
rhcs和heartbeat style 2默认都是通过调用资源的启动脚本进行简单的判断,例如:
service httpd status ,通过返回码简单判断,如果是非0,就说明有故障,就会进行资源重启或者切换。
这种判断方法:默认仅仅是否脚本简单的判断,而脚本默认也是简单地判断进程是否存活。不能有有效区分服务是否能够正常工作:如,僵尸进程就不能区分。
解决方法:自己可以扩展脚本中的status处理过程。通过访问健康页面来实现。
停止集群:
# service rgmanager stop
# service cman stop
例子2:实现MySQL高可用
Clients
|
vip 1.1.1.100
|---------------------|
mysql1 mysql2
|---------------------|
|
share storage (nfs,模拟fence设备)
资源:
vip
共享存储:nfs
mysqld
一些小步骤:
建立nfs
建立挂载目录
找一个节点手工挂载,改权限,
编写my.cnf
初始化MySQL数据文件
默认情况下,mysqld的启动脚本是跟rhcs不兼容的:
当mysql被意外停止,rhcs 就会通过 /etc/rc.d/init.d/mysqld status判断mysql状态,发现mysql已经被停止,就会尝试把所有资源让给另外的节点,但是让出去之前,必须保证资源是独占,所以它会把之前获得的所有资源都释放,对于script类型的资源,会使用 /etc/rc.d/init.d/mysqld stop的方式停止。由于mysqld原本已经意外停止,然后rhcs再去停止的时候就会返回非0的状态码,rhcs就误认为停止mysql失败,就不会把资源让出去,最后集群失效。
解决方法:
# service rgmanager stop
修改脚本mysqld
# vim /etc/rc.d/init.d/mysqld
stop(){
status mysqld
if [ $? -ne 0 ];then
return 0
fi
。。。。。
# service rgmanager start
当前集群已经启动之后,可以在线更改配置文件
# ccs_tool update /etc/cluster/cluster.conf
或者通过图形界面 send to cluster按钮