1. 配置网络环境
1)在director1上,配置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
为了方便我们在两个节点之间相互拷贝文件时,不用输密码就可以直接拷贝。我们需要做一些配置,在node1上生成私钥,并把node1(director1)上的公钥拷贝到node2(director2)上。
#ssh-keygen -t rsa
#ssh-copy-id -i .ssh/id_rsa.pub root@node2
#ssh node2 'ifconfig'
2)在director2上,配置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
添加地址解析条目
#vim /etc/hosts
添加:192.168.0.111 node1.hanlenry.com node1
192.168.0.112 node2.hanlenry.com node2
为了方便我们在两个节点之间相互拷贝文件时,不用输密码就可以直接拷贝。此时还需要在node2上进行配置,和在node1上的配置一样,如下:
#ssh-keygen -t rsa
#ssh-copy-id -i .ssh/id_rsa.pub root@node1
#ssh node1 'ifconfig'
2. 需要的软件包:
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目录下。
安装corosync
注意:首先请同步你的系统时间(在node1和node2上)
#hwclock -s
在node1和node2上
#cd /roo/corosync
#yum localinstall *.rpm -y --nogpgcheck
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上
#scp –p authkey corosync.conf node2:/etc/corosync
在node1和node2上:
创建日志目录:
#mkdir –v /var/log/cluster
3.启动corosync
1) node1:
#service corosync start
#ssh node2 ‘service corosync start’
2) 在node1和node2上:
测试:以下几步测试,必须要做。
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
如图所示:
4.配置高可用服务
使用pacemaker专门提供定义高可用服务的命令行接口。使用crm命令
#crm configure show 查看当前CIB的配置信息
#crm_verify -L 检查当前的集群是否有故障
此处可能会有一些错误,会提示有关STONITH的错误。因为我的实验环境并没有STONITH设备,因此此处要禁掉STONISH的检测。
#crm configure property stonith-enable=false
此处解析一下crm命令。
补充:crm的使用,crm 是pacemaker专门提供定义高可用集群服务的命令行接口
你输入一个crm命令,会进入一个子shell,这个子shell有点像路由器,交换机的配置,可以进入到不同的模式。那我下面就来说明一下:
#crm 进入到crm模式,支持tab键补全功能。
crm(live)# help 显示一级子命令
crm(live)# configure 进入configure模式
crm(live)configure# help 查看configure模式下的子命令
crm(live)configure# help primitive 查看primitive的帮助信息
crm(live)configure# property stonith-enabled=false 和我们上面设置stonith的命令其实是一样的。
crm(live)configure# ra
crm(live)configure ra# help
classes list classes and providers
list list RA for a class (and provider)
meta,info show meta data for a RA
crm(live)configure ra# classes 查看当前系统所支持的资源代理的种类
heartbeat
lsb
ocf / heartbeat pacemaker
stonith
crm(live)configure ra# list lsb 查看lsb
crm(live)configure ra# list ocf pacemaker 查看ocf
crm(live)configure ra# list ocf heartbeat
crm(live)configure ra# meta ocf:heartbeat:IPaddr 查看资源的详细信息。(也可以使用info。)
配置资源
好,接下来我们就开始定义资源
使用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
如图所示:
configure#commit
3.我们也可以将上面的两个资源加入到一个组中
configure#group Web WebIP WebServer
configure#show
如图所示:
configure#commit
#crm status
如图所示:
5.测试
1.在node2上:
#ssh node1 ‘service corosync stop’
当我们在做测试时,我们把node1关闭掉后,你可能会发现node2虽然是online,但是资源不会流转到node2节点上。这是怎么回事呢?是为了避免脑裂,所采用的法定代表票数所引起的。只有当一个节点的票数超过法定票数的一半时,才能够使用。由于我们使用的是双机系统,因此当一个节点当掉之后,另一个节点也应该能够正常工作,因此需要关掉quorum
关闭quorum
#crm configure propertiry no-quorum-policy=ignore
2.定义资源的粘性
当我们的节点从新启动后,资源是否会流转回来所做的定义。也就是说用户定义的资源有多大倾向留在当前节点。
大于0:表示资源更愿意留在当前节点
小于0:表示资源迫不及待的想离开此节点
无穷大(INFNITY):只要节点在线,定义的资源就一直在此节点上
负无穷大(-INFNITY):只要有其他节点,就流转到其他节点上。
定义资源粘性:
crm configure rsc_defaults resource-stickiness=100 #表示只有当启动的节点中有大于100的,资源才会流转回去。
如图所示: