Hearbeat高可用

来源:互联网 发布:hyperion 软件 编辑:程序博客网 时间:2024/06/06 17:48

Hearbeat高可用

Hearbeat,心跳的意思,这里是Linux-HA
工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由
heartbeat 模块实现了这两个功能。
heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务

官方网站:http://www.linux-ha.org/wiki/Download
这里写图片描述

Heartbeat-3.X版本以后被分为了4个模块,这些安装包都可以从官网:
http://www.linux-ha.org/wiki/Downloads下载得到:
目前的这些版本是:

ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz    //集群实验资源代理(光盘)Heartbeat-3-0-7e3a82377fa8.tar.bz2                  //心跳主程序包pacemaker-1.1.9-1512.el6.src.rpm                        //起搏器(光盘镜像)Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2 //可重复使用的群集组件(光盘)

Hearbeat端口和INNA
TCP/UDP的694号端口【端口都是有INNA规划的】

 grep 694 /etc/servicesha-cluster      694/tcp                          # Heartbeat HA-clusterha-cluster      694/udp                         # Heartbeat HA-cluster

拓展
IANA 就是指(Internet Assigned Numbers Authority 互联网数字分配机构) ,Internet 号分配的机构。负责对 IP 地址分配规划以及对 TCP/UDP 公共服务的端口定义。(谁管理着 TCP/UDP 公共服务的端口定义)
IANA是全球最早的Internet机构之一,其历史可以追溯到1970年。今天,IANA被负责协调IANA责任范围的非营利机构ICANN(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)掌管。IANA还可以查询全球各类顶级域名的具体信息,无论知名还是不知名的域名后缀,你都可以找到它的详细信息以及管理机构所在国家、地址信息、运营公司、注册局网址等。
IANA 的所有仸务可以大致分为三个类型:
一、域名。IANA 管理 DNS 域名根和.int,.arpa 域名以及 IDN(国际化域名)资源。
二、数字资源。IANA 协调全球 IP 和 AS(自治系统)号并将它们提供给各区域 Internet 注册机构。
注: AS 自治系统号,是 BGP(国家与国家) 路由协议中的号。
三、协议分配。IANA 与各标准化组织一同管理协议编号系统。
官网:http://www.iana.org/

Heartbeat集群环境
使用Heartbeat实现web服务器的高可用
三台服务器,加上真机顶替一台客户端服务器
Xuegod63.cn web主
Xuegod64.cn web从
Xuegod62.cn 存储池
拓扑图如下
(图和讲课环境有点差别,XueGod62在讲课环境中使用的XueGod61.cn)

环境准备
Xuegod61,63,64,主机名对应,永久生效,且能相互解析(hosts文件),清空防火墙,关闭selinux

# cat /etc/hosts192.168.1.63    xuegod63.cn192.168.1.64    xuegod64.cn192.168.1.61    xuegod61.cn    # getenforceDisabled    # iptables -F && /etc/init.d/iptables save    # cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=xuegod61.cn 或xuegod63.cn 或xuegod64.cn  # 不同的机器不同的值,首次配置完成重启

