Corosync+openais+pacemakter实现高可用性集群
Corosync简介:
Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci. |
|
操作步骤:
1.基本的配置(两个节点上都要做的)。
[root@localhost ~]# vim /etc/sysconfig/network(改主机名)
[root@localhost ~]# hostname hua1.a.com
[root@localhost ~]# vim /etc/hosts(改hosts文件)
192.168.1.100 hua1.a.com hua1
192.168.1.200 hua2.a.com hua2
[root@localhost ~]# scp /etc/hosts hua1:/etc/
2.实现ssh的无密钥传输(两个节点上都要做)
[root@localhost ~]# ssh-keygen -t rsa (生成密钥)
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub hua1 (把密钥传输到另一个节点上)
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
先编辑yum端,cluster名和server不能用
[root@localhost ~]# yum localinstall *.rpm --nogpgcheck (安装所有以.rpm结尾的软件包)
4.两个节点要同步时钟
[root@localhost ~]# hwclock -s (两个节点都要做的)
[root@localhost ~]# date
2012年 12月 31日 星期一 21:11:23 CST
[root@localhost ~]# ssh hua2 "date" (查看另一端的时间)
2012年 12月 31日 星期一 21:11:29 CST
5.安装后主要的配置
[root@localhost ~]# cd /etc/corosync/ (主要的配置文件目录)
[root@localhost corosync]# ls
amf.conf.example corosync.conf.example service.d uidgid.d
[root@localhost corosync]# cp corosync.conf.example corosync.conf (把案例文件拷贝成主的配置文件)
[root@localhost corosync]# vim corosync.conf (编辑主的配置文件)
下面是一些配置的介绍
(图腾的意思 ,多个节点传递心跳时的相关协议的信息)
totem {
version: 2 版本号
secauth: off 是否代开安全认证
threads: 0 多少个现成认证 0 无限制
interface {
ringnumber: 0
bindnetaddr: 192 168.1.1 通过哪个网络地址进行通讯,可以给个主机地址(给成192.168.2.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 日志中是否记录时间
一下是openais的东西,可以不用代开
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
补充一些东西,前面只是底层的东西,因为要用pacemaker
添加如下的东西
service {
ver: 0
name: pacemaker
}
虽然用不到openais ,但是会用到一些子选项
aisexec {
user: root
group: root
}
6.[root@hua2 corosync]# mkdir /var/log/cluster (对方创建这个目录)
两边都要创建这个没有的日志目录
7.为了便面其他主机加入该集群,需要认证
[root@hua1 corosync]# corosync-keygen (产生认证的文件)
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.
8.把所有的配置拷贝到另一个节点
[root@hua1 corosync]# scp ./authkey corosync.conf hua2:/etc/corosync/
9.配置已经完成,现在需要把服务给启动了,可以再节点一上启动
[root@hua1 corosync]# service corosync start
[root@hua1 corosync]# ssh hua2 "service corosync start"
10.验证corosync引擎是否正常启动了
[root@hua1 corosync]# grep -i -e "corosync cluster engine" -e "configuration file" /var/log/messages
查看初始化成员节点通知是否发出
[root@hua1 corosync]# grep -i totem /var/log/messages
检查过程中是否有错误产生 (便面stonith的错误
[root@hua1 corosync]# grep -i error: /var/log/messages
[root@hua1 corosync]# grep -i error: /var/log/messages |grep -v unpack_resources (过滤)
检查pacemaker时候已经启动了
[root@hua1 corosync]# grep -i pcmk_startup /var/log/messages
另一端也一样
11.任何一个节点上 查看集群的成员状态
[root@hua1 corosync]# crm status
12.插入介绍:提供高可用服务
在corosync中,定义服务可以用两种借口
1.图形接口 (使用hb—gui)
2.crm (pacemaker 提供,是一个shell)
[root@hua1 corosync]# crm configure show (查看cib信息库的状态)
node hua1.a.com
node hua2.a.com
property $id="cib-bootstrap-options" \
dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
cluster-infrastructure="openais" \
expected-quorum-votes="2"
[root@hua1 corosync]# crm configure show xml (以xml的格式查看)
[root@hua1 corosync]# crm_verify -L (查看错误)
可以看到有stonith错误,在高可用的环境里面,会禁止实用任何资源
可以禁用stonith
[root@hua1 corosync]# crm
crm(live)# configure
crm(live)configure# property stonith-enabled=false
crm(live)configure# property
usage: property [$id=<set_id>] <option>=<value>
crm(live)configure# help property
crm(live)configure# commit (提交生效)
13.再次进行检查
[root@hua1 corosync]# crm_verify -L
没有错误了
系统上有专门的stonith命令
stonith -L 显示stonith所指示的类型
crm可以使用交互式模式
可以执行help
保存在cib里面,以xml的格式
14.集群的资源类型有4种
primitive 本地主资源 (只能运行在一个节点上)
group 把多个资源轨道一个组里面,便于管理
clone 需要在多个节点上同时启用的 (如ocfs2 ,stonith ,没有主次之分)
master 有主次之分,如drbd
15.配置一个资源,可以在configuration 下面进行配置
先资源名字
primitive webIP (资源名)ocf:heartbeat(代理):IPaddr params ip=192.168.1.150(资源参数)
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.1.150
crm(live)configure# commit
crm(live)configure# exit
bye
查看
crm(live)configure# show
16.安装http服务
[root@localhost Server]# yum install httpd-2.2.3-22.el5.i386.rpm
[root@localhost Server]# service httpd status (要让http是停止状态,因为要受到控制)
httpd 已停
[root@localhost Server]# echo "hua1.com" >/var/www/html/index.html (输入网页点东西用于测试)
[root@localhost Server]# echo "hua2.com" >/var/www/html/index.html
17查看状态,发现有了一个资源,并且已经运行在hua1.a.com
[root@localhost Server]# ifconfig (查看地址发现虚拟地址已经有了)
查看http的服务资源
[root@localhost Server]# crm ra list lsb
支持httpd脚本资源
查看httpd的参数
crm(live)ra# meta lsb:httpd
18.定义httpd的资源
crm(live)configure# primitive webserver lsb:httpd
crm(live)configure# show
crm(live)configure# commit
19.查看现在http运行的状态
[root@localhost Server]# service httpd status
发现httpd已经启动了,但是在node2节点上
(高级群集服务资源越来越多,会分布在不同的节点上,以尽量负载均衡)
需要约束在同一个节点上,定义成一个组
可以实用 crm(live)configure# help group 查看配置组的帮助
[root@hua2 ~]# ping hua1 (这条明命令是如果节点不在线时,可以ping一下就行了)
先在查看资源的状态,发现ip是在hua1上,而server是在hua2上,这样是不行的
20.定义组为了解决资源不在一个节点上的错误
[root@hua1 ~]# crm
crm(live)# configure
crm(live)configure# group web webip webserver
crm(live)configure# commit
21.外面的http查看,但发现当节点一上的corosync服务停的时候,资源不能转移到节点二上去,为了解决这个问题,需要改变票数。
22.去改变票数的值
[root@hua1 ~]# crm
crm(live)# configure
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# commit
crm(live)configure# exit
现在把服务停掉后,发现资源已经到节点二上去了