群:

高可用(HA)集群:

解决架构中的单点故障。

有Heartbeat,rhcs

负载均衡集群:

解决架构中压力过大的问题。

高性能集群:

Hadoop


需要了解的一些HA集群的概念:


主节点:在HA集群中,优先成为活动节点并且提供服务

备用节点:在HA集群中,如果主节点出现故障,该节点会自动平滑地取代主节点成为活动节点提供服务

活动节点: 在HA集群中,当前获得了资源并且正在提供服务的节点

资源: 为了能够为客户提供服务而启动一些系统服务或者程序,常见的资源: 浮动IP,各种服务(httpd,vsftpd,mysqld等,只要是通过脚本启动的服务或程序都能叫做资源)

浮动IP: 当节点成为活动节点的时候需要绑定的IP,如果节点出现故障,该IP就会让替换该故障节点的备用节点所绑定。所以该IP实在HA集群中的节点之间浮动绑定的。

单点故障: 只要架构中存在某个点出现故障(包括服务器硬件、软件故障),整个架构就中断服务,那么该点股站就是单点故障。

故障迁移: HA集群中,某个故障出现了,备用节点取代故障节点,这个过程就叫故障迁移。


心跳: 用于集群节点之间传播集群状态信息和节点的健康状态信息。



HA集群的通用架构图:



例子:使用heartbeat实现简单的web高可用集群



客户端请求http://vip/ 或者 http://domain-name --> vip

|||

vip

 |---------------|   <---- 生产网络

server1 server2    

 |---------------|    <---- 心跳网络







要求:

系统采用rhel6


server1 (主节点)

server1.josen365.net

eth0 192.168.1.52/24  <---- 生产网络

        eth0:0 192.168.33.52/24  <---- 生产网络

eth1 192.168.100.52/24 <---- 心跳网络

gw 192.168.1.254 <---设定为生产网络


server2 (备用节点)

server2.josen365.net

eth0 192.168.1.50/24

        eth0:0 192.168.33.50/24

eth1 192.168.100.50/24

gw 192.168.1.254  <---设定为生产网络



vip 192.168.33.53

谁对外提供服务,谁绑定该IP(集群套件自动绑定,不是手工绑定)。

客户端就是使用该IP访问服务,或者域名解析该IP



准备:

静态IP,FQDN主机名

相互绑定主机名到hosts文件





配置过程:


# cat /etc/hosts

...

...

192.168.100.50 server1.upl.com  《---选择心跳网络的IP绑定主机名

192.168.100.52 server2.upl.com


关闭NetworkManager服务,设定开机不启动

关闭iptables、selinux



软件仓库:

[Base]

name=Base

baseurl=ftp://192.168.100.1/el65/

enabled=1

gpgcheck=0


[HighAvailability]    《---rhel6需要原来这个分组

name=HighAvailability

baseurl=ftp://192.168.100.1/el65/HighAvailability

enabled=1

gpgcheck=0


一、集群节点都安装集群软件heartbeat



# yum install ./heartbeat-3.0.4-2.el6.x86_64.rpm  ./heartbeat-libs-3.0.4-2.el6.x86_64.rpm -y  --nogpgcheck




rhel6u5系统得另外执行:

# ln -s /usr/lib64/heartbeat/*  /usr/libexec/heartbeat/

6u5会错误地去/usr/libexec/heartbeat/找可执行文件



二、配置集群



1、在其中一个集群节点进行配置


# cp /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources}  /etc/ha.d/



配置主配置文件

# vim /etc/ha.d/ha.cf 


logfile /var/log/ha-log

logfacility     local0

keepalive 2

deadtime 12

warntime 6

initdead 40

udpport 694  <---使用网络发送心跳使用的udp协议的端口


ucast eth1 192.168.100.52  使用本机eth1接口发送心跳给192.168.100.52

把配置文件同步到对端节点要修改IP


auto_failback on  主节点故障修复上线之后,会自动把资源抢回来成为活动节点


node    server1.upl.com   必须写节点的完整主机名(uname -n)

node    server2.upl.com


ping  192.168.100.1 选择心跳网络中最稳定一般不会出问题的设备的IP

用于辅助节点判断节点自身的网络健康情况


respawn hacluster /usr/lib64/heartbeat/ipfail  《--64位系统要把lib修改成lib64