设备
GATEWAY=192.168.1.254
NTPSERVERARGS=iburst
配置存储池
这里我们使用的XueGod61作为我们的存储池,配置我们NFS共享资源

    [root@xuegod61 ~]# yum install -y nfs-utils    [root@xuegod61 ~]# mkdir /wwwdir[root@xuegod61 ~]# echo "HeartBeat HTTP Server Test" > /wwwdir/index.html[root@xuegod61 ~]# vim /etc/exports /wwwdir 192.168.1.0/24(rw)[root@xuegod61 ~]# chmod 777 -R /wwwdir/[root@xuegod61 ~]# service nfs restart[root@xuegod61 ~]# chkconfig nfs on[root@xuegod61 ~]# showmount –eExport list for xuegod61.cn:/wwwdir 192.168.1.0/24主Web服务器[root@xuegod63 ~]# yum install -y httpd[root@xuegod63 ~]# showmount -e xuegod61.cnExport list for xuegod61.cn:/wwwdir 192.168.1.0/24[root@xuegod63 ~]# mount -t nfs 192.168.1.61:/wwwdir /var/www/html/[root@xuegod63 ~]# service httpd restart[root@xuegod63 ~]# curl 127.1HeartBeat HTTP Server Test[root@xuegod63 ~]# umount /var/www/html/   //卸载资源:后期这些资源通过heartbeat直接加载[root@xuegod63 ~]# service httpd stop[root@xuegod63 ~]# chkconfig httpd off从Web服务器[root@xuegod64 ~]# yum install -y httpd[root@xuegod64 ~]# showmount -e xuegod61.cnExport list for xuegod61.cn:/wwwdir 192.168.1.0/24[root@xuegod64 ~]# mount -t nfs 192.168.1.61:/wwwdir /var/www/html/[root@xuegod64 ~]# service httpd restart[root@xuegod64 ~]# curl 127.1HeartBeat HTTP Server Test[root@xuegod64 ~]# umount /var/www/html/   //卸载资源:后期这些资源通过heartbeat直接加载[root@xuegod64 ~]# service httpd stop[root@xuegod64 ~]# chkconfig httpd offHeartbeat的RPM包 [root@xuegod63 ~]# vim /etc/yum.repos.d/rhel-source.repo [rhel-source]name=Red Hat Enterprise Linux LocalYUMbaseurl=file:///media/enabled=1gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[rhel-ha]name=Red habaseurl=file:///media/HighAvailabilityenabled=1gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release#说明,如果不配置这个baseurl=file:///mnt/HighAvailabilit  ,则无法使用yum安装cluster-glue和resource-agents             

centos 6.2或5的源里 cluster-glue、resource-agents、pacemaker 都有,就是没有heartbeat。 幸好heartbeat的source里提供了.spec 可以用rpmbuild来生成rpm包。
部署之前,我们需要生产heartbeat的rpm包

[root@xuegod63 ~]# tar xvf Heartbeat-3-0-958e11be8686.tar.bz2[root@xuegod63 ~]# cd Heartbeat-3-0-958e11be8686 [root@xuegod63 Heartbeat-3-0-958e11be8686]# rpmbuild  -ba heartbeat-fedora.specerror: File /root/rpmbuild/SOURCES/heartbeat.tar.bz2: No such file or directory#虽然报了错,但是帮你生成了目录:/root/rpmbuild/SOURCES/  。如你系统本身就有此目录,可以直接拷贝这个压缩包到这个目录    [root@xuegod63 Heartbeat-3-0-958e11be8686]# tar xvf /root/Heartbeat-3-0-958e11be8686.tar.bz2 -C /root/rpmbuild/SOURCES/    [root@xuegod63 Heartbeat-3-0-958e11be8686]# cd /root/rpmbuild/SOURCES/[root@xuegod63 SOURCES]# mv Heartbeat-3-0-958e11be8686/ heartbeat[root@xuegod63 SOURCES]# tar cjvf heartbeat.tar.bz2 heartbeat生成heartbeat.tar.bz2软件包,如果直接使用源码包,生成rpm包时,会报错:    [root@xuegod63 SOURCES]# cd /root/rpmbuild/SOURCES/heartbeat/ [root@xuegod63 heartbeat]# rpmbuild -ba heartbeat-fedora.specerror: File /root/rpmbuild/SOURCES/heartbeat.tar.bz2: No such file or directory[root@xuegod63 heartbeat]# yum install ncurses-devel openssl-devel gettext bison flex mailx cluster-glue-libs-devel docbook-dtds docbook-style-xsl  libtool-ltdl-devel  libuuid-devel  -y[root@xuegod63 heartbeat]# rpmbuild -ba heartbeat-fedora.spec

安装Heartbeat
Web主

[root@xuegod63 heartbeat]# cd /root/rpmbuild/RPMS/x86_64/[root@xuegod63 x86_64]# yum install -y cluster-glue resource-agents[root@xuegod63 x86_64]# rpm -ivh heartbeat-libs-3.0.6-1.el6.x86_64.rpm [root@xuegod63 x86_64]# rpm -ivh heartbeat-3.0.6-1.el6.x86_64.rpm[root@xuegod63 x86_64]# scp heartbeat-libs-3.0.6-1.el6.x86_64.rpm heartbeat-3.0.6-1.el6.x86_64.rpm 192.168.1.64:/root[root@xuegod63 x86_64]# scp /etc/yum.repos.d/rhel-source.repo 192.168.1.64:/etc/yum.repos.d/Web从    [root@xuegod64 ~]# yum install ncurses-devel openssl-devel gettext bison flex mailx cluster-glue-libs-devel docbook-dtds docbook-style-xsl cluster-glue resource-agents -y    [root@xuegod64 ~]# rpm -ivh heartbeat-libs-3.0.6-1.el6.x86_64.rpm [root@xuegod64 ~]# rpm -ivh heartbeat-3.0.6-1.el6.x86_64.rpm查看生产的用户和组    [root@xuegod63 x86_64]# cd && grep haclient /etc/grouphaclient:x:492:    [root@xuegod63 ~]# id haclusteruid=496(hacluster) gid=492(haclient) groups=492(haclient)

配置Heartbeat
XueGod63和64的配置差不多,先在XueGod63上配好,copy给64
“`
[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/ha.cf /etc/ha.d/ //主配置文件
[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/authkeys /etc/ha.d/ //主备节点间通信时所使用的验证文件,保证安全性
[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/haresources /etc/ha.d/ //定义浮动资源的配置文件
什么是浮动资源:1. 公网IP地址 2. HTTP服务 3. 存储:NFS挂载
[root@xuegod63 ~]# vim /etc/ha.d/authkeys //设置主备节点间通信时所使用的验证文件,保证安全性。主备节点配置要求一致。
23 auth 3 #去掉注释
24 #1 crc
25 #2 sha1 HI!
26 3 md5 findkey #去掉注释,修改md5加密值已经名字
[root@xuegod63 ~]# chmod 600 /etc/ha.d/authkeys //此文件权限必须是600,否则启动不成功
/etc/ha.d/authkeys 文件决定了认证密钥。共有三种认证方式:crc,md5,和sha1。
如果Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但也希望降低CPU使用,则使用md5。最后,如果想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。

定义浮动资源:[定义好了资源之后,我们可以测试是否正常][root@xuegod63 ~]# vim /etc/ha.d/haresources       //第44行加一行44 #node-name resource1 resource2 ... resourceN45 xuegod63.cn IPaddr::192.168.1.200/24/eth0 Filesystem::192.168.1.61:/wwwdir::    /var/www/html::nfs  httpd#注:node-name填的是主服务器的主机名。 xuegod64上不需要修改。这样资源默认会加一这个主机上。当xuegod63坏了,xuegod64会再接管。#IPaddr::192.168.1.200/24/eth0  指定VIP及绑定到哪个网卡上#Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs   指定要挂载的存储#httpd   指定要启动的服务。 注,这个服务必须是/etc/init.d下,可以通过service去启动或关闭    [root@xuegod63 ~]# /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0 startINFO: Adding inet address 192.168.1.200/24 with broadcast address 192.168.1.255 to device eth0INFO: Bringing device eth0 upINFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-192.168.1.200 eth0 192.168.1.200 auto not_used not_usedINFO:  SuccessINFO:  SuccessARPING 192.168.1.200 from 192.168.1.200 eth0Sent 5 probes (5 broadcast(s))Received 0 response(s)    [root@xuegod63 ~]# ip addr             //查看IP,ifconfig看不到200的ip2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:d7:42:30 brd ff:ff:ff:ff:ff:ff    inet 192.168.1.63/24 brd 192.168.1.255 scope global eth0    inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0    inet6 fe80::20c:29ff:fed7:4230/64 scope link        valid_lft forever preferred_lft forever    [root@xuegod63 ~]# /etc/ha.d/resource.d/Filesystem 192.168.1.61:/wwwdir /var/www/html/ nfs start           //手动加载NFS存储资源到/var/www/htmlINFO: Running start for 192.168.1.61:/wwwdir on /var/www/htmlINFO:  SuccessINFO:  Success    [root@xuegod63 ~]# ll /var/www/html/-rwxrwxrwx 1 root root 27 Dec 22 15:55 index.html    [root@xuegod63 ~]# mount           //查看挂载的资源……192.168.1.61:/wwwdir on /var/www/html type nfs (rw,vers=4,addr=192.168.1.61,clientaddr=192.168.1.63)    [root@xuegod63 ~]# /etc/init.d/httpd start配置住配置文件[root@xuegod63 ~]# grep ^[^#] /etc/ha.d/ha.cf          //看一下配置文件有效行logfacility local0auto_failback on#auto_failback on 为 on 时,主结点恢复正常后,资源自动转给主结点。 建议设为 auto_failback off ,等主节点恢复正常后,在业务不繁忙时,切换回来。防止主节点恢复正常时,回切时,再次影起网络中断。 [root@xuegod63 ~]# vim /etc/ha.d/ha.cf24 debugfile /var/log/ha-debug                       #这些行除开auto_failback on默认启用,其他手动启用29 logfile /var/log/ha-log48 keepalive 2                      #设定 heartbeat 之间的时间间隔为 2 秒。56 deadtime 30                      #在 30 秒后宣布节点死亡。61 warntime 10                      #在日志中发出“late heartbeat“警告乀前等待的时间,单位为秒。71 initdead 120                     #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。76 udpport 694                      #使用端口 694 进行 bcast 和 ucast 通信。这是默认的,并且在 IANA 官方注册的端口号。121 ucast eth0 192.168.1.64                                 #需要修改,表示从本机的 eth0 接口发心跳消息给对方节点,写另一端的 IP 地址 。 这是单播地址。 xuegod64 上改为 192.168.1.63  。心跳网卡 ,如果你有两个网卡,可以写成 eth1 注:配置文件中 91行 #bcast  eth0   #表示在 eth0 接口上使用广播 heartbeat(将 eth1 替换为 eth0, eth2,或者您使用的任何接口)。157 auto_failback on                                            #默认启用,当 auto_failback 设置为 on 时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为 off,主节点便不能重新获得资源。211 node    xuegod63                                            #需要修改,该选项是必须配置的。集群中机器的主机名,不“uname –n”的输出相同。212 node    xuegod64                                            #需要修改220 ping 192.186.1.254                        #需要修改,通过ping命令实现仲裁253 respawn hacluster /usr/libexec/heartbeat/ipfail         #需要修改259 apiauth ipfail gid=haclient uid=haclusterWeb从    从63上cp文件过去即可[root@xuegod63 ~]# cd /etc/ha.d/    [root@xuegod63 ha.d]# scp ha.cf haresources authkeys 192.168.1.64:/etc/ha.d/    [root@xuegod64 ~]# chmod 600 /etc/ha.d/authkeys    [root@xuegod64 ~]# vim /etc/ha.d/ha.cf改:ucast eth0 192.168.1.64为:ucast eth0 192.168.1.63#修改单播地址启动heartbeat    [root@xuegod63 ~]# /etc/init.d/heartbeat restart[root@xuegod64 ~]# /etc/init.d/heartbeat restartStopping High-Availability services:                       [  OK  ]Waiting to allow resource takeover to complete:     [ OK ]#等待资源接管完成。 takeover接管。  当启动停留在这个界面时,xuegod64会接管所有浮动资源。等下面启动成功时,xuegod64会释放资源,浮云资源,再次加载。Starting High-Availability services: IPaddr[27857]: INFO:  Resource is stopped                                                           [  OK  ][root@xuegod63 ~]# netstat -antup | grep 694udp        0      0 0.0.0.0:694              0.0.0.0:*                               61266/heartbeat: wr [root@xuegod64 ~]# netstat -antup | grep 694udp        0      0 0.0.0.0:694               0.0.0.0:*                               46002/heartbeat: wr 查看集群资源WEB主[root@xuegod63 ~]# ip addr                     //VIP 1.200有……2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000……    inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0……[root@xuegod63 ~]# /etc/init.d/httpd status            //服务是启动的httpd (pid  66549) is running...    [root@xuegod63 ~]# df –h                   //NFS是挂载的Filesystem            Size  Used Avail Use% Mounted on/dev/sda2             9.9G  3.9G  5.5G  42% /tmpfs                 491M  224K  491M   1% /dev/shm/dev/sda1             194M   30M  155M  16% /boot/dev/sr0              3.6G  3.6G     0 100% /media192.168.1.61:/wwwdir  9.9G  3.9G  5.6G  42% /var/www/htmlWEB从    [root@xuegod64 ~]# ip addr                 //没有虚拟IP……2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:ae:04:06 brd ff:ff:ff:ff:ff:ff    inet 192.168.1.64/24 brd 192.168.1.255 scope global eth0……    [root@xuegod64 ~]# /etc/init.d/httpd status            //服务没有启动httpd (pid  66549) is running...    [root@xuegod64 ~]# df –h                           //NFS未挂载Filesystem      Size  Used Avail Use% Mounted on/dev/sda2       9.9G  3.9G  5.6G  42% /tmpfs           491M  224K  491M   1% /dev/shm/dev/sda1       194M   30M  155M  16% /boot/dev/sr0        3.6G  3.6G     0 100% /media测试使用客户端访问192.168.1.200关闭XueGod63的网卡,等待30s,在cong上查看IP,NFS等状态    [root@xuegod63 ~]# ifdown eth0(虚拟机效果,有时候很有问题,可以直接断开)XueGod64    [root@xuegod64 ~]# ip addr             //虚拟IP已经转移过来2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 ……    inet 192.168.1.64/24 brd 192.168.1.255 scope global eth0    inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0……    [root@xuegod64 ~]# df –h……192.168.1.62:/wwwdir  9.9G  1.1G  8.3G  12% /var/www/html     #NFS也已经挂载    [root@xuegod64 ~]# service httpd status                     //HTTPD已经启动httpd (pid  50334) is running...访问测试XueGod63恢复链接    [root@xuegod63 ~]# ifup eth0    [root@xuegod63 ~]# ip addr……2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000……    inet 192.168.1.63/24 brd 192.168.1.255 scope global eth0    inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0……    [root@xuegod63 ~]# df –h……192.168.1.62:/wwwdir  9.9G  1.1G  8.3G  12% /var/www/html    [root@xuegod63 ~]# service httpd statushttpd (pid  68370) is running...#发现资源已经却换回来XueGod64上    [root@xuegod64 ~]# ip addr……2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000……    inet 192.168.1.64/24 brd 192.168.1.255 scope global eth0……    [root@xuegod64 ~]# df –h……/dev/sr0        3.6G  3.6G     0 100% /mnt    [root@xuegod64 ~]# service httpd statushttpd is stopped访问测试:

拓展:heartbeat 自带的断网切换的工具-ipfail
ipfail 断网切换的原理: 关于 ipfail 这个断网切换的原理很简单,首先 heartbeat 要判断自己的网络是否正常其实就是通过 ping某个 ip,如果可以 ping 的通,说明网络是通的,如果 ping 不通了,说明是网络断了,或者是主服务器的网卡坏了,然后执行切换的劢作。
ping 一个 group 的 ipfail 【配置: ping_group group1 172.16.103.254 172.16.103.212】在配置文件的 227行

0 0