zoukankan      html  css  js  c++  java
  • linux系统集群之高可用(一)HA

    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服务就配置完成了
     
     
     
     
     
     
     
     

     




  • 相关阅读:
    java后端解决请求跨域
    在IDEA中找不到Mapper报错
    ES6拼接数组与小程序本地存储
    小程序云开发实现微信发说说
    SQLServer的操作以及一些概念
    数据依赖(决定),码,范式,规范化与反规范化
    Git的使用上传与下载github
    JS中Map和ForEach的区别
    进入React的世界
    Node的重要性
  • 原文地址:https://www.cnblogs.com/huwentao/p/6999166.html
Copyright © 2011-2022 走看看