总体架设规划:在Rhel6上编译安装heartbeat3.0.6配置Web高可用集群
NFS Server作为文件系统,Node1和Node2可以挂载NFS输的共享目录到本地/var/www/html目录下作为网页文件提供服务
安装heartbeat前的准备工作
1.实现节点间ssh互信通信
配置每个节点能以root身份基于密钥认证的方式与其他节点通信
2.统一节点名称
各节点之间传递集群事务信息的前提是能识别对方,每一个节点识别对方是靠节点名称来实现的,即节点名称能解析成对应IP
编辑每个节点/etc/hosts文件,确保解析文件能解析集群中每一个节点名称,为了规范,每一个节点名称必须要和该节点上命令uname -n的执行结果一致,配置Node1,Node2本地hosts文件相同且能基于主机名通信
3.设置节点间时间同步
在双机高可用集群中,主节点和备份节点的系统时间也非常重要,因为节点之间的监控都是通过设定时间来实现的。
主备节点之间的系统时间相差在10秒以内是正常的,如果节点之间时间相差太大,就有可能造成HA环境的故障。
解决时间同步的办法通常有两个:
1.设置好时间服务器,两个节点通过ntpdate命令 定时与时间服务器进行时间校准;
2.配置集群中的主节点作为时间服务器,让备份节点定时去主节点进行时间校验。
这里采用方法1设置10.33.1.129时间服务器与自身保持同步
以上两行配置表示如果在/etc/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端
添加到自动任务,让两个节点每5分钟与时间服务器同步一次
[root@Node1 ~]# which ntpdate
/usr/sbin/ntpdate
[root@Node1 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate 10.33.1.129 &> /dev/null
至此准备工作完成开始进行heartbeat的安装
1.首先准备编译环境
[root@Node1 ~]# yum groupinstall "Development tools"
[root@Node1 ~]# yum groupinstall " Desktop Platform Development"
解决依赖关系
[root@Node1 ~]# yum install libgcrypt-devel
[root@Node1 ~]# yum install libxslt libxslt-devel
[root@Node1 ~]# yum install bzip2-devel
heartbeat3.x版本把安装包分成了4个部分,分别是:Cluster Glue、Resource Agents、heartbeat和pacemaker,所以要分别安装,可以从http://www.linux-ha.org/wiki/Downloads下载对应的软件包,安装顺序为glue,agents , Heartbeat,这里先不介绍pacemaker
2.创建用户和用户组 :
heartbeat需要haclient用户组和hacluster用户
[root@Node1 ~]# groupadd haclient
[root@Node1 ~]# useradd -g haclient hacluster -M -s /sbin/nologin
[root@Node1 ~]# id hacluster
uid=500(hacluster) gid=500(haclient) groups=500(haclient)
3.安装Cluster Glue
否则会出现如下错误,这个问题在对三个包进行make的时候都会出现类似的错误,所以这个解决方法在make三个包时都要用到
configure完成
make出错
解决方法:下载libtool-ltdl-devel包并安装
make clean 再重新configure(切记必须重新configure,否则仍提示这个错误)
make出错
解决方法:下载asciidoc包安装
最终make&&make install成功,至此Cluster Glue安装完成
[root@Node1 Reusable-Cluster-Components-glue--0a7add1d9996]# make
[root@Node1 Reusable-Cluster-Components-glue--0a7add1d9996]# make install
4.安装Resource Agents
[root@Node1 resource-agents-3.9.6]# ./configure LIBS='/lib/libuuid.so.1'
[root@Node1 resource-agents-3.9.6]# make
[root@Node1 resource-agents-3.9.6]# make install
5.安装 Heartbeat
[root@Node1 Heartbeat-3-0-958e11be8686]# gmake
[root@Node1 Heartbeat-3-0-958e11be8686]# make install
6.配置主节点Heartbeat
a.首先将源码目录下的模板配置文件拷贝到/etc/ha.d目录下
b.认证文件
authkeys文件用于设定heartbeat的认证方式,共有三种可用的认证方式:crc、md5和sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果heartbeat集群运行在安全的网络上,可以使用crc方式,如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高,如果是处于网络安全和系统资源之间,可以使用md5认证方式。
确保这个文件的权限是600
auth后面的数字可以自定义,但是指定的数字在下一行必须作为关键字再次出现,表示使用定义数字的认证类型,这里使用md5认证方式,设置如下:
使用随机数生成密码安全性较高
c.主配置文件
[root@Node1 ha.d]# vim ha.cf
bcast eth0 #指明在eth0接口上使用以太网广播心跳
node Node1#主节点主机名,与命令"uanme -n"执行结果一致
node Node2#备用节点主机名
d.资源文件
[root@Node1 ha.d]# vim haresources
Node1 IPaddr::10.33.1.120/16 Filesystem::10.33.1.66:/www/DQ.com::/var/www/html::nfs httpd
Node1是本例中HA集群的主节点,IPaddr为heartbeat自带的一个执行脚本,heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 10.33.1.120/16 start的操作,也就是虚拟出heartbeat对外提供服务的网络地址:子网掩码为255.255.255.0,IP为10.33.1.120;同时指定此IP使用的网络接口为eth0
接着,heartbeat将执行共享磁盘分区的挂载操作,Filesystem::10.33.1.66:/www/DQ.com::/var/www/html::nfs”相当于在命令行下执行mount操作,即“mount –t nfs 10.33.1.66:/www/DQ.com /var/www/html”,最后启动httpd服务
7.配置备份节点Node2上的Heartbeat
安装方式与在主节点Node1上的安装过程一样,这里不再重述,安装完毕,在备份节点上使用scp命令把Node1上的配置文件传输到Node2上
[root@Node2 ha.d]# scp 10.33.1.77:/etc/ha.d/ha.cf ./
[root@Node2 ha.d]# scp 10.33.1.77:/etc/ha.d/haresources ./
[root@Node2 ha.d]# scp 10.33.1.77:/etc/ha.d/authkeys ./
8.NFS Server设置
9.启动Heartbeat
错误解决如下:主备节点上执行相同操作
在Node1上重启服务,并启动Node2上的heartbeat
查看服务IP,httpd服务是否已启动
日志信息
但是有一个问题待解决,主节点上的heartbeat无法停止,手动killall之后Node2会接管资源持续提供服务
[root@Node1 rc.d]# service heartbeat stop
Aug 19 23:25:31 Node1 heartbeat: [2841]: WARN: Shutdown delayed until current resource activity finishes.
[root@Node1 rc.d]# killall heartbeat
下面对ha.cf文件的每个选项进行详细介绍
debugfile /var/log/ha-debug #用于记录heartbeat 的调试信息
logfile /var/log/ha-log #指定heartbeat的日志存放位置
logfacility local0 #如果未定义上述的日志文件,那么日志信息将送往local0(/var/log/messages),
#如果这3个日志文件都未定义,那么heartbeat 默认情况下将在/var/log下建立ha-debug和ha-log来记录相应的日志信息
keepalive 2 #发送心跳报文的间隔,默认单位为秒,指定毫秒为单位, 需要在后面跟 ms 单位,如 1500ms 即代表 1.5s
deadtime 30 #指定若备用节点没有收到主节点的心跳信号后多长时间立即接管主节点的服务资源
warntime 10 #指定心跳延迟的时间为10秒,即发出最后的心跳警告信息的间隔
#当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作
#该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的两倍
udpport 694 #设置广播/单播通信使用的端口,694为默认使用的端口号
baud 1920 #设置串行通信的波特率
serial /dev #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项
ucast eth0 IP #采用网卡eth0的udp单播来传递心跳,后面跟的IP地址应为双机对方的IP地址
mcast eth0 #采用网卡eth0的Udp组播来传递心跳,如果采用组播通讯,在这里可以设置组播通讯所使用的接口
#绑定的组播ip地址(在 224.0.0.0 - 239.255.255.255 间),通讯端口,ttl(time to live)所能经过路由的跳数
#是否允许环回(也就是本地发出的数据包时候还接收) 一般在备用节点不止一台时使用
#Bcast、ucast和mcast分别代表广播、单播和组播,是组织心跳的三种方式,任选其一即可
auto_failback #用来定义当主节点恢复后,是否将服务自动切回
stonith #stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,
#避免两个节点争用一个资源的情形发生,保证共享数据的安全性和完整性
watchdog /dev/watchdog #可选配置,通过Heartbeat来监控系统的运行状态使用该特性,需要在内核中载入"softdog"内核模块
#用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核,编译完成输入"insmod softdog"加载该模块
#grep misc /proc/devices(应为10)
#cat /proc/misc |grep watchdog(应为130)
最后生成设备文件:"mknod /dev/watchdog c 10 130" 即可使用此功能。
ping 192.168.60.1 #选择ping的节点,ping节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,或者应用服务器
#但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。如果指定了多个ping节点如ping 192.168.0.1 192.168.0.2
那么只有当能ping通所有ping节点时才认为网络是连通的,否则则认为不连通
ping_group group1 172.16.103.254 172.16.103.212
#ping_group就是同时ping多个ip,只有所有的ip都无法ping通时,ipfail才会执行切换的动作
#保证了不会是因为被ping的ip出了问题而产生误切换,ping_group不能和ping同时使用
respawn hacluster /usr/lib/heartbeat/ipfail
#该选项是可选配置,表示以hacluster这个用户身份运行/usr/lib/heartbeat/ipfail这个插件
#respawn列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是ipfail,此进程用于检测和处理网络故障,需要配合ping或者ping_group语句,其中指定的ping node来检测网络的连通性。在v2版本中,ipfail和crm有冲突,不能同时使用,如果启用crm的情况下,可以使用pingd插件代替ipfail
apiauth ipfail gid=haclient uid=hacluster
#指定对客户端api的访问控制,缺省为不可访问
#如果指定有权限访问ipfail用户和组,apiauth的语法如下
apiauth apigroupname [uid=uid1,uid2 ...] [gid=gid1,gid2 ...]
示例apiauth ping gid=haclient uid=alanr,root
在指定api访问权限时,可以指定具有访问权限的组或者用户,也可以同时指定组和用户
当进行同时指定时,只要用户是所指定的组或者用户中的其中一员即可访问api库,也可以配置api默认用户组,命令如下
apiauth default gid=haclient
当配置了默认用户组时,其他所有api授权命令失效且该用户组中的成员可以访问任何api库
如果不在ha.cf文件指定api库的访问权限,则默认的访问权限如下
service default apiauth
ipfail uid=hacluster
ccm gid=haclient
ping gid=haclient
cl_status gid=haclient
lha-snmpagent uid=root
crm uid=hacluster
crm respawn #是否开启Cluster Resource Manager(集群资源管理)功能
注意当使用crm时,默认会自动使用下列命令
apiauth stonithd uid=root
apiauth crmd uid=hacluster
apiauth cib uid=hacluster
respawn hacluster ccm
respawn hacluster cib
respawn root stonithd
respawn root lrmd
respawn hacluster crmd
关于上述命令,和ipfail插件命令的意义相同,这里不再赘述
autojoin none #该选项作用是将知道集权节点间密钥的服务器自动加入节点
autojoin三个选项各自的意义为:
none: #不使用autojoin功能
other:#ha.cf文件中列出来的节点应自动加入集群,没有列出来的就无法自动加入集群
any: #任何节点都可以自动加入集群
hopfudge 1 #设置串口的心跳信息最少的被转发次数,默认值为1
deadping 30 #设置的用来ping的节点的死亡时间,当超过该时间时则认为该节点网络无法连通
#该值设置太小将导致系统过快的认为节点死亡;设置过大,则会延误系统判定时间
realtime #允许/禁止实时执行将Heartbeat设置为高优先级,缺省为 on
msgfmt classic/netstring #网线中的信息格式,可以是 classic 或 netstring
classic #利用base64库将二进制值转换为string值在网线中传输,该选项为默认选项
netstring #在网线中直接传输二进制值,该选项由于不需要转换效率更高
use_logd yes/no #是否使用记录监控和日志的功能相似
conn_logd_time 6 #如果前一个连接失败了再次连接到记录监控器的间隔
compression #配置压缩模块,可以为 zlib 或 bz2
#可以通过查看/usr/lib/heartbeat/plugins/HBcompress/目录下的文件以确定是否有相应的库。一般在CPU空闲且网络资源紧张的情况下启用该选项
compression_threshold #配置压缩的限度
#这个值决定压缩一个信息的限度,例如:如果限度为1,那么任何大于 1KB 的消息都会被压缩,缺省为2 (KB)
下面对资源文件配置方法做具体说明:
Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:
NodeName Network < Resource-Group >
NodeName:表示主节点的主机名,必须和ha.cf文件中指定的节点名一致,后跟一个空格或tab;
Network:设定集群的IP地址、子网掩码、网络设备标识等,彼此间用“/”隔开;需要注意这里指定的IP地址就是集群对外服务的IP地址;
Resource-Group:指定需要heartbeat托管的服务,也就是这些服务可以由heartbeat来启动和关闭,必须将要托管的服务写成可以通过start/stop来启动和关闭的脚本,放到/etc/init.d/或者/etc/ha.d/resource.d/目录下,heartbeat会根据服务的名称自动去/etc/init.d或者/etc/ha.d/resource.d/目录下找到相应脚本进行启动或关闭操作。如果需要传递参数给资源脚 本,脚本和参数之间需要用两个冒号分隔,多个参数时彼此间也需要用两个冒号分隔;如果有多个资源脚本,彼此间也需要使用空格隔开;
LSB: Linux标准脚本文件(init script),通常放在/etc/init.d/目录下,LSB格式的脚本必须支持status功能,必须能接收start,stop,status,三个参数;heartbeat管理脚本一般放在/etc/ha.d/resource.d/目录下
OCF:Open Cluster Framework,默认放在/usr/lib/ocf/resource.d/heartbeat/目录下
OCF格式的脚本必须支持start,stop,monitor三个参数.其中status和monitor参数是用来监控资源的