高可用集群--Corosync/Openais 的配置
下面以一实例来说明基于Corosync/Openais的高可用集群服务的配置。
环境
2台服务器提供LNMP服务,1台NFS服务器为mysql数据库提供共享存储。
集群节点:1、主机名:aydon1,IP:172.16.13.1,;2、主机名:aydon2,IP:172.16.13.8。
NFS服务器:IP,172.16.13.6。
提供web服务的地址:172.16.13.2
提供mysql服务的地址:172.16.13.3
以上服务器的操作系统均为RHEL5.4 。
一、配置NFS服务器
这里将/mydata作为mysql数据的存放目录,因此创建目录/mydata.
#mkdir /mydata
添加用户和组
Mysql服务是以mysql用户的身份运行的,所以/mydata目录的属主、属主应该为mysql,
#groupadd -r -g 110 mysql
#useradd -r -u 110 -g mysql mysql
#chown mysql.mysql /mydata
(注:NFS是以用户id来识别用户的,所以得保证三台服务器上的mysql用户的uid是相同的)
#vim /etc/exports 添加如下内容:
/mydata 172.16.13.1(rw,no_root_squash) 172.16.13.6(rw,no_root_squash)
#service nfs start --开启NFS服务
NFS服务配置完成,可以挂载进行测试。
二、配置HA节点
1)
在/etc/hosts文件中添加如下内容
172.16.13.1 aydon1
172.16.13.6 aydon2
(注:必须保证所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致)
2)
设定两个节点可以基于密钥进行ssh通信
Node1:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@aydon2
Node2:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@aydon1
3)
安装Corosync及相关软件包
需要下载如下软件包
cluster-glue、cluster-glue-libs、heartbeat、openaislib、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs。下载地址:
http://clusterlabs.org/rpm/。
这里将所需的软件包都下载至/root/rpm目录中。
使用如下命令安装:
#cd /root/rpm
#yum -y --nogpgcheck localinstall *.rpm
4)
在aydon1上配置corosync
(以下配置均在aydon1上进行)
#cd /etc/corosync
#cp corosync.conf.example corosync.conf
编辑corosync.conf ,修改为如下内容:
compatibility: whitetank
totem {
version: 2
secauth: off --开启或关闭安全认证
threads: 0
interface {
ringnumber: 0
bindnetaddr: 172.16.0.0 --网卡所在网络的网络地址
mcastaddr: 229.88.1.8 --指定多播地址
mcastport: 5405
}
}
logging {
fileline: off
to_stderr: no --是否向屏幕上输出错误信息
to_logfile: yes --是否将日志保存在文件中
to_syslog: no --是否将日志信息记录到系统日志中
logfile: /var/log/cluster/corosync.log --保存日志的文件
debug: off
timestamp: off
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service {
ver: 0
name: pacemaker
use_mgmtd: yes
}
aisexec {
user: root
group: root
}
5)
生成节点间通信时用到的认证密钥文件
#corosync-keygen
将corosync.conf和authkey复制至aydon2
#scp -p corosync.conf authkey aydon2:/etc/corosync
6)
在两节点上创建corosync日志所在目录
#mkdir /var/log/cluster
#ssh aydon2 'mkdir /var/log/cluster'
7)
启动corosync
#service corosync start
8)
查看corosync引擎是否正常启动
:
# grep -e "Corosync Cluster Engine"
-e "configuration file" /var/log/cluster/corosync.log
Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Corosync Cluster Engine exiting with status 8 at main.c:1397.
Jun 14 19:03:49 node1 corosync[5120]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jun 14 19:03:49 node1 corosync[5120]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
9)
查看初始化成员节点通知是否正常发出
:
# grep TOTEM /var/log/cluster/corosync.log
Jun 14 19:03:49 node1 corosync[5120]: [TOTEM ] Initializing transport (UDP/IP).
Jun 14 19:03:49 node1 corosync[5120]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jun 14 19:03:50 node1 corosync[5120]: [TOTEM ] The network interface [192.168.0.5] is now up.
Jun 14 19:03:50 node1 corosync[5120]: [TOTEM ] A processor joined or left the membership and a new membership was formed.
10)
检查启动过程中是否有错误产生:
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
11)
查看pacemaker是否正常启动
:
# grep pcmk_startup /var/log/cluster/corosync.log
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: CRM: Initialized
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] Logging: Initialized pcmk_startup
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Service: 9
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.org
如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
# ssh node2 -- /etc/init.d/corosync start
注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动。
#crm status --查看集群节点的启动状态。
12)
配置集群工作属性
①
禁用stonith设备
corosync默认启用了stonith,而当前集群并没有stonith设备,所以禁用stonith设备。
#crm configure property stonith-enabled=false
②
定义默认资源粘性
因为每一次资源的流动都可能造成服务在短时间内不可用,所以应避免资源的流动。
#crm configure rsc_defaults resource-stickiness=100
③
定义no-quorum-policy策略
对于两节点的集群,当有一台服务下线时,剩余的quorum是绝对不可能多余quorum总数的1/2的,而no-quorum-policy默认是stop-停止集群服务,这样一来两节点的高可用集群是没有意义的,因此将设定no-quorum-policy=ignore
#crm configure property no-quorum-policy=ignore
④
定义资源
对于当前集群服务来讲,资源有:提供web服务的ip,nginx服务,提供mysql服务的ip,mysql服务,共享存储/mydata。
#crm configure primitive webip ocf:heartbeat:IPaddr ip=172.16.13.2 nic=eth0 cidr_netmask=16
#crm configure primitive nginx lsb:nginx
#crm configure primitive myip ocf:heartbeat:IPaddr ip=172.16.13.3 nic=eth0 cidr_natmask=16
#crm configure primitive mysqld lsb:mysqld
#crm configure primitive mynfs ocf:heartbeat:Filesystem params device="172.16.13.6:/mydata" directory="/mydata" fstype="nfs" op start timeout=60 op stop timeout=60
⑤
定义colocation约束
资源的排列约束:web服务:webip一定得和nginx存在于同一服务器上;mysql服务:myip,mysqld,mynfs一定得存在于同一台服务器上。因此做如下定义:
#crm configure colocation inf: web webip nginx
#crm configure colocation mysql inf: myip mysqld mynfs
⑥
定义order约束
资源的应用次序:对于web服务,应该webip先生效,然后是nginx;对于mysql服务,mynfs先应用,其次是myip,最后是mysqld,因此做以下定义:
#crm configure order nginx-after-webip mandatory: webip nginx
#crm configure order mysqd-after-mynfs mandatory: mynfs myip mysqld
到此,集群服务配置完毕。接下来可以使用如下命令来查看各节点的工作状态:
#crm status
注:将某项服务定义为集群服务,那么该服务就不应该开机启动。