设为首页 收藏本站
查看: 1119|回复: 0

[经验分享] Centos下使用Heartbeat实现集群[转]

[复制链接]

尚未签到

发表于 2015-9-5 13:42:17 | 显示全部楼层 |阅读模式
  Linux 包括 CentOS 下高可用性(HA:High Availability)集群方案很多,而 Heartbeat 是比较常见和性价比比较高的一种。
一、硬件及网络连接
  
  群集一般需要2台以上服务器,本篇以两台服务器做群集(双机热备)为例来说明。本实验在 Vmware Workstation 7.1 虚拟机中实现。
  
  两台服务器的必需配置:双网卡。其中一块网卡作为“心跳”使用。作为“心跳”的两块网卡用交叉线直接连接,作为群集的信号同步使用。多台服务器的群集,建议用全千兆交换机来连接“心跳”线。作为“心跳”的网卡最好是质量好的千兆网卡。实际工程中见过因为网卡质量问题导致群集失败的案例。
  
  群集使用的两台服务器并不需要有完全相同的硬件(或者内存大小等),但如果相同的话,当某个部件出现故障时会容易处理得多。集群是通过 Heartbeat 软件产生在两台电脑之间“心跳”信号来建立的。为了传输“心跳”信号,需要在节点之间存在一条或多条介质通路,例如串口线(通过 Modem 连接)、以太网通过交叉线等,本例选用常见的以太网连接。
  
  群集服务器的另一块网卡连接到交换机上,对外提供服务。本例以 Apache 提供的 Web 服务作为群集服务,实际工程中还可以提供 MySQL 等服务。一个群集里可以集成几种以上的服务,但在生产环境下,建议还是提供单一的服务比较好,能发挥服务器的最大可用性,同时可保证群集的可靠性。
  
      二、CentOS 配置
  
  1,关闭 SELINUX
  
  编辑 /etc/sysconfig/selinux 文件,配置以下语句:
   SELINUX=disabled
  
  也可以在图形界面里修改。
   实际生产环境不应该关闭 SELINUX,但必须注意 SELINUX 对群集的影响。
  
  2,关闭 iptables 防火墙
  
  执行命令:
   chkconfig iptables off
   chkconfig ip6tables off
  
  也可以在图形界面里修改。
   实际生产环境不应该关闭防火墙,但必须注意打开群集有关的协议和端口。
  
  3,IP 地址配置
  
  服务器一:
   网卡0(eth0):
     IP 为 10.0.0.50/24
   网卡1(eth1):
     IP 为 172.16.0.50/24
  
  服务器二:
   网卡0(eth0):
     IP 为 10.0.0.51/24
   网卡1(eth1):
     IP 为 172.16.0.51/24
  
  配置完毕,可以输入如下命令检查 IP 配置:
   # ifconfig
  
  可以用 ping 命令检测网络的连通性。例如,在服务器一中:
   # ping 10.0.0.51
   # ping 172.16.0.51
   均应该连通。
  
  4,分别修改主机名为 node1、node2
  
  服务器一修改 /etc/sysconfig/network 文件中 HOSTNAME 语句为:
   HOSTNAME=node1
   服务器二修改 /etc/sysconfig/network 文件中 HOSTNAME 语句为:
   HOSTNAME=node2
   也可以在 GUI 的“网络”配置里修改。
  
  修改完毕,运行命令
   # uname -n
   看到的结果应该与上面的修改一致。
  
  5,修改 hosts 文件
  
  在两台服务器的 /etc/hosts 文件里,添加以下语句:
   10.0.0.50   node1
   10.0.0.51   node2
  
  6,安装 HeartBeat 软件
  
  在两台服务器里,运行命令:
   # yum install heartbeat*
  
  YUM 会安装 heartbeat 及其所有依赖的软件包。并创建隐藏的系统帐户 hacluster 和系统群组 haclient。
  
  查看安装了什么软件包:
   运行命令:
   # yum list heartbeat*
   Installed Packages
   heartbeat.i386               2.1.3-3.el5.centos     installed
   heartbeat-devel.i386         2.1.3-3.el5.centos     installed
   heartbeat-gui.i386           2.1.3-3.el5.centos     installed
   heartbeat-ldirectord.i386    2.1.3-3.el5.centos     installed
   heartbeat-pils.i386          2.1.3-3.el5.centos     installed
   heartbeat-stonith.i386       2.1.3-3.el5.centos     installed
  
  7,配置 Apache
  
  Apache 是作为群集的测试服务来对外提供 Web 服务的。注意 Apache 是以 HeartBeat 群集虚拟的 IP 地址来访问的。群集创建完成后,将以该虚拟 IP 作为外部访问的地址,所以该 IP 必须是外网可访问地址。
  
  们指定该 IP 为 10.0.0.60,所以可以在两台服务器的 Apache 里配置以 IP 地址 10.0.0.60 访问的虚拟主机。
  
  
     ServerAdmin webmaster@example.com
     DocumentRoot /var/www/html
     ServerName 10.0.0.60
     #or: ServerName www.somedomain.com
     ErrorLog logs/example.com-error_log
     CustomLog logs/example.com-access_log common
     
       Options Indexes MultiViews
       AllowOverride None
       Order allow,deny
       Allow from all
     
   
  
  为简单起见,可以将 Apache2.0 配置文件 httpd.conf 中的
   Listen 80
   语句改为
   Listen 10.0.0.60:80
   即可。
  
  然后在服务器一(node1)的 Apache 根文件夹 /var/www/html/ 下建立主页文件 index.html,文件内容为:
   This is node1。
   在服务器二(node2)的 Apache 根文件夹 /var/www/html/ 下建立主页文件 index.html,文件内容为:
   This is node2。
  
  实际使用中,node1 和 node2 的 Apache 网站文档需要同步,或直接指向同一个高可靠性的存储位置(例如 RAID 5+1 磁盘阵列)即可。
  
  8,无关的服务,尽量关闭,例如:
   # chkconfig acpid off
   # chkconfig anacron off
   # chkconfig apmd off
   # chkconfig auditd off
   # chkconfig autofs off
   # chkconfig bluetooth off
   # chkconfig cpuspeed off
   # chkconfig cups off
   # chkconfig gpm off
   # chkconfig haldaemon off
   # chkconfig iptables off
   # chkconfig isdn off
   # chkconfig kudzu off
   # chkconfig mDNSResponder off
   # chkconfig mdmonitor off
   # chkconfig messagebus off
   # chkconfig netfs off
   # chkconfig nfslock off
   # chkconfig nifd off
   # chkconfig pcmcia off
   # chkconfig portmap off
   # chkconfig rhnsd off
   # chkconfig rpcgssd off
   # chkconfig rpcidmapd off
   # chkconfig sendmail off
   # chkconfig xfs off
  
      三、群集配置
  
  CentOS5.5 安装 HeartBeat2.1.3 后,在 /usr/share/doc/heartbeat-2.1.3 下有有关的配置文件模板,我们把它们拷贝到 /etc/ha.d/ 目录下:
  
  #cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
   #cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
   #cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
  
  进入群集配置目录:
   #cd /etc/ha.d/
  
  2,编辑 authkeys 文件
   # gedit authkeys
  
  服务器一、二相同。内容如下,1 、2、3 表示认证算法选择,这里选择了crc 算法。1 、2、3 不是固定的,只要前后对应即可:
   auth 1
   1 crc
   #2 sha1 HI! (注释掉)
   #3 md5 Hello! (注释掉)
  
  还必须将 authkeys 文件权限设置为 600(安全考虑):
   #chmod 600 authkeys
  
  authkeys 文件权限不够,当启动 heartbeat 服务时,会报错:
   ERROR: Bad permissions on keyfile [/etc/ha.d/authkeys], 600 recommended.
   ERROR: Authentication configuration error.
   ERROR: Configuration error, heartbeat not started.
  
  3,编辑 haresources:
   # gedit haresources
  
  服务器一、二相同。内容如下:
   node1 IPaddr::10.0.0.60 httpd
  
  第一列为默认主机;
   第二列为配置的虚拟 IP;
   第三列为需要实现高可用性的服务(启动脚本在 /etc/init.d 内);
   如果没有服务则默认全部已运行服务,指定服务在备机接管之前是不会启动的。
  
  该行指定在“心跳”服务启动时,节点 node1 得到 IP 地址 10.0.0.60,并启动 Apache 服务。在停止时,首先停止 Apache,然后释放 IP 地址。
  
  4,编辑 ha.cf:
   # gedit ha.cf
  
  服务器一(node1)内容为:
   debugfile /var/log/ha-debug
   logfile /var/log/ha-log
   logfacility local0
   keepalive 2
   deadtime 60
   warntime 4
   initdead 120
   udpport 694
   #bcast eth0
   ucast eth1 172.16.0.51
   #mcast eth0 225.0.0.1 694 1 0
   auto_failback on
   node node1
   node node2
   ping 10.0.0.2
   respawn hacluster /usr/lib/heartbeat/ipfail
   apiauth ipfail gid=haclient uid=hacluster
  
  服务器二(node2)的 ucast eth1 172.16.0.51 语句改为:
   ucast eth1 172.16.0.50
  
  解释:
  
  debugfile /var/log/ha-debug
   日志文件
  
  logfile /var/log/ha-log
   日志文件
  
  logfacility  local0
   登陆/调试日志同时记录给syslog
  
  serial /dev/ttyS0
   使用串口heartbeat-如果不使用串口heartbeat,则必须使用其他的介质,如bcast(以太网)heartbeat。用适当的设备文件代替/dev/ttyS0。
  
  bcast eth1
   表示在eth1接口上使用来发送“心跳”信息,建议在副节点不只一台时使用(将eth1替换为eth0,eth2,或者您使用的任何接口)。
  
  ucast eth1 10.0.0.102
   采用网卡eth1 的udp 单播来通知“心跳”,ip 应为对方IP ,在主机2 上设置为ucast eth1 10.0.0.101
  
  #mcast eth0 225.0.0.1 694 1 0
   采用udp 多播播来通知“心跳”,建议在副节点不只一台时使用, 广播,单播,多播,以上三种任选其一即可
  
  keepalive 2
   设定heartbeat之间的检测时间间隔为2秒。
  
  warntime 10
   在日志中发出“late heartbeat“警告之前等待的时间,单位为秒。
  
  deadtime 30
   在30秒后宣布节点死亡,主从机切换。
  
  initdead 120
   在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。
  
  baud 19200
   波特率,串口通信的速度。
  
  udpport 694
   使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号。
  
  auto_failback on
   该选项是必须配置的。对于那些熟悉Tru64 Unix的人来说,heartbeat的工作方式类似于“favored member“模式。在failover之前,haresources文件中列出的主节点掌握所有的资源,之后从节点接管这些资源。当 auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为off,主节点便不能重新获得资源。该选项与废弃的nice_failback选项类似。如果要从一个nice_failback设置为off的集群升级到这个或更新的版本,需要特别注意一些事项以防止flash cut。请参阅FAQ中关于如何处理这类情况的章节。
  
  node primary.mydomain.com
   该选项是必须配置的。集群中机器的主机名,与“uname –n”的输出相同。
  
  node backup.mydomain.com
   该选项是必须配置的。同上。
  
  ping 192.168.0.1
   用来验证外网线连通的ip(推荐上级路由器,还有 ping_group, hbaping 等类似配置可选)。
  
  respawn
   该选项是可选配置的:列出将要执行和监控的命令。例如:要执行ccm守护进程,则要添加如下的内容:
  
  respawn hacluster /usr/lib/heartbeat/ccm
   使得Heartbeat以userid(在本例中为hacluster)的身份来执行该进程并监视该进程的执行情况,如果其死亡便重启之。对于 ipfail,则应该是:
  
  respawn hacluster /usr/lib/heartbeat/ipfail
   注意:如果结束进程的退出代码为100,则不会重启该进程。
  
  apiauth ipfail gid=haclient uid=hacluster
   网络检测补救插件,用来实现 auto_failback 功能的。
  
      四、群集测试
  
  方法1、启动服务器一(主机)的 HeartBeat 服务:
   # service heartbeat start
   service heartbeat stop
  
  Apache 服务应该会被 heartbea 启动。然后,在同一网段的机器里用浏览器访问地址 http://10.0.0.60,得到如下信息:
   This is node1。
  
  IP 地址 10.0.0.60 也是能够 ping 通的。
  
  在 node1 上运行命令 service heartbeat status 可看到 heartbeat 运行正常:
   heartbeat OK [pid xxxx et al] is running on node1 [node1]…
  
  这时,关闭 node1 上的 heartbeat 服务,或关闭 node1 机器,heartbeat 会自动切换到 node2。用浏览器访问地址 http://10.0.0.50,得到如下信息:
   This is node2。
  
  IP 地址 10.0.0.60 还是能够 ping 通。
  
  修改了前述的配置文件后,应该在同一台服务器上运行以下命令重新装载“心跳”服务:
   service heartbeat reload
   重新启动“心跳”服务的命令是:
   service heartbeat restart
   (运行服务的另一种形式是 /etc/init.d/heartbeat restart)
  
  方法2、另一种查看 heartbeat 服务是否凑效的方法是,运行 ifconfig 命令,如果看到类似以下信息,说明服务已经切换带该服务器上了:
  
  eth0:0 Link encap:Ethernet  HWaddr 00:0C:29:2D:4A:7F
   inet addr:10.0.0.60  Bcast:10.0.0.255  Mask:255.255.255.0
   UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
   Interrupt:67 Base address:0×2000
  
  这说明 heartbeat 服务已经在本机上虚拟了一个 IP 设备,通过这个设备 Apache 服务得到访问了。
  
  还可以使用 ping 命令进行不间断监测,可以发现集群 IP 地址 10.0.0.60 一直处于可通状态,并没有产生任何阻塞或延迟,所以,在关闭处于激活状态的 heartbeat 的情况下,双机系统可以实现无缝切换。
  
  但是在另外一些情况下,比如网络故障、主机关机或重启等,如果该主机的 heartbeat 处于激活状态,则不能实现双机的无缝切换,切换过程需要有一定的延迟,使用 ping 命令可以发现集群 IP 地址暂时无法使用。
  
      五、群集维护及故障排除
  
  群集(包括双机)系统并不是一个简单的系统。并不是每次配置群集都能成功。群集系统在运行的过程中也会出现问题,如“心跳”服务不能启动或死机,“心跳”服务不跳转或莫名其妙的自动跳转。
  
  比如,查看日志 /var/log/ha-log 内的信息,发现如下信息:
  
  “ERROR: No local heartbeat. Forcing shutdown”
  
  并且 Heartbeat 无原因的关闭。可能是因为系统I/O负载过重,或操作系统的 BUG 引起的。
  
  这时。可以调节 ha.cf 中 deadtime 的值到 60 秒或更高。
  
  作者:张庆(网眼) 西安 PHP 教育培训中心 2010-8-31
来自“网眼视界”:http://blog.why100000.com
  
  
  原创文章,转载请注明: 转载自三叶草
  
  本文链接地址:http://www.anjing.me/1130.html
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109780-1-1.html 上篇帖子: 分享C#高端视频教程WCF讲座——HeartBeat项目运行 下篇帖子: 分享C#高端视频教程WCF讲座——创建HeartBeat系统服务项目
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表