HA(High aviliable)高可用

高可用的需求


在很多公司里面,都会存在着一些不愿被中断的业务,但是由于硬件故障,软件故障,人为因素等各种因素,往往会不经意的造成我们重要的业务中断,因此高可用技术就由此而生。

评价的标准

A = MTBF / (MTBF + MTTR)
MTBF: Mean Time Between Failover 平均无故障时间
MTTR: Mean Time To Repair  平均修复时间
一般来说,A的值越大,高可用性能就越好,通过增大MTBF或者减小MTTR可以提高系统的高可用性能,
但是一般来说MTBF的提高难度有点大,因此现在HA的主要方法就是通过增加备用节点来减小MTTR.

HA架构

高可用架构比较复杂,因为HA用了分层的结构来实现它的功能,但是说到底目的只有一个,那就是高效快速的实现资源的转移。

Message Layer:用来交换心跳信息
CRM(Cluster Resource Management):对心跳信息进行管理,从而做出一些决策
LRM(Local Resource Management):根据CRM的决策信息进行真正的管理
RA(Resource Agent):真正实现资源转移的脚本文件

1.Messaging Layer(集群信息交流层)

集群信息交流层的作用,主要是为了交换个自己节点的心跳信息(heartbeat),从名字我们都可以看出来,heartbeat主要是主要来标志着一个节点是否处于活动状态,也就是是否正常工作的意思,集群信息交换层通过交换彼此的信息给予CRM一些重要的通知,以助于完成后续资源转移的目的。

2.CRM(集群资源管理层)

集群资源管理层分为两个层次
DC(Design coordinater)指定候选人,DC会通过PE(Policy
Engender)策略引擎对心跳信息进行分析然后根据某种规则进行策略分析,然后把分析的结果送交给LRM进行执行

3.LRM本地资源管理器

本地资源管理器主要用于接受自上一层DC的策略结果,通过调用RA对资源进行一些操作

4.RA资源代理

资源代理主要是一些脚本,可以接受参数,然后对资源进行处理的,类型有四种
<1. service(heartbeat lengacy) 
<2. LSB(Linux Standart )
<3.OCF(Open Cluster Framework)
<4.STONISH 
<5.SYSTEMD 

Resource(资源)

资源是什么呢?举例来说,对于高可用的web集群来说,资源指的是vip,httpd,filesystem,对于mysql高可用来讲,资源指的是vip,mysqld,filesystem。简单来说,资源指的是当我们的集群节点发生故障之后,使另一个节点能够具备和此节点一样功能的可转移目标。对于web集群来说,本来vip,httpd,filesystem三个资源在A上,当A发生了故障,我把这三个资源转移到B上,一样可以正常的实现web服务。

资源类型
 
1.primitive(主资源)
主资源指的是对于一个集群服务而言,只能在一个节点上面处于活动状态的资源。例如一个web高可用集群,vip,httpd,filesystem都是primitive,因为他们只能在一个节点上处于active,只有当次节点发生故障之后,才会进行资源转移
 
2.clone(克隆资源)
与主资源刚好相反,克隆资源是指能够在多个节点上面处于活动状态的资源。例如STONISH,STONISH是用来防止集群发生heart
split(脑裂)的,在收不到节点发的heartbeat信息时,就要使光电交换机自动的切断自己认为是错误节点的电源,以防止发生脑裂现象。
 
3.master/slave(主从资源)
主从资源是克隆资源的一个特例,指只能够在两个节点上面处于活动状态的资源。
 
4.group(组资源)
和排列约束还是蛮相近的,指的是让一些资源合并成一个组资源,运行在同一个节点上面。
 
资源约束
 
1.location位置约束
和资源粘性一起使用,用来定义某个资源对此节点的倾向性,用值来表示倾向性的强度
inf:表示只要此节点处于活动状态,就立马转移到此节点上面
-inf:表示只要有其他节点处于活动状态,就不会转移到此节点上面
 
2.order(顺序约束)
定义一些资源启动和关闭的顺序的
 
3.colacation(排列约束)
定义几个资源是否能够在一起的
inf:这几个资源必须在一起
-inf:这几个资源一定不能放在一起
 
资源粘性
 
资源粘性和资源约束的location比较相像,指的是某个资源更倾向与在某个节点上面,一般与资源约束的值进行
相加来最终判断资源是否倾向于此节点上面。
 
资源隔离
 
有些资源是不能放在同一个节点上面的,因此在进行了资源约束的情况下,一般还需要对资源进行隔离
1.节点隔离(STONISH)
2.资源隔离(FENCE)


 
架构的具体实现软件
 
