Heartbeat教程

        前言:在网上找了不少的资料,却没有一个成型的文档.如下是我总结出来的经验,若有错误和建议请指出.

一. 安装前环境设定
        两台主机硬件环境能够不同,本人用的是vmware环境.
        硬件环境:dell 1800(虚拟 2个机器)
        软件环境:vmware5  redhat as4    heartbeat2.0.4
        环境描述:
        两台计算机(两个节点),一个共享SCSI硬盘盒(用于存储共享,参考下边"添加硬件")。每一个节点都安装支持共享总线的SCSI卡;每一个节点有本身的系统磁盘;每一个分别带有两块以太网卡,(其中一块用于网络通信,另外一块用于心跳功能。)。两个节点的网络设置以下:
        节点1: 主机名为:www1,第一块网卡(eth0)的IP地址:192.168.0.197 (用于网络通信) 。第二块网卡(eth1)的IP地址:192.168.1.1 (用于心跳通信) 。 

        节点2: 主机名为:www2,第一块网卡(eth0)的IP地址:192.168.0.198 (用于网络通信) 。第二块网卡(eth1)的IP地址:192.168.1.2 (用于心跳通信) 。
        vm里用eth1作心跳(只要互相能够ping就能够了)。实际安装时,两台主机的eht1使用双机对联线直接链接。

        vmware下快速安装双系统!^_^
        1. 在d:\vmfile目录下新建目录linuxha2,在把d:\vmfile\linuxha1里面刚才安装好的虚拟操做系统复制一份到linuxha2
这样子,咱们就获得了两个虚拟的RedHat Advanced Server4了,固然,他们是同样的,咱们须要进行些修改。 
        2. 进入d:\vmfile\linuxha2,用写字板打开linux.vmx,修改displayName = "Linuxha1"为displayName = "Linuxha2",这样子,在vmware控制台,你就看到两个不一样的名字了。尽管如此,若是你同时启动两个虚拟机,这两个虚拟系统仍是同样的,因此,咱们须要修改他们的ip地址,主机名字等。 
        3. 将linuxha2目录中的系统启动,修改主机名字
#vi /etc/sysconfig/network
将HOSTNAME=www1改成HOSTNAME=www2
接下来修改ip地址:
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
将IPADDR=192.168.1.1改成IPADDR=192.168.1.2
修改/etc/hosts,参考下边的步骤 
        4.Power off 这个虚拟机,这个样子,咱们就获得了两个不一样的系统,一个是linuxha1,位于d:\vmfile\linuhxad1,一个是linuxha2 位于d:\vmfile\linuxha2
        添加硬件 
        在两个系统都power off的状态下。咱们须要分别给两个系统添加一块网卡,还要添 加一个共享磁盘 
        1.用vmware 打开linuxha1,注意不是power on 哦。在setting菜单下选择configuration edtior
,点击add,添加一块网卡,这个就不须要讲了吧。还须要添加一个虚拟磁盘,仍是点add,硬件类型是Hard disk,而后”Creat a new virtual disk”,大小我分配了0.5G,并选择上下面的“Allocate all disk space”.下一步是给共享磁盘起名字叫”sharedisk.pln”,而后肯定。这样子就添加好了。 
        2.用vmware 打开linuxha2,注意不是power on 哦。一样添加一块网卡。接着添加虚拟磁盘,此次是”Use an existing virtual disk”,而后选择咱们刚才在linuxone中建立的sharedisk.pln,按照提示就能够了。 
        3.磁盘和网卡都添加好了。这里,还须要注意,因为vmware中的系统启动后会锁定磁盘,因此当你启动linuxha1后共享磁盘被锁定了,你的linuxha2就起不来了。所以,咱们须要处理一下先。首先,到d:\vmfile\linuxha1下,用写字板打开linux.vmx,在最后一行加入
Disk.locking = false
而后到d:\vmfile\linuxha2,一样修改linux.vmx, 在最后一行加入
Disk.locking = false
保存退出。 
        4.好了,到此为止,两个系统的硬件都配置好了.
 
分区方式:
[root@www1 ha.d]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      7.4G  2.8G  4.3G  40% /
/dev/sda1              99M  9.0M   85M  10% /boot
*安装启动服务后
[root@www1 ha.d]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      7.4G  2.8G  4.3G  40% /
/dev/sda1              99M  9.0M   85M  10% /boot
none                   94M     0   94M   0% /dev/shm
/dev/sdb             1008M   34M  924M   4% /ha       ##由ha自动加载
 
        二.安装前网络环境设定:
