一,阐述Linux HA Cluster的使用背景;
HA简介
1、高可用集群的定义
高可用集群,英文原文为High Availability Cluster,简称HACluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。
高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损失。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。
高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,更能满足用户不断出现的需求变化。
2、高可用集群的衡量标准
HA(High Available), 高可用性群集是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上,通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%
具体HA衡量标准:
99% 一年宕机时间不超过4天
99.9% 一年宕机时间不超过10小时
99.99% 一年宕机时间不超过1小时
99.999% 一年宕机时间不超过6分钟
二,总结Linux HA Cluster的系统组成,HA Cluster的工作模型;
1,HA Cluster系统组成
Messaging Layer:实现心跳信息传递、集群事务消息传递;
heartbeat
v1, v2, v3
corosync
cman (RedHat, RHCS)
keepalived (完全不同上述三种)
CRM:集群资源管理器;
heartbeat v1 haresources (配置接口:配置文件,文件名为haresources)
heartbeat v2 crm (在各节点运行一个crmd进程,配置接口:命令行客户端程序crmsh,GUI客户端:hb_gui);
heartbeat v3, pacemaker (pacemaker可以以插件或独立方式运行;配置接口,CLI接口:crmsh, pcs; GUI: hawk(webgui), LCMC, pacemaker-mgmt);
rgmanager (配置接口,CLI:clustat, cman_tool; GUI: Conga(luci+ricci))
组合方式:
heartbeat v1,自带haresources(v2版的crm)
heartbeat v2,自带crm管理(图形化工具hb_gui安装包)
heartbeat v3 + pacemaker
corosync + pacemaker
cman + rgmanager (RHCS)
cman + pacemaker
LRM: Local Resource Manager, 由CRM通过子程序提供;
RA: Resouce Agent资源代理
heartbeat legacy:heartbeat传统类型的RA,通常位于/etc/ha.d/haresources.d/目录下;
LSB:Linux Standard Base, /etc/rc.d/init.d目录下的脚本,至少接受4个参数:{start|stop|restart|status};
OCF:Open Cluster Framework
子类别:provider
STONITH:专用于实现调用STONITH设备功能的资源;通常为clone类型;
Messaging Layer通告,CRM指挥LRM,LRM使用RA完成资源管理
我们的一个DC决定,应该在某个节点上启用高可用服务,这个DC的CRM(通过选举的支配角色CRM),通过Messaging Layer传告给另一个节点的Messaging Layer,这个Messaging Layer再传递给CRM,CRM再指挥着LRM通过RA来完成资源管理。
一些重要概念概述:
通常我们需要讲多个资源通过约束来限制:web服务,我们需要,webip,webserver服务在同一主机,需要先启动webip再启动webserver,关闭也需要先关闭webserver再关闭webip。这里会使用到如下的资源约束
vote system:投票系统
HA中的各节点无法探测彼此的心跳信息时,必须无法协调工作;此种状态即为partitioned cluster;
少数服从多数的原则:quorum
with quorum > total/2
without quorum <= total/2
仲裁设备:
quorum disk = qdisk
ping node
failover: 失效转移,故障转移
failback:失效转回,故障转回
资源类型:
HA-aware:资源自身可直接调用HA集群底层的HA功能;
非HA-aware:必须借助于CRM完成在HA集群上实现HA功能;
资源的约束关系:
location:位置约束,定义资源对节点的倾向性;用数值来表示,-oo, +oo;当是-oo时候,表示无论如何都不会在这个节点运行。
colocation:排列约束,定义资源彼此间“在一起”倾向性;-oo, +oo;比如webip和webserver必须在同一主机上,webserver启动,关闭需要依据webip。
resources group分组:亦能实现将多个资源绑定在一起;
order:顺序约束,定义资源在同一个节点上启动时的先后顺序;比如先webip再webserver。
资源类型:
primitive:主资源,只能运行于集群内的某单个节点;(也称作native);
group:组资源,容器,包含一个或多个资源,这些资源可通过“组”这个资源统一进行调度;
clone:克隆资源,可以在同一个集群内的多个节点运行多份克隆;
master/slave:主从资源,在同一个集群内部于两个节点运行两份资源,其中一个主,一个为从;
资源隔离:
级别
节点:STONITH (Shooting The Other Node In The Head)
power switch
资源:fencing
FC SAN switch
2,HA Cluster的工作模型
高可用集群的模型分类
1.双机热备(Active/Passive)
官方说明:Two-node Active/Passive clusters using Pacemaker and DRBD are a cost-effective solution for many High Availability situations.
2.多节点热备(N+1)
官方说明:By supporting many nodes, Pacemaker can dramatically reduce hardware costs by allowing several active/passive clusters to be combined and share a common backup node.
3.多节点共享存储(N-TO-N)
官方说明:When shared storage is available, every node can potentially be used for failover. Pacemaker can even run multiple copies of services to spread out the workload.
4.共享存储热备 (Split Site)
官方说明:Pacemaker 1.2 will include enhancements to simplify the creation of split-site clusters.
三,通过LAMP组合,基于heartbeat v2 crm实现HA;要求,部署wordpress,用于编辑的文章中的任何数据在节点切换后都能正常访问;
节点: 192.168.0.190 node1
节点: 192.168.0.201 node2
NFS服务器与仲裁设备:192.168.0.202 node4
前提:
1,时间同步
2,host文件能够解析主机名
3,ssh,root无需验证
4,是否需要仲裁设备 仲裁设备当是偶数的时候需要
1,节点分别配置 192.168.0.190 201(每个节点都做相同配置,配置文件可以复制)
安装heartbeat软件包
yum install http://mirrors.hustunique.com/epel//6/x86_64/epel-release-6-8.noarch.rpm
yum install net-snmp-libs libnet PyXML
rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
[root@node1 heartbeat2]# rpm -ivh heartbeat-gui-2.1.4-12.el6.x86_64.rpm
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm --完成节点隔离的包
heartbeat-pils-2.1.4-12.el6.x86_64.rpm --依赖的库
heartbeat-gui-2.1.4-12.el6.x86_64.rpm --crm图形管理包
安装LAMP
yum install http mysql-server php php-mysql
vim /etc/my.cf
datadir=/mysql/data
[root@node1 lib]# mkdir -p /mysql/data
[root@node1 lib]# chown mysql.mysql /mysql/data -R
之后chkconfig mysqld off;chkconfig httpd off 不要开机启动
配置heartbeat
cd /usr/share/doc/heartbeat-2.1.4/
cp -p authkeys ha.cf haresources /etc/ha.d/
[root@node1 ha.d]# ls
authkeys ha.cf harc haresources rc.d README.config resource.d shellfuncs
配置:authkeys
[root@node1 ha.d]# chmod 600 authkeys
[root@node1 ha.d]# openssl rand -base64 6
UBNXiK8Q
[root@node1 ha.d]# vim authkeys
auth 2
#1 crc
2 sha1 UBNXiK8Q
#3 md5 Hello!
配置:ha.cf
logfacility local0 #日志功能:logfacility 表示将发往syslog,由syslog记录日志,但是指向的是local0,这里没有local0,很可能不会有日志,这样我们可以
vim /etc/rsyslog.conf
添加
local0.* /var/log/headbeat.log
或者注释logfacility local0
之后重启rsyslog
打开 logfile /var/log/ha-log
crm on #启用这个后,默认就禁用haresources 文件了
#keepalive 2 --默认两秒一次心跳
#deadtime 30 --多久宣告一个节点挂掉,(每2秒探测一次,30秒后没在宣告挂了)
#warntime 10 --警告时间,比如探测10S后节点还没在线,就在日志可能提示警告,这个节点可能挂了等信息。
udpport 694 --默认heatbeat端口是694
#bcast eth0 # Linux 广播
mcast eth0 225.0.0.1 694 1 0 多播 1为ttl为1,不允许传回来。0是不允许出路由器 ttl=1 loop=0 ;我们这里启用多播
#ucast eth0 192.168.1.2 单播
使用多播需要网卡开启多播模式:
[root@node1 ha.d]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:4D:AA:F0
inet addr:192.168.0.190 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe4d:aaf0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:74966 errors:0 dropped:0 overruns:0 frame:0
TX packets:21653 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5715766 (5.4 MiB) TX bytes:25228602 (24.0 MiB)
注意:[root@node1 ha.d]#ip link set eth0 multicast on --启用多播 off是关闭
auto_failback on --当活动节点断开又回复后是否接回资源(自动故障转回)
node node1.zkl.com
node node2.zkl.com --定义有节点,必须与usname -r 一致
ping 192.168.0.202 --仲裁设备
#ping_group group1 10.10.10.254 10.10.10.253 --如果一个主机不保险的话可以定义组内
#compression bz2 --是否对主机间信息进行压缩
#compression_threshold 2 --大于2KB才压缩
[root@node1 ha.d]# crm_mon #命令可实现监控,5560 crm监控的端口。
Refresh in 6s...
============
Last updated: Thu Oct 22 10:50:03 2015
Current DC: node1.zkl.com (c823878a-8569-421a-af56-b4f9c0786a4a)
2 Nodes configured.
0 Resources configured.
============
Node: node2.zkl.com (696677c1-4909-4699-8d4c-f02e693167b4): online
Node: node1.zkl.com (c823878a-8569-421a-af56-b4f9c0786a4a): online
将node1节点配置文件复制到node2
[root@node1 ha.d]#scp -p authkeys ha.cf 192.168.0.201:/etc/ha.d/
注意:
1,当切换IP资源的时候,节点会发送广播,告知其他设备自己的mac,ip。
2,在/usr/lib64/heartbeat 的hb_standby 运行这个脚本可以把当前主机变成备用节点,hb_takeover可以把资源抢回来。
2,在nfs主机202上配置:
mkdir -p /mydata
chown mysql.mysq /mydata/data -R
[root@node4 ~]# cat /etc/exports
/mydata/data 192.168.0.0/24(rw,no_root_squash)
创建组和用户必须和节点mysql用户组一致。节点mysql用户uid,gid都为27
groupadd -g 27 mysql
useradd -u 27 -g 27 mysql
id mysql
uid=27(mysql) gid=27(mysql) 组=27(mysql)
或者每个主机上:groupadd -r -g 306 mysql useradd -r -g 306 -u 306 mysql
service nfs restart
这样mysql,NFS共享配置完成。
3,在node1节点挂载NFS目录
mount -t nfs node4:/mydata/data /mysql/data
初始化数据库,只要在NFS挂载状态下连个节点只要初始化一次即可
service mysqld start
继续,配置mysql
mysql一些配置:(注意一定要在NFS挂载状态下配置,这样保持数据一致)
设置mysql,root密码
mysqladmin -u root password "root"
创建远程登录用户,授权:
mysql> CREATE USER 'zkl'@'192.168.0.%' IDENTIFIED BY 'zkl';
Query OK, 0 rows affected (0.31 sec)
mysql> GRANT ALL ON *.* TO 'zkl'@'192.168.0.%';
Query OK, 0 rows affected (0.11 sec)
mysql>flush privileges;
4,crm配置:图形化界面运行 hb_gui &(需要创建用户并设置密码)
在需要运行的节点上:
useradd hacluster
echo "root"|passwd --stdin hacluster
Resources资源配置:
定义组资源:myservices
组内添加资源,依照顺序:
web网页ip地址:webip IPaddr -->192.168.0.199 24 eth0
httpd服务: webserver httpd -->httpd
NFS共享挂载: mysql_store Filesystem-->device:192.168.0.202:/mydata/data directory: /mysql/data fstype:nfs
mysql服务: mysqld mysqld
Colocations配置:
webserver依据webip规则
mysqld服务依据mysql_store规则
orders顺序约束配置:详情参考说明(Description)
最后如下所示:
5,wordpress配置(在活动节点node1)
tar zxvf wordpress-4.3.1-zh_CN.tar.gz -C /var/www/html/
打开网页http://192.168.0.199:/wordpress
依据内容进行配置
配置完成后:
scp -r /var/www/html/wordpress 192.168.0.201:/var/www/html/
6,测试
node1发表文章,切换到node2也可以看到node1节点:发表文章如下: