corosync最初只是用来演示OpenAIS集群框架接口规范的一个应用,可以说corosync是OpenAIS的一部分,但后面的发展明显超越了官方最初的设想,越来越多的厂商尝试使用corosync作为集群解决方案。如Redhat的RHCS集群套件就是基于corosync实现。corosync只提供了message layer,而没有直接提供CRM,一般使用Pacemaker进行资源管理。
CRM中的几个基本概念
资源粘性:
资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示正无穷,inf表示正无穷。
资源类型:
primitive(native):基本资源,原始资源
group:资源组
clone:克隆资源(可同时运行在多个节点上),要先定义为primitive后才能进行clone。主要包含STONITH和集群文件系统(cluster filesystem)
master/slave:主从资源,
RA类型:
Lsb:linux表中库,一般位于/etc/rc.d/init.d/目录下的支持start|stop|status等参数的服务脚本都是lsb
ocf:Open cluster Framework,开放集群架构
heartbeat:heartbaet V1版本
stonith:专为配置stonith设备而用
一、准备工作
关于前期的准备工作,因为corosync前期不具备投票能力,因此在使用时,最好配置3个以上节点,最好为节点个数为积数个。如果想使用两个也可以,不过要先关闭不具有法定票数决策的策略。我们这里演示是两个节点的,这样可以看到有偶数个主机改怎样配置。
准备两台主机分别为:
172.16.24.6 node1.edu.com node1
172.16.24.7 node2.edu.com node2
要保持hosts文件的主机名和uname -n 显示的要一致。
[root@node1 ~]# cat /etc/hosts
172.16.24.6 node1.edu.com node1
172.16.24.7 node2.edu.com node2
[root@node1 ~]# uname -n
node1.edu.com
如果不一致可以通过以下命令修改:
[root@node1 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1.edu.com
[root@node1 ~]# vim /etc/hosts
[root@node1 ~]# cat /etc/hosts
172.16.24.6 node1.edu.com node1
172.16.24.7 node2.edu.com node2
双机要互信(让两台主机基于ssh不通过密钥相互信)
[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
第二个主机上执行相同的命令记提把主机名改成第一个主机的主机名
时间要同步
[root@node1 ~]# ssh node2.edu.com 'date';date
Sun Apr 20 10:21:25 CST 2014
Sun Apr 20 10:21:25 CST 2014
如果你的时间没有同步,请参照前面的NTP服务器配置。
二、安装corosync(两台主机都要安装)
[root@node1 corosync]# yum install corosync -y
安装所生成的文件简单介绍:
/etc/corosync 生成的配置文件目录
/etc/corosync/corosync.conf.example 样例配置文件,一会使用这个文件做为corosync的配置文件。
/etc/corosync/service.d
/etc/corosync/uidgid.d 这两个.d结尾的文件可以做为配置文件的片段进行使用
/etc/rc.d/init.d/corosync corosync的启动脚本
/etc/rc.d/init.d/corosync-notifyd corosync的通知脚本(这个不用启动)
/usr/sbin/corosync-keygen 认证文件生成命令
三、配置corosync
[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp corosync.conf.example corosync.conf
[root@node1 corosync]# vim corosync.conf
# Please read the corosync.conf.5 manual page
compatibility: whitetank 是不是兼容0.8之前的版本的
totem {定义corosycn 各个节点之间是怎么工作的
version: 2 corosync版本
secauth: on 定义安全功能是否打开
threads: 0 实现认证时的并行线程数
interface { 在哪个接口上发送心跳信息
ringnumber: 0 环号码,避免心跳信息在网络中形成环状发送
bindnetaddr: 172.16.0.0 绑定的网络的地址
mcastaddr: 226.94.24.1 多播地址
mcastport: 5405 多播端口
ttl: 1
}
}
logging {日志相关
fileline: off
to_stderr: no 定义日志文件是否发往标准错误输出
to_logfile: yes 是不是送给日志文件
to_syslog: no 是不是送给syslog
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on 是不是要记录日志时间戳
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
四、安装pacemaker
[root@node1]# yum install pacemaker -y
安装生成的文件简介:
[root@node1 ~]# rpm -ql pacemaker
/etc/rc.d/init.d/pacemaker 启动服务程序(可以独立服务启动)
/usr/lib/ocf/resource.d/pacemaker/ClusterMon
/usr/lib/ocf/resource.d/pacemaker/Dummy
/usr/lib/ocf/resource.d/pacemaker/HealthCPU
/usr/lib/ocf/resource.d/pacemaker/HealthSMART
/usr/lib/ocf/resource.d/pacemaker/Stateful
/usr/lib/ocf/resource.d/pacemaker/SysInfo
/usr/lib/ocf/resource.d/pacemaker/SystemHealth
/usr/lib/ocf/resource.d/pacemaker/controld
/usr/lib/ocf/resource.d/pacemaker/ping
/usr/lib/ocf/resource.d/pacemaker/pingd
/usr/lib/ocf/resource.d/pacemaker/remote 所生成的资源代理
如果期望corosync启动时自动启动pacemaker则还得在corosync配置文件中加一些内容,具体如下
[root@node1 ~]# vim /etc/corosync/corosync.conf
service {
ver: 0
name: pacemaker
}
aisexec{ #定义以哪个用户的身份运行
user: root
group: root
}
五 、生成密钥文件
[root@node1 ~]#corosync-keygen
(注:这里可能要生成随机数,如果你的随机数不够用,那么你就可以拼命敲键盘了,完成之后会自动生成一个authkey文件)
六、安装crmsh(pacemaker的接口叫做crmsh,在pacemaker的新版本中已经被独立出来了。因此我们要想使用得自 己手动安装)
所需安装包:crmsh-1.2.6-4.el6.x86_64.rpm
pssh-2.3.1-2.el6.x86_64.rpm
[root@node1~]# yum install crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm -y
七、把生成的密钥文件和配置文件发送到对方节点一份,配置就宣告成功了。
[root@node1~]# scp -p authkey corosync.conf node2.edu.com:/etc/corosync/
八、启动服务(两个节点都要启动)
[root@node1 ~]# service corosync start
Starting Corosync Cluster Engine (corosync): [ OK ]
使用crm命令查看当前集群运行状态
[root@node1 ~]# crm status
Last updated: Wed Apr 23 17:37:02 2014
Last change: Wed Apr 23 17:29:36 2014 via crmd on node1.edu.com
Stack: classic openais (with plugin)
Current DC: node1.edu.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
0 Resources configured
Online: [ node1.edu.com node2.edu.com ]<===这就证明你的两个节点已经运行正常了。
使用corosycn+pacemaker定义一个web服务。
一、crm命令定义服务的基本选项简介:
cib manage shadow CIBs
resource resources management 定义一个资源(只是实现资源管理)
configure CRM cluster configuration 配置CRM集群(真正添加资源则是靠它来完成)
- `primitive` (主资源)
- `monitor` (定义监控)
- `group` (定义成组资源)
- `clone` (定义成克隆资源)
- `ms`/`master` (master-slave) (定义成为主从资源)
- `location` (定义位置约束)
- `colocation` (定义排列约束)
- `order` (定义顺序约束)
node nodes management
options user preferences (选项)
history CRM cluster history (命令让令历史)
site Geo-cluster support
ra resource agents information center(定义资源代理)
status show cluster status (查看当前集群的状态)
help,? show help (help topics for list of topics)
end,cd,up go back one level
quit,bye,exit exit the program
定义资源所使用的命令
在configure目录下,有一个primitive的选项来定义资源,任何一个资源都必须由资源代理来管理,所以要定义一个primitive的资源的时候要先指定其资源代理名称等相关信息:那么primitive的使用格式是什么样的呢,可以使用如下命令查看:
[root@node2 ~]# crm
crm(live)# configure
crm(live)configure# help primitive
primitive
{[
[op op_type [
op_type :: start | stop | monitor
[root@node2 ~]# crm
crm(live)# ra
crm(live)ra# help
Available commands:
classes list classes and providers 可以查看有哪些类别
list list RA for a class (and provider) 想查看某个特定资源代理有哪些类别
meta show meta data for a RA 可以查看某个资源代理支持哪些参数
providers show providers for a RA and a class
help show help (help topics for list of topics)
end go back one level
quit exit the program
二、配置集群全局属性来禁用stonith(因为我们是两个节点配置集群服务,所以这一项必须得设置)
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:
[root@node2 ~]# crm_verify -L -V
error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
我们里可以通过如下命令先禁用stonith:
[root@node2 ~]# crm configure property stonith-enabled=false
使用如下命令查看当前的配置信息:
由于我们只有两个节点,当一个节点down机了,因为不具有法定票数,所以一个节点down机了,资源也不会自动转移到时另一个节点上,为了避免这种情况发生,我们还得定义一个选项:
[root@node2 ~]# crm configure property no-quorum-policy=ignore
三、定义资源
1、定义一个ip资源
2、定义一个web资源
3、把webserver和webip定义成为一个组资源
4、删除一个组资源
5、定义排列约束
6、定认顺序约束
7、定义位置约束
crm(live)configure# location webip_on_node2 webip 200: node2.edu.com
crm(live)configure# commit
8、定义资源默认属性
crm(live)configure# rsc_defaults resource-stickiness=100
crm(live)configure# verify
crm(live)configure# commit
9、定义监控功能
crm(live)configure# monitor webserver 20s:15s
crm(live)configure# commit
10、清除资源
好了一个完整的资源从定义到删除及定义其它的属性就完成了,剩下功能还有很多,查看自带的文档写的相当的详细。