apiauth ipfail gid=haclient uid=hacluster




编辑心跳加密配置文件

# vim /etc/ha.d/authkeys

auth 2

2 sha1 HI8sadkjfh23!


# chmod 600 /etc/ha.d/authkeys  必须保证权限正确



编辑HA集群中资源

vip --> httpd

格式:  主节点 资源1::参数1::参数2  资源2  资源3::参数


定义资源的时候,要根据资源的绑定顺序,从左到要右绑定资源

释放资源是从右到左


资源脚本的查找路径 /etc/ha.d/resources.d , /etc/rc.d/init.d/


# vim /etc/ha.d/haresources 

server1.upl.com   IPaddr::192.168.100.53/24/eth0  httpd


2、同步配置文件到其余节点

# scp /etc/ha.d/{ha.cf,authkeys,haresources}  server2.upl.com:/etc/ha.d/


同步之后记得修改ha.cf中心跳对端IP

ucast eth1 192.168.100.50



三、充分测试好各种资源


vip  : 确定网络中没有其他设备占用了该IP

确定vip的掩码要正确



httpd: 确定安装了httpd,并且人工启动确定工作正常后,再必须手工关闭



# yum install httpd -y


要了更好看到“故障迁移”的效果,我们故意让两个节点的页面内容不一样:

server1 # echo "server1" >> /var/www/html/index.html

server2 # echo "server2" >> /var/www/html/index.html


# service httpd start


找客户端测试是否能够访问到该页面,如果可以,@@@@就关闭httpd@@@@

为什么要关闭? 因为http已经作为HA集群中的资源,是由HA集群套件来决定是否需要启动




四、启动集群


所有集群节点都应该依次同时启动:

# service heartbeat start




验证:

1、如果集群启动成功,所有节点都健康的情况下,主节点优先获得资源成为活动节点

# lsof -i:80 -n

# ip addr show eth0

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:1d:e2:f5 brd ff:ff:ff:ff:ff:ff

    inet 192.168.110.101/24 brd 192.168.110.255 scope global eth0

    inet 192.168.100.53/24 brd 192.168.110.255 scope global secondary eth0

    inet6 fe80::5054:ff:fe1d:e2f5/64 scope link 

       valid_lft forever preferred_lft forever



客户端使用vip访问

# elinks 192.168.100.53


2、手工友好地切换资源


活动节点把资源让出去:

# /usr/share/heartbeat/hb_standby

活动节点通过心跳包告诉对端节点:我要把资源让给你,你做好准备了,然后活动节点会首先(从右到左)释放所有资源,释放成功之后,告诉对端节点可以绑定资源了。最后对端节点才会去绑定资源成为新的活动节点


非活动节点主动抢资源:

# /usr/share/heartbeat/hb_takeover



3、直接把活动节点硬关机

模拟活动节点死机了

如果故障的节点是集群中主节点,那么该节点修复上线之后,会怎么样?


分析:

1、什么原因会导致故障迁移的发生?

一般是因为活动节点的心跳存在问题,导致备用节点接受不了活动节点的心跳,如果存在电源设备,那么备用节点会使用电源设备把故障的活动节点进行电源重置(重启),然后才会绑定资源成为活动节点,完成故障迁移。

如果设定中,没有存在电源设备,备用节点在接受不到活动节点的心跳的时候,会直接绑定资源。这样会有可能导致“脑裂”。因为有可能,活动节点的心跳无法正常接受,不一定是活动节点的问题,有可能网络的问题,导致活动节点和备用节点之间的心跳不正常。


要解决脑裂:最根本的方法就是使用电源设备。

如果没有电源设备,可以通过增加心跳网络来降低脑裂出现的机率。


有写HA集群套件还能支持基于资源的故障迁移: 如果活动节点的资源,例如httpd因为故障死掉了,不能提供服务,集群套件会及时发现,并且把相关资源都释放,让备用节点去绑定资源,进行故障迁移。如果要使用heartbeat来实现,必须使用style2(版本2以上的新配置语法)




2、如何实现故障迁移之后,节点还能提供一致的服务和内容

可以适当地根据项目和应用的特点选择使用共享存储


变化频率低的数据: 可以采用手工同步的方法实现

例如:网站应用的代码文件

变化频率高的数据: 采用共享存储

例如:用户上传的附件



数据库的数据:  使用同一个数据库服务器