Lvs-DR+Heartbeat+ldirectord+iscsi高可用负载群集
服务器名 |
物理设备名 |
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的地址
2、配置eth0:0
3、配置eth1的地址
4、重启网络
5、配置Directory1的主机名
[root@localhost~]# vim /etc/sysconfig/network
[root@localhost~]# hostname Directory1
[root@localhost~]# logout
6、配置Directory的本地DNS
[root@Directory1~]# vim /etc/hosts
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
[root@Directory1~]# cd Heartbeat //存放Heartbeat的软件包目录
[root@Directory1Heartbeat]#yum localinstall *.rpm --nopgpcheck
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
③ 配置验证密钥(位了实现双方身份验证)
[root@Directory1Heartbeat]# vim /etc/ha.d/authkeys
[root@Directory1Heartbeat]# chmod 600 /etc/ha.d/authkeys
//注意:如果不修改权限的话,启动Heartbeat就会出错。
④ 编辑Heartbeat资源管理器:(用于管理Directory上的服务,如web,ftp)
[root@Directory1Heartbeat]# vim /etc/ha.d/haresources
//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服务
⑩ 查看ipvsadm的状态
[root@Directory1]#ipvsadm -ln
说明:Directory2上的配置和Directory1基本一样。需要注意的地方是:
①Directory2的主机名
②Directory2的本地DNS
③Directory2上不用配置eth0:0
1、编辑Heartbeat资源管理器:
[root@Directory2]#vim /etc/ha.d/haresources
2、安装完Heartbeat后,启用Heartbeat服务:
[root@Directory2]#service heartbeat start
[root@Directory2]#ipvsadm -ln
//Directory2处于备份状态,所以ipvs中虽然配置了转发规则,但是目前并未启用。
//可以看出Directory2中并没有虚拟IP资源。
三、配置Real Server1
1、在系统控制文件sysctl.conf中添加 arp内核参数:
[root@Server1]#vim /etc/sysctl.conf
2、配置Server1中的网卡设置:
配置完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状态:
//从上图可以看出,主Directory拥有虚拟IP资源,并且控制转发策略。
2、查看备份Directory的状态:
//可以看出Directory2处于备份状态
3、访问192.168.30.100
刷新一次
至此说明,群集使用的轮询方式进行访问控制。
4、使Directory1失去主控制模式
[root@Server1]#cd /usr/lib/heartbeat/
[root@Server1heartbeat]# ./hb_standby
[root@Server1heartbeat]# ipvsadm –ln
再次访问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
//出现如图说是的说明,则成功安装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/
[[email protected]]# cpldirectrod.cf /etc/ha.d/resource.d/
⑤编辑ldirectord的控制脚本:
[root@Directory1heartbeat]# vim /etc/ha.d/resource.d/ldirectord.cf
⑥修改heartbeat的资源管理文件:
[root@Directory1heartbeat]# vim /etc/ha.d/haresources
//在资源管理文件中,指明主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
2、设置主Directory1失效
[root@Directory1~]# cd /usr/lib/heartbeat/
[root@Directory1heartbeat]# ./hb_standby
3、后方Server1宕机
八、共享存储iscsi
为了试验的效果,将两个RealServer的页面内容设置不同,但是在实际生活中,当我们访问同一个站点时,应该得到系统的内容。为了保持用户每次访问的内容相同,最后的方法是使用共享存储。
1、在数据服务器中添加一块新的硬盘
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
选项 |
功能描述 |
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
5、查看服务状态
[root@Data~]# netstat -a |grep iscsi
[root@Data~]# netstat -an |grep 3260
6、在数据服务器将新硬盘分区
[root@Data~]# fdisk /dev/sdb
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
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
9、查看 target device 的内容
[root @ Data ~] # tgtadm —lld iscsi —op show —mode target
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”代替。
11、使用 tgtadm 验证所有的目标逻辑卷是否定义正确
[root @Data ~] # tgtadm —lld iscsi —op show —mode target | grep Target
说明:因为上面都是通过命令添加的,所以如果系统重启就会失效。可以将它们写入开机启动脚本中,也可以写入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
14、启动客户端的iscsi服务
[root@ Server1] # serveice iscsi start
[root@ Server1] # chkconfig iscsi on
15、在客户端上查看后方的iscsitarget上的逻辑卷
[root @ Server1] # iscsiadm-m discovery -t sendtargets -p 192.168.30.6
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
17、在客户端可以使用挂载过来的磁盘分区
因为是后方的iscsitarget上的逻辑卷,所以在客户端Server1上被识别为本地的/dev/sdb、/dev/sdc
[root @ Server1] #fdisk –l
说明:以上在Server1上的操作和Server2上的操作一样。
18、在Server1或者Server2上对这两个逻辑卷分区然后格式化
[root @ Server1] #fdisk /dev/sdb
[root @ Server1] #fdisk /dev/sdc
分区后的效果
格式化:
[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