因为linux内核的不断更新,各厂商的不同,以及高可用技术的分层技术复杂,因此造成了高可用集群技术软件的实现有着很大的不同的局面,很多的软件架构在不同的操作系统上面多依赖的库文件不同,安装很是麻烦,对于初学者来说,简直了,不管怎么样,我还是简单的说一下软件架构。
1.Messaging Layer
  • heartbeatv1
  • heartbeatv2
  • hearteatv3
  • corosync
  • cman

2.CRM

  • pacemaker
  • crm
  • rgmanager

3.全生命周期的管理软件

  • pcs(因为其没有命令行补全工具,而且命令又不是嵌入shell里面,因此不是特别友好)
  • crmsh(具有命令行工具,命令类似于一个全新的shell)

以上软件具体的作用我会在之后的实验里面进行介绍,今天我先介绍一种架构,近来因为看的学习视频有点老,很多的软件都找不到,有时候就算找到了也很难安装成功,况且高可用软件对于linux内核版本的依赖性很高,,因此建议用以下架构,因为centos7.0默认具有以下组件,我们可以非常轻松的用yum进行软件的安装,但是因为centos第一次接触,有很多地方和之前的版本有很大的不同,让我们一起来克服吧。

  • corosync v2 + pacemaker
    + pcs
  • centos 7.0
  • node1   192.168.1.128
  • node2   192.168.1.129
  • node3   192.168.1.130
  • ntp_server nfs_server 192.168.1.127
 
因为第一次接触centos7.0,首先我先说一下我在配置安装过程中出现的几个问题。
 
1、no server suitable for synchronization
found 
这个问题主要是由于没有在各个节点上面开启ntp服务造成的,本来我以为只用一个ntp服务器需要开启ntp服务就可以了,然后就一直提示此错误
2、device eth0 does not seem to be present delaying
initialization centos 7
这个问题产生的原因是在克隆了一个系统之后出现的错误,可能是由于克隆的时候mac地址冲突的问题导致的
解决方法
cat 
/etc/udev/rule.d/70-persisent-ipoib.rules
找eth1的mac地址,替换以下文件的mac地址
vim
/etc/sysconfig/network-scripts/cfg-ens33   
然后重启服务
systemctl  restart 
network
 
配置高可用集群服务的先决条件
 
1.节点名称要一直,可以进行互相的通信

节点一

#hostname node1 修改主机名,临时生效

#vim /etc/sysconfig/network 永久生效

HOSTNAME=node1

#vim /etc/hosts 使主机能够解析node1,node2,node3

192.168.1.128 node1

192.168.1.129 node2

192.168.1.130 node3

#ping node2 测试是否能够ping通

#ping node3

节点二

#hostname node2 修改主机名,临时生效

#vim /etc/sysconfig/network 永久生效

HOSTNAME=node2

#vim /etc/hosts 使主机能够解析node1,node2,node3

192.168.1.128 node1

192.168.1.129 node2

192.168.1.130 node3

#ping node3 测试是否能够ping通

#ping node1

节点三

#hostname node3 修改主机名,临时生效

#vim /etc/sysconfig/network 永久生效

HOSTNAME=node3

#vim /etc/hosts 使主机能够解析node1,node2,node3

192.168.1.128 node1

192.168.1.129 node2

192.168.1.130 node3

#ping node2 测试是否能够ping通

#ping node1

2.ssh可以相互进行通信
 
节点一
#ssh-keygen -t rsa 
在家目录下面生成秘钥文件
#ssh-copy-id -i ~/.ssh/id-rsa.pub root@node2 和node2进行秘钥的交换
#ssh-copy-id -i ~/.ssh/id-rsa.pub root@node3 和node3进行秘钥的交换
#ssh node2 "ifconfig" 检测是否交换成功,注意此时的ip地址为node2的地址
#ssh node3 "ifconfig" 检测是否交换成功,注意此时的ip地址为node3的地址
 
节点二
#ssh-keygen -t rsa 
在家目录下面生成秘钥文件
#ssh-copy-id -i ~/.ssh/id-rsa.pub root@node1 和node1进行秘钥的交换
#ssh-copy-id -i ~/.ssh/id-rsa.pub root@node3 和node3进行秘钥的交换
#ssh node1 "ifconfig" 检测是否交换成功,注意此时的ip地址为node1的地址
#ssh node3 "ifconfig" 检测是否交换成功,注意此时的ip地址为node3的地址
 
 
节点三
#ssh-keygen -t rsa 
在家目录下面生成秘钥文件
#ssh-copy-id -i ~/.ssh/id-rsa.pub root@node2 和node2进行秘钥的交换
#ssh-copy-id -i ~/.ssh/id-rsa.pub root@node1 和node1进行秘钥的交换
#ssh node1 "ifconfig" 检测是否交换成功,注意此时的ip地址为node1的地址
#ssh node2 "ifconfig" 检测是否交换成功,注意此时的ip地址为node2的地址
 
