Corosync:它属于OpenAIS(开放式应用接口规范)中的一个项目corosync一版本中本身不具备投票功能,到了corosync 2.0之后引入了votequorum子系统也具备了投票功能了,如果我们用的是1版本的,又需要用到票数做决策时那该如何是好呢;当然,在红帽上把cman + corosync结合起来用,但是早期cman跟pacemaker没法结合起来,如果想用pacemaker又想用投票功能的话,那就把cman当成corosync的插件来用,把cman当成corodync的投票功能,当然,这里结合了两个了Messaging Lader;Corosync目前有两个主流的版本:一个是2系列的,另一个是1系列的稳定版;2版本和1版本差别很大,1版本不具有投票功能,2版本之后引入了votequorum后支持投票功能了;
OpenAIS自从诞生之后,红帽就基于这个规范研发了一个高可用集群的解决方案叫cman,并为cman提供了rgmangaer作为资源管理器,并且容合conga全生命周期的管理接口形成了RHCS; Conrosync是从OpenAIS这个大项目中分支出来的一个项目,而Pacemaker是heartbeat v3版本中分裂出来专门用于提供高可用集群CRM的组件,功能十分强大, Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等,Corosync可以提供一个完整的HA功能,Corosync是未来的发展方向,在以后的新项目里,一般采用Corosync,而heartbeat_gui可以提供很好的HA管理功能,可以实现图形化的管理。 Pacemaker是一个集群管理器。它利用首选集群基础设施(OpenAIS 或heartbeat)提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。corosync+pacemaker:在配置corosync时最好具有三个以上的节点,并且节点个数为奇数个,如果使用偶数个节点的话也没关系,只是要关闭不具有法定票数的决策策略功能;实现过程: 1、双机互信需要设置好,hosts文件需要解析好,时间要同步
1.
2.
172.16.27.1 node1.tanxw.com
3.
172.16.27.2 node2.tanxw.com
4.
5.
2、安装corosync,这里我们用ansible来安装,要使用ansible在一台主机上操作多台主机得需要事先安装ansible,那这里我们就先说说安装和配置使用ansible,安装ansible也可以用yum来安装,不过需要解决依赖关系:
1.
2.
3.
安装好之后再去/etc/ansible下配置两个节点的
hostname
:
4.
5.
[corosync]
6.
node1.tanxw.com
7.
node2.tanxw.com
保存退出! 我们这里使用172.16.27.0这台主机安装ansible,操作172.16.27.1和.2这两台主机,测试一下:
1.
[root@node0 ~]
2.
node2.tanxw.com | success | rc=0 &
gt
;&
gt
;
3.
Wed Apr 23 17:24:34 CST 2014
4.
node1.tanxw.com | success | rc=0 &
gt
;&
gt
;
5.
Wed Apr 23 17:24:34 CST 2014 --测试成功,成功时显示的颜色为绿色
3、时间同步,需要事先配置好一台时间服务器,然后在crontab -e中输入:
1.
2.
*/5 * * * * /usr/sbin/ntpdte 172.16.27.0 &&
gt
; /dev/null 表示每隔5分钟同步一次
好,准备工作做好了之后就可以安装corosync了,使用ansible查看两个节点是否已经安装了corosync:
01.
[root@node0 ~]
02.
node2.tanxw.com | FAILED | rc=1 &
gt
;&
gt
;
03.
package corosync is not installed
04.
node1.tanxw.com | FAILED | rc=1 &
gt
;&
gt
;
05.
package corosync is not installed
06.
07.
[root@node0 ~]
08.
node2.tanxw.com | success | rc=0 &
gt
;&
gt
;
09.
corosync-1.4.1-17.el6.x86_64
10.
node1.tanxw.com | success | rc=0 &
gt
;&
gt
;
11.
corosync-1.4.1-17.el6.x86_64
12.
13.
14.
compatibility: whitetank
15.
totem {
16.
version: 2
17.
secauth: on
18.
threads: 0
19.
interface {
20.
ringnumber: 0
21.
bindnetaddr: 192.168.1.1
22.
mcastaddr: 226.94.1.1
23.
mcastport: 5405
24.
ttl: 1
25.
}
26.
}
27.
logging {
28.
fileline: off
29.
to_stderr: no
30.
to_logfile:
yes
31.
to_syslog: no
32.
logfile: /var/log/cluster/corosync.log
33.
debug: off
34.
timestamp: on
35.
logger_subsys {
36.
subsys: AMF
37.
debug: off
38.
}
39.
}
40.
amf {
41.
mode: disabled
42.
}
43.
service {
44.
ver: 0
45.
name: pacemaker
46.
}
47.
aisexec {
48.
user: root
49.
group: root
50.
}
这里我们改一个随机数墒池,再把配置好的corosync的配置和认证文件复制到另一个节点上去:
1.
2.
3.
4.
5.
6.
对于corosync而言,我们各节点之间通信时必须要能够实现安全认证的,要用到一个密钥文件:
7.
8.
安装pacemaker
# ansible corosync -m yum -a “name=pacemaker state=present”
我们要想使用pacemaker配置的话需要安装一个pacemaker的接口,它的这个程序的接口叫crmshell,它在新版本的pacemaker已经被独立出来了,不再是pacemaker的组成部分了,早期装上pacemaker就会自带有crmshell,因此要想用crmshell的话得去安装crmshell,而安装crmshell又依赖于pssh的相关包,因此得安装这两个组件,(这里的这两个包是自己制件的),哪个节点配置就安装在哪个节点上就可以了,也无需两个节点都安装这两个包:
1.
crmsh-1.2.6-4.el6.x86_64.rpm
2.
pssh-2.3.1-2.el6.x86_64.rpm
3.
一切都OK了之后就可以启动服务了,两个节点都需要启动:
1.
crmsh-1.2.6-4.el6.x86_64.rpm
2.
pssh-2.3.1-2.el6.x86_64.rpm
3.
在这里crm是一个很复杂的命令,可以在命令行直接输入crm进入crm的命令行模式:# crm
那在这里,我们如何去配置一个资源呢,虽然它跟heartbeat略有区别,但是概念基本上是一样的,下面我们就来配置一个web资源吧! 由于我们的corosync默认是启用stonith功能的,但是我们这里没有stonith设备,如果我们直接去配置资源的话,由于没有stonith功能,所以资源的切换并不会完成,所以要禁用stonith功能,但禁用stonoith需要我们去配置集群的全局stonith属性,全局属性是对所有的节点都生效;
01.
[root@node1 corosync]
02.
crm(live)configure
03.
usage: property [$
id
=&
lt
;set_id&
gt
;] &
lt
;option&
gt
;=&
lt
;value&
gt
;
04.
crm(live)configure
05.
crm(live)configure
06.
crm(live)configure
07.
crm(live)configure
08.
node node1.tanxw.com
09.
node node2.tanxw.com
10.
property $
id
=
"cib-bootstrap-options"
\
11.
dc
-version=
"1.1.10-14.el6-368c726"
\
12.
cluster-infrastructure=
"classic openais (with plugin)"
\
13.
expected-quorum-votes=
"2"
\
14.
stonith-enabled=
"false"
15.
crm(live)configure
查看一下节点的运行状态:
要注意:如果一个节点挂了,就不拥有法定票数了,那资源是不会切换的 集群的策略有几种: stopped :停止服务 ignore :忽略,继续运行 freeze :冻结,已经连接的请求继续响应,新的请求不再响应 suicide :自杀,将服务kill掉 这里我们定义一个web资源,那如何去定义一个资源,在定义web资源之前我们先启动测试我们的web服务是否正常,并以它们提供两个不同的页面以示区别:
再进入crm定义我们所需要的资源吧!
01.
crm(live)
02.
crm(live)configure
03.
crm(live)configure
04.
crm(live)configure
05.
crm(live)configure
06.
node node1.tanxw.com
07.
node node2.tanxw.com
08.
primitive webip ocf:heartbeat:IPaddr \
09.
params ip=
"172.16.27.88"
10.
property $
id
=
"cib-bootstrap-options"
\
11.
dc
-version=
"1.1.10-14.el6-368c726"
\
12.
cluster-infrastructure=
"classic openais (with plugin)"
\
13.
expected-quorum-votes=
"2"
\
14.
stonith-enabled=
"false"
15.
crm(live)configure
定义一个组,把之后定义的资源加到这个组里面去: # group weservice webip webserver
好了,我们在页面上测试一下,现在是运行在node1上,我们看看是不是node1上页面的内容,当然,真实的环境中我们的两个web的页面内容都应该是一样的,这里为了以示区别才设置两个不一样的页面内容的: 让node1节点离线:
好了,这种功能我们也完成了,如果让node1上线它也不会转回的,因为我们没有定义它的倾向性和故障转回,所以node1回来就回来吧,而服务依然运行在node2上; crm(live)node# online node1.tanxw.com 让node1从新上线
结束:
到这里我们算是配置和运行起来了服务了,当然,还需要别的功能我们还可以添加,比如说排列约束,倾向性定义,或者添回别的资源进来都是可以的等等都可以一一添加理来,定义我们所需要的高可用集群,后续还会更新有关这方面的知识,希望大神门多多指定,在此先谢谢你的关注了!