heartbeat中怎么自动切换网络参数

发布时间:2021-08-09 15:15:34 作者:Leah
来源:亿速云 阅读:113

heartbeat中怎么自动切换网络参数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、环境

node0
eth0:192.168.32.30 service vip1:192.168.32.21 VMAC1:00:1E:68:1E:99:5E
eth2: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
eth2: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
eth2: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 eth2   

#指明心跳使用以太网广播方式,并且是在eth2接口上进行广播。  

keepalive 2 

#指定心跳间隔时间为2秒(即每两秒钟在eth2上发送一次广播)。  

deadtime 60 

#指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。  

warntime 20 

#指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。  

initdead 240  

#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。   

udpport 694   #设置广播通信使用的端口,694为默认使用的端口号。  

#baud 19200    #设置串行通信的波特率。  

#serial /dev/ttyS0   #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网。  

#ucast eth0 192.168.1.2 #采用网卡eth2的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 &ndash;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设备 完成所有操作时,备份节点才拿到接管主节点资源的所有权,从而接管主节点的资源。

看完上述内容,你们掌握heartbeat中怎么自动切换网络参数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. heartbeat+LVS
  2. redis自动主从切换

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

heartbeat

上一篇:Proftpf中怎么实现匿名登录

下一篇:Linux中 inotify功能的实现原理是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》