LVS学习笔记 6WEB高可用实验

时间:2021-07-27 01:23:06

内容有点多,但是非常详细,包括出错怎么解决,都有,花了将近3天时间,因为安装heartbeat2.1.4 出错不知道怎么解决,瞎忙了一天,没办法,退而求其次用2.1.3,源码编译安装。一步步按照我的步骤下来,应该能基本掌握heartbeat 

WEB高可用实验

rhel 6.4 32bit

    ha web

    node1,node2

节点名称必须与#uname -n 结果一致,heartbeat信息靠节点名称实现,所以要对所有节点进行本地解析,DNS服务靠不住哦,要配置/etc/hosts。

各节点ssh互信通信

集群各节点时间必须同步

 

规划:

    HA1:172.16.10.12/16

    HA2:172.16.10.13/16

    VIP:172.16.10.10/16

 

开始操作:

1,主机名

HA1:

#setup 设定IP

#hostname node1.sweifan.com

#vim /etc/sysconfig/network

修改主机名为 node1.sweifan.com

HA2:

#setup 设定IP

#hostname node2.sweifan.com

#vim /etc/sysconfig/network

修改主机名为 node2.sweifan.com

 

2,SSH互信通信:因为HA中对一个节点的操作要在另一个好的节点上完成控制

HA1:

    生成一对秘钥文件id_rsa和id_rsa.pub

# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

    复制公钥到另一台主机HA2

    # ssh-copy-id -i ~/.ssh/id_rsa.pubroot@172.16.10.13

    输入yes,输入HA1的root密码

    然后测试一下:

    # ssh 172.16.10.13 'ifconfig'

    看是否显示为HA2的IP

 

HA2:

    生成一对秘钥文件id_rsa和id_rsa.pub

# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

    复制公钥到另一台主机HA1

    # ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.10.12

    输入yes,输入HA1的root密码

    然后测试一下:

    # ssh 172.16.10.12 'ifconfig'

    看是否显示为HA1的IP

 

3,主机名称解析:因为heartbeat通信靠主机名

HA1:

    #vim /etc/hosts

    添加:

172.16.10.12  node1.sweifan.com node1

172.16.10.13  node2.sweifan.com node2

复制hosts到HA2

    # scp /etc/hosts node2:/etc/

 

4,配置时间同步:三秒检查三次结点是否在线,然后stonith,时差5s咋搞?这里我用HA1做NTP时间服务器,HA2同步HA1。

注:我的虚拟机暂时不能上网,因为选择了桥接主机所在的MicrosofitLoopback网卡,构成了一个局域网环境

HA1 NTP服务器配置:
    #vim /etc/ntp.conf

    修改三点:

1.找到# Permit time synchronization with our time source,注释掉原有的行,然后添加:(我觉得这一行是不是不需要添加?)

      restrict 172.16.0.0 mask 255.255.0.0nomodify notrap

      2.找到# Hosts on local network are less restricted.添加:

      restrict 172.16.0.0 mask 255.255.0.0nomodify notrap

      3.找到# Undisciplined Local Clock… 取消注释:

      server 127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

    # service ntpd restart

    等一会NTP服务器才起作用

H2 时间同步到HA1:

    # ntpdate 172.16.10.12

设置任务计划,5分钟同步一次,任务计划保存在/var/spool/cron/root,手动方式比较粗暴。要注意你的ntpdate在哪里,使用#which ntpdate   查看,我的在/usr/sbin/ntpdate

    #crontab -e

    */5 * * * * /sbin/ntpdate 172.16.10.12 &>/dev/null

    任务计划每执行一次就会给管理员发一封邮件,所以把送到null

 

5,安装heartbeat。 EPEL 站点下载

Redhat rpm包:redhat6 i686里边只有3个包,不知道为什么,最后选的i386

http://dl.fedoraproject.org/pub/epel/6/i386/repoview/letter_h.group.html

6个包

heartbeat - Heartbeat subsystem forHigh-Availability Linux

heartbeat-devel - Heartbeat developmentpackage

heartbeat-gui - Provides a gui interfaceto manage heartbeat clusters

heartbeat-ldirectord - Monitor daemon for maintaining highavailability resources。为ipvs高可用提供规则自动生成及后端RS健康状况检查的组件

heartbeat-pils - Provides a generalplugin and interface loading library

heartbeat-stonith - Provides an interface to Shoot The OtherNode In The Head

还要下载

perl-MailTools-1.77-1.el5.noarch

libnet-1.1.6-7.el5.i386

http://rpm.pbone.net/index.php3/stat/4/idpl/27426962/dir/centos_5/com/perl-TimeDate-1.16-1.el5.centos.noarch.rpm.html

    perl-TimeDate-1.16-1.el5.centos.noarch.rpm

http://ceph.com/rpm/el6/noarch/

    ceph-deploy-1.5.20-0.noarch.rpm

 

    下载了 以上的包但是还是安装不上,说是缺少依赖

FUCK 没办法了,只能用网络yum源,本地的没用。

发现:我的是Redhat6.4,v2版本的heartbeat相对6.4来说是很老的版本了,像epel为redhat6提供的是三个heartbeat 3的包了

