HA 高可用性群集

时间:2021-09-26 21:29:10

案例一

拓扑图

HA 高可用性群集

案例说明

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

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

案例1.1

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

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

HA 高可用性群集

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

HA 高可用性群集

重启node1网络服务

#service network restart

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

HA 高可用性群集

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

HA 高可用性群集

重启node2网络服务

#service network restart

主机名配置

node1主机名配置

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

HA 高可用性群集

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

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

HA 高可用性群集

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

配置node1的本地DNS解析

HA 高可用性群集

node2主机名配置

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

HA 高可用性群集

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

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

HA 高可用性群集

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

HA 高可用性群集

yum配置

node1配置

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

HA 高可用性群集

node2配置

这里我们从node1拷贝

[root@node2 ~]# scp node1.a.com:/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 "node1.a.com">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 "node2.a.com">index.html

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

测试

HA 高可用性群集

HA 高可用性群集

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 ha.cf haresources authkeys /etc/ha.d/

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

编译心跳探测配置文件ha.cf

[root@node1 ha.d]# vim ha.cf

定义心跳网卡

HA 高可用性群集

声明群集的节点

HA 高可用性群集

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

HA 高可用性群集

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

HA 高可用性群集

改变authkeys的权限

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

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

[root@node1 ha.d]# vim authkeys

HA 高可用性群集

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

[root@node1 ha.d]# vim haresources

HA 高可用性群集

#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 node1.a.com:/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 �Cnogpgcheck

[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 node1.a.com:/etc/ha.d/ha.cf /etc/ha.d/

root@node1.a.com's password:

ha.cf 100% 10KB 10.4KB/s 00:00

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

root@node1.a.com's password:

haresources 100% 5961 5.8KB/s 00:00

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

root@node1.a.com's password:

authkeys 100% 691 0.7KB/s 00:00

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

root@node1.a.com's password:

httpd 100% 3263 3.2KB/s 00:00

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

HA 高可用性群集

HA 高可用性群集

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

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

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

HA 高可用性群集

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

HA 高可用性群集

此时网页

HA 高可用性群集

[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 高可用性群集

[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 node1.a.com:/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 node1.a.com:/etc/sysconfig/ipvsadm /etc/sysconfig/

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

HA 高可用性群集

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

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

node2配置

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

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

查看ipvsadm服务状态为停止

HA 高可用性群集

HA 高可用性群集

启动heartbeat服务

[root@node1 ~]# service heartbeat start

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

HA 高可用性群集

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

使node1成为备份状态

[root@node1 heartbeat]# ./hb_standby

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

HA 高可用性群集

realserver1和realserver2配置

realserver1的eth0网卡配置RIP

HA 高可用性群集

realserver1的lo:0接口配置VIP

HA 高可用性群集

realserver2的eth0网卡配置RIP

HA 高可用性群集

realserver2的lo:0接口配置VIP

HA 高可用性群集

两个都需执行以下参数

#vim /etc/sysctl.conf

HA 高可用性群集

两个都需执行以下参数

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

HA 高可用性群集

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

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

Realserver1 路由表

HA 高可用性群集

Realserver2路由表

HA 高可用性群集

#yum install -y httpd

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

# service httpd start

此时没有启用ipvsadm

测试,访问http://192.168.10.101

HA 高可用性群集

刷新后。

HA 高可用性群集

使node1成为备份

[root@node1 heartbeat]# ./hb_standby

此时只能看到web2

HA 高可用性群集

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

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

拓扑图

HA 高可用性群集

案例说明

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

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

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

配置步骤

在node1上配置

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

HA 高可用性群集

安装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/ldirectord.cf /etc/ha.d/

编辑ldirectord配置文件

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

HA 高可用性群集

编辑heartbeat的资源管理文件

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

HA 高可用性群集

#资源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/ldirectord.cf node2.a.com:/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 高可用性群集

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

HA 高可用性群集

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

HA 高可用性群集

HA 高可用性群集

HA 高可用性群集

当关闭realserver2的httpd服务后

[root@realserver2 ~]# service httpd stop

HA 高可用性群集

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

HA 高可用性群集

#只有realserver2的ipvs规则

接着关闭realserver1的httpd服务后

[root@realserver1 ~]# service httpd stop

HA 高可用性群集

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

HA 高可用性群集

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

HA

HA 高可用性群集

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

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

Target的eth0网卡选择vmnet3连接。

[root@node1 ~]# setup

HA 高可用性群集

HA 高可用性群集

[root@node2 ~]# setup

HA 高可用性群集

HA 高可用性群集

[root@realserver1 ~]# setup

HA 高可用性群集

HA 高可用性群集

[root@realserver2 ~]# setup

HA 高可用性群集

HA 高可用性群集

[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 高可用性群集

[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 �Cl

HA 高可用性群集

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

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

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

HA 高可用性群集

[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 高可用性群集

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

HA 高可用性群集

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

HA 高可用性群集

[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 高可用性群集

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

HA 高可用性群集

[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 高可用性群集

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

HA 高可用性群集

[root@realserver1 Server]# fdisk �Cl

HA 高可用性群集

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

HA 高可用性群集

分区

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

HA 高可用性群集

HA 高可用性群集

格式化分区

[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 高可用性群集

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

HA 高可用性群集

先启用再发现再登陆。

[root@realserver2 ~]# service iscsi start

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

HA 高可用性群集

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

HA 高可用性群集

[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 高可用性群集

HA 高可用性群集

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

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

[root@realserver1 ~]# iscsiadm --mode node --targetname iqn.2012-10.com.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 iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --logout

[root@realserver2 ~]# iscsiadm --mode node --targetname iqn.2012-10.com.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 高可用性群集

HA 高可用性群集

HA 高可用性群集

[root@realserver1 html]# service httpd start

[root@realserver2 html]# service httpd start

[root@node1 ~]# service heartbeat start

[root@node2 ~]# service heartbeat start

HA 高可用性群集

[root@realserver1 html]# service httpd stop

HA 高可用性群集

HA 高可用性群集