node1: 主机名:www1 ( HA01 )
eth0:  192.168.0.197        //对外IP地址
eth1:  192.168.1.1          //HA心跳使用地址
node2: 主机名:www2 ( HA02 )
eth0:  192.168.0.198        //对外IP地址
eth1:  192.168.1.2          //HA心跳使用地址
特别注意要检查如下几个文件:
/etc/hosts
/etc/host.conf
/etc/resolv.conf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/nsswitch.conf
#vi /etc/hosts
node1的hosts内容以下:
127.0.0.1        localhost.localdomain   localhost
192.168.0.197     www1              HA01
192.168.1.1       HA01
192.168.1.2       HA02
192.168.0.198     www2
node2的hosts内容以下:
127.0.0.1       localhost.localdomain   localhost
192.168.0.198    www2              HA02
192.168.1.2      HA02
192.168.1.1      HA01
192.168.0.197    www1
#cat /etc/host.conf
order hosts,bind
#cat /etc/resolv.conf
nameserver 202.98.0.68    //DNS地址
#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=www1           //主机名
#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.197
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
#cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.1
NETMASK=255.255.255.0
[node1] 与 [node2] 在上面的配置中,除了
/etc/hosts
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
要各自修改外,其余一致。
配置完成后,试试在各自主机上ping对方的主机名,应该能够ping通:
/root#ping HA02
PING HA02 (192.168.1.2) 56(84) bytes of data.
64 bytes from HA02 (192.168.1.2): icmp_seq=0 ttl=64 time=0.198 ms
64 bytes from HA02 (192.168.1.2): icmp_seq=1 ttl=64 time=0.266 ms
64 bytes from HA02 (192.168.1.2): icmp_seq=2 ttl=64 time=0.148 ms
--- HA02 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.148/0.204/0.266/0.048 ms, pipe 2

        三.安装HA 与HA依赖包
rpm -Uvh libnet-1.1.2.1-1.rh.el.um.1.i386.rpm  //能够不装
rpm -Uvh heartbeat-pils-2.0.4-1.el4.i386.rpm
rpm -Uvh heartbeat-stonith-2.0.4-1.el4.i386.rpm
rpm -Uvh heartbeat-2.0.4-1.el4.i386.rpm
rpm -Uvh ipvsadm-1.24-5.i386.rpm

        四. 配置 heartbeat
使用 heartbeat,必须配置三个文件:authkeys、ha.cf 和 haresources。
---------------------------
配置心跳的加密方式:authkeys
---------------------------
#vi /etc/ha.d/authkeys
若是使用双机对联线(双绞线),能够配置以下:
#vi /etc/ha.d/authkeys
auth 1
1 crc
存盘退出,而后
#chmod 600 authkeys
---------------------------
配置心跳的监控:haresources
---------------------------
#vi /etc/ha.d/haresources
        1.没有共享磁盘的状况下配置
各主机这部分应彻底相同。
www1 192.168.0.200 ipvsadm httpd
指定www1调用ipvsadm启动http服务,系统附加一个虚拟IP 192.168.0.200 给eth0:0
这里若是www1宕机后,www2能够自动启动http服务,并新分配IP 192.168.0.200给www2的eth0:0
        2.有共享磁盘状况的配置
www1 192.168.0.200 Filesystem::/dev/sdb1::/ha::ext3 ipvsadm httpd
设置www1为主节点,集群服务器的ip地址为192.168.0.200,netmask 集群的服务有httpd,还有共享磁盘/dev/sdb1。该文件只有一行,其含义就是,当主节点www1宕机时,自动启用备用节点里www2来提供 服务,在切换到www2上时,自动启动httpd服务,同时,将/dev/sdb1挂接到/ha。
*配置HA高可用,不要设置NFS挂载和mysql服务在启动服务器时自动运行,也就是说,把与HA相关资源交给Heartbeat HA去自动管理。 
        3.由NFS服务的设置
www1 10.4.66.88 Filesystem::192.168.0.252:/data::/data::nfs mysql.server
 
这一行配置了3个资源,第一个是IP地址,第二个是NFS共享数据,
第三个是mysql.server服务,文件在/etc/rc.d/init.d/目录,
可使用mysql.server start或stop来启动或中止服务。
---------------------------
配置心跳的配置文件:ha.cf
---------------------------
#vi /etc/ha.d/ha.cf
logfile /var/log/ha_log/ha-log.log   ## ha的日志文件记录位置。如没有该目录,则须要手动添加
logfacility local0
#bcast eth1     ##使用eht1作心跳监测,这个我没有设置
keepalive 2    ##设定心跳(监测)时间时间为2秒
#warntime 10    ##超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中,这个也没有设置
deadtime 30     ##超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡
initdead 120     ##在某些系统上,系统启动或重启以后须要通过一段时间网络才能正常工做,该选项用于解决这种状况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694    ##使用udp端口694 进行心跳监测
auto_failback on  ##heartbeat的两台主机分别为主节点和从节点。主节点在正常状况下占用资源并运行全部的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的状况下,一旦主节点恢复运行,则自动获取
node www1  ##节点1,必需要与 uname -n 指令获得的结果一致。
node www2  ##节点2
ping 192.168.10.1   ##经过ping 网关来监测心跳是否正常。
respawn hacluster /usr/lib64/heartbeat/ipfail
---------------------------

        五. HA服务的启动、关闭以及测试
启动HA: service heartbeat start
关闭HA; service heartbeat stop
系统在启动时已经自动把heartbeat 加载了。
使用http服务测试 heartbeat
首先启动httpd服务
#service httpd start
编辑各自主机的测试用html文件,放到/var/www/html/目录下。
启动node1的heartbeat www1#service heartbeat start
将看到不用的页面
在主节点(www1)上启动heartbeat服务:/etc/init.d/heartbeat start。 若是不出现错误,web服务应该被heartbeat启动,同时heartbeat为主节点设置IP地址192.168.0.200。使用ifconfig eth0:0能够看到以下信息:
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:FD:EB
inet addr:192.168.0.200 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14970 errors:0 dropped:0 overruns:0 frame:0
TX packets:14977 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3624073 (3.4 Mb) TX bytes:3626223 (3.4 Mb)
Interrupt:19 Base address:0x10a0
同时/dev/sdb,应该被挂接。使用df -h,能够看到的信息包含下面的行:
/dev/sdb 485M 8.1M 452M 2% /ha
在node2(www2)上启动heartbeat:/etc/init.d/heartbeat start。 使用ifconfig eth0:0能够看到以下信息: eth0:0 Link encap:Ethernet HWaddr 00:0C:29:E4:1E:F7 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:19 Base address:0x10a0 代表如今node2节点没有被启用。 使用df -h,看到的信息不包含下面的行: /dev/sdb1 485M 8.1M 452M 2% /ha 代表/dev/sdb1没有被加载。 直接关闭节点1的电源或者在www1上执行service heartbeat stop命令(模拟故障)。 最慢30秒后,在节点2(www2) 上执行ifconfig eth0:0,能够看到eth0:0已经被设置为192.168.0.200 还能够在客户机上这样来肯定 ^_^ 1.www1挂起服务时的状态,仔细看197和200的mac地址是同样的 D:\>arp -a Interface: 192.168.0.138 --- 0x10005   Internet Address      Physical Address      Type   192.168.0.197         00-0c-29-71-4b-12     dynamic   192.168.0.200         00-0c-29-71-4b-12     dynamic   192.168.0.254         00-01-50-55-63-5b     dynamic 2.www2挂起服务   mac地址变啦 D:\>arp -a Interface: 192.168.0.138 --- 0x10005   Internet Address      Physical Address      Type   192.168.0.200         00-0c-29-6c-54-91     dynamic   192.168.0.254         00-01-50-55-63-5b     dynamic (发现个小问题,若是把两台节点都手动stop之后,必须从新启动机器才能从新正常启用heartbeat服务)         六. 防火墙设置 heartbeat 默认使用udp 694端口进行心跳监测。 若是系统有使用iptables 作防火墙,应记住把这个端口打开。 #vi /etc/sysconfig/iptables 加入如下内容 -A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -d 10.0.0.201 -j ACCEPT 意思是udp 694端口对 对方的心跳网卡地址 192.168.1.2 开放。 #service iptables restart 从新加载iptables。做者:刚-百万富翁