案例一

拓扑图

HA 高可用性群集_blank

案例说明

实现基于HA高可用性的群集系统

实现LVA-DR直接路由模型模型

案例1.1

node1和node2群集服务器网卡配置

node1的RIP配置,Eth0选择hostonly连接

HA 高可用性群集_target_02

心跳网卡配置Eth1,选择vmnet2连接

HA 高可用性群集_455_03

重启node1网络服务

#service network restart

node2的RIP配置,Eth0选择hostonly连接

HA 高可用性群集_455_04

心跳网卡配置Eth1,选择vmnet2连接

HA 高可用性群集_border_05

重启node2网络服务

#service network restart

主机名配置

node1主机名配置

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

HA 高可用性群集_alt_06

[root@localhost ~]# hostname #配置后需注销才能生效。

[root@localhost ~]# hostname #查看主机名

HA 高可用性群集_blank_07

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

配置node1的本地DNS解析

HA 高可用性群集_border_08

node2主机名配置

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

HA 高可用性群集_455_09

[root@localhost ~]# hostname #配置后需注销才能生效。

[root@localhost ~]# hostname #查看主机名

HA 高可用性群集_target_10

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

HA 高可用性群集_blank_11

yum配置

node1配置

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

HA 高可用性群集_target_12

node2配置

这里我们从node1拷贝

[root@node2 ~]# scp :/etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/

httpd和lynx的安装

node1的安装
[root@node1 ~]# mkdir /mnt/cdrom

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

mount: block device /dev/cdrom is write-protected, mounting read-only

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

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

[root@node1 html]# echo "">index.html

[root@node1 html]# yum install -y lynx

node2的安装

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

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

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

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

[root@node2 html]# echo "">index.html

[root@node2 html]# yum install -y lynx

测试

HA 高可用性群集_blank_13

HA 高可用性群集_blank_14

heartbeat的配置

node1的配置

使用yum安装heartbeat相应的软件包

[root@node1 ~]# yum localinstall -y 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 --nogpgcheck

拷贝heartbeat的3个配置文件到etc下ha.d目录下

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

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

