实现网络节点的高可用性

案例一:简单的本地http服务

通过heartbeat实现服务器的高可用性及负载均衡本地的两个web节点的相互之间使用heartbeat架构高可用性配置如下:

实验拓扑图:

p_w_picpath

设备环境

我使用vmware完成的实验

dr1:eth0 vmnet 1 区域

eth1 vmnet 3 区域

dr2:eth0 vmnet 1 区域

eth1 vmnet 3 区域

dr1上的网卡配置

p_w_picpath

p_w_picpath

dr2上的网卡配置

p_w_picpath 

p_w_picpath

修改dr1与dr2的主机名及hosts解析文件,如下

dr1 :

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

HOSTNAME=a.abc.com

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

5 192.168.20.100 a.abc.com

6 192.168.20.99 b.abc.com

使用“hostname HOSTNAME”

dr2上的配置:

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

HOSTNAME=b.abc.com

#退出重新登录即可

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

5 192.168.20.100 a.abc.com

6 192.168.20.99 b.abc.com

在两个节点上安装heartbeat软件包。制作本地 yum

[root@b ~]# yum install -y httpd

[root@a ~]# yum localinstall heartbeat-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 --nogpgchek

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

[root@b heartbeat-2.1.4]# cp  authkeys  ha.cf   haresources   /etc/ha.d/

Vim /etc/ha.cf

95 bcast eth1  #指定heartbeat的心跳探测接口

214 node a.abc.com

215 node b.abc.com

#生成随机的MD5加密密钥

[root@b ha.d]# dd if=/dev/random bs=512 count=1 |openssl md5

0+1 records in

0+1 records out

128 bytes (128 B) copied, 0.000363242 seconds, 352 kB/s

ecd37c45ac679040bab37eeceb801837

[root@b ha.d]# vim authkeys

27 auth 3

28 3 md5 ecd37c45ac679040bab37eeceb801837

[root@b ha.d]# vim haresources

45 a.abc.com 192.168.20.101/24/eth0/192.168.20.255 httpd #指定对httpd服务进行控制

将服务的启动脚本拷贝到资源库中,以备heartbeat服务进行控制

cp /etc/init.d/httpd resource.d/

同时在dr1与dr2上执行以上相同配置

注意:保持密钥一致即可

此时测试服务可以正常访问

案例二:高可用性与负载均衡群集的实现

通过heartbeat服务控制ipvsadm实现对http服务的一种高可用性

实验拓扑图

p_w_picpath 

设备环境

使用heartbeat实现高可用性的分发器(director)。使用LVS-DR模型搭建负载均衡群集

我使用vmware模拟软件完成整个服务器群集的搭建

使用的5台设备。这些设备进均为linux操作系统

dr1:eth0 vmnet 1 区域

eth1 vmnet 3 区域

dr2:eth0 vmnet 1 区域

eth1 vmnet 3 区域

web1:eth0 vmnet 1 区域

   eth1 vmnet 4 区域

web2:eth0 vmnet 1 区域

  eth1 vmnet 4 区域

存储:eth0 vmnet 4 区域

实验配置如下:

对案例一中的配置进行修改即可

[root@b ha.d]# vim haresources

45 a.abc.com 192.168.20.101/24/eth0/192.168.20.255  ipvsadm #对ipvsadm服务进行控制

将ipvsadm的控制脚本放入资源库中

cp /etc/init.d/ipvsadm   /etc/ha.d/resource.d/

添加一些规则

ipvsadm –A –t  192.168.20.101:80 –s rr

ipvsadm –a –t 192.168.20.101:80 –r 192.168.20.200 -g

ipvsadm –a –t 192.168.20.101:80 –r 192.168.20.201 -g

service ipvsadm save   #并执行保存配置的命令

在dr1与dr2上分别配置如上的命令

启用heartbeat服务。此时可以对web1及web2上的服务提供高可用性服务。案例三:实现完整的后方服务器监控高可用性与负载均衡

使用的环境依旧是案例二中的拓扑环境及服务器设备。

添加及修改配置如下

清空ipvsadm中添加的规则并保存。

关闭heartbeat 服务

安装heartbeat-ldirectord 控制软件

[root@b ~]# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

[root@b ~]# rpm -ql heartbeat-ldirectord

