一,阐述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系统组成

wKiom1Yp8jKAXY1xAAEc56aNSfc797.jpg

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.

wKiom1Yp8z7h8sBnAAIsvfJpm08689.jpg

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.

wKioL1Yp85TSxqgpAAIy9nybvRw053.jpg

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.

wKiom1Yp86-T_1cUAAKCjETST8k380.jpg

4.共享存储热备 (Split Site)

官方说明:Pacemaker 1.2 will include enhancements to simplify the creation of split-site clusters.

wKioL1Yp9AHQG0ZpAAIf-WMzoe4404.jpg

三,通过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

spacer.gif[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规则

wKioL1YpwvDiqTAcAADYygY4o1s140.jpg

mysqld服务依据mysql_store规则

wKiom1YpwuvzWbtAAAGMnyvxvTA804.jpg

orders顺序约束配置:详情参考说明(Description)

wKiom1Ypwx3S6xrWAAFTCVZA6og623.jpg

wKiom1YpwzrBEzqXAAFSveYQLXU613.jpg

最后如下所示:


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节点:发表文章如下:

wKiom1Ypw9Xg8sH6AAMKolCaBVc073.jpg

wKioL1YpxAKgCZLaAAFn9zOaiOI138.jpg

wKioL1YpxAKiregWAAMTfGwDIJg898.jpg

wKiom1Ypw9WS7r0kAAFuE7rfbDw190.jpg