所以换成heartbeat2.1.3版本,2.1.4版本没有解决方法!!!!!

 

所需软件:

Heartbeat2.1.3.tar.gz  源码包

还需要:

http://dl.fedoraproject.org/pub/epel/6/i386/repoview/letter_l.group.html  找到下边libnet包

libnet-1.1.6-7.el6.i686

libnet-devel-1.1.6-7.el6.i686

#rpm -ivh libnet-1.1.6-7.el6.i686.rpm 

LVS学习笔记 6WEB高可用实验

下面是系统自带包使用本地yum源装。我是RedhatEnterprise 6.4

使用

#yum install XXX 安装

libtool-ltdl-2.2.6-15.5.el6.i686  

libtool-2.2.6-15.5.el6.i686

glib2-devel-2.22.5-7.el6.i686)

libxml2-devel-2.7.6-8.el6_3.4.i686

bzip2-devel-1.0.5-7.el6_0.i686

Ldirector服务需要的依赖几个perl包:

perl-Socket6.i686  0.23-3.el6

perl-IO-Socket-INET6-2.56-4.el6.noarch

perl-MailTools-2.04-4.el6.noarch 

    perl-TimeDate-1.16-11.1.el6.noarch

   

    安装heartbeat:

#tar zxvf heartbeat-2.1.3.tar.gz

#cd heartbeat-2.1.3
#./ConfigureMe configure


LVS学习笔记 6WEB高可用实验


如果有错误证明有依赖包没装全,没问题则如下图

LVS学习笔记 6WEB高可用实验

#groupadd haclient
#useradd –g haclient hacluster

 

#./ConfigureMe make --enable-fatal-warnings=no

报错:

LVS学习笔记 6WEB高可用实验

错误解决:

http://blog.csdn.net/mathewsking/article/details/8477356

 

下面都要先修改一下:

LVS学习笔记 6WEB高可用实验

然后在make,否则报错

如报

pils.c:244: error: initialization from incompatible pointer type

pils.c:245: error: initialization from incompatible pointer type

gmake[2]: *** [pils.lo] 错误 1

gmake[2]: Leaving directory/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/lib/pils'

gmake[1]: *** [all-recursive] 错误 1

gmake[1]: Leaving directory `    /mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/lib'

gmake: *** [all-recursive] 错误 1

则将/解压路径/heartbeat-2.1.3/lib/pils里的Makefile中的所有-Werror删除。vim 修改了2处

如报

cc1: warnings being treated aserrors

stonith_signal.h:34:error:'stonith_signal_set_simple_handler' defined but not used

gmake[4]: *** [apcmaster.lo]错误 1

gmake[4]: Leaving directory`/root/heartbeat-2.1.3/lib/plugins/stonith'

gmake[3]: *** [all-recursive]错误 1

gmake[3]: Leavingdirectory`/root/heartbeat-2.1.3/lib/plugins/stonith'

gmake[2]: *** [all-recursive]错误 1

gmake[2]: Leavingdirectory`/root/heartbeat-2.1.3/lib/plugins'

gmake[1]: *** [all-recursive]错误 1

gmake[1]: Leavingdirectory`/root/heartbeat-2.1.3/lib'

make: *** [all-recursive] 错误 1

 

则将/解压路径/heartbeat-2.1.3/lib/plugins/stonith里的Makefile中的所有-Werror删除

 

如报:

cc1: warnings being treated as errors
client_lib.c:1850: error: 'display_orderQ'defined but not used
gmake[2]: *** [client_lib.lo]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/lib/hbclient'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory`/root/heartbeat-2.0.7/lib'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/lib/hbclient里的Makefile中的所有-Werror删除

 

如报
cc1: warnings being treated as errors
conf_lex.c:1195: 错误:‘input’定义后未使用
gmake[2]: *** [recoverymgrd-conf_lex.o]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/telecom/recoverymgrd'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory `/root/heartbeat-2.0.7/telecom'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/telecom/recoverymgrd里的Makefile中的所有-Werror删除

 

 

如报

chownhacluster/var/lib/heartbeat/cores/hacluster

chown: 无效的用户:"hacluster"

gmake[2]: [install-exec-local]错误 1 (忽略)

chmod700/var/lib/heartbeat/cores/hacluster

gmake[2]: Nothing to be donefor`install-data-am'.

gmake[2]: Leavingdirectory`/root/heartbeat-2.0.7'

gmake[1]: Leavingdirectory`/root/heartbeat-2.0.7'

则证明没添加用户及组.

 

按照上面的添加用户及组后再次

# ./ConfigureMe make--enable-fatal-warnings=no

大概6分钟

OK

LVS学习笔记 6WEB高可用实验

#make install

出错:

cp: 无法获取"/usr/sbin/ha_logger" 的文件状态(stat):没有那个文件或目录

gmake[3]: *** [install-exec-hook] 错误 1

gmake[3]: Leaving directory `/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/logd'

gmake[2]: *** [install-exec-am] 错误 2

gmake[2]: Leaving directory`/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/logd'

gmake[1]: *** [install-am] 错误 2

gmake[1]: Leaving directory`/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/logd'