/etc/ha.d/resource.d/ldirectord  #该服务的控制脚本已经默认情况下安装到资源目录下

/etc/init.d/ldirectord

/etc/logrotate.d/ldirectord

/usr/sbin/ldirectord

/usr/share/doc/heartbeat-ldirectord-2.1.4

/usr/share/doc/heartbeat-ldirectord-2.1.4/COPYING

/usr/share/doc/heartbeat-ldirectord-2.1.4/README

/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf   #提供一些配置参数的文件

/usr/share/man/man8/ldirectord.8.gz

[root@b ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf  /etc/ha.d/

[root@b ha.d]# vim ldirectord.cf  #修改配置文件中的有用行

12 checktimeout=3 #检测超时

13 checkinterval=1 #队后方服务器的探测间隔

15 autoreload=yes #修改配置文件后自动重新载入配置

21 quiescent=no #启用静默方式

24 virtual=192.168.20.101:80 #数据目标ip

25 real=192.168.20.200:80 gate #转发规则

26 real=192.168.20.201:80 gate #转发规则

29 service=http #探测使用的服务

30 request=".test.html" #探测页面

31 receive="ok!!!" #探测页面的内容

33 scheduler=rr #调度算法

36 protocol=tcp #使用的协议

修改haresources文件

[root@b ha.d]# vim haresources

45 a.abc.com 192.168.20.101 ldirectord::ldirectord.cf

Echo ‘ok!!!’ >/var/www/html/.test.html #创建探测页面

此时在dr1上保持与dr2上的配置相同

使用浏览器访问“http://192.168.20.101”

[root@a ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.20.101:80 rr

-> 192.168.20.201:80 Route 1 0 1

-> 192.168.20.200:80 Route 1 0 0

此时不在需要使用到“ipvsadm”添加规则。ldirectord 服务已经可以自动添加规则

此时的转发表会在后方的探测页面出现问题时自动将相应的路由表项删除

创建一个共享的服务器 FC-SAN

存储服务器上的配置如下:

安装scsi单元工具

[root@target Server]# yum install scsi-target-utils

[root@target Server]# rpm -ql scsi-target-utils

/etc/rc.d/init.d/tgtd #服务进程的控制脚本

/usr/sbin/tgt-admin #逻辑单元的操作工具(scsi target 管理工具)

/usr/sbin/tgtd #服务进程的名字

新建一块存储的硬盘或分区均可

[root@target ~]# fdisk /dev/sda

Command (m for help): n

Command action

e extended

p primary partition (1-4)

e

Command (m for help): n

First cylinder (1420-2610, default 1420):

Using default value 1420

Last cylinder or +size or +sizeM or +sizeK (1420-2610, default 2610): +200M

创建一个新的分区用于fc-san的存储

Command (m for help): p

Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/sda1 * 1 13 104391 83 Linux

/dev/sda2 14 1288 10241437+ 83 Linux

/dev/sda3 1289 1419 1052257+ 82 Linux swap / Solaris

/dev/sda4 1420 2610 9566707+ 5 Extended

/dev/sda5 1420 1444 200781 83 Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.

The kernel still uses the old table.

The new table will be used at the next reboot.

Syncing disks.

此时系统依旧使用老的磁盘。在远端服务器上进行格式化。

[root@target ~]# partprobe /dev/sda

修改服务器的主机名

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

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=target.abc.com

[root@target ~]# service tgtd start

Starting SCSI target daemon: [ OK ]

[root@target ~]# chkconfig tgtd on

[root@target ~]# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2012-10.com.abc.target:disk

[root@target ~]# tgtadm --ld iscsi --op new --mode=logicalunit --tid=1 --lun=1 --backing-store /dev/sda5

[root@target ~]# tgtadm --lld iscsi --op show --mode target

Target 1: iqn.2012-10.com.abc.target:disk

System information:

Driver: iscsi

State: ready

I_T nexus information:

LUN information:

LUN: 0

Type: controller

SCSI ID: deadbeaf1:0

SCSI SN: beaf10

Size: 0 MB

Online: Yes

Removable media: No

Backing store: No backing store

LUN: 1

Type: disk

SCSI ID: deadbeaf1:1

SCSI SN: beaf11

Size: 206 MB

Online: Yes

Removable media: No

Backing store: /dev/sda5

Account information:

ACL information:

添加访问控制规则

[root@target ~]# tgtadm --lld iscsi --op bind --mode=target --tid=1 --initiator-address=192.168.40.0/24

[root@target ~]# tgtadm --lld iscsi --op show --mode target

……………………………………………

Account information:

ACL information:

192.168.40.0/24

以上的配置为临时型配置。永久性配置方案可以以上配置添加到linux的开机脚本中。或使用如下方案解决。

服务的配置文件

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

6 <target iqn.2012-10.com.abc.target:disk>

7 # List of files to export as LUNs

8 backing-store /dev/sda5

10 # Authentication :

11 # if no "incominguser" is specified, it is not used

12 #incominguser backup secretpass12

14 # Access control :

15 # defaults to ALL if no "initiator-address" is specified

16 initiator-address 192.168.1.0/24

17 </target>

在web1服务器上的配置

[root@web1 ~]# cd /mnt/cdrom/Server/

[root@web1 Server]# rpm -ivh iscsi-initiator-utils-6.2.0.871-0.10.el5.i386.rpm

[root@web1 Server]# vim /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2012-10.com.a.web1

[root@web1 Server]# service iscsi start

iscsid 已停

Turning off network shutdown. Starting iSCSI daemon: [确定]

                                                                 [确定]

设置 iSCSI 目标:iscsiadm: No records found!           [确定]

做探测发现

[root@web1 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.40.100

192.168.40.100:3260,1 iqn.2012-10.com.abc.target:disk

[root@web1 ~]# iscsiadm --mode node --targetname iqn.2012-10.com.abc.target:disk --portal 192.168.40.100:3260 --login

Logging in to [iface: default, target: iqn.2012-10.com.abc.target:disk, portal: 192.168.40.100,3260]

Login to [iface: default, target: iqn.2012-10.com.abc.target:disk, portal: 192.168.40.100,3260]: successful

[root@web1 ~]# fdisk -l

Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/sda1 * 1 13 104391 83 Linux

/dev/sda2 14 1288 10241437+ 83 Linux

/dev/sda3 1289 1419 1052257+ 82 Linux swap / Solaris

Disk /dev/sdb: 205 MB, 205599744 bytes

7 heads, 57 sectors/track, 1006 cylinders

Units = cylinders of 399 * 512 = 204288 bytes

Disk /dev/sdb doesn't contain a valid partition table

对新生成的磁盘文件进行分区格式化

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

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4):

Value out of range.

Partition number (1-4): 1

First cylinder (1-1006, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1006, default 1006):

Using default value 1006

Command (m for help): p

Disk /dev/sdb: 205 MB, 205599744 bytes

7 heads, 57 sectors/track, 1006 cylinders

Units = cylinders of 399 * 512 = 204288 bytes

Device Boot Start End Blocks Id System

/dev/sdb1 1 1006 200668+ 83 Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

对新建的磁盘分区进行格式化

[root@web1 ~]# mkfs -t ext3 /dev/sdb1

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

[root@web1 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 9.5G 2.6G 6.5G 29% /

/dev/sda1 99M 12M 83M 12% /boot

tmpfs 42M 0 42M 0% /dev/shm

/dev/hdc 2.8G 2.8G 0 100% /media/RHEL_5.4 i386 DVD

/dev/hdc 2.8G 2.8G 0 100% /mnt/cdrom

/dev/sdb1 190M 5.6M 175M 4% /var/www/html

创建探测文件“.test.html” 及主页“index.html”

[root@web1 ~]#cd  /var/www/html

[root@web1 html]#echo ‘ok!!!’ > .test.html

[root@web1 html]#echo ‘hello,baby,hehe!!!’ > index.html

正如以上步骤对web1的配置。对web2进行相同配置。除了对磁盘文件进行格式化和创建文件。这样完成web服务器上的配置。重新启动heartbeat服务。

此时对web服务器进行访问测试

clip_p_w_picpath002

在dr1上查看规则匹配

[root@a ha.d]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.20.101:80 rr

-> 192.168.20.201:80 Route 1 0 1

-> 192.168.20.200:80 Route 1 0 0

在dr2上查看规则匹配

[root@b ha.d]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

此时搭建的有共享存储的群集已经完成。