一、环境 node0 eth0:192.168.32.30 service vip1:192.168.32.21 VMAC1:00:1E:68:1E:99:5E eth1:10.160.100.30 heart RMAC:00:18:8B:8E:04:E2 node1 eth0:192.168.32.31 service vip1:192.168.32.21 VMAC1:00:1E:68:1E:99:5E eth1:10.160.100.31 heart vip2:192.168.32.22 VMAC2:00:1E:68:1E:88:5E RMAC:00:1E:68:1E:19:5E node2 eth0:192.168.32.32 service vip2:192.168.32.22 VMAC2:00:1E:68:1E:88:5E eth1:10.160.100.32 heart RMAC:00:1E:68:1E:16:7E 实验要求: 1、当node0的网络出现故障时,node1自动切换将自己的ip、hostname、mac地址改成vip1、vman1、 nodevir1;故障恢复后node0自动切换回来,将自己的ip、hostname、mac改成vip1、vman1、nodevir,node1恢 复自身的网络参数 2、当node2的网络出现故障时,node1自动切换将自己的ip、hostname、mac地址改成vip2、vman2、 nodevir2;故障恢复后node0自动切换回来,将自己的ip、hostname、mac改成vip2、vman2、nodevir2,node1 恢复自身的网络参数 二、heartbeat安装(三台node操作一样) 1、安装libnet [root@node1 ~]# tar -zxvf libnet-1.1.4.tar.gz [root@node1 ~]# cd libnet-1.1.4 [root@node1 libnet-1.1.4]# ./configure [root@node1 libnet-1.1.4]# make;make install #libnet是一个高层次API工具,使用heartbeat需要用到他 2、安装heartbeat [root@node1 ~]# tar -zxvf heartbeat-2.1.3.tar.gz [root@node1 ~]# cd heartbeat-2.1.3 [root@node1 heartbeat-2.1.3]# ./ConfigureMe configure --disable-swig --disable-snmp-subagent [root@node1 heartbeat-2.1.3]# make ; make install [root@node1 heartbeat-2.1.3]# cp doc/ha.cf doc/haresource doc/anthkeys /etc/ha.d/ [root@node1 heartbeat-2.1.3]# cp ldirectord/ldiretord.cf /etc/ha.d/ [root@node1 heartbeat-2.1.3]# grouadd -g 694 haclient [root@node1 heartbeat-2.1.3]# useradd -u 694 -g 694 hacluster #heartbeat的安装包中默认包含ldirectord插件,该插件主要用于管理负载均衡,为保证ldirectord可用还行安装perl-Mailtools 三、配置 1 node0配置 1.1 创建网络参数修改脚本(/etc/ha.d/resource.d/Remac1) [root@node0 resource.d]# vim /etc/ha.d/resource.d/Remac1 #Remac1也可存放在/etc/rc.d/init.d目录 #!/bin/bash #discription : Start Real Server VMAC=00:1E:68:1E:99:5E RMAC=00:1E:68:1E:19:5E GATEWAY=192.168.32.254 . /etc/rc.d/init.d/functions case "$1" in start) echo "Replace eth0's Real Mac addr to Virtual Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $VMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.21 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname nodevir /sbin/route add default gw $GATEWAY ;; stop) echo "Restore eth0's Real Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $RMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname node1 /sbin/route add default gw $GATEWAY ;; *) echo "Usage : $0 {start|stop}" exit 1 esac 1.2 heartbeat主配置文件(/etc/ha.d/ha.cf) [root@node1 ha.d]# vim /etc/ha.d/ha.cf #debugfile /var/log/ha-debug logfile /var/log/ha-log #指名heartbeat的日志存放位置。 #crm yes #是否开启Cluster Resource Manager(集群资源管理)功能。 bcast eth1 #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。 keepalive 2 #指定心跳间隔时间为2秒(即每两秒钟在eth1上发送一次广播)。 deadtime 60 #指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。 warntime 20 #指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。 initdead 240 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。 udpport 694 #设置广播通信使用的端口,694为默认使用的端口号。 #baud 19200 #设置串行通信的波特率。 #serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网。 #ucast eth0 192.168.1.2 #采用网卡eth1的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。 #mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。 auto_failback on #用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有 的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项 设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。 #stonith baytech /etc/ha.d/conf/stonith.baytech # stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。 #watchdog /dev/watchdog #该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件, 如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入"insmod softdog"加载该模块。然后输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc |grep watchdog"(应为130)。最后,生成设备文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能。 node node0 #主节点主机名,可以通过命令“uanme –n”查看。 node node1 #备用节点主机名。 ping 192.168.32.254 #选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。 ping_group group1 192.168.12.251 192.168.12.239 #类似于ping。 #respawn hacluster /usr/local/ha/lib/heartbeat/ipfail #apiauth pingd gid=haclient uid=hacluster apiauth pingd gid=root uid=root respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动 重新启动。最常用的进程是pingd,此进程用于检测和监控网卡状态,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动pingd进程的身份。 #下面的配置是关键,也就是激活crm管理,开始使用v2 style格式 crm respawn #注意,还可以使用crm yes的写法,但这样写的话,如果后面的cib.xml配置有问题 #会导致heartbeat直接重启该服务器,所以,测试时建议使用respawn的写法 #下面是对传输的数据进行压缩,是可选项 compression bz2 compression_threshold 2 #注意,v2 style不支持ipfail功能,须使用pingd代替 1.3 资源文件(/etc/ha.d/haresources) [root@node0 ha.d]# vim /etc/ha.d/haresources node0 Remac1 #haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为: node-name network <resource-group> #node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致,network用于设定集群的IP地址、子网掩码、网络设 备标识等,需要注意的是,这里指定的IP地址就是集群对外服务的IP地址,resource-group用来指定需要heartbeat托管的服务,也就 是这些服务可以由heartbeat来启动和关闭,如果要托管这些服务,必须将服务写成可以通过start/stop来启动和关闭的脚步,然后放到 /etc/init.d/或者/etc/ha.d/resource.d/目录下,heartbeat会根据脚本的名称自动去/etc/init.d或者 /etc/ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。 #LSB: Linux标准脚本文件(init script),通常放在/etc/init.d/目录下,heartbeat1.x版本之前的管理脚本一半放在/etc/ha.d /resource.d,在这里是/usr/local/ha/etc/ha.d/resource.d OCF:Open Cluster Framework,默认放在/usr/lib/resource.d/heartbeat/目录下;在这里是/usr/local/ha/etc/ha.d/resource.d #下面介绍一下ocf和lsb格式的区别: LSB格式的脚本必须支持status功能,必须能接收start,stop,status,三个参数;而如果是OCF格式,则必须支持start,stop,monitor三个参数.其中status和monitor参数是用来监控资源的,非常重要. 例如LSB风格的脚本,运行./Mysql status时候, 返回值包含OK或则running则表示资源正常,返回值包含stopped或者No则表示资源不正常。 假如是OCF风格的脚本,运行./Mysql monitor时候, 返回0表示资源是正常的, 返回7表示资源出现问题. #下面对配置方法进行具体说明: node1 IPaddr::192.168.60.200/24/eth0/ Filesystem::/dev/sdb5::/webdata::ext3 httpd tomcat #其中,node1是HA集群的主节点,IPaddr为heartbeat自带的一个执行脚步,heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 192.168.60.200/24 start的操作,也就是虚拟出一个子网掩码为255.255.255.0,IP为192.168.60.200的地址,此IP为heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口为eth0,接着,heartbeat将执行共享磁盘分区的挂载操作,“Filesystem::/dev/sdf1::/data1::ext3”相当于在命令行下执行mount操作,即“mount –t ext3 /dev/sdf1 /data1”,最后依次启动httpd和tomcat服务。 1.4 认证文件(/etc/ha.d/authkeys) [root@node0 resource.d]# vim /etc/ha.d/authkeys auth 1 1 crc #2 sha1 HI! #3 md5 Hello! #authkeys文件用于设定heartbeat的认证方式,共有三种可用的认证方式:crc、md5和sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果heartbeat集群运行在安全的网络上,可以使用crc方式,如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高,如果是处于网络安全和系统资源之间,可以使用md5认证方式。这里我们使用crc认证方式,设置如下: auth 1 1 crc #2 sha1 sha1_any_password #3 md5 md5_any_password #需要说明的一点是:无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了“auth 6”,下面一定要有一行“6 认证类型”。最后确保这个文件的权限是600(即-rw-------)。 2 node1配置 2.1 创建网络参数修改脚本(/etc/ha.d/resource.d/Remac1&2) [root@node1 ~]# vim /etc/ha.d/resource.d/Remac1 #备份node0的网络参数修改脚本 #!/bin/bash #discription : Start Real Server VMAC=00:1E:68:1E:99:5E RMAC=00:1E:68:1E:19:5E #注意:与node0中Remac1中RMAC不一样 GATEWAY=192.168.32.254 . /etc/rc.d/init.d/functions case "$1" in start) echo "Replace eth0's Real Mac addr to Virtual Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $VMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.21 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname nodevir /sbin/route add default gw $GATEWAY ;; stop) echo "Restore eth0's Real Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $RMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname node1 /sbin/route add default gw $GATEWAY ;; *) echo "Usage : $0 {start|stop}" exit 1 esac [root@node1 ~]# cat /etc/ha.d/resource.d/Remac2 #备份node2的网络参数修改脚本 #!/bin/bash #discription : Start Real Server VMAC=00:1E:68:1E:88:5E RMAC=00:1E:68:1E:19:5E #注意:与node中Remac1中RMAC不一样 GATEWAY=192.168.32.254 . /etc/rc.d/init.d/functions case "$1" in start) echo "Replace eth0's Real Mac addr to Virtual Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $VMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.22 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname nodevir2 /sbin/route add default gw $GATEWAY ;; stop) echo "Restore eth0's Real Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $RMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname node1 /sbin/route add default gw $GATEWAY ;; *) echo "Usage : $0 {start|stop}" exit 1 esac 2.2 主配置文件(/etc/ha.d/ha.cf) [root@node1 ~]# vim /etc/ha.d/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 60 warntime 20 initdead 240 udpport 694 auto_failback on node node0 #主node0,排列顺序越靠前越优先 node node2 #主node2 node node1 #备node1 ping 192.168.32.254 respawn root /usr/lib/heartbeat/ipfail apiauth ipfail gid=root uid=root deadping 60 #注意:由于修改网络参数需要重启网卡,需要大量的时间,所以在此将所有时间参数设置比较长。 2.3 资源文件(/etc/ha.d/haresource) [root@node1 ~]# cat /etc/ha.d/haresources node0 Remac1 node2 Remac2 #备份nod0用Remac1脚本,备份node2用Remac2脚本 2.4 认证文件(/etc/ha.d/authkeys) 同node0 3 node2配置 3.1 创建网络参数修改脚本(/etc/ha.d/resource.d/Remac2) [root@node2 ~]# cat /etc/ha.d/resource.d/Remac2 #!/bin/bash #discription : Start Real Server VMAC=00:1E:68:1E:88:5E RMAC=00:1E:68:1E:16:7E GATEWAY=192.168.32.254 . /etc/rc.d/init.d/functions case "$1" in start) echo "Replace eth0's Real Mac addr to Virtual Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $VMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.22 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname nodevir2 /sbin/route add default gw $GATEWAY ;; stop) echo "Restore eth0's Real Mac addr" /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether $RMAC /sbin/ifconfig eth0 up /sbin/ifconfig eth0 192.168.32.32 broadcast 192.168.32.255 netmask 255.255.255.0 /bin/hostname node2 /sbin/route add default gw $GATEWAY ;; *) echo "Usage : $0 {start|stop}" exit 1 esac 3.2 主配置文件(/etc/ha.d/ha.cf) [root@node1 ~]# vim /etc/ha.d/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 60 warntime 20 initdead 240 udpport 694 auto_failback on node node2 #主node2,排列顺序越靠前越优先 node node1 #备node1 ping 192.168.32.254 respawn root /usr/lib/heartbeat/ipfail apiauth ipfail gid=root uid=root deadping 60 #注意:由于修改网络参数需要重启网卡,需要大量的时间,所以在此将所有时间参数设置比较长。 3.3 资源文件(/etc/ha.d/haresource) [root@node1 ~]# cat /etc/ha.d/haresources node2 Remac2 3.4 认证文件(/etc/ha.d/authkeys) 同node0 四、测试heartbeat的高可用功能 如何才能得知HA集群是否正常工作,模拟环境测试是个不错的方法,在把Heartbeat高可用性集群放到生产环境中之前,需要做如下几个步骤的测试,从而确定HA是否正常工作: 1 正常关闭和重启主节点的heartbeat 首先在主节点node1上执行“service heartbeat stop”正常关闭主节点的Heartbeat进程,此时通过ifconfig命令查看主节点网卡信息,正常情况下,应该可以看到主节点已经释放了集群的 服务IP地址,同时也释放了挂载的共享磁盘分区,然后查看备份节点,现在备份节点已经接管了集群的服务IP,同时也自动挂载上了共享的磁盘分区。 在这个过程中,使用ping命令对集群服务IP进行测试,可以看到,集群IP一致处于可通状态,并没有任何延时和阻塞现象,也就是说在正常关闭主节点的情况下,主备节点的切换是无缝的,HA对外提供的服务也可以不间断运行。 接着,将主节点heartbeat正常启动,heartbeat启动后,备份节点将自动释放集群服务IP,同时卸载共享磁盘分区,而主节点将再次接管集 群服务IP和挂载共享磁盘分区,其实备份节点释放资源与主节点绑定资源是同步进行的。因而,这个过程也是一个无缝切换。 2 在主节点上拔去网线 拔去主节点连接公共网络的网线后,heartbeat插件ipfail通过ping测试可以立刻检测到网络连接失败,接着自动释放资源,而就在此时,备用节点的ipfail插件也会检测到主节点出现网络故障,在等待主节点释放资源完毕后,备用节点马上接管了集群资源,从而保证了网络服务不间断持续运行。 同理,当主节点网络恢复正常时,由于设置了“auto_failback on”选项,集群资源将自动从备用节点切会主节点。 3 关闭主节点的系统 在主节点拔去电源后,备用节点的heartbeat进程会立刻收到主节点已经shutdown的消息,备用节点就开始进行资源的接管,这种情况其实和主节点网络故障的现象类似。 4 让主节点系统内核崩溃 当主节点系统崩溃后,网络也就失去了响应,那么备用节点的heartbeat进程就会立刻检测到主节点网络故障,然后进行资源切换,但是由于主节点系统内 核崩溃,导致自身不能卸载所占有的资源,例如共享磁盘分区、集群服务IP等,那么此时如果没有类似Stonith设备的话,就会出现资源争用的情况,但是 如果有Stonith备,Stonith设备会首先将故障的主节点电源关闭或者重启此节点等操作,这样就让主节点释放了集群资源,当Stonith设备 完成所有操作时,备份节点才拿到接管主节点资源的所有权,从而接管主节点的资源。 (责任编辑:IT) |