3.时间同步
 
NTP服务器
 
<1.yum源的配置
 
#mkdir -pv /mnt/cdrom
#vim /etc/yum.repos.d/huwentao.repo配置一下信息
 
[huwentao]
name=huwentao
baseurl=file:///mnt/cdrom
此处最关键,对于centos7.0没有了Server,Cluster,因此就写成这样可以了
enabled=1
gpgcheck=0
 
<2.安装ntpd服务
#yum list all | grep ntp 看看是否有一下信息输出
ntp.x86_64                                
4.2.6p5-25.el7.centos      
@hu    
#yum install ntp -y 安装时间服务器
#systemctl restart ntpd.service
 
节点二
 
<1.和节点一一样配置yum源,安装启动服务
#ntpdate 192.168.1.127
 
节点三
 
<1.和节点一一样配置yum源,安装启动服务
#ntpdate 192.168.1.127
 
至此,配置高可用web集群服务的基础架构就已经完成了
 
4.安装软件
 
节点一,二,三节点都要执行
#yum -y  install corosync pacemaker pcs
httpd
#systemctl stop firewalld.service 
对于不知道怎么设置防火墙的,而且是仅仅只是做实验的人来说,这一步必须要有
#setenforce 0
#systemctl enable httpd.service 设置为开机自启
 
