Apache+heartbeat HA方案
主从热备,当master 宕机自动切换到slave提供服务,直到master恢复后自动切换到master提供服务。
1、系统环境
Master: ha01
eth0:192.168.58.101
eth1:192.168.107.101
Slave: ha02
eth0:192.168.58.102
eth1:192.168.107.102
Virual IP :192.168.58.100
Httpd 安装系统时选择安装
Heartbeat:
libnet:
2、软件安装
1)用tar安装
tar xvf /mnt/libnet.tar.gz -C /usr/src/ ①
tar xvf /mnt/heartbeat-2.0.8.tar.gz -C /usr/src
cd /usr/src/libnet/
./configure &&make &&make install
cd ../heartbeat-2.0.8
./ConfigureMe configure &&make&&make install
groupadd -g 694 haclient
useradd -u 694 -g haclient hacluster
没有以上用户名启动服务会报错:
heartbeat[19932]: 2009/02/12_20:31:07 ERROR: Invalid user id name [hacluster]
*********************************①********************************************
好奇害死猫!!
以下为不装libnet先装heartbeat时报错信息:
./ConfigureMe configure
configure: error: The following required components noted earlier are missing: libnet
*******************************************************************************
2)用rpm安装
heartbeat-pils-2.1.3-3.el5.centos.i386.rpm
heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm ②
heartbeat-2.1.3-3.el5.centos.i386.rpm
**********************************②*******************************************
Cluster.pdf P12
Node fencing – STONITH
*******************************************************************************
chkconfig –add heartbeat
chkconfig heartbeat on
chkconfig httpd off
3、配置文件
1、copy 配置文件
cp /usr/share/doc/heartbeat-2.0.8/{ha.cf,haresources,authkeys} /etc/ha.d/
ha.cf :主要配置文档
haresources :资源文档,包括heartbeat服务启动时使用的资源。
authkeys :安全验证
2、文件配置
以下文件配置在master、slave下都一样
1)/etc/hosts 写完保存自动生效。
192.168.58.101 ha01
192.168.58.102 ha02
2)ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 5
warntime 3
initdead 10
udpport 694
bcast eth1 # Linux
auto_failback on
watchdog /dev/watchdog
node ha01
node ha02
3)haresources
ha01 IPaddr::192.168.58.100 httpd
4)authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
验证等级,由低到高!!!
3、注意事项
1)Master先启动后,再启动slave,否则直接执行failover了。
2)service heartbeat start
Starting High-Availability services:
2009/02/12_23:57:57 INFO: Resource is stopped
[ OK ]
表明heartbeat正常运行。
4、测试
1)ping ha01 ha02
PING ha01 (192.168.58.101) 56(84) bytes of data.
PING ha02 (192.168.58.102) 56(84) bytes of data.
3)切换测试
ha01正常 |
测试命令 |
ha01 |
ha02 |
ifconfig |
eth0:0 192.168.58.100 |
无eth0:0 |
ps aux|grep heartbeat |
master control process
FIFO reader
write: bcast eth1
read: bcast eth1 |
ps aux |grep httpd |
有httpd服务 |
无httpd服务 |
web打开192.168.58.100、192.168.58.101正常
ha01宕机 |
测试命令 |
ha01 |
ha02 |
ifconfig |
无eth0:0 |
eth0:0 192.168.58.100 |
ps aux|grep heartbeat |
master control process
FIFO reader
write: bcast eth1
read: bcast eth1 |
ps aux |grep httpd |
有httpd服务 |
有httpd服务 |
web打开192.168.58.100、192.168.58.102正常
ha01恢复 |
测试命令 |
ha01 |
ha02 |
ifconfig |
eth0:0 192.168.58.100 |
无eth0:0 |
ps aux|grep heartbeat |
master control process
FIFO reader
write: bcast eth1
read: bcast eth1 |
ps aux |grep httpd |
有httpd服务 |
无httpd服务 |
web打开192.168.58.100、192.168.58.101正常
由于设备简陋只能人工估计。多次中断测试初步估计主机备机切换时间不足30秒
4)107断网测试
中断107网段网线 |
测试命令 |
ha01 |
ha02 |
ifconfig |
有eth0:0 192.168.58.100 |
ps aux|grep heartbeat |
master control process
FIFO reader
write: bcast eth1
read: bcast eth1 |
ps aux |grep httpd |
有httpd服务 |
Ping 192.168.58.100 |
不通超时 |
Web能同时打开 192.168.58.100、192.168.58.101、192.168.58.102
第三方机器测试:
ping 192.168.58.100 通
arp –a 查看mac地址
Interface: 192.168.58.1 --- 0x2
Internet Address Physical Address Type
192.168.58.100 00-0c-29-a5-e7-a4 dynamic
192.168.58.101 00-0c-29-a5-e7-a4 dynamic
192.168.58.102 00-0c-29-ec-f2-1f dynamic
107网段恢复时,正常。
5)58.101断网测试
中断58.101网线 |
测试命令 |
ha01 |
ha02 |
ifconfig |
eth0:0 192.168.58.100 |
ps aux|grep heartbeat |
master control process
FIFO reader
write: bcast eth1
read: bcast eth1 |
ps aux |grep httpd |
有httpd服务 |
无httpd服务 |
Web都打不开
解决方案一:
在master(ha01)eth0网口才用bond技术,两个或两个以上网卡虚拟出一个网卡。
优点:
1、提高master的eth0(bond0)端口带宽(N*100M),提高端口一的数据吞吐能力
2、假设单网卡全年故障时间是1天,哪么两个或两个以上网卡的故障时间是1/(N*365)天,大大降低故障出现率。
缺点:
1、 需要添置新的硬件,增加成本(一张网卡不到100元)。
Bond绑定网卡请参见bond文档。
解决方案2:(测试)
修改ha.cf配置文档,将bcast改为eth0
cat /etc/ha.d/ha.cf |grep -v "^#" 查看bcast
bcast eth1 # Linux
修改后
Master:ucast eth0 192.168.58.102
Slave:ucast eth0 192.168.58.101
查看107网段数据包:
tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
0 packets captured
0 packets received by filter
0 packets dropped by kernel
说明心跳已经修改到eth0端口。
tcpdump -i eth0 >log
01:03:54.007087 IP ha02.32780 > ha01.ha-cluster: UDP, length 167
01:03:55.924565 IP ha01.32781 > ha02.ha-cluster: UDP, length 167
01:03:56.055518 IP ha02.32780 > ha01.ha-cluster: UDP, length 167
01:03:57.928805 IP ha01.32781 > ha02.ha-cluster: UDP, length 167
01:03:58.083680 IP ha02.32780 > ha01.ha-cluster: UDP, length 167
优点:
1、 不需要添加新网卡,可以直接将机器上的双网卡绑定。
缺点:
1、 eth0端口数据通信量过大,在服务器访问量增大时,会降低访问速度。
2、 在58网段容易造成数据冲突,增加交换机负担
5、数据存储
1、nfs共享存储
添加一台NFS服务器来存储网站内容
2、 drbd备份存储
2009-2-14
清蒸