高可用集群就是为了保证某项服务能够时时在线,我们可以通过几个9来衡量一个高可用集群提供服务的稳定性,例如5个9的高可用集群必须保证服务一年在线的时间占99.999%,也就是说一年的时间中仅允许服务电线不到6分钟的时间,可见高可用集群非同反响。
       下面我就给大家讲解一下高可用性集群的工作机制,由于只是为了讲明原理,在此处我们就假设一个集群中之后两个节点(即两台提供服务的主机,假设提供的是web服务)。
       最简单的高可用集群的工作机制为,两个节点都在线,但是只有节点1提供web服务,在提供服务的同时,节点1还要在特定的时间段内不停的向外发送自己的心跳信息,以此来通告在同一个集群中的节点2自己运行正常,当节点2连续2-3此在规定的时间段内没有接受到几点1的心跳信息,则就认为节点1已经不能正常的提供web服务了,此时节点2就直接将节点1的资源(资源:就是为提供一个服务所需要必须东西,如IP,数据等)抢夺过来,并立刻提供相同的服务,这样就保证了服务的时时在线。
       当然这是最简单的靠可用集群的工作机制,但是只有理解了基本的原理,才能进行更高层次的探索,下面我们就基于这个最简单、最基本的高可用集群的原理来实现基于Heartbeat的高可用web服务集群

 

       实验目的:通过Heartbeat来实现高可用web服务集群模拟

       实验拓扑图如下图所示:

 

image

        每个节点都有两块网卡分别为eth0、eth1,前者和交换机或路由器相连来为外界提供服务,后者直接连接为彼此传递心跳信息,VIP为在线提供服务的节点向外提供服务的IP地址,这是一个虚拟的IP地址,当提供服务的节点宕机之后,这个VIP就将被替代者所使用。
        这里我们要使用到heartbeat软件,下面我们就对这款软件的三个主要的配置问津进行一下介绍:

        /etc/ha.d/ha.cf 定义心跳信息传输的端口以及整个集群一共有多少个节点
       /etc/ha.d/haresources 本地最简单的基于纯文本文件的CRM,用来定义集群使用的VIP、广播等基本资源  
      /etc/ha.d/authkeys(400) 对传递的心跳信息进行签名,防止心跳信息被改动

      下面 我们就开始进行相应的配置:

       1、给noid1配置地址
             ifconfig eth0 192.168.0.202/24
             ifconfig eth1 1.1.1.1
             给noid2配置地址
             ifconfig eth0 192.168.0.204/24
             ifconfig eth1 1.1.1.2

       2、配置本地主机名称解析  

             在node1上
             vim /etc/hosts  添加如下内容
            192.168.0.202     node1.a.org 
            192.168.0.204     node2.a.org

             node1、node2的主机名进行相应的修改
             在node1上
             hostname  node1.a.org
             在node2上
             hostname  node2.a.org

        3、只有我们要多次在连个节点间拷贝文件,为了省去繁琐的密码输入,我们在两个节点上进行如下配置

             在node1上
            ssh-keygen -t rsa
            ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.204
             在node2上
            ssh-keygen -t rsa
            ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.202
            从此我们在两个节点上拷贝文件就不需要输入密码了

        4、在两个节点上分别安装httpd
             yum install httpd –y
             任何集群服务都需要使用集群启动,而非手动启动,并保证开机不能自动启动
             chkconfig httpd off  防止开机自动启动 
             给每个http写一个网页,内容分别为自己的主机名,以便进行测试
             在两个节点上进行同样的操作

         5、开始安装集群服务

         (1)、下载安装包

                        创建一个目录将所用的安装包都放在这个目录内
                        mkdir node
                        所用到的安装包如下
                                    

         (2)、安装 这些软件包,因为他们之间有依赖关系,所以使用yum安装  

                       cd node
                       yum localinstall * --nogpgcheck –y

                      前两步需要在两个节点上都进行同样的操作

         (3)、将heartbeat的配置文件移动到/etc/下
                       cd /usr/share/doc/hearbeat-2.1.4
                       cp ha.cf harisources authkeys /etc/ha.d

         (4)、编辑配置文件/etc/ha.d/ha.cf

                       vim /etc/ha.d/ha.cf 进行如下修改
                      打开日志 logfile /var/log/ha-log
                      打开 udpport 694   两节点用此端口发送心跳信息
                      添加 bcast eth1       发送心跳信息的网卡
                     添加定义节点 node node1.a.org
                                             node node2.a.org

         (5)、编辑配置文件/etc/ha.d/authkeys  
                       vim /etc/ha.d/authkeys  添加如下内容
                       auth 2
                       2 sha1 kfhslkdhfsk(md5加密后的字符串,想要得到这个字符串运行如下命令,在将结果粘贴即可
                      dd if=/dev/urandom bs=512 count=1 | md5sum

                     将此文件的权限改为400
                     chmod 400 authkeys

         (6)、编辑配置文件/etc/ha.d/haresources

                      vim /etc/ha.d/haressources  添加如下内容
                      node1.a.org 192.168.0.85/24/eth0/192.168.0.255 httpd
                      上面的内容依次为:主节点的主机名,提供服务的IP即VIP,设定VIP的端口,广播地址,提供的服务

         (7)、将我们配置的这三个文件拷贝到node2上

                       cd /etc/ha.d
                       scp ha.cf authkeys  haresources  node2.a.org:/etc/ha.d

        (8)、启动heartbeat
                      在哪个节点上启动第一个该服务,以后所有的这个服务必须在这个节点上启动
                      我们就在node1上启动heartbeat服务
                      /etc/init.d/heartbeat start
                      在node1上启动node2的heartbeat服务
                     ssh node2 --‘/etc/init.d/heartbeat start’

           验证:我们设定的node1为主节点,所以服务应该由node1提供,即VIP在node1上,执行
                     ifconfig  进行查看,结果如下图:

                     2011-09-10 10-01-38

                     我们在node1上使用浏览器输入192.168.0.85这个VIP来对我们的web服务进行测试:

                     2011-09-10 10-02-28
                     表示此时提供web服务的节点为node1
                     
                     当node1宕机之后,服务将有node2进行提供,所以VIP将在node2上,为达到node1宕机的目的,我们将node1的heartbeat服务关闭,让其不能发送心跳信息(注意:不能在本机上停止服务,需要在另个节点上执行)在node2上执行如下命令:
                      ssh node1.a.org   --‘/etc/init.d/heartbeat stop’
                      对node2执行ifconfig 命令,将得到如下结果:
                      2011-09-10 10-04-10
                      我们在node1上使用浏览器输入192.168.0.85这个VIP来对我们的web服务进行测试:
                      2011-09-10 10-03-50

          本实验只是简单的模拟了基于heartbeat实现高可用的web集群,其更深层次的内容还需大家继续学习