群:
高可用(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
找客户端测试是否能够访问到该页面,如果可以,@@@@就关闭[email protected]@@@
为什么要关闭? 因为http已经作为HA集群中的资源,是由HA集群套件来决定是否需要启动
四、启动集群
所有集群节点都应该依次同时启动:
# service heartbeat start
验证:
1、如果集群启动成功,所有节点都健康的情况下,主节点优先获得资源成为活动节点
# lsof -i:80 -n
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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、如何实现故障迁移之后,节点还能提供一致的服务和内容
可以适当地根据项目和应用的特点选择使用共享存储
变化频率低的数据: 可以采用手工同步的方法实现
例如:网站应用的代码文件
变化频率高的数据: 采用共享存储
例如:用户上传的附件
数据库的数据: 使用同一个数据库服务器