集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。集群系统主要分为高可用(High Availability)集群,简称 HA 集群。常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机"。 这样做的好处是当服务启动的时候,两台服务器一个作为主,另一个是从。测试机每几秒会ping主机,当发现主机没有回应,就证明主机宕机了,那么从机马上会启动相应的服务,继续进行服务。这样就可以保证服务不间断。
我的测试环境:3台PC,(具体配置不写了)其中两台机器要配置双网卡,每台机器都使用VMware,在里面虚拟Linuxas5的操作系统。虚拟机的双网卡设置
具体的拓扑图
具体配置:
1)先要检查系统中是否有下面软件开发包的支持,包括pkgconfig glib2-devel e2fsprogs和libnet
2) 我的系统中只缺少libnet,安装libnet,这里使用的是1.1.2.1版本
tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install
3) 安装heartbeat
tar -zxvf heartbeat-2.0.7.tar.gz
cd heartbeat-2.0.7
./ConfigureMe configure
make
make install
4) 当安装好heartbeat后,系统会在/etc/下建立一个ha.d的目录,我们需要把一些文件拷到里面去。
cp /soft/heartbeat-2.0.7/doc/ha.cf /etc/ha.d
cp /soft/heartbeat-2.0.7/doc/haresources /etc/ha.d
cp /soft/heartbeat-2.0.7/doc/authkeys /etc/ha.d
拷完以后的文件
5) 主要文件的配置
vi /etc/ha.d/ha.cf
具体要把下面的选项前的注释去掉
logfile /var/log/ha-log
logfacility local0
keepalive 2 每2秒钟 测试机发送一个广播
deadtime 30 30秒内没有反应,立即切换服务
warntime 10
initdead 120
udpport 694
bcast eth1 指明心跳连接的接口号
ucast eth1 192.168.1.20 心跳连接的pc的ip
auto_failback on
node haoyi.com 两个的主机名(最好用uname -n察看)
node 123.com
ping 10.1.1.1 测试机的ip (要写外部的测试IP)
vi /etc/ha.d/haresources 这个主要是指明资源的来源,是远端挂载
里面就改一个地方
haoyi.com 10.1.1.250 Filesystem::10.1.1.220:/share::/var/www/html::nfs httpd
haoyi.com是主服务器的IP 10.1.1.250是虚拟主机的ip 10.1.1.220:/share是我远程挂载的位置
,我的WEB网页就放在那里 /var/www/html是我的WEB服务的DocumentRoot httpd我开启的服务
vi /etc/ha.d/authkeys 这个是安全方面的配置,里面有三种认证方式:crc md5 sha1
auth 1
#1 crc
1 sha1 HI!
#3 md5 Hello!
最后要更改文件的权限
chmod 600 /etc/ha.d/authkeys
6)做这个实验,两台心跳的服务器的配置要完全一样,所以我用scp远程传到另一个已经安装完成
好libnet 和heartbeat的机器上,同样是放在 /etc/ha.d中,唯一不一样的是这台机器的ha.cf中的ucast
eth1 192.168.1.20 要写上刚才那台机器的ip 也就是192.168.1.10。同样把authkeys的权限也改为600
7)在我共享硬盘上要做相应的配置
vi /etc/exports
vi /etc/hosts 需要把两台心跳连接的电脑的主机信息写上
然后开起NFS服务
8)现在开始测试
首先把两台机器的服务启动,位置在/etc/init.d/heartbeat start
过几秒钟后我们会发现haoyi.com的主机的网卡信息中出现eth0:0 它的IP是10.1.1.250 就是刚才我 们做的虚拟主机的IP,同时查看挂载情况会发现文件系统已被挂载。同时123.com的主机信息中没有变化 。这就是说现在主服务器已经启动,从服务器在等待。
haoyi.com的主机信息
123.com的主机信息
当我们把haoyi.com的heartbeat服务关掉后 过几秒后
我们发现123.com的网卡信息中出现了eth0:0 它的IP10.1.1.250,同时查看挂载情况会发现文件系 统已被挂载,同时hao.com中刚才的信息已经没有了!这就说明现在服务是有刚才的从机器,也就是 123.com来提供的。
123.com的主机信息
这个是haoyi.com主机的信息,已经没有挂载点了
同时我们把两台服务器的WEB服务都启来,我们这需要访问前段的虚拟主机的IP,也就是10.1.1.250 这样就可以访问到后台的主页了。无论这其中是那台服务器再起作用都无所谓,我们要的是服务不间断就 可以了!
###########################################################################################################
Linux上的heartbeat双机热备服务架设
【一】 安装前环境设定
两台主机硬件环境(不必完全一致):
CPU: Xeon 3G *2 (EM64T)
MEM: 2G
NIC: Intel 1G *2
eth0: 对外IP
eth1: 对内IP(HA专用)
两台主机的eth1使用双机对联线直接连接。
分区方式:
Filesystem 容量 挂载点
/dev/sda2 9.7G /
/dev/sda6 45G /Datas
/dev/sda1 99M /boot
none2.0G /dev/shm
/dev/sda3 9.7G /opt
另外每台主机应预留500M的raw空间或者更多来作为共用空间被HA使用。
操作系统:
RedHat Enterprise 4 Update2 (2.6.9-22 EL)
预安装软件:
@ X Window System
@ GNOME Desktop Environment
@ KDE Desktop Environment
@ Editors
@ Engineering and Scientific
@ Graphical Internet
@ Text-based Internet
@ Authoring and Publishing
@ Server Configuration Tools
@ Development Tools
@ Kernel Development
@ X Software Development
@ GNOME Software Development
@ KDE Software Development
@ Administration Tools
@ System Tools
【二】安装前网络环境设定:
node1: 主机名:servers201 ( HA01 )
eth0: 192.168.10.201 //对外IP地址
eth1: 10.0.0.201 //HA心跳使用地址
node2: 主机名:servers202 ( HA02 )
eth0: 192.168.10.202 //对外IP地址
eth1: 10.0.0.202 //HA心跳使用地址
特别注意要检查以下几个文件:
/etc/hosts
/etc/host.conf
/etc/resolv.conf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/nsswitch.conf
#vi /etc/hosts
node1的hosts内容如下:
127.0.0.1 localhost.localdomain localhost
192.168.10.201 servers201 HA01
10.0.0.201 HA01
10.0.0.202 HA02
192.168.10.202 server202
node2的hosts内容如下:
127.0.0.1 localhost.localdomain localhost
192.168.10.202 servers202 HA02
10.0.0.202 HA02
10.0.0.201 HA01
192.168.10.201 server201
#cat /etc/host.conf
order hosts,bind
#cat /etc/resolv.conf
nameserver 61.139.2.69 //DNS地址
#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=servers201 //主机名
GATEWAY="192.168.10.1" //网关
GATEWAY="eth0" //网关使用网卡
ONBOOT=YES //启动时加载
FORWARD_IPV4="yes" //只允许IPV4
#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.201
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
TYPE=Ethernet
IPV6INIT=no
#cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.201
NETMASK=255.255.255.0
TYPE=Ethernet
[node1] 与 [node2] 在上面的配置中,除了
/etc/hosts
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
要各自修改外,其他一致。
配置完成后,试试在各自主机上ping对方的主机名,应该可以ping通:
/root#ping HA02
PING HA02 (10.0.0.202) 56(84) bytes of data.
64 bytes from HA02 (10.0.0.202): icmp_seq=0 ttl=64 time=0.198 ms
64 bytes from HA02 (10.0.0.202): icmp_seq=1 ttl=64 time=0.266 ms
64 bytes from HA02 (10.0.0.202): icmp_seq=2 ttl=64 time=0.148 ms
--- HA02 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.148/0.204/0.266/0.048 ms, pipe 2
【三】安装HA 与HA依赖包
rpm -Uvh libnet-1.1.2.1-1.rh.el.um.1.i386.rpm //可以不装
rpm -Uvh heartbeat-pils-2.0.4-1.el4.i386.rpm
rpm -Uvh heartbeat-stonith-2.0.4-1.el4.i386.rpm
rpm -Uvh heartbeat-2.0.4-1.el4.i386.rpm
rpm -Uvh ipvsadm-1.24-5.i386.rpm
【四】 配置 HA的各配置文件
配置心跳的加密方式:authkeys
#vi /etc/ha.d/authkeys
如果使用双机对联线(双绞线),可以配置如下:
#vi /etc/hc.d/authkeys
auth 1
1 crc
存盘退出,然后
#chmod 600 authkeys
配置心跳的监控:haresources
#vi /etc/ha.d/haresources
各主机这部分应完全相同。
server201 IPaddr::192.168.10.200 ipvsadm httpd
指定 server201调用ipvsadm启动http服务,系统附加一个虚拟IP 192.168.10.200 给eth0:0
这里如果server201宕机后,server202可以自动启动http服务,并新分配IP 192.168.10.200给server202的eth0:0
配置心跳的配置文件:ha.cf
#vi /etc/ha.d/ha.cf
logfile /var/log/ha_log/ha-log.log ## ha的日志文件记录位置。如没有该目录,则需要手动添加
bcast eth1 ##使用eth1做心跳监测
keepalive 2 ##设定心跳(监测)时间时间为2秒
warntime 10
deadtime 30
initdead 120
hopfudge 1
udpport 694 ##使用udp端口694 进行心跳监测
auto_failback on
node server201 ##节点1,必须要与 uname -n 指令得到的结果一致。
node server202 ##节点2
ping 192.168.10.1 ##通过ping 网关来监测心跳是否正常。
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=root uid=root
debugfile /Datas/logs/ha_log/ha-debug.log
设置ipvsadm的巡回监测
ipvsadm -A -t 192.168.10.200:80 -s rr
ipvsadm -a -t 192.168.10.200:80 -r 192.168.10.201:80 -m
ipvsadm -a -t 192.168.10.200:80 -r 192.168.10.202:80 -m
执行后进行监测:
#ipvsadm --list
如果返回结果与下相同,则设置正确。
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.200:http rr
-> server202:http Local 1 0 0
-> server201:http Masq 1 0 0
【五】 HA服务的启动、关闭以及测试
启动HA: service heartbeat start
关闭HA; service heartbeat stop
系统在启动时已经自动把heartbeat 加载了。
使用http服务测试 heartbeat
首先启动httpd服务
#service httpd start
编辑各自主机的测试用html文件,放到/var/www/html/目录下。
启动node1的heartbeat,并执行这个指令进行监控: heartbeat status
【六】 防火墙设置
heartbeat 默认使用udp 694端口进行心跳监测。如果系统有使用iptables 做防火墙,应记住把这个端口打开。
#vi /etc/sysconfig/iptables
加入以下内容
-A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -d 10.0.0.201 -j ACCEPT
意思是udp 694端口对 对方的心跳网卡地址 10.0.0.201 开放。
#service iptables restart
重新加载iptables。