高可用集群(HA)的简单架设

1616阅读 0评论2011-09-09 hanlenry
分类:LINUX

(1)原理:Web2服务器会通过VMnet3来测试Web1的心跳,当Web1服务器当机后,Web2在尝试几次心跳测试,如果仍然没有测试到心跳信息就认为Web1当掉了。此时就把Web1上的资源给拿过来。资源包括ip,httpd,网页文件。为了达到演示效果,这里的实验中网页文件我就直接使用不同的内容。

(2)需要的额外软件包:
heartbeat-2.1.4-9.el5.i386.rpm             heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm       heartbeat-stonith-2.1.4-10.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm         libnet-1.1.4-3.el5.i386.rpm

配置注意事项:一切服务在集群上,不能手动启动。也不能让它开机自动启动

(3)配置网络环境,及修改主机名

     1)在Web1上

  ① 配置ip,将eth1的网卡类型设置为VMnet3。

修改/etc/sysconfig/network-scripts/ifcfg-eth0 文件。
  #vim /etc/sysconfig/network-scripts/ifcfg-eth0
        修改 BOOTPROTL=static
添加   IPADDR=192.168.0.111
NETMASK=255.255.255.0
        同样,修改/etc/sysconfig/network-scripts/ifcfg-eth1
#vim /etc/sysconfig/network-scripts/ifcfg-eth1
  修改 BOOTPROTL=static
添加   IPADDR=10.0.11.11
NETMASK=255.0.0.0
        重启网络服务:#servcie network restart
-------------------------
② 修改主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node1.hanlenry.com
  #hostname node1.hanlenry.com
--------------------------- 
     2)在Web2上

        ① 配置ip,将eth1的网卡类型设置为VMnet3。

修改/etc/sysconfig/network-scripts/ifcfg-eth0 文件。
  #vim /etc/sysconfig/network-scripts/ifcfg-eth0
        修改 BOOTPROTL=static
添加   IPADDR=192.168.0.158
NETMASK=255.255.255.0
        同样,修改/etc/sysconfig/network-scripts/ifcfg-eth1
#vim /etc/sysconfig/network-scripts/ifcfg-eth1
  修改 BOOTPROTL=static
添加   IPADDR=10.0.11.12
NETMASK=255.0.0.0
        重启网络服务:#servcie network restart
-------------------------
② 修改主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node1.hanlenry.com
  #hostname node2.hanlenry.com

(4)为了方便使用ssh,使用ssh时不需要输入密码。于是做下面操作:
    1)在Web1上 
首先生成私钥:
    #ssh-keygen -t rsa
 拷贝公钥到Web2上
    #ssh-copy-id -i .ssh/id_rsa.pub root@node2
在Web1上查看Web2的ip。
#ssh node2 -- 'ifconfig'
  2)在node2上
    #ssh-keygen -t rsa
    #ssh-copy-id -i .ssh/id_rsa.pub root@node1
    #ssh node1 -- 'ifconfig'
 (5)安装httpd
  
  在Web1上:
#yum install httpd
#vim /var/www/html/index.html

This is the node1’s web page

  在Web2上:
#yum install httpd
#vim /var/www/html/index.html
 

This is the node2’s web page

-------------------------------------------------
(6) 为了检验我们的配置是否正常,我们来测试一下,你只要能确保你配置的是正确的,这一步可以不做。如果你做了这一步,测试完成后,要把httpd服务关闭,并且关闭开机启动。
  在node1上:#service httpd start
  在node2上:#service httpd start
  
  在地址栏中输入ip地址进行测试,如图:
  
  注意:再次强调,测试结束后,关闭httpd服务,并且关闭自动启动
---------------------------------------------------
(7)安装heartbeat
我把rpm包放在/root/heartbeat 中,heartbeat有三个配置文件:
/etc/ha.d/ha.cf,有关心跳信息的定义
/etc/ha.d/haresources,本地的最简单的基于纯文本文件的CRM(集群资源管理器)
/etc/ha.d/authkeys ,实现两个节点传递心跳信息时,进行签名。

     1) 在Web1上安装heartbeat:
#cd /root/heartbeat
      #yum localistall *.rpm -y  --nogpgcheck
在Web2上安装heartbeat:
#cd /root/heartbeat
#yum localinstall *.rpm -y --nogpgcheck
----------------------------------------------------------------------------------
     2)在Web1上:
#cd /usr/share/doc/heartbeat-2.1.4/
    #cp ha.cf haresources authkeys /etc/ha.d
  #cd /etc/ha.d
  #vim ha.cf
          添加:bcast eth1 
                node node1.a.org
                node node2.a.org
  -------------------------------------------------              
    #vim authkeys
      auth 2
      2 sha1 29jfajfiwe  //sha1后面的东西你可以随便写。
补充:
( 生成随机数:#dd if=/dev/urandom bs=512 count1 |md5sum)
 修改一下权限:
#chmod 400 authkeys
  -----------------------
  #vim haresources
  添加:node1.a.org 192.168.0.12/24/eth0/192.168.0.255 httpd
  其中node1.a.org 为主节点
          192.168.0.11 为流动地址,也就是Web1上的资源。
            httpd 表示在流动ip上提供的服务
  --------------------------  
     3)在Web1上
  # cd /usr/lib/heartbeat
    # ls
    # ./ha_propagate    //此脚本可以为Web2生成authkeys,ha.cf文件,我们只需要在手动拷贝一下haresources到Web2。
    #scp haresources node2:/etc/ha.d
启动heartbeat;
  # /etc/init.d/heartbeat start
     4)在Web1上,开启Web2的heartbeat。
  #ssh node2 -- '/etc/init.d/heartbeat start'
------------------------------------------
(8)你访问的时候输入流动ip(192.168.0.12),此时因为Web1是主节点,所以访问的是Web1的网站信息。如图所示:
-------------------------------------
 (9)测试,我们将web1的服务停掉
#/etc/init.d/heartbeat stop 
  此时访问的就是Web2 的页面内容,如图:
 
并且此时你可以用ifconfig来查看流动ip在哪个服务器上。此时流动ip是在Web2服务器上。
  --------------------
 (10) 我们也可以使用heartbeat提供的脚本来测试。
#/etc/init.d/heartbeat start
#cd /usr/lib/heartbeat
  # ./hb_standby 把主节点让出去
 此时主节点就是Web2,因此你访问的时候,应该就是Web2的页面内容了。
  # ./hb_takeover 把主节点夺回来
 此时做同样地测试看看结果。那此时就会友成为Web1的页面内容。
是不是很神奇呀!

上一篇:基于LVS实现LB(负载均衡)
下一篇:实现集群的高可用和负载均衡(基于LVS-DR模型)