linux集群学习实验:使用heartbeat实现对httpd的高可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux集群学习实验:使用heartbeat实现对httpd的高可用相关的知识,希望对你有一定的参考价值。

一、 实验环境:
如下图所示:两台服务器节点,一台客户端通过交换机互连,相关数据规划如下:
设备名称 IP地址 主机名
客户端 192.168.110.2 Client(win7)
服务器1 192.168.110.128 node1.yang.com
服务器2 192.168.110.129 node2.yang.com
技术分享图片

二、 配置步骤及说明

  1. 准备工作
    a. 主机名解析
    在heartbeat中,节点之间的通信使用的节点主机名称,因此必须确保每台主机的名称惟一,并且通过主机名能够访问到对应的IP地址。建议修改每个节点的/etc/hosts文件,使各节点保持一致:
    [[email protected] ha.d]# cat /etc/hosts
    192.168.110.128 node1 node1.yang.com
    192.168.110.129 node2 node2.yang.com
    b. 主机互信
    在集群中,建议使用集群主来管理整个集群,需要频繁的从主远程登录其他的成员,因此建议配置主机互信避免每次都输入密码进行操作。
    [[email protected] .ssh]# ssh-keygen -t rsa //全部回车,使用空密码即可,此时会在/root/.ssh目录中产生id_rsa.pub的文件
    [[email protected] .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
    //在节点1上将id_rsa.pub拷贝到node2即可。
    Node2上的配置与此类似。

  2. 安装heartbeat软件
    由于在CENTOS6的YUM源中没有配置有heartbeat,因此需要安装额外的YUM源:
    a. 获取YUM源:
    wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm -ivh epel-release-6-6.noarch.rpm
    b. Yum安装heartbeat
    Yum install –y heartbeat即可,安装完成后可以使用rpm –ql heartbeat |less查看一下安装产生的相关文件。
  3. Heartbeat安装完成后,其工作目录为/etc/ha.d目录,工作依赖于ha.cf,haresources以及authkeys三个文件,这三文件需要手工从安装的帮助路径拷贝到/etc/ha.d目录。
    #cp-p /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/
  4. 配置ha.cf文件
    该文件为主配置文件,其中定义了相关日志文件位置、成员节点的信息、消息事件层通信的机制(单播、组播还是广播)等,在我们的场景中需要修改如下的事项,去掉相应行前面的注释标志#:
    [[email protected] ha.d]# cat /etc/ha.d/ha.cf
    debugfile /var/log/ha-debug //用于观察heartbeat事务行为
    logfile /var/log/ha-log //记录相关的日志
    udpport 694 //通信端口694
    mcast eth0 225.0.0.1 694 1 0 //采用组播通信机制
    auto_failback on //当主节点恢复时,资源回切
    node node1.yang.com //定义两个node,分别使用其主机名
    node node2.yang.com
    ping 192.168.110.2 //由于集群只有2个节点,需要借助ping进行检测
  5. 配置authkeys文件
    authkeys为成员节点通信的时候采用的加密机制确保通信安全,有三种加密机制,分别为CRC,MD5以及SHA。写法较简单,如下:
    auth 3 //定义认证采用的id
    3 md5 Hello! //定义该id所对应的认证算法以及密钥
    该文件是为了确保节点间通信的安全性,建议配置权限为600.
  6. 配置haresources文件
    haresouces文件为状态为主的节点需要启用的资源,以及状态为备的节点需要关闭的资源。资源以行为单位,格式如下:
    nodename resources1 resource2 …
    其中nodename必须为ha.cf文件中配置的其中一个节点名称,用于表示资源希望运行在的那个服务器,称为集群主服务器。Resources之间使用空格隔开,这些resources实际上是heartbeat可以调用的脚本,其中IPaddr为软件提供的脚本,其他的脚本位于/etc/ha.d/rc.d/目录中;除了这些脚本外,/etc/init.d/中的脚本,只有符合LSB风格的也可以被调用。因此安装httpd后的httpd脚本是可以直接调用的。
    如果resources有参数传递,需要使用::进行分隔,多个参数之间也使用::进行分隔。
    本实验为httpd提供高可用服务,因此需要用到的资源如下:
    a. 对外提供服务的虚拟IP
    b. 提供WEB服务的httpd脚本,(安装apache后就有此脚本)
    haresource文件配置:
    node1.yang.com 192.168.110.100/24/eth0 httpd
    到此三个关键的文件就配置完成了,现在将三个文件拷贝至备机:
    scp -p authkeys haresources ha.cf node2:/etc/ha.d/
    特别注意:备机与主机的文件保持一致即可,注意haresources文件中的node1.yang.com不能修改为node2.yang.com,原因前面已经解释过。
  7. 其他设置
    a. 由于集群所需要使用的服务都交由heartbeat软件进行整体控制,因此在两台设备需要确保的是heartbeat在运行,而诸如vip,httpd等资源由heartbeat控制即可。因此可以设置heartbeat开机即启动,将httpd开机关闭。
    [[email protected] ha.d]# chkconfig --list heartbeat
    heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
    [[email protected] ha.d]# chkconfig --list httpd
    httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
    b. 为了方便后续测试,将两个节点的httpd的网页文件中写入不同的内容以示区分:
    [[email protected] ha.d]# cat /var/www/html/index.html
    Comes from node1.yang.com
    [[email protected] ha.d]# cat /var/www/html/index.html
    Comes from node2.yang.com
  8. 开启heartbeat服务
    a. 启动主节点服务:
    Service heartbeat start
    b. 在主节点上启动备节点上面的服务:
    ssh [email protected] “service heartbeat start”
  9. 测试
    a. 在node1上面ip addr查看VIP地址:
    [[email protected] ha.d]# ip addr
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:70:82:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.128/24 brd 192.168.110.255 scope global eth0
    inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe70:8269/64 scope link
    valid_lft forever preferred_lft forever
    b. 从客户端访问http://192.168.110.100
    技术分享图片
    c. 在集群主上面将eth0 down掉,再刷新页面:
    技术分享图片
    d. 在集群备上机查看VIP:
    [[email protected] ha.d]# ip addr
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:46:09:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.129/24 brd 192.168.110.255 scope global eth0
    inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe46:9ee/64 scope link
    valid_lft forever preferred_lft forever
    分析:
    此时主节点ping192.168.110.2不通,同时与不能与备节点通信,因此主节点认为自己故障,将资源放弃;而备节点可以ping通192.168.110.2,而不能与主节点通信,因此认为自己正常,启用相应的资源。可以分析/var/log/ha-debug以及/var/log/ha-log日志中的详细过程。同时可以通过抓包看到节点间的通信以及各节点ping 192.168.110.2地址。
  10. 总结:
    本实验简要的说明了heartbeat如何为集群提供httpd的高可用,在真实的环境中应当是heartbeat为各种服务代理服务提供高可用,通过将反向代理将服务转发到后端服务的集群进行处理。而heartbeat为反向代理本身提供集群服务。可以看到所有用于提供服务的资源被heartbeat统一管理,在主节点上开启,当主节点出现故障经过集群判断新的主后,在新的主上面重新启用这些资源。

以上是关于linux集群学习实验:使用heartbeat实现对httpd的高可用的主要内容,如果未能解决你的问题,请参考以下文章

HeartBeat基础配置(实现Web服务双机热备)

Linux 高可用(HA)集群之Heartbeat安装

高可用集群之heartbeat v2--基于CRM实现mysql高可用集群(未完)

老王学linux-heartbeat-2.1.4-12.el6.x86_64

Linux之Heartbeat实现服务器的高可用

heartbeat v1版CRM的高可用web集群的实现