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

  • Post author:
  • Post category:其他



内容有点多,但是非常详细,包括出错怎么解决,都有,花了将近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


下面是系统自带包使用本地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


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


#groupadd haclient

#useradd –g haclient hacluster

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

报错:


错误解决:


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

下面都要先修改一下:


然后在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


#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 重新走一边上边的步骤,安装成功


#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里边有

首先,注意权限


# chmod 600 authkeys

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

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


# vim authkeys


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

#vimha.cf

修改:




#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


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

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

可以启动服务了

#service heartbeat start


在node1上远程启动node2

#ssh node2 ‘service heartbeat start’




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

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

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

在node1上执行

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



同样,在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


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

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


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


# serviceheartbeat start


# ssh node2 ‘serviceheartbeat start’


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


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



版权声明:本文为sweifan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。