使用3个节点构建基于corosync/openais+pacemaker 架构实现Web服务,Ftp服务的高可用集群。设置:Web服务,更倾向于在node1上,Ftp服务更倾向于再node3上。
拓扑图:
有些内容我在之前的文章基于corosync/openais+pacemaker构建高可用集群中已经介绍过了,这里就不在多做赘述。我就直接开始配置了。
1. 配置网络环境
1)在node1上,配置ip和主机名。
配置ip
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:BOOTPROTO=static
添加:IPADDR=192.168.0.111
NETMASK=255.255.255.0
配置主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node1.hanlenry.com
#hostname node1.hanlenry.com
添加地址解析条目
#vim /etc/hosts
添加:192.168.0.111 node1.hanlenry.com node1
192.168.0.112 node2.hanlenry.com node2
192.168.0.151 node3.hanlenry.com node3
生成私钥
#ssh-keygen -t rsa
给node2和node3 拷贝自己的公钥。
#ssh-copy-id -i .ssh/id_rsa.pub root@node2
# ssh-copy-id -i .ssh/id_rsa.pub root@node3
将hosts文件给node2和node3 各一份
#scp /etc/hosts node2:/etc
#scp /etc/hosts node3:/etc
2)在node2上,配置ip和主机名
配置ip
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:BOOTPROTO=static
添加:IPADDR=192.168.0.112
NETMASK=255.255.255.0
配置主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node2.hanlenry.com
#hostname node2.hanlenry.com
hosts文件已经有了,这里就不需要设置了。
-------------------------------------------------------------------------
生成私钥
#ssh-keygen -t rsa
给node1和node3 拷贝自己的公钥
#ssh-copy-id -i .ssh/id_rsa.pub root@node1
#ssh-copy-id -i .ssh/id_rsa.pub root@node3
3)在node3上,配置ip和主机名
配置ip
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:BOOTPROTO=static
添加:IPADDR=192.168.0.151
NETMASK=255.255.255.0
配置主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node3.hanlenry.com
#hostname node3.hanlenry.com
hosts文件已经有了,这里也不需要设置了。
生成私钥
#ssh-keygen -t rsa
给node1和node2 拷贝自己的公钥
#ssh-copy-id -i .ssh/id_rsa.pub root@node1
#ssh-copy-id -i .ssh/id_rsa.pub root@node2
2. 安装corosync,httpd,vsftpd
注意:首先请同步你的系统时间(在node1,node2,node3上)
#hwclock -s
需要的软件包:
cluster-glue-1.0.6-1.6.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm openais-1.1.3-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm openaislib-1.1.3-1.6.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm pacemaker-1.0.11-1.2.el5.i386.rpm
pacemaker-libs-1.0.11-1.2.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
我将软件包放在/root/corosync目录下。
在node1,node2,node3上
#cd /root/corosync
#yum localinstall *.rpm -y –nogpgcheck
#yum install httpd vsftpd
禁止开机自动启动:
#chkconfig httpd off
#chkconfig vsftpd off
Node1:
#cd /etc/corosync
#cp corsync.conf.example corosync.conf
#vim !$
(没有指定的则是使用默认设置)
totem 定义多个节点之间协调心跳信息的相关协议
secauth:on 是否打开安全的sec认证,建议打开此项。
threads:0 用多少个线程进行认证,0表示不做限制
interface 在哪个网卡地址上通信
bindnetaddr:192.168.0.0 网络地址,如果你使用的主机ip,那么系统会自动把它转换成网络地址
mcastaddr 多播地址
logging 日志定义
to_stderr 是否标准错误输出
to_logfile
to_syslog
logfile: 日志目录,需要手动创建
debug:off
timestamp:on 记录时间戳
添加: 启动pacemaker
service {
ver: 0
name: pacemaker
}
当要执行ais组件时,需要以root身份
ai***ec {
user: root
group: root
}
-----------------------------------
生成authkey
#corosync-keygen
-----------------------------------
将配置文件传递到node2和node3上
#scp –p authkey corosync.conf node2:/etc/corosync
#scp –p authkey corosync.conf node3:/etc/corosync
为node2和node3创建日志目录:
#ssh node2 ‘mkdir –v /var/log/cluster’
#ssh node3 ‘mkdir –v /var/log/cluster’
3.启动corosync
1) node1:
#service corosync start
#ssh node2 ‘service corosync start’
#ssh node3 ‘service corosync start’
2) 在node1,node2,node3上:
测试:以下几步测试,必须要做。
1.产看引擎是否正常启动
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
2.查看初始化成员节点通知是否正常发出
grep TOTEM /var/log/messages
3.检查启动过程中是否有错误产生
grep ERROR: /var/log/messages | grep -v unpack_resources
4.查看pacemaker是否正常启动
grep pcmk_startup /var/log/messages
查看当前集群状态的online情况
#crm status
此时只显示3个节点都处于online,但并没有资源。于是下面我们就来添加资源。
4.配置高可用服务
使用pacemaker专门提供配置集群资源的命令行接口。使用crm命令,crm命令我在基于corosync/openais+pacemaker构建高可用集群文章中已经做过简单介绍了,这里就不再赘述了。
#crm configure show 查看当前CIB的配置信息
#crm_verify -L 检查当前的集群是否有故障
此处可能会有一些错误,会提示有关STONITH的错误。因为我们的实验环境并没有STONITH设备,因此此处要禁掉STONISH的检测。
#crm configure property stonith-enable=false
配置资源
好,接下来我们就开始定义资源
使用crm命令定义资源的格式,在configure模式下:指定资源类型,资源名字,资源代理,指定参数
1.先配置第一个资源,ip
crm(live)configure# primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.12
crm(live)configure#show
如图:
如果确认无误,就可以提交了
crm(live)configure #commit
2.配置第二个资源,服务
crm(live)configure #primitive WebServer lsb:httpd
crm(live)configure #show
如图:
3.将上面的两个资源加入到Web组中
configure#group Web WebIP WebServer
configure#show
如图:
提交:
crm(live)configure #commit
查看资源状态:# crm status
把Web组中的资源定义到更倾向于node1上
#crm configure location Web_on_node1 Web 500: node1.hanlenry.com
查看资源状态:#crm status
如图:
在node2上,把node1关掉:
#ssh node1 ‘service corosync stop’
在node2上,把node1开启,资源会流转回来。
#ssh node1 ‘service corosync start’
添加有关ftp服务的资源
1)添加ip资源
crm(live)configure# primitive FtpIP ocf:heartbeat:IPaddr params ip=192.168.0.11
2)添加vsftpd资源
crm(live)configure #primitive FtpServer lsb:vsftpd
crm(live)configure #show
将FtpIP和vsftpd资源添加到FTP组中,并定义其更愿意在node3节点上。
crm(live)configure #group Ftp FtpIP FtpServer
crm(live)configure #location Ftp_on_node3 Ftp 500: node3.hanlenry.com
crm(live)configure #show
如图所示:
查看资源状态:
#crm status
如图所示:
下面我们来看一下ip资源的流转情况:
如图所示。下图为node1节点的ip。
下图为node3节点的ip。
5.访问Web服务和Ftp服务
我就直接以图例来说明吧。
访问Web服务的:
访问Ftp服务:
6.最后的测试就交给诸位自己验证了。
注意:当你把node1和node2都停掉后,资源可能会无法流转,是因为quorum的问题。每个节点的票数为1,此时把node1,node3关闭掉,node2的法定票数为1,小于总体法定票数的一半,因此资源无法流转到node2节点上。
使用# crm configure propertiry no-quorum-policy=ignore将quorum忽略掉。
此时你再去验证:
查看资源状态:
访问Web服务:
查看ip资源情况: