Lvs-DR+Heartbeat+ldirectord+iscsi高可用负载群集

211811122.jpg

服务器名

物理设备名

IP地址

网关

虚拟设备名

虚拟IP

主Directory

eth0

192.168.30.2

192.168.30.1

eth0:0

192.168.30.100

eth1

10.10.10.1


备Directory

eth0

192.168.30.3

192.168.30.1



eth1

10.10.10.2


Real Server1

eth0

192.168.30.4

192.168.30.1

lo:0

192.168.30.100

Real Server2

eth0

192.168.30.5

192.168.30.1

lo:0

192.168.30.100

DATA

eth0

192.168.30.6

192.168.30.1



首先请保证各个节点之间的物理连通性。试验目的:实现HA高可用性群集系统,LSA-DR直接路由进行负载均衡以及Directory和RealServer的健康探测。

一、配置Directory1:

1、配置eth0的地址

212031548.jpg

2、配置eth0:0

212058122.jpg

3、配置eth1的地址

212116597.jpg

4、重启网络

212137897.jpg

212205961.jpg

5、配置Directory1的主机名

[root@localhost~]# vim /etc/sysconfig/network

212229429.jpg

[root@localhost~]# hostname Directory1

[root@localhost~]# logout

6、配置Directory的本地DNS

[root@Directory1~]# vim /etc/hosts

212255555.jpg

7、安装Heartbeat的软件包

heartbeat-2.1.4-9.el5.i386.rpm

heartbeat-devel-2.1.4-9.el5.i386.rpm

heartbeat-gui-2.1.4-9.el5.i386.rpm

heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

libnet-1.1.4-3.el5.i386.rpm

perl-MailTools-1.77-1.el5.noarch.rpm

//下载地址:http://yunpan.cn/QbFZ4REqCjP8w


8、配置本地yum

[root@Directory1~]# mkdir /mnt/cdrom

[root@Directory1~]# mount /dev/cdrom /mnt/cdrom/

[root@Directory1~]# vim /etc/yum.repos.d/rhel-debuginfo.repo

212334963.jpg

[root@Directory1~]# cd Heartbeat  //存放Heartbeat的软件包目录

[root@Directory1Heartbeat]#yum localinstall *.rpm --nopgpcheck

212434560.jpg

212336949.jpg

9、配置Heartbeat服务

① 从模版中拷贝配置文件到Heartbeat对应的/etc/目录下

[root@Directory1Heartbeat]# cd /usr/share/doc/heartbeat-2.1.4/

[root@Directory1Heartbeat]# cp ha.cf /etc/ha.d/

[root@Directory1Heartbeat]# cp haresources /etc/ha.d/

[root@Directory1Heartbeat]# cp authkeys /etc/ha.d/

② 编辑Directory的心跳探测配置文件ha.cf

[root@Directory1Heartbeat]# vim /etc/ha.d/ha.cf

212507561.jpg

212508457.jpg

③ 配置验证密钥(位了实现双方身份验证)

[root@Directory1Heartbeat]# vim /etc/ha.d/authkeys

212526971.jpg

[root@Directory1Heartbeat]# chmod 600 /etc/ha.d/authkeys

//注意:如果不修改权限的话,启动Heartbeat就会出错。

④ 编辑Heartbeat资源管理器:(用于管理Directory上的服务,如web,ftp)

[root@Directory1Heartbeat]# vim /etc/ha.d/haresources

212553747.jpg

//192.168.30.100是虚拟IP,ipvsadm是Heartbeat控制的服务类资源。

安装ipvsadm服务:

注意在前面,使用yum安装所有的rpm时,其中一个软件包heartbeat-ldirectord.rpm会依赖与ipvsadm,所以ipvsadm也就安装了。如果无法确定是否安装,可以使用命令查看:

[root@Directory1Heartbeat]# rpm -qa |grep ipvsadm

[root@Directory1Heartbeat]# yum install ipvsadm

⑤ 配置ipvs转发表

[root@Directory1Heartbeat]# ipvsadm -A -t 192.168.30.100:80 -s rr

[root@Directory1Heartbeat]# ipvsadm -a -t 192.168.30.100:80 -r 192.168.30.3 -g

[root@Directory1Heartbeat]#ipvsadm -a -t 192.168.30.100:80 -r 192.168.30.4 –g

//编写ipvs的转发表格:

[root@Directory1 Heartbeat]# service ipvsadmsave

//保存ipvs规则

[root@Directory1 Heartbeat]# cp/etc/init.d/ipvsadm /etc/ha.d/resource.d/

//将ipvsadm的控制脚本复制到heartbeat资源管理目录,为了使heartbeat能对ipvsadm进行控制

[root@Directory1]# service heartbeat start

//启动heartbeat服务

212717467.jpg

⑩ 查看ipvsadm的状态

[root@Directory1]#ipvsadm -ln

212729653.jpg二、配置Directory2

说明:Directory2上的配置和Directory1基本一样。需要注意的地方是:

Directory2的主机名

Directory2的本地DNS

Directory2上不用配置eth0:0

1、编辑Heartbeat资源管理器:

[root@Directory2]#vim /etc/ha.d/haresources

212842139.jpg2、安装完Heartbeat后,启用Heartbeat服务:

[root@Directory2]#service heartbeat start

[root@Directory2]#ipvsadm -ln

212953756.jpg

//Directory2处于备份状态,所以ipvs中虽然配置了转发规则,但是目前并未启用。

212927546.jpg

//可以看出Directory2中并没有虚拟IP资源。

三、配置Real Server1

1、在系统控制文件sysctl.conf中添加 arp内核参数:

[root@Server1]#vim /etc/sysctl.conf

213034155.jpg

213035817.jpg

2、配置Server1中的网卡设置:

213122419.jpg

配置完lo:0的网卡后,要添加一条到192.168.30.100的路由

[root@Server1]#route add -host 192.168.30.100 dev lo:0

//为了实现使用虚拟iP来访问进行响应,需要让从RealServer1到任何地址的数据包从lo:0的接口使用虚拟ip发送。

3、安装httpd

[root@Server1]#mkdir /mnt/cdrom

[root@Server1]#mount /dev/cdrom /mnt/cdrom

[root@Server1]#rpm -ivh /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm

4、创建Server1测试页面;

[root@Server1]#cd /var/www/html

[root@Server1html]# echo “Server1”>index.html

5、启动httpd服务:

[root@Server1]#service httpd start

四、Server2配置

说明:Server2的配置和Server1的配置基本相同。

[root@Server2]#cd /var/www/html

[root@Server2html]# echo “Server2”>index.html

[root@Server1]#service httpd start

五、测试

1、当所有的Directory和Server都正常工作时,查看主Directory的ipvsadm状态:

213244971.jpg213306429.jpg

//从上图可以看出,主Directory拥有虚拟IP资源,并且控制转发策略。

2、查看备份Directory的状态:

213333265.jpg

213335122.jpg

//可以看出Directory2处于备份状态

3、访问192.168.30.100

213416252.jpg

刷新一次

213417317.jpg

至此说明,群集使用的轮询方式进行访问控制。

4、使Directory1失去主控制模式

[root@Server1]#cd /usr/lib/heartbeat/

[root@Server1heartbeat]# ./hb_standby

[root@Server1heartbeat]# ipvsadm –ln

213503792.jpg

213505838.jpg

213506342.jpg

213508508.jpg

再次访问192.168.30.100,依然可以成功访问。

六、配置动态的ipvs规则表以及Directory之间的健康探测

在前面的试验中,我们使用的手动添加Directory的ipvs规则表。这样在Directory中的ipvsadm中就好永久保存,可是有的时候后方的RealServer可能会出现宕机,如果使用的轮询机制的话,Directory会轮流的将用户的请求转发给后方的RealServer,可是某个Server此时不能工作。这样以来,效率就会大大降低。为了实现ipvs规则表的动态更新(当某个Server宕机后,Directory会主动删除该Server的规则,当它又恢复之后,主动添加这个规则),我们可以使用Heartbeat中的一个插件ldirectord服务。

1、在Directory1中安装ldirectord服务。

在安装Heartbeat时,我们安装了所有的软件包,其中heartbeat-ldirectord就是ldirectord服务的软件包。如果确定是否安装成功,可以使用命令查看:

[root@Directory1heartbeat]# rpm -qa |grep ldirectord

213538846.jpg

//出现如图说是的说明,则成功安装heartbeat-ldirectord

如果没有安装的话,进入heartbeat-ldirectord所在的目录中,使用yum安装即可

[root@Directory1~]# yum localinstall heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

① 删除手动添加的ipvsadm规则条目

[root@Directory1heartbeat]# mv /etc/sysconfig/ipvsadm /etc/syscofig/ipvsadm.old

关闭heartbeat服务:

[root@Directory1heartbeat]# service heartbeat stop

拷贝ldirectord的控制脚本到heartbeat资源控制目录中

[root@Directory1heartbeat]# cp /etc/inid.d/ldriectord /etc/ha.d/resource.d/

拷贝ldirectord的配置文件到资源控制目录中

[root@Directory1heartbeat]# cd /usr/share/doc/heartbeat-ldirectord-2.1.4/

[root@Directory1heartbeat-ldirectord-2.1.4]# cpldirectrod.cf  /etc/ha.d/resource.d/

编辑ldirectord的控制脚本:

[root@Directory1heartbeat]# vim /etc/ha.d/resource.d/ldirectord.cf

213618320.jpg

213622198.jpg

⑥修改heartbeat的资源管理文件:

[root@Directory1heartbeat]# vim /etc/ha.d/haresources

213845963.jpg

//在资源管理文件中,指明主Directory,并且定义Directory所要监控的资源。

启动heartbeat服务:

[root@Directory1heartbeat]# Service heartbeat start

创建Directory之间健康状况检测的web页面:

[root@Directory1heartbeat]# echo “Test Page”> /var/www/html/.test.html

2、在Directory2中安装ldirectord服务。

说明:Directory2中的配置和Directory1一样,这里不再赘述。

七、测试

1、访问192.168.30.100

214017381.jpg

214018755.jpg

2、设置主Directory1失效

[root@Directory1~]# cd /usr/lib/heartbeat/

[root@Directory1heartbeat]# ./hb_standby

214115516.jpg

214118401.jpg

3、后方Server1宕机

214150866.jpg

214220705.jpg

八、共享存储iscsi

为了试验的效果,将两个RealServer的页面内容设置不同,但是在实际生活中,当我们访问同一个站点时,应该得到系统的内容。为了保持用户每次访问的内容相同,最后的方法是使用共享存储。

1、在数据服务器中添加一块新的硬盘

214258830.jpg

214259633.jpg

2、在数据服务器中安装iscsi服务

[root@Data~]# mkdir /mnt/cdrom

[root@Data~]# mount /dev/cdrom /mnt/cdrom/

[root@Data~]# cd /mnt/cdrom/ClusterStorage/

[root@DataClusterStorage]# rpm -ivh perl-Config-General-2.40-1.el5.noarch.rpm

[root@DataClusterStorage]# rpm -ivh scsi-target-utils-0.0-5.20080917snap.el5.i386.rpm

3、编辑iscsi服务配置文件

[root@Data~]# vim /etc/tgt/targets.conf

214354788.jpg

选项

功能描述

<target> …… </target>

Iscsi目标输出,配置域的开始及结束

iSCSI Qualified Name(IQN)

输出iscsi限定名称,格式为:iqn.yyyy-mm.com.example:storage.tape1.sys1.xyz.

不做dns解析,相当于一个标识

Backing-store

后备存储,一般指非实际的物理盘,如lvm卷、某个分区、文件组成的块设备等

Direct-store

直接存储,与backing-sotre想对,指实际的物理磁盘,如整个硬盘等,系统中一般表示为sdb、sdc等。

Initator-address

发起者地址,指定该资源只允许某些客户机使用;格式可以是ip地址,也可以是192.168.30.0/24格式来描述一个网段

Incominguser

使用chap认证协议,有target来认证initator端,格式为“incominguser username  userpassword”

OutgoingUsername

使用chap认证协议,由initator来认证target端,格式为“outgoingusername username  userpassword”,较少使用。

4、启动服务

[root@Data~]# service tgtd start

[root@Data~]# chkconfig tgtd on

214534692.jpg

5、查看服务状态

[root@Data~]# netstat -a |grep iscsi

[root@Data~]# netstat -an |grep 3260

6、在数据服务器将新硬盘分区

[root@Data~]# fdisk /dev/sdb

214625360.jpg

7、新增 target device

使用 tgtadm 定义iscsi target 的 qualified 名字
[root @ Data ~] # tgtadm —lld iscsi —op new —mode target —tid 1 -T iqn.2013-10.Data-1
[root @ Data ~] # tgtadm —lld iscsi —op new —mode target —tid 2 -T iqn. 2013-10.Data-2

