案例一
拓扑图
案例说明
实现基于HA高可用性的群集系统
实现LVA-DR直接路由模型模型
案例1.1
node1和node2群集服务器网卡配置
node1的RIP配置,Eth0选择hostonly连接
心跳网卡配置Eth1,选择vmnet2连接
重启node1网络服务
#service network restart
node2的RIP配置,Eth0选择hostonly连接
心跳网卡配置Eth1,选择vmnet2连接
重启node2网络服务
#service network restart
主机名配置
node1主机名配置
[root@localhost ~]# vim /etc/sysconfig/network
[root@localhost ~]# hostname node1.a.com #配置后需注销才能生效。
[root@localhost ~]# hostname #查看主机名
[root@localhost ~]# vim /etc/hosts
配置node1的本地DNS解析
node2主机名配置
[root@localhost ~]# vim /etc/sysconfig/network
[root@localhost ~]# hostname node2.a.com #配置后需注销才能生效。
[root@localhost ~]# hostname #查看主机名
[root@localhost ~]# vim /etc/hosts
yum配置
node1配置
[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
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
测试
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
定义心跳网卡
声明群集的节点
[root@node1 ha.d]# dd if=/dev/random bs=512 count=1
[root@node1 ha.d]# dd if=/dev/random bs=512 count=1 |openssl md5
改变authkeys的权限
[root@node1 ha.d]# chmod 600 authkeys #需将此文件权限改为600
配置验证钥匙(为了实现双方身份验证)
[root@node1 ha.d]# vim authkeys
编辑heartbeat资源管理器:(用于管理Director上的服务,比如httpd的启动)
[root@node1 ha.d]# vim haresources
#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
[root@node1 ha.d]# cd /usr/lib/heartbeat/
[root@node1 heartbeat]# ./hb_standby #成为备份
此时node1的网络地址如下(可以看出node1成为备份)
Node2的ip如下(可以看出node2成为主控)
此时网页
[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
[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
将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服务状态为停止
启动heartbeat服务
[root@node1 ~]# service heartbeat start
[root@node2 ha.d]# service heartbeat start
[root@node1 ~]# cd /usr/lib/heartbeat/
使node1成为备份状态
[root@node1 heartbeat]# ./hb_standby
查看node2的网络地址,可以看出此时node2为主控状态。
realserver1和realserver2配置
realserver1的eth0网卡配置RIP
realserver1的lo:0接口配置VIP
realserver2的eth0网卡配置RIP
realserver2的lo:0接口配置VIP
两个都需执行以下参数
#vim /etc/sysctl.conf
两个都需执行以下参数
#sysctl -a |grep arp先查看内核参数announced=2和ignore=1
#Sysctl -p使配置的内核参数生效
# route add -host 192.168.10.101 dev lo:0 //添加路由。为了实现vip类对访问进行应答,需要使从realserver1到任何地址的数据包从lo:0的接口使用vip发送。
Realserver1 路由表
Realserver2路由表
#yum install -y httpd
#cat /var/www/html/index.html
# service httpd start
此时没有启用ipvsadm
测试,访问http://192.168.10.101
刷新后。
使node1成为备份
[root@node1 heartbeat]# ./hb_standby
此时只能看到web2
群集可以正常使用。案例一完毕。
案例二:(此案例基于案例一)
拓扑图
案例说明
1实现基于HA高可用性的群集系统
2实现LVA-DR直接路由模型模型
3通过heartbeat的ldirectord服务实现动态ipvs规则表
配置步骤
在node1上配置
下载并上传heartbeat-ldirectord的rpm包到root下
安装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
编辑heartbeat的资源管理文件
[root@node1 ~]# vim /etc/ha.d/haresources
#资源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
查看主群集服务的网络地址
查看备份服务器的网络地址
查看主群集服务器的ipvs规则条目
当关闭realserver2的httpd服务后
[root@realserver2 ~]# service httpd stop
查看主群集服务器的ipvs规则条目
#只有realserver2的ipvs规则
接着关闭realserver1的httpd服务后
[root@realserver1 ~]# service httpd stop
查看主群集服务器的ipvs规则条目
#realserver1和realserver2的ipvs规则都消失了
HA
Node1和node2的eth0网卡选择hostonly,eth1网卡选择vmnet2连接。
Realserver1和realservere的eth0网卡选择hostonly,eth1网卡选择vmnet3连接。
Target的eth0网卡选择vmnet3连接。
[root@node1 ~]# setup
[root@node2 ~]# setup
[root@realserver1 ~]# setup
[root@realserver2 ~]# setup
[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
[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
[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
[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
[root@target ClusterStorage]# tgtadm --lld iscsi --op bind --mode=target --tid=1 --initiator-address=192.168.2.0/24
[root@target ClusterStorage]# vim /etc/tgt/targets.conf
[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
此时磁盘信息显示、
[root@realserver1 Server]# vim /etc/iscsi/initiatorname.iscsi
[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
[root@realserver1 Server]# iscsiadm --mode node --targetname iqn.2012-10.com.atarget:disk --portal 192.168.2.100:3260 --login
[root@realserver1 Server]# fdisk �Cl
[root@target ~]# tgtadm --lld iscsi --op show --mode target
分区
[root@realserver1 Server]# fdisk /dev/sdb
格式化分区
[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
[root@realserver2 ~]# vim /etc/iscsi/initiatorname.iscsi
先启用再发现再登陆。
[root@realserver2 ~]# service iscsi start
[root@realserver2 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100
[root@realserver2 ~]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
[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
[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/
[root@realserver1 html]# service httpd start
[root@realserver2 html]# service httpd start
[root@node1 ~]# service heartbeat start
[root@node2 ~]# service heartbeat start
[root@realserver1 html]# service httpd stop