make: *** [install-recursive] 错误 1

 

没办法解决,网上也搜不到,后来把压缩包考到/home/hacluster 重新走一边上边的步骤,安装成功

LVS学习笔记 6WEB高可用实验


#cp doc/{authkeys,haresources,ha.cf} /etc/ha.d/
#cp ldirectord/ldirectord.cf /etc/ha.d/

   

    OK终于TMD安装完毕

6,heartbeat配置

    三个配置文件  /etc/ha.d

    1.秘钥文件,600权限,authkeys

    2.heartbeat服务的配置 ha.cf

    3.资源管理配置文件:V2版提供 hareosurces 和CRM

       hareosurces:haresource

    这三个配置文件在/usr/share/doc/heartbeat-2.1.3/ 有样例,直接复制过来,编译安装的话,就不用复制,ha.d里边有

    首先,注意权限

LVS学习笔记 6WEB高可用实验

# chmod 600 authkeys

    先生成一列随机数待会会用到:

    #dd if=/dev/random count=1 bs=512|md5sum

LVS学习笔记 6WEB高可用实验

# vim authkeys

LVS学习笔记 6WEB高可用实验

auth 1,表示对应下边1的方法,md5后边跟的是sourt,杂质

   

    #vimha.cf

    修改:

LVS学习笔记 6WEB高可用实验


LVS学习笔记 6WEB高可用实验


LVS学习笔记 6WEB高可用实验

#vim haresources

每一块表示一个节点的信息。记得么 就是一个节点的三个资源:节点名、IP、文件系统

node1     VIP    资源代理(脚本)::参数1::参数2::参数3

主节点名 服务IP Filesystem ::挂载设备::挂载点::文件系统类型

    资源代理(脚本)在/etc/ha.d/resource.d/,和/usr/lib/heartbeat


开始配置http服务:

   (1)测试一下http服务,没问题,所有节点全部停掉,而且不能让他开机自动启动

    #service httpd stop

    #chkconfig httpd off

    这里还注意一下,都是用host-only模式,虚拟网络编辑器,把host-only网段设置到172.16.0.0/16,然后主机上修改Vmnet1 为172.16.10.1,以符合我的规划。如果桥接的话,会产生大量日志,硬盘狂转

 

    (2)

# vimharesources

     LVS学习笔记 6WEB高可用实验

(3)复制刚修改的三个文件到node2

    #scp -p authkeys haresources ha.cf node2:/etc/ha.d/     -p:保持原有属性。

    可以启动服务了

    #service heartbeat start

LVS学习笔记 6WEB高可用实验

在node1上远程启动node2

    #ssh node2 'service heartbeat start'

LVS学习笔记 6WEB高可用实验


LVS学习笔记 6WEB高可用实验

然后测试:node1故障,看node2能否启用

    当然如果我们手动dowm掉node1,实现转移需要很多时间,这里heartbeat提供了测试脚本能够实现直接转移

    #cd /usr/lib/heartbeat   有个脚本 hb_standby

    在node1上执行

# ./hb_standby,然后查看日志,如下图

LVS学习笔记 6WEB高可用实验


LVS学习笔记 6WEB高可用实验


同样,在node2 执行

    #/usr/lib/heartbeat/hb_standby  那么node2就编程备用结点,node1是主节点了,转移回去了。

    关闭时要注意,在主节点远程关掉备用结点,再在主节serviceheartbeat stop.

    现在启用另一台主机(Director),提供一个NFS文件系统,让两个结点挂载,确保 SElinux关闭

    #setenforce 0

# vim/etc/selinux/config       改为disabled

 

Director主机:

    #mkdir-pv  /home/web/htdocs

    #vim index.html

    输出目录:

    #vim /etc/exports

    查看:

    # showmount-e 172.16.10.11
LVS学习笔记 6WEB高可用实验

转到HA1,把heartbeat服务停掉,注意是有顺序的啊,在node1,远程停掉node2,再停掉node1:

    #ssh node2 '/etc/init.d/heartbeat stop'

    #service heartbeat stop

    #sshnode2 'setenforce 0'

    #setenforce0

   

    node1

新建/mnt/web ,把NFS挂载到这个文件,试验一下看能否挂载成功

    #mount 172.16.10.11:/home/web/htdocs /mnt/web

    查看一下里边是否有index.html,有说明挂载成功,卸掉

# umount /mnt/web

注意:所有的操作都不能是你手动

   

    #vim /etc/ha.d/haresources

    注意文件系统挂载要在服务之前,要不然服务启动了没有文件

LVS学习笔记 6WEB高可用实验

# scp /etc/ha.d/haresourcesnode2:/etc/ha.d/

LVS学习笔记 6WEB高可用实验

# serviceheartbeat start

LVS学习笔记 6WEB高可用实验

# ssh node2 'serviceheartbeat start'

LVS学习笔记 6WEB高可用实验


# /usr/lib/heartbeat/hb_standby   切换备用结点

LVS学习笔记 6WEB高可用实验

最后在强调一遍,关闭heartbeat时,先umount挂载的NFS,然后要在主节点对备用结点远程关闭,然后在关闭主节点