5.详解配置文件corosync.conf
totem {

   version:
2
   crypto_cipher: none  不

crypto_hash: none

secauth: off

   interface
{

    ringnumber:
0

    bindnetaddr: 192.168.1.0
网段地址

    mcastaddr:
239.188.1.31 组播地址

    mcastport:
5405

    ttl:
1

   }
  nodelist {

         
node {

                 
ring0_addr: 192.168.1.128
                 
nodeid: 1

         
}

         
node {

                 
ring0_addr: 192.168.1.129

                 
nodeid: 2

         
}

         
node {

                 
ring0_addr: 192.168.1.130

                 
nodeid: 3

         
}

  }
  logging {

   fileline:
off  在记录日志的时候不同的日志是否需要下划线

   to_stderr: no
是否需要错误输出

   to_logfile:
yes 输出为日志文件

   logfile:
/var/log/cluster/corosync.log

   to_syslog: no
是否传送给标准的日志文件

   debug:
off

   timestamp: off 时间戳是否要进行记录

logger_subsys
{

    subsys:
QUORUM

    debug:
off

   }

  }

  quorum {

   provider:
corosync_votequorum  开启投票系统

  }
 
6.配置nfs服务器
 
#mkdir /www/huwentao 首先创建一个共享目录,以及httpd服务的默认页面
#echo "

Test HA Cluster script.

" > /www/huwentao/index.html

#vim /etc/exports 默认为只读文件
/www/huwentao  192.168.1.0/24(ro)
#service nfs start
#showmount -e localhost 查看是否有信息
 
节点一测试
 
#systemctl restart httpd.service 启动httpd服务
#mount -t nfs 192.168.1.127:/www/huwentao /var/www/html
查看是否能够挂载成功,注意防火墙不关闭,selinux不设置成0,一般是不能够挂载成功的,因此上面的步骤一定要完成了以后在进行测试
在浏览器中输入192.168.1.127 ,出现以下字样,表明测试成功
 Test HA Cluster script.
##systemctl stop httpd.service 
关闭httpd服务
 
7.pcs的使用
 
节点一
#cp corosync.conf.example corosync.conf
复制样例文件,并进行第五步骤的修改
#scp /etc/corosync/corosync.conf
node2:/etc/corosync/  
复制文件到node2
#scp /etc/corosync/corosync.conf
node2:/etc/corosync/  
复制文件到node3
 
开启node1,node2,node3的corosync服务
#systemctl start corosync.service
#ssh node2 "systemctl start corosync.service "
#ssh node2 "systemctl start corosync.service "
 
开启node1,node2,node3的pacemaker服务
#systemctl start pacemaker.service
#ssh node2 "systemctl start pacemaker.service "
#ssh node2 "systemctl start pacemaker.service "
 
#systemctl start
pcs.service 开启node1上面的pcsd服务
 
#crm_mon   看到以下信息
Stack: corosync

Current DC: node3 (version 1.1.15-11.el7-e174ec8) - partition with quorum

Last updated: Mon May 15 07:51:56
2017         
Last change: Mon May 15 05:52:38 2017 by root via cibadmin on
node1
3 nodes and 3 resources configured
Online: [ node1 node2 node3
]
 
配置资源
pcs的用法,pcs有很多的子命令
  • cluster   定义集群服务
  • resource 定义一些资源
  • config  查看当前的一些配置
  • status 查看当前集群的状态
  • constraint   定义资源约束
  • property 设置一些全局属性

这里只是简单的配置一些资源,详细的使用信息这里就不在赘述

以下为设置web高可用集群的三个必要资源webip,webstore,webserver,并把这三个资源放在一个组内

#pcs property set
stonith-enabled=false因为当前没有stonish设备,因此将此参数设置成false

#pcs source create webip
ocf:heartbeat:IPaddr ip="192.168.1.2" 
op monitor interval=30s

#pcs source create webstore
ocf:heartbeat:Filesystem device="192.168.1.127:/www/huwentao/"
\ directory="/var/www/html" fstype="nfs"

#pcs source create webserver systemd:httpd

#pcs source group webservice webip webserver webstore

#pcs status 显示以下信息

Cluster name:

WARNING: corosync and pacemaker node names do not match (IPs used
in setup?)

Stack: corosync

Current DC: node3 (version 1.1.15-11.el7-e174ec8) - partition with
quorum

Last updated: Mon May 15 08:04:22
2017         
Last change: Mon May 15 05:52:38 2017 by root via cibadmin on
node1

3 nodes and 3 resources configured

Online: [ node1 node2 node3 ]

Full list of resources:

Resource Group: webservice

    
webip     
(ocf::heartbeat:IPaddr):       
Started node1

    
webstore  
(ocf::heartbeat:Filesystem):   
Started node1

    
webserver 
(systemd:httpd):       
Started node1

Daemon Status:

  corosync: active/disabled

  pacemaker: active/disabled

  pcsd: active/disabled

8.测试
 在浏览器中输入 192.168.1.2显示以下信息
 Test HA Cluster script.
 
 
至此高可用的web服务就配置完成了
 
 
 
 
 
 
 
 


 




linux系统集群之高可用(一)HA的更多相关文章

  1. Memcached 集群的高可用(HA)架构

    Memcache自身并没有实现集群功能,如果想用Memcahce实现集群需要借助第三方软件或者自己设计编程实现,这里将采用memagent代理实现,memagent又名magent,大家注意下,不要将 ...

  2. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  3. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  4. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  5. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  6. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

  7. 11.Redis 哨兵集群实现高可用

    作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...

  8. Quartz学习笔记:集群部署&高可用

    Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...

  9. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

随机推荐

  1. springmvc+spring+mybatis+sqlserver----查询sqlserver----有返回参数

    <resultMap type="java.util.HashMap" id="resultMap"> <result column=&quo ...

  2. python复习目录

    目录 一.计算机基础 二.python 2.1初始python 2.1 python基础1 2.2 python基础2 三.函数 3.1 函数进阶 3.2 函数之装饰器 3.3 递归函数之二分查找 3 ...

  3. C++ Knowledge series overloading

    What does the compiler behind our programming? Overloading in C++ Override all of overloaded functio ...

  4. Springboot开源项目实例整理

    https://www.imooc.com/article/67664 ---------------------------------------------------------------- ...

  5. Struts2_动态结果集

    页面请求: <li><a href="user/user?type=1">返回success</a></li> <li> ...

  6. vos设置禁止被叫特定号码段特定区域

    问题: 为了防止卡线遭投诉被运营商停,给公司带来损失,对一些特定号段特定区域要进行限制,不让客户呼出 打开VOS3000 落地网关——补充设置——落地被叫前缀——禁止 添加禁止号段 具体案例: 如填写 ...

  7. 安装纯净 ubuntu linux (非虚拟机)

    //--------------- Chinese version --------------------------------------------------// 前提条件:有另一台电脑(w ...

  8. 基于LBS的多人聊天

  9. 【BZOJ2127】happiness(网络流)

    点此看题面 大致题意: 每个人只能在文科与理科中选择一种.选择每种科目会带来不同的喜悦值,如果相邻的两位同学选择了同一种科目则会带来额外的喜悦值.求喜悦值总和的最大值. 网络流 这道题做法显然是网络流 ...

  10. 2019.03.09 ZJOI2019模拟赛 解题报告

    得分: \(20+0+40=60\)(\(T1\)大暴力,\(T2\)分类讨论写挂,\(T3\)分类讨论\(40\)分) \(T1\):天空碎片 一道神仙数学题,貌似需要两次使用中国剩余定理. 反正不 ...