天天看点

高可用集群--Corosync/Openais 的配置

高可用集群--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 。

这里将/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服务配置完成,可以挂载进行测试。

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-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

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

注:将某项服务定义为集群服务,那么该服务就不应该开机启动。

继续阅读