一,HA定义
高可用性H.A.(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不同。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。
随着IT信息系统的不断发展,数据在企业的应用越来越广,如何提高IT系统的高可用性成为建设稳健的计算机算系统的首要任务之一。构成计算机网络系统的三大要素是:网络系统,服务器系统,存储系统。网络系统包括防火墙,路由器等网络设备,服务器系统主要指用户使用的各种服务器系统,存储系统,则是用户最主要的数据存储放的地点。
因此IT系统的高可用建设应包括网络设备高可用性,服务器设备高可用性,及存储设备的高可用性三个方面。
编辑本段高可用性的分类
1:网络高可用
由于网络存储的快速发展,网络冗余技术被不断提升,提高IT系统的高可用性的关键应用就是网络高可用性,网络高可用性与网络高可靠性是有区别的,网络高可用性是通过匹配冗余的网络设备实现网络设备的冗余,达到高可用的目的。
比如冗余的交换机,冗余的路由器等
2:服务器高可用
服务器高可用主要使用的是服务器集群软件或高可用软件来实现。
3:存储高可用
使用软件或硬件技术实现存储的高度可用性。其主要技术指标是存储切换功能,数据复制功能,数据快照功能等。当一台存储出现故障时,另一台备用的存储可以快速切换,达一存储不停机的目的。
编辑本段高可用性(HA)的功能
1、软件故障监测与排除
2、备份和数据保护
3、管理站能够监视各站点的运行情况,能随时或定时报告系统运行状况,故障能及时报告和告警,并有必要的控制手段
4、实现错误隔离以及主、备份服务器间的服务切换
HA的工作方式:HA有主从方式和双工方式两种工作模式
二,heartbeat
Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。
高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为“心跳”的代码完成。在Linux-HA里这个功能由一个叫做heartbeat的程序完成。
Heartbeat通过插件技术实现了集群间的串口、多播、广播和组播通信,在配置的时候可以根据通信媒介选择采用的通信协议,heartbeat启动的时候检查这些媒介是否存在,如果存在则加载相应的通信模块。这样开发人员可以很方便地添加新的通信模块,比如添加红外线通信模块。
对于高可用集群系统,如果集群间的通信不可靠,那么很明显集群本身也不可靠。Heartbeat采用UDP协议和串口进行通信,它们本身是不可靠的,可靠性必须由上层应用来提供。那么怎样保证消息传递的可靠性呢?
Heartbeat通过冗余通信通道和消息重传机制来保证通信的可靠性。Heartbeat检测主通信链路工作状态的同时也检测备用通信链路状态,并把这一状态报告给系统管理员,这样可以大大减少因为多重失效引起的集群故障不能恢复。例如,某个工作人员不小心拨下了一个备份通信链路,一两个月以后主通信链路也失效了,系统就不能再进行通信了。通过报告备份通信链路的工作状态和主通信链路的状态,可以完全避免这种情况。因为这样在主通信链路失效以前,就可以检测到备份工作链路失效,从而在主通信链路失效前修复备份通信链路。
三,实验案例(1)模拟HA高可用性网络
[root@node1 html]# vim /etc/sysconfig/network
[root@node1 html]# vim /etc/hosts
另一台一样
安装http
[root@node1 Server]# cd /var/www/html/
[root@node1 html]# vim index.html
另一台
root@node1 Server]# cd /var/www/html/
[root@node1 html]# vim index.html
装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-11.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck
[root@node1 ~]# cd /etc/ha.d/
[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# vim ha.cf
[root@node1 ha.d]# dd if=/dev/random bs=512 count=1 |openssl md5
[root@node1 ha.d]# vim authkeys
[root@node1 ha.d]# vim haresources
[root@node1 ha.d]# chmod 600 authkeys
[root@node1 ha.d]# cp /etc/init.d/httpd resource.d/
[root@node1 ha.d]# chkconfig heartbeat on
[root@node1 ha.d]# service heartbeat start
[root@node1 ha.d]# ifconfig
[root@node1 ha.d]# service httpd status
httpd (pid 8700) is running...
注意关闭阿帕奇服务
另一台
[root@node2 ~]#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-11.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck
[root@node1 ha.d]# scp ha.cf node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp haresources node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp authkeys node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp /etc/init.d/httpd node2.a.com:/etc/ha.d/resource.d/
[root@node1 ha.d]# service httpd status
httpd is stopped
[root@node1 ha.d]# chkconfig --list |grep hear
[root@node1 ha.d]# chkconfig heartbeat on
[root@node2 ha.d]# service heartbeat start
[root@node2 ha.d]# ifconfig
[root@node2 ~]# service httpd status
httpd is stopped
测试
主机访问http://192.168.145.101
模拟网卡失效情况 主设备
测试
节点一
[root@node1 ha.d]# cd /usr/lib/heartbeat/
[root@node1 heartbeat]# ./hb_standby
节点二图
[root@node2 ~]# service httpd status
连接图
没断
测试1又好了 模拟争夺
节点一执行另一指令
[root@node1 heartbeat]# ./hb_takeover
节点二图 又stop
实验案例(2)模拟HA结合LVS群集
去掉两台director中web服务
用LVS
第一台
[root@node1 heartbeat]# service heartbeat stop
[root@node1 heartbeat]# yum install httpd
编辑yum
[root@node1 heartbeat]# vim /etc/yum.repos.d/rhel-debuginfo.repo
[root@node1 heartbeat]# scp /etc/yum.repos.d/rhel-debuginfo.repo node2.a.com:/etc/yum.repos.d/拷贝到另一台机子中
[root@node1 heartbeat]# yum install ipvsadm
heartbeat与lvs结合
[root@node1 heartbeat]# ipvsadm -A -t 192.168.145.101:80 -s rr
[root@node1 heartbeat]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.200 -g
[root@node1 heartbeat]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.201 -g
[root@node1 heartbeat]# service ipvsadm save
[root@node1 heartbeat]# service ipvsadm stop
[root@node1 heartbeat]# scp /etc/sysconfig/ipvsadm node2.a.com:/etc/sysconfig/拷贝到另一表格
[root@node1 heartbeat]# cd /etc/ha.d/
[root@node1 ha.d]# vim haresources
[root@node1 ha.d]# cp /etc/init.d/ipvsadm resource.d/
[root@node1 ha.d]# scp haresources node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp /etc/init.d/ipvsadm node2.a.com:/etc/ha.d/resource.d/
两边确认停止状态
[root@node1 ha.d]# ipvsadm -ln
[root@node1 ha.d]# service heartbeat start两边起群集
测试起来没
[root@node1 ha.d]# ipvsadm -ln
一边起一边没起
模拟失效情况
第一台director
[root@node1 ha.d]# cd /usr/lib/heartbeat/
第二台测试
开两台server
一台
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0
[root@localhost ~]# service httpd start
两一台同样
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0
[root@localhost ~]# service httpd start
测试图 此时/VAR/WWW/HTML文件为https
模拟死掉
[root@node1 ha.d]# cd /usr/lib/heartbeat/
[root@node1 heartbeat]# ./hb_standby
测试图
因为如果server死掉但是有路由表还会继续发包 会有包丢失现象为了不让由此现象 实现DOWN后条目自动消失
利用ldrectord 实现对后方的探测
两边HA停掉
[root@node2 ~]# service heartbeat stop
[root@node1 ~]# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
[root@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
要被heartbeat控制
[root@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
[root@node1 ~]# vim /etc/ha.d/ldirectord.cf图
[root@node1 ha.d]# vim haresources
删掉转发规则表
[root@node1 ha.d]# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old
第二台
[root@node2 ~]# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
在第一台向第二台考配
[root@node1 ha.d]# scp ldirectord.cf node2.a.com:/etc/ha.d/
第二台
[root@node2 ~]# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old
第一台
[root@node1 ha.d]# service heartbeat start
第二台
[root@node2 ha.d]# service heartbeat start
第一台
[root@node1 ha.d]# ipvsadm –ln
图看出此时权重为0 这是没有探测页面的结果
又因为静默设置YES不做处理仅仅降低值0
后两台server做探测液面
[root@localhost html]# cd /var/www/html/
第一台
[root@localhost html]# echo "ok" >.test.html
测试 第一台direct
[root@node1 ha.d]# ipvsadm -ln
看出图变为1
第二台后方server
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "ok" >.test.html
测试第一台director
[root@node1 ha.d]# ipvsadm -ln
两个一
所以进入第一台HA
[root@node1 ha.d]# vim ldirectord.cf
NO不在沉默
第二台同样改
[root@node2 ~]# vim /etc/ha.d/ldirectord.cf
测试 模拟后方服务器停掉
[root@localhost html]# service httpd stop
前方第一CA
[root@node1 ha.d]# ipvsadm -ln
有又没了图
测试又好了
[root@localhost html]# service httpd start
HA
[root@node1 ha.d]# ipvsadm -ln
看出好了
实验案例3)使用ipsan技术 彻底高可用性网络
对于server改内存和多加网卡
server1
加路由
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0
server2同样
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0
target
装[root@localhost ~]# cd /mnt/cdrom/ClusterStorage/
[root@localhost ftp]# yum install scsi-target-utils -y
[root@localhost ftp]# service tgtd start
[root@localhost ftp]# chkconfig tgtd on
增加磁盘
[root@target ClusterStorage]# fdisk /dev/sda
Command (m for help): n
p
Selected partition 4
First cylinder (1354-2610, default 1354):
Using default value 1354
Last cylinder or +size or +sizeM or +sizeK (1354-2610, default 2610): +2000m
Command (m for help): p
Command (m for help): w
[root@target ClusterStorage]# partprobe /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 new --mode=logicalunit --tid=1 --lun=1 --backing-store /dev/sda4
ACL:
[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
前端server1
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh iscsi-initiator-utils-6.2.0.871-0.10.el5.i386.rpm
第二台同样安装
[root@localhost Server]# cd /etc/iscsi/
[root@localhost iscsi]# vim initiatorname.iscsi
[root@localhost iscsi]# service iscsi start
客户端工具
[root@localhost iscsi]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100发现target
[root@localhost iscsi]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
连接
[root@localhost iscsi]# fdisk -l
target上查看
[root@target ClusterStorage]# tgtadm --lld iscsi --op show --mode target
server1
分区对新硬盘
[root@localhost iscsi]# fdisk /dev/sdb
Command (m for help): n
p
Partition number (1-4): 1
First cylinder (1-1019, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1019, default 1019):
Using default value 1019
Command (m for help): p
Disk /dev/sdb: 2006 MB, 2006968320 bytes
62 heads, 62 sectors/track, 1019 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 1019 1958487 83 Linux
Command (m for help): w
[root@localhost iscsi]# fdisk -l
格式化
[root@localhost iscsi]# mkfs -t ext3 /dev/sdb1
挂载点建立
[root@localhost iscsi]# mkdir /mnt/1
[root@localhost iscsi]# mount /dev/sdb
sdb sdb1
[root@localhost iscsi]# mount /dev/sdb1 /mnt/1
[root@localhost iscsi]# df –h
[root@localhost 1]# cp /etc/passwd ./
[root@localhost 1]# cp /etc/init
init.d/ initlog.conf inittab
[root@localhost 1]# cp /etc/inittab ./
考些东西
service2:
[root@localhost Server]# vim /etc/iscsi/initiatorname.iscsi
[root@localhost Server]# service iscsi start
[root@localhost Server]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100
[root@localhost Server]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
再到target上查看连接
[root@target ClusterStorage]# tgtadm --lld iscsi --op show --mode target
第二个server不用再分区格式化 因为第一个已经做好
[root@localhost Server]# fdisk -l
[root@localhost Server]# mkdir /mnt/1
[root@localhost Server]# mount /dev/sdb1 /mnt/1
[root@localhost Server]# cd /mnt/1
[root@localhost 1]# ll
此种磁盘类型没有推送机制和锁机制
解决问题
第二台
[root@localhost 1]# touch jx1
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# mount /dev/sdb1 /mnt/1
[root@localhost ~]# cd /mnt/1
[root@localhost 1]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --logout
target上测试
[root@target ClusterStorage]# tgtadm --lld iscsi --op show --mode target
第一台同样卸载
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --logout
target上查看
再登陆
[root@localhost ~]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
[root@localhost ~]# mount /dev/sdb1 /var/www/html/
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
[root@localhost html]# vim .test.html
[root@localhost html]# ll
第二台机子
重新实现登陆
[root@localhost 1]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
[root@localhost 1]# mount /dev/sdb1 /var/www/html/
[root@localhost ~]# cd /var/www/html/
最终测试两台服务器server注意开启阿帕奇
测试server2http停掉
[root@localhost html]# service httpd stop
前端direct1
[root@node1 ~]# ipvsadm -ln
发现一台http服务器停掉
测试外部及HTTP
发现还能访问
转载于:https://blog.51cto.com/jinxiang1988/1024802