在CentOS 6.6 安装 heartbeat v2 花费了不少时间,由于heartbeat v2 需要依赖于heartbeat-pils ,但CentOS 6 已经废弃了heartbeat-pils ,取而代之的是cluster-glue。所以需要手动解决许多依赖关系,下面为大家具体介绍。
一,准备
<code> 环境:CentOS 6.6 32位 使用heartbeat v2 对httpd实现高可用,并使用nfs。 规划: node1: 192.168.1.210 node1.feiyu.com node2:192.168.1.211 node2.feiyu.com VIP:192.168.1.200 NFS:222.24.51.147:/www/htdocs </code>
安装配置高可用集群准备工作:
1、节点名称:集群每个节点的名称都得能互相解析
使用/etc/hosts文件
hosts中主机名的正反解析结果必须跟“uname -n”的结果保持一致;
2、时间必须得同步
使用网络时间服务器同步时间
3、并非必须:各节点间能基于ssh密钥认证通信;
二,安装 heartbeat v2
需要以下安装包: heartbeat-2.1.4-11.el5.i386.rpm heartbeat-pils-2.1.4-11.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm ,可以在http://pkgs.org/ 中下载。
依赖包:openssl098e-0.9.8e-18.el6_5.2.i686 openhpi-libs-2.14.1-6.el6.i686 gnutls-1.4.1-16.el5_10.i386.rpm libtool-ltdl-1.5.22-7.el5_4.i386.rpm libnet-1.1.6-7.el6.i686.rpm net-snmp-libs-5.3.2.2-25.el5_11.i386.rpm
heartbeat-gui-2.1.4-11.el5.i386.rpm等,安装时需要强行将系统已安装的包卸载。
<code> [root@node1 heartbeat]# yum install heartbeat-2.1.4-11.el5.i386.rpm heartbeat-pils-2.1.4-11.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm #不能使用yum源直接下载,需手动下载 Package heartbeat-pils is obsoleted by cluster-glue, trying to install cluster-glue-1.0.5-6.el6.i686 instead [root@node1 ~]# cat /etc/hosts #互相解析 192.168.1.210 node1.feiyu.com node1 192.168.1.211 node2.feiyu.com node2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@node1 ~]# scp /etc/hosts node2:/etc/ [root@node1 ~]# ntpdate 222.24.51.147 #找一台时间服务器同步时间 17 Aug 07:45:46 ntpdate[19171]: step time server 222.24.51.147 offset 1.156721 sec [root@node1 ~]# ssh node2 'date';date Mon Aug 17 02:48:53 PDT 2015 Mon Aug 17 02:48:53 PDT 2015 [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub node2 #秘钥认证 [root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub node1 [root@node1 heartbeat]# rpm -ivh heartbeat-2.1.4-11.el5.i386.rpm heartbeat-pils-2.1.4-11.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm #两边分别安装 [root@node1 ha.d]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} . [root@node1 ha.d]# ls authkeys ha.cf harc haresources rc.d README.config resource.d shellfuncs [root@node1 ha.d]# openssl rand -hex 8 #生成随机数 b85f266eb9039b7c [root@node1 ha.d]# vim authkeys auth 2 2 sha1 b85f266eb9039b7c [root@node1 ha.d]# chmod 600 authkeys [root@node1 ha.d]# vim ha.cf #修改主配置文件 logfile /var/log/ha-log #启用 #logfacility local0 #禁用 mcast eth1 225.0.210.1 694 1 0 #添加组播地址 node node1.feiyu.com #添加节点信息 node node2.feiyu.com ping 192.168.1.1 #添加ping节点 </code>
ha.cf配置文件部分参数详解:
<code> autojoin none #集群中的节点不会自动加入 logfile /var/log/ha-log #指名heartbaet的日志存放位置 keepalive 2 #指定心跳使用间隔时间为2秒(即每两秒钟在eth1上发送一次广播) deadtime 30 #指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源 warntime 10 #指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务 initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。 udpport 694 #设置广播通信使用的端口,694为默认使用的端口号。 baud 19200 #设置串行通信的波特率 bcast eth0 # Linux 指明心跳使用以太网广播方式,并且是在eth0接口上进行广播。 #mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。 #ucast eth0 192.168.1.2 #采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。 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 node1.magedu.com #主节点主机名,可以通过命令“uanme –n”查看。 node node2.magedu.com #备用节点主机名 ping 192.168.12.237 #选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接 ping_group group1 192.168.12.120 192.168.12.237 #类似于ping ping一组ip地址 apiauth pingd gid=haclient uid=hacluster 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 </code>
注意,v2 style不支持ipfail功能,须使用pingd代替
<code> [root@node1 ha.d]# vim haresources node1.feiyu.com 192.168.1.200/16/eth0 httpd #格式:主节点,VIP,服务脚本,脚本会使用资源代理寻找,先在resource.d下查找然后会在/etc/init.d/找 [root@node1 ha.d]# scp ./* node2:/etc/ha.d/ #复制到node2 [root@node1 ha.d]# yum install -y httpd #两边分别安装httpd [root@node1 ha.d]# vim /var/www/html/index.html #两边分别添加示例</code>
node1.feiyu.com
<code> [root@node1 deps]# curl http://192.168.1.210 #测试成功</code>
node2.feiyu.com
<code> [root@node2 deps]# service httpd stop [root@node2 deps]# chkconfig httpd off #集群中运行的资源必须使用集群资源管理器来启动,不能开机自启也不能手动启动 [root@node1 heartbeat]# service heartbeat start #启动服务 [root@node1 heartbeat]# ssh node2 'service heartbeat start' [root@node1 heartbeat]# ss -tln #查看是否启动成功 [root@node1 ha.d]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:74:CD:2D inet addr:192.168.1.210 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe74:cd2d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:549614 errors:0 dropped:0 overruns:0 frame:0 TX packets:300199 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:377959494 (360.4 MiB) TX bytes:104602300 (99.7 MiB) Interrupt:19 Base address:0x2024 eth1:0 Link encap:Ethernet HWaddr 00:0C:29:74:CD:2D inet addr:192.168.1.200 Bcast:192.168.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:19 Base address:0x2024 eth2 Link encap:Ethernet HWaddr 00:0C:29:74:CD:37 inet6 addr: fe80::20c:29ff:fe74:cd37/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:109415 errors:0 dropped:0 overruns:0 frame:0 TX packets:83669 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:78624848 (74.9 MiB) TX bytes:9619298 (9.1 MiB) Interrupt:19 Base address:0x20a4 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:5948 errors:0 dropped:0 overruns:0 frame:0 TX packets:5948 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:742605 (725.2 KiB) TX bytes:742605 (725.2 KiB) </code>
确保关闭防火墙和selinux,然后在浏览器中输入IP,查看,分别如下所示:
说明已经安装成功!
二,使用NFS文件系统
下面使用nfs文件系统,修改资源类型文件haresources :
<code> [root@node1 heartbeat]# cd /etc/ha.d/haresources node2.feiyu.com 192.168.1.200/16/eth1 Filesystem::222.24.51.147:/www/htdocs::/var/www/html httpd #按所给示例进行修改 [root@node1 ha.d]# scp haresources node1:/etc/ha.d/ </code>
注意:nfs服务器要给apache提供读写权限,将/etc/exports上权限修改为no_root_squash,或使用acl机制
<code> [root@xiyou ]# getfacl -m u:apache:rwx /www/htdocs/ [root@xiyou ]# vim /www/htdocs/index.html</code>
nfs server page
然后重新启动heartbeat,刷新浏览器,会出现如下画面:说明安装成功:
三,使用crm(集群资源管理器 v2)
haresource资源管理器是heartbeat v1版,也是最老的,下来使用v2版的crm。
<code> [root@node1 heartbeat]# rpm -ivh heartbeat-gui-2.1.4-11.el5.i386.rpm #两边安装crm-gui [root@node1 ha.d]# vim ha.cf crm respawn #最后一行添加此句,表示使用crm [root@node1 heartbeat]# /usr/lib/heartbeat/ha_propagate #节点间同步文件,只能同步auth和ha.cf文件 [root@node1 heartbeat]# service heartbeat start #启动服务 [root@node1 heartbeat]# ssh node2 'service heartbeat start' [root@node2 heartbeat]# ss -tlnp |grep 5560 #crm通过mgmtd进程监听在5560/tcp LISTEN 0 10 *:5560 *:* users:(("mgmtd",7194,10)) [root@node2 heartbeat]# cat /etc/passwd |grep hacluster #会自动创建hacluster用户,用于登录crm-gui hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin [root@node2 ha.d]# crm #直接使用crm进入crm命令行 crm(live)# [root@node2 ha.d]# passwd hacluster # 给hacluster添加密码,在哪个节点启动就在那个节点添加 Changing password for user hacluster. New password: [root@node2 ha.d]# hb_gui & #启动crm-gui /usr/lib/heartbeat-gui/pymgmt.py:5: RuntimeWarning: Python C API version mismatch for module _pymgmt: This Python has API version 1013, module _pymgmt has version 1012. import _pymgmt /usr/lib/heartbeat-gui/pymgmt.py:5: RuntimeWarning: Python C API version mismatch for module swig_runtime_data2: This Python has API version 1013, module swig_runtime_data2 has version 1012. import _pymgmt Traceback (most recent call last): File "/usr/bin/hb_gui", line 41, in import gtk, gtk.glade, gobject File "/usr/lib/python2.6/site-packages/gtk-2.0/gtk/__init__.py", line 64, in _init() File "/usr/lib/python2.6/site-packages/gtk-2.0/gtk/__init__.py", line 52, in _init _gtk.init_check() RuntimeError: could not open display </code>
由于gui版本太老导致我启动失败了,后面卸载了几个包,又安装较低版本的依然没有成功,如果有启动成功的希望分享下经验,谢谢!