前期准备工作
*两台节点必须是双网卡,一个口外网,一个口内网心跳
改网卡:
三块网卡,设置一个外网网卡的网关为外网地址的网关
心跳网卡,设置外网网卡的IP为网关
内网网卡,设置外网网卡的IP为网关 #此实验没有用到内网网卡,所以不做阐述。
注意MAC地址,UUID不要冲突
外网网卡是eth0 心跳网卡是eth1
主节点的外网IP:10.2.16.250 心跳IP是:192.168.1.1
备节点的外网IP:10.2.16.249 心跳IP是:192.168.1.2
网卡配置文件修改项:
主节点:
DEVICE=eth0
HWADDR=00:E0:ED:35:2A:4E
TYPE=Ethernet
UUID=fe0114cf-03bc-4384-8ffb-cbff289f0020
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=10.2.16.250
NETMASK=255.255.255.0
GATEWAY=10.2.16.1
DNS1=202.106.0.20
DNS2=8.8.8.8
心跳网卡:
DEVICE=eth1
HWADDR=00:E0:ED:35:2A:4F
TYPE=Ethernet
UUID=0c8ef60d-dbcf-42f8-b383-5bddfbb46f0b
ONBOOT=YES
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=10.2.16.250
DNS1=202.106.0.20
DNS2=8.8.8.8
备份节点也如此设置
1.设置主机名:
主节点:
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1.video.cn #主机名(master)
备节点:
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node2.video.cn
2、防火墙设置
vim /etc/selinux/config
selinux=disabled
service iptables stop
chkconfig iptables off
3 、配置完成后重启,init 6
安装heartbeat:
1、首先创建用户和组
groupadd -g 2000 haclient
useradd -u 2000 -g haclient hacluster
装heartbeat所需的软件包:
yum -y install pkgconfig glib2-devel e2fsprogs libnet* libxml2* PyXML ntp*
再编译安装libnet
tar -zxvf libnet-1.1.2.1.tar.gz -C ./
./configure
make && make install
安装heartbeat
tar -zxvf heartbeat-2.1.2.tar.gz -C ./
./ConfigureMe configure
make&& make install #make报错处理,请查看文末,有详细的解决方法,每次解决之后,不要make clean all ,直接继续执行make && make install
配置heartbeat
需要的配置文件有三个:ha.cf、haresources、authkeys。
这三个配置文件需要在/etc/ha.d 目录下面,但是默认是没有这三个文件的,所以你要:
copy 存放路径/heartbeat-2.1.2/doc/ha.cf /etc/ha.d/
copy 存放路径/ heartbeat-2.1.2/doc/haresources /etc/ha.d/
copy 存放路径/ heartbeat-2.1.2/doc/authkeys /etc/ha.d/
然后对这些配置文件进行修改。
注意:如果使用的是2.0 的模式则资源配置文件为/var/lib/heartbeat/crm/cib.xml。
修改heartbeat主配置文件ha.cf
logfile /var/log/ha-log #指名heartbeat的日志存放位置。
logfacilitylocal0
#crm yes #是否开启Cluster Resource Manager(集群资源管理)功能。
bcast eth1 #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。
keepalive 1 #指定心跳间隔时间为1秒(即每1秒钟在eth1上发送一次广播)。
deadtime 10 #指定若备用节点在10秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源。
warntime 5 #指定心跳延迟的时间为5秒。当5秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。
initdead 30 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694 #设置广播通信使用的端口,694为默认使用的端口号。
baud 19200 #设置串行通信的波特率。
#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。
ucast eth1 192.168.1.2 #采用网卡eth0的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 node1.video.cn #主节点主机名,可以通过命令"uanme -n"查看。
node node2.video.cn #备用节点主机名。
ping 10.2.16.1 #选择ping的节点,ping节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。
#respawn hacluster /usr/lib/heartbeat/ipfail #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是ipfail,此进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动ipfail进程的身份。
修改资源配置文件 haresources 两台HA的haresources文件必须一样
haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:
格式为:node-name network <resource-group>
本例中的配置:
node1.video.cn IPaddr::10.2.16.240/24/eth0/ # Filesystem::/dev/sda1::/data::ext3 httpd
#本例中只启用heartbeat的宕机替换服务,所以只设置IP,不启用服务和网络硬盘等。
node1.video.cn 意为设置node1为主节点(也就是250IP的服务器),此处填写的是250的主机名
10.2.16.240/24/eth0/ 设置对外提供服务的IP地址为 240,运行在eth0网卡上(配置好后会出现一个eth0:0的虚拟网卡)
Filesystem::/dev/sdb1::/data::ext3 httpd 相当于在命令行下执行mount操作,即"mount -t ext3 /dev/sdb5 /webdata",然后启动httpd服务。
修改认证文件 authkeys authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用crc方式;如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。这里我们使用sha1认证方式,设置如下:
本例中的配置:/etc/ha.d/authkeys
auth 2
2 sha1 sysconfig@!#
无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了"auth 2",下面一定要有一行"2 认证类型"
两台节点的authkeys文件必需一样,最后确保这个文件的权限是600(即-rw-------)
配置备份节点的Heartbeat
在备份节点上也需要安装Heartbeat,安装方式与在主节点安装过程一样,这里不再重述。安装完毕,在备份节点上使用scp命令把主节点配置文件传输到备份节点。
[root@node1 ~]#scp /etc/ha.d/* root@10.2.16.249:/etc/ha.d/
备份节点需要修改ha.cf中的ucast 选项为主节点的Ip,其他无需设置。
设置主节点和备份节点时间同步
在双机高可用集群中,主节点和备份节点的系统时间也非常重要,因为节点之间的监控都是通过设定时间来实现的。主备节点之间的系统时间相差在10秒以内是正常的,如果节点之间时间相差太大,就有可能造成HA环境的故障。解决时间同步的办法有两个:一个办法是找一个时间服务器,两个节点通过ntpdate命令定时与时间服务器进行时间校准;另一个办法是让集群中的主节点作为ntp时间服务器,让备份节点定时去主节点进行时间校验。
本文中将备份节点搭建为NTP服务器,主节点通过ntpdate来进行时间同步。ntp安装配置不再阐述。
两台节点启动heartbeat :
[root@node1 ~]#service heartbeat start
Starting High-Availability services:
2014/05/08_11:19:28 INFO: Resource is stopped
Done.
显示上述信息则意为启动成功。
[root@node1 ~]#chkconfig heartbeat on
加入开机启动
启动heartbeat成功之后,查看主节点的ifconfig 网卡信息,能看到自动多了一块虚拟网卡 eth0:0 ,ip地址是在haresource里设置的10.2.16.240
关闭不必要的服务
chkconfig rpcgssd off
chkconfig portreserve off
chkconfig postfix off
chkconfig ip6tables off
chkconfig cups off
chkconfig rpcbind off
chkconfig auditd off
chkconfig certmonger off
chkconfig netfs off
chkconfig nfslock off
优化后,系统默认开启的服务列表
chkconfig --list
atd 0:关闭1:关闭2:关闭3:启用4:启用5:启用6:关闭
crond 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
heartbeat 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
httpd 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
iptables 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
messagebus 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
mysqld 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
network 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
ntpdate 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
openfire 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
rsyslog 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
sshd 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
udev-post 0:关闭1:启用2:启用3:启用4:启用5:启用6:关闭
xinetd 0:关闭1:关闭2:关闭3:启用4:启用5:启用6:关闭
heartbeat安装过程中 make报错处理:
如报
cc1: warnings being treated as errors
client_lib.c:1850: error: 'display_orderQ'defined but not used
gmake[2]: *** [client_lib.lo] 错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/lib/hbclient'
gmake[1]: *** [all-recursive] 错误 1
gmake[1]: Leaving directory`/root/heartbeat-2.0.7/lib'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/lib/hbclient里的makefile中的所有-Werror删除
如报
cc1: warnings being treated as errors
pils.c:245: error: initialization fromincompatible pointer type
pils.c:246: error: initialization fromincompatible pointer type
gmake[2]: *** [pils.lo] 错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/lib/pils'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory`/root/heartbeat-2.0.7/lib'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/lib/pils里的makefile中的所有-Werror删除
如报
cc1: warnings being treated as errors
client_lib.c:1850: error: 'display_orderQ'defined but not used
gmake[2]: *** [client_lib.lo]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/lib/hbclient'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory`/root/heartbeat-2.0.7/lib'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/lib/hbclient里的makefile中的所有-Werror删除
如报
cc1: warnings being treated as errors
stonith_signal.h:34: error:'stonith_signal_set_simple_handler' defined but not used
gmake[4]: *** [apcmaster.lo]错误 1
gmake[4]: Leaving directory`/root/heartbeat-2.0.7/lib/plugins/stonith'
gmake[3]: *** [all-recursive]错误 1
gmake[3]: Leaving directory`/root/heartbeat-2.0.7/lib/plugins/stonith'
gmake[2]: *** [all-recursive]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/lib/plugins'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory`/root/heartbeat-2.0.7/lib'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/lib/plugins/stonith里的makefile中的所有-Werror删除
如报
cc1: warnings being treated as errors
conf_lex.c:1195: 错误:‘input’定义后未使用
gmake[2]: *** [recoverymgrd-conf_lex.o]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/telecom/recoverymgrd'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory `/root/heartbeat-2.0.7/telecom'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/telecom/recoverymgrd里的makefile中的所有-Werror删除
如报
chown hacluster/var/lib/heartbeat/cores/hacluster
chown: 无效的用户:"hacluster"
gmake[2]: [install-exec-local]错误 1 (忽略)
chmod 700/var/lib/heartbeat/cores/hacluster
gmake[2]: Nothing to be done for`install-data-am'.
gmake[2]: Leaving directory`/root/heartbeat-2.0.7'
gmake[1]: Leaving directory`/root/heartbeat-2.0.7'
则证明没添加用户及组,按照上面的添加用户及组后再编译安装。