214641615.jpg

8、使用 tgtadm 将上一步新建的target device 加入分区
[root @ Data ~] # tgtadm —lld iscsi —op new —mode logicalunit —tid 1 —lun 1 -b/dev/sdb1
[root @ Data ~] # tgtadm —lld iscsi —op new —mode logicalunit —tid 2 —lun 1 -b/dev/sdb2

214729484.jpg

9、查看 target device 的内容
[root @ Data ~] # tgtadm —lld iscsi —op show —mode target

214751811.jpg

214809757.jpg

10、使用 tgtadm 允许客户端访问这两个目标逻辑卷
[root @Data ~] # tgtadm —lld iscsi —op bind —mode target —tid 1 -I 192.168.30.4

[root@Data ~] # tgtadm —lld iscsi —op bind —mode target —tid 1 -I 192.168.30.5
[root @Data ~] # tgtadm —lld iscsi —op bind —mode target —tid 2 -I 192.168.30.4

[root@Data ~] # tgtadm —lld iscsi —op bind —mode target —tid 2 -I 192.168.30.5
说明:如果允许所以客户端访问时,IP地址是“all”代替

214831952.jpg

11、使用 tgtadm 验证所有的目标逻辑卷是否定义正确
[root @Data ~] # tgtadm —lld iscsi —op show —mode target | grep Target

214849278.jpg

说明:因为上面都是通过命令添加的,所以如果系统重启就会失效。可以将它们写入开机启动脚本中,也可以写入tgtd的配置文件中

12、将以上执行的命令添加到开机启动脚本中。

[root@Data ~] #vi /etc/rc.local

#!/bin/sh
#
touch /var/lock/subsys/local
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn. 2013-10.Data-1

tgtadm--lld iscsi --op new --mode target --tid 2 -T iqn.2013-10.Data-2
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sdb2
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.30.4

tgtadm--lld iscsi --op bind --mode target --tid 1 -I 192.168.30.5
tgtadm --lld iscsi --op bind --mode target --tid 2 -I 192.168.30.4

tgtadm--lld iscsi --op bind --mode target --tid 2 -I 192.168.30.5

13、在客户端-Server1和Server2上安装Iscsi-initiator

挂载RedHat el5.4安装盘到电脑上,找到iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm

[root@ Server1] #mount /dev/cdrom  /mnt/cdrom
[root @ Server1] # rpm -ivh iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm

214913969.jpg

14、启动客户端的iscsi服务

[root@ Server1] # serveice iscsi start

[root@ Server1] # chkconfig iscsi on

214938409.jpg

15、在客户端上查看后方的iscsitarget上的逻辑卷

[root @ Server1] # iscsiadm-m discovery -t sendtargets -p 192.168.30.6

215009297.jpg

16、登录到后方的target

[root @ Server1] # iscsiadm -m node -T iqn.2013-10.Data-1-p 192.168.30.6 –l(说明:小写的L)

[root @ Server1] # iscsiadm -m node -T iqn.2013-10.Data-2-p 192.168.30.6 –l

215030667.jpg215049421.jpg

17、在客户端可以使用挂载过来的磁盘分区

因为是后方的iscsitarget上的逻辑卷,所以在客户端Server1上被识别为本地的/dev/sdb、/dev/sdc

[root @ Server1] #fdisk –l

215117142.jpg

说明:以上在Server1上的操作和Server2上的操作一样。

18、在Server1或者Server2上对这两个逻辑卷分区然后格式化

[root @ Server1] #fdisk /dev/sdb

[root @ Server1] #fdisk /dev/sdc

分区后的效果

215300951.jpg

格式化:

[root @ Server1] #mkfs.ext3 /dev/sdb1

[root @ Server1] # mkfs.ext3 /dev/sdb2

19、此时就可以将这两个分区分别挂载到web的站点中。

[root @ Server1] #mount /dev/sdb1 /var/www/html

说明:在Server2中做相同的操作,这样才能保证用户访问的内容是一用的。

第二个分区可以挂载到别的目录,存放虚拟站点目录。

[root @ Server2] #mount /dev/sdb1 /var/www/html

然后在/var/www/html目录中创建web页面。

[root @ Server1] #echo “Hello” > index.html

215145992.jpg