[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/

编译心跳探测配置文件

[root@node1 ha.d]# vim

定义心跳网卡

HA 高可用性群集_alt_15

声明群集的节点

HA 高可用性群集_border_16

[root@node1 ha.d]# dd if=/dev/random bs=512 count=1

HA 高可用性群集_blank_17

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

HA 高可用性群集_target_18

改变authkeys的权限

[root@node1 ha.d]# chmod 600 authkeys #需将此文件权限改为600

配置验证钥匙(为了实现双方身份验证)

[root@node1 ha.d]# vim authkeys

HA 高可用性群集_blank_19

编辑heartbeat资源管理器:(用于管理Director上的服务,比如httpd的启动)

[root@node1 ha.d]# vim haresources

HA 高可用性群集_455_20

#192.168.10.101是vip,httpd是heartbeat控制的服务类资源

将httpd的控制脚本复制到heartbeat资源管理目录

[root@node1 ha.d]# cp /etc/init.d/httpd resource.d/

启动heartbeat服务

[root@node1 ha.d]# service heartbeat start

Node2的配置,这里我们从node1上拷贝。

[root@node2 html]# scp :/root/*.rpm ./

[root@node2 html]# yum localinstall -y 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 –nogpgcheck

[root@node2 html]# cd /etc/ha.d/

[root@node2 ha.d]# ll

总计 24

-rwxr-xr-x 1 root root 745 2009-07-25 harc

drwxr-xr-x 2 root root 4096 10-12 14:36 rc.d

-rw-r--r-- 1 root root 692 2009-07-25 README.config

drwxr-xr-x 2 root root 4096 10-12 14:36 resource.d

-rw-r--r-- 1 root root 7862 2009-07-25 shellfuncs

[root@node2 ha.d]# scp :/etc/ha.d/ /etc/ha.d/

root@'s password:

100% 10KB 10.4KB/s 00:00

[root@node2 ha.d]# scp :/etc/ha.d/haresources /etc/ha.d/

root@'s password:

haresources 100% 5961 5.8KB/s 00:00

[root@node2 ha.d]# scp :/etc/ha.d/authkeys /etc/ha.d/

root@'s password:

authkeys 100% 691 0.7KB/s 00:00

[root@node2 ha.d]# scp :/etc/init.d/httpd /etc/ha.d/resource.d/

root@'s password:

httpd 100% 3263 3.2KB/s 00:00

[root@node2 ha.d]# service heartbeat start

HA 高可用性群集_blank_21

HA 高可用性群集_border_22

[root@node1 ha.d]# cd /usr/lib/heartbeat/

[root@node1 heartbeat]# ./hb_standby #成为备份

此时node1的网络地址如下(可以看出node1成为备份)

HA 高可用性群集_alt_23

Node2的ip如下(可以看出node2成为主控)

HA 高可用性群集_alt_24

此时网页

HA 高可用性群集_border_25

[root@node1 heartbeat]# ./hb_takeover #可以抢占回来

案例1.2

接下来,我们卸载httpd并安装ipvsadm,由于ipvsadm在cluster中,所以我们需要编辑本地yum

node1的yum配置及ipvsadm安装

[root@node1 ~]# service httpd stop

[root@node1 ~]# service heartbeat stop

[root@node1 ~]# yum remove -y httpd

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

HA 高可用性群集_alt_26

[root@node1 ~]# yum install -y ipvsadm

node2的yum配置及ipvsadm安装

[root@node2 ha.d]# service httpd stop

[root@node2 ha.d]# service heartbeat stop

[root@node2 ha.d]# yum remove -y httpd

[root@node2 ha.d]# scp :/etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/

[root@node2 ha.d]# yum install -y ipvsadm

Ipvsadm的配置

node1配置

编写ipvs转发表格

[root@node1 ~]# ipvsadm -A -t 192.168.10.101:80 -s rr

[root@node1 ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.200 -g

[root@node1 ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.201 -g

保存ipvs规则到 /etc/sysconfig/ipvsadm

[root@node1 ~]# service ipvsadm save

[root@node1 ~]# service ipvsadm stop

[root@node2 ha.d]# scp :/etc/sysconfig/ipvsadm /etc/sysconfig/

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

HA 高可用性群集_target_27

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

[root@node1 ~]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

node2配置

[root@node1 ~]# scp /etc/ha.d/haresources :/etc/ha.d/

[root@node1 ~]# scp /etc/init.d/ipvsadm :/etc/ha.d/resource.d/

查看ipvsadm服务状态为停止

HA 高可用性群集_blank_28

HA 高可用性群集_alt_29

启动heartbeat服务

[root@node1 ~]# service heartbeat start

[root@node2 ha.d]# service heartbeat start

HA 高可用性群集_target_30

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

使node1成为备份状态

[root@node1 heartbeat]# ./hb_standby

查看node2的网络地址,可以看出此时node2为主控状态。

HA 高可用性群集_border_31

realserver1和realserver2配置

realserver1的eth0网卡配置RIP

HA 高可用性群集_alt_32

realserver1的lo:0接口配置VIP

HA 高可用性群集_455_33

realserver2的eth0网卡配置RIP

HA 高可用性群集_blank_34

realserver2的lo:0接口配置VIP

HA 高可用性群集_border_35

两个都需执行以下参数

#vim /etc/sysctl.conf

HA 高可用性群集_blank_36

两个都需执行以下参数

#sysctl -a |grep arp先查看内核参数announced=2和ignore=1

HA 高可用性群集_455_37

#Sysctl -p使配置的内核参数生效

# route add -host 192.168.10.101 dev lo:0 //添加路由。为了实现vip类对访问进行应答,需要使从realserver1到任何地址的数据包从lo:0的接口使用vip发送。

Realserver1 路由表

HA 高可用性群集_border_38

Realserver2路由表

HA 高可用性群集_455_39

#yum install -y httpd

#cat /var/www/html/index.html

# service httpd start

此时没有启用ipvsadm

测试,访问http://192.168.10.101

HA 高可用性群集_border_40

刷新后。

HA 高可用性群集_blank_41

使node1成为备份

[root@node1 heartbeat]# ./hb_standby

此时只能看到web2

HA 高可用性群集_alt_42

群集可以正常使用。案例一完毕。

案例二:(此案例基于案例一)

拓扑图

HA 高可用性群集_455_43

案例说明

1实现基于HA高可用性的群集系统

2实现LVA-DR直接路由模型模型

3通过heartbeat的ldirectord服务实现动态ipvs规则表

配置步骤

在node1上配置

下载并上传heartbeat-ldirectord的rpm包到root下

HA 高可用性群集_target_44

安装ldirectord

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

将ldirectord的配置文件拷贝到ha.d目录下

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

编辑ldirectord配置文件

[root@node1 ~]# vim /etc/ha.d/

HA 高可用性群集_455_45

编辑heartbeat的资源管理文件

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

HA 高可用性群集_target_46

#资源1是:ip地址192.168.10.101

#资源2是:服务ldirectord,后跟上服务的对应配置脚本。

删除原来的ipvsadm规则条目

[root@node1 ~]# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old

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

node2的配置

[root@node1 ~]# scp /etc/ha.d/ :/etc/ha.d/

启动heartbeat服务

[root@node1 ~]# service heartbeat start

[root@node2 ~]# service heartbeat start

realserver1和realserver2中创建测试页面

#cd/var/www/html

#echo “ok”>.test.html

测试

当realserver的httpd服务都正常运行时

[root@realserver1 ~]# service httpd start

[root@realserver2 ~]# service httpd start

查看主群集服务的网络地址

HA 高可用性群集_alt_47

查看备份服务器的网络地址

HA 高可用性群集_alt_48

查看主群集服务器的ipvs规则条目

HA 高可用性群集_455_49

HA 高可用性群集_blank_50

HA 高可用性群集_alt_51

当关闭realserver2的httpd服务后

[root@realserver2 ~]# service httpd stop

HA 高可用性群集_target_52

查看主群集服务器的ipvs规则条目

HA 高可用性群集_alt_53

#只有realserver2的ipvs规则

接着关闭realserver1的httpd服务后

[root@realserver1 ~]# service httpd stop

HA 高可用性群集_blank_54

查看主群集服务器的ipvs规则条目

HA 高可用性群集_target_55

#realserver1和realserver2的ipvs规则都消失了

HA

HA 高可用性群集_alt_56

Node1和node2的eth0网卡选择hostonly,eth1网卡选择vmnet2连接。

Realserver1和realservere的eth0网卡选择hostonly,eth1网卡选择vmnet3连接。

Target的eth0网卡选择vmnet3连接。

[root@node1 ~]# setup

HA 高可用性群集_target_02

HA 高可用性群集_target_58

[root@node2 ~]# setup

HA 高可用性群集_455_59

HA 高可用性群集_border_60

[root@realserver1 ~]# setup

HA 高可用性群集_blank_61

HA 高可用性群集_455_62

[root@realserver2 ~]# setup

HA 高可用性群集_alt_63

HA 高可用性群集_alt_64

[root@realserver1 ~]# route add -host 192.168.10.101 dev lo:0

[root@realserver2 ~]# route add -host 192.168.10.101 dev lo:0

[root@target ~]# setup

HA 高可用性群集_alt_65

[root@realserver1 ~]# ssh 192.168.2.100

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

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

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

[root@target ClusterStorage]# yum install -y scsi-target-utils-0.0-5.20080917snap.el5.i386.rpm

[root@target ClusterStorage]# service tgtd start

[root@target ClusterStorage]# chkconfig tgtd on

[root@target ClusterStorage]# fdisk –l

HA 高可用性群集_455_66

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

[root@target ClusterStorage]# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname .a.target:disk

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

HA 高可用性群集_border_67

[root@target ClusterStorage]# tgtadm --lld iscsi --op new --mode=logicalunit --tid=1 --lun=1 --backing-store /dev/sda4

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

HA 高可用性群集_blank_68

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

HA 高可用性群集_alt_69

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

HA 高可用性群集_border_70

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

mount: block device /dev/cdrom is write-protected, mounting read-only

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

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

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

mount: block device /dev/cdrom is write-protected, mounting read-only

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

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

此时磁盘信息显示、

HA 高可用性群集_blank_71

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

HA 高可用性群集_target_72

[root@realserver1 Server]# service iscsi start

[root@realserver1 Server]# chkconfig iscsi on

[root@realserver1 Server]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100

HA 高可用性群集_alt_73

[root@realserver1 Server]# iscsiadm --mode node --targetname .atarget:disk --portal 192.168.2.100:3260 --login

HA 高可用性群集_target_74

[root@realserver1 Server]# fdisk –l

HA 高可用性群集_455_75

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

HA 高可用性群集_border_76

分区

[root@realserver1 Server]# fdisk /dev/sdb

HA 高可用性群集_455_77

HA 高可用性群集_blank_78

格式化分区

[root@realserver1 Server]# mkfs -t ext3 /dev/sdb1

[root@realserver1 Server]# mkdir /mnt/1

[root@realserver1 Server]# mount /dev/sdb1 /mnt/1

[root@realserver1 Server]# mount

HA 高可用性群集_455_79

[root@realserver2 ~]# vim /etc/iscsi/initiatorname.iscsi

HA 高可用性群集_455_80

先启用再发现再登陆。

[root@realserver2 ~]# service iscsi start

[root@realserver2 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100

HA 高可用性群集_blank_81

[root@realserver2 ~]# iscsiadm --mode node --targetname .a.target:disk --portal 192.168.2.100:3260 --login

HA 高可用性群集_target_82

[root@realserver2 ~]# mkdir /mnt/1

[root@realserver2 ~]# mount /dev/sdb1 /mnt/1/

[root@realserver2 ~]# mount

[root@realserver1 1]# touch f1

[root@realserver2 1]# touch f2

HA 高可用性群集_455_83

HA 高可用性群集_border_84

[root@realserver1 ~]# umount /mnt/1

[root@realserver1 ~]# iscsiadm --mode node --targetname .a.target:disk --portal 192.168.2.100:3260 --logout

[root@realserver1 ~]# iscsiadm --mode node --targetname .a.target:disk --portal 192.168.2.100:3260 --login

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

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

[root@realserver1 html]# vim index.html

web

[root@realserver1 html]# vim .test.html

ok

[root@realserver2 ~]# umount /mnt/1

[root@realserver2 ~]# iscsiadm --mode node --targetname .a.target:disk --portal 192.168.2.100:3260 --logout

[root@realserver2 ~]# iscsiadm --mode node --targetname .a.target:disk --portal 192.168.2.100:3260 --login

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

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

HA 高可用性群集_alt_85

HA 高可用性群集_border_86

HA 高可用性群集_blank_87

[root@realserver1 html]# service httpd start

[root@realserver2 html]# service httpd start

[root@node1 ~]# service heartbeat start

[root@node2 ~]# service heartbeat start

HA 高可用性群集_alt_88

[root@realserver1 html]# service httpd stop

HA 高可用性群集_border_89

HA 高可用性群集_alt_90