(一)
高可用集群介绍(入门)
http://blog.csdn.net/tjiyu/article/details/52643096
高可用集群的概念
(非常重要,需要重点理解)
①:什么是高可用集群
高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因为软件、硬件、人为造成的故障对业务的影响降低到最小程度。总而言之就是保证公司业务
7x24小时不宕机
②:高可用集群的衡量标准
通常用平均无故障时间(MTTF:mean time to failure)来度量系统的可靠性,用平均故障维修时间(MTTR:Mean Time Between Failures)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*
100%。
基本可用性
2个
9
99% 年度宕机时间:
87.6小时
较高可用性
3个
9
99.9% 年度宕机时间:
8.8小时
具有故障自动恢复
4个
9
99.99% 年度宕机时间:
53分钟
极高可用性
5个
9
99.999% 年度宕机时间:
5分钟
③:高可用集群实现原理
高可用集群主要实现自动侦测(Auto-Detect)故障、自动切换/故障转移(FailOver)和自动恢复(FailBack)。
1:自动侦测、故障检查:通过集群各节点间通过心跳信息判断节点是否出现故障
2:当有节点(一个或多个)和另外节点互相接收不到对方心跳信息时,如何决定哪一部分节点是正常运行的,而哪一部分是出现故障需要隔离的呢?
这时候通过法定票数(quorum)决定,即当有节点故障时,节点间投票决定哪个节点是有问题的,票数大于半数为合法,每个节点可以设置其票数,当一个节点能和另一个节点保持心跳信息,该节点就获取得了另一个节点的票数,该节点获得的所有票数就是法定票数,如果其法定票数大于集群中票数的总和的一半,那么该节点就是正常节点,反之为故障节点
④:什么是RA(Resource Agent)?
资源代理层,简单的说就是能够集群资源进行管理的脚本,如启动start,停止stop、重启restart和查询状态信息status等操作的脚本。由各个节点的LRM本地资源管理器负责运行
有四类资源代理:(安装crmsh后,可以使用ra classes查看)
1、Legacy heartbeat(heatbeat v1版本的资源管理);
2、LSB(Linux Standard Base),主要是/etc/init.d
/*目录下的脚本
3、OCF(Open Cluster Famework),比LSB更专业,更加通用,除了上面的四种操作,还包含monitor、validate-all等集群操作,OCF 的规范在http://www.opencf.org/cgi-bin/viewcvs.cgi/specs/ra/resource-agent-api.txt?rev=HEAD。
4、STONITH:实现节点隔离
HA解决方案分类
1:vrrp协议:keepalived
2:OpenAIS提供一种集群模式解决方案:heartbeat,corosync,CMAN(RHCS:红帽集群管理套件)
集群的工作模式详解
message layer,消息层的作用是传递集群内部节点之间的信息,如果有节点宕机,此节点宕机的信息将会立即被crm集群资源管理器捕获,crm决定宕机节点上运行的服务将有哪个节点代为运行,然而必须通知crm,通过crm在调用
RA(
RA是一系列启动或关闭服务的脚本),实现资源在集群节点的迁移过程
红帽5、红帽6、红帽7 高可用解决方案的组合程序
红帽
6:corosync 版本
1 + pacemaker + pcs或crmsh
corosync 版本
1 + cman + pacemaker
红帽
7:corosync + pacemaker(pacemaker作为crm运行) + pcs/crmsh
corosync是用于高可用环境中的提供Massage layer,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点之间提供心跳信息传递的管理者
pacemaker是一个开源的高可用资源管理器(cluster resource manager),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层的心跳传递服务corosync来实现,将信息通告给对方。通常它与corosync的结合方式有两种:①:pacemaker作为corosync的插件运行,②:pacemaker作为独立的守护进程运行
(二)
配置高可用集群(环境)
集群中节点必须满足一下基本条件
1:集群中的节点必须实现时间同步
2:能够通过/etc/hosts进行主机名解析
3:基于ssh免密码通信
集群环境准备
1:环境介绍:首先搭建两个节点的集群,node1(
192.168
.43
.10)和 node2(
192.168
.43
.11)
2:三个节点:
192.168
.43
.9(node0时间同步服务器),
192.168
.43
.10(node1),
192.168
.43
.11(node2)
集群配置步骤
node0,node1,node2上配置/etc/hosts文件,实现主机名解析
(首先要设置好主机名hostnamectl)
192
.168
.43
.9
node0
192
.168
.43
.10
node1
192
.168
.43
.11
node2
配置ssh免密码登入
(在node0上操作)(为了避免ssh登入是需要输入yes,可以笨办法可以先在各个节点上使用ssh先登入其他的节点)
ssh-keygen -t rsa -P
""
cd
.ssh
mv id_rsa
.pub authorized_keys
rm -f known_hosts
cd ../
scp -rp .ssh/ node1:/root/
scp -rp .ssh/ node2:/root/
node0,node1,node2上配置时间同步服务器
1:在node0上安装配置chrony服务,同步国内互联网时间服务器的时间
yum install -y chrony
2:编辑配置文件/etc/chrony.conf
修改默认的centos时间同步服务器地址为国内时间同步服务器地址,且允许
192.168
.43
.0/
24网段的主机同步时间
server s1a.time.edu.cn iburst
server s1b.time.edu.cn iburst
server s1c.time.edu.cn iburst
server s1d.time.edu.cn iburst
allow
192.168
.43
.0/
24
3:启动chrony
systemctl enable chronyd.service
systemctl start chronyd.service
4:在node1和node2上分别安装chrony,且修改配置文件/etc/chrony.conf,将时间同步指向node0节点
yum install -y chrony
server node0 iburst(配置文件里面修改)
systemctl enable chronyd.service
systemctl start chronyd.service
5:node1,node2验证时间同步
[root@node1 ~]# chronyc sources
210 Number of sources =
1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* node0
3
6
17
6
-5684ns[
-1595ns] +/-
401ms
(三)
高可用集群(服务配置)
pacemaker提供的管理程序有:(rpm -ql pacemaker)
/usr/libexec/pacemaker/cib(集群信息中心 cluster infomation base)
/usr/libexec/pacemaker/crmd(集群管理器)
/usr/libexec/pacemaker/lrmd(本地管理器)
在node1和node2节点安装corosync、pacemaker
安装pacemaker( corosync将会被作为依赖安装)
yum
install -y pacemaker
在node1上操作
cd /etc/corosync/
cp corosync.
conf.example corosync.
conf
关于/etc/corosync/corosync.conf配置文件的介绍
1:
totem { }:设置节点间的通信方式,通信协议,加密,通信的多播地址,且至少需要定义一个
interface{}接口用来传递集群心跳信息
2:
loggin { }:设置格式,存储路径,记录的级别
3:
quorum { }: 设置投票信息
4:
nodelist { }:设置节点个数
由于在message layer层传递心跳信息需要加密,因此先必须生成加密文件
corosync-keygen
编辑配置文件/etc/corosync/corosync.conf,修改配置文件
(man corosync.conf 查看配置选项)
totem {
version:
2
# 指定版本号
cluster_name: uplookingcluster
# 指定集群名称
crypto_cipher: aes256
# 指定对称加密算法
crypto_hash: sha1
# 指定单向加密算法