集群之高可用集群

2024-08-23 17:38
文章标签 集群 可用 之高

本文主要是介绍集群之高可用集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是高可用集群呢?以前我不知道的时候感觉这东西很高端的说,等明白了以后发现高可用集群也就是当一台主机出现故障(包括物理故障和服务故障)后,在很短时间内有其它服务器来接替它的工作,代它响应客户请求,就这么简单。显然我们只知道这个是不够的,我们必须得从内部原理上来理解高可用集群的实现机制。

    信息层:有两个节点的webserver集群,RS1平时响应客户请求,RS2做备用在RS1节点故障的时候来取代它来响应客户请求,但是RS2怎么知道RS1故障了呢?第一种方法:每个几秒钟RS2去检测RS2的状态,如果检测不到RS2就取代它。第二种方法:两台主机用心跳线连接起来,大家相互传递着心跳信息(UDP时间很短所以解析度可以很高),如果在某一刻感受不到R1的心跳信息了,R2就去取代它响应客户请求。 我们知道第一种办法是有缺陷的:假如每5秒探测一下,假如恰好刚探测完R1挂点了,而剩下的5秒就出现了空白,所以高可用时我们一般采用第二种方法,所有集群用心跳线连接,平时在心跳线上传递着健康状态信息,当某台主机出现故障,其它节点随时可以知道它的情况,在逻辑上我们称之为信息层。来个图来表示:  


逻辑上它是信息层,但是我们需要用程序来实现这个功能,而且这个程序运行在每一个节点上,平时他们通过心跳线传递着健康状态信息,常见的软件有:

        1.Heartbeat 
        2.keepalived
        3.ultramonkey
        4.Corosync(openAIS的子项目)

        Heartbeat 是比较常用的软件,Keepalived配置先对比较简单,而ultramonkey好像不怎么常用,Corosync比heartbeat功能还要强大,功能更加丰富。

但是我们需要知道的是信息层仅传递状态信息当服务或主机出现问题它不负责作出任何动作,但是它为其它程序提供了一个API接口,可以供其它程序调用,其它程序通过信息层传递过来的信息,来实现服务的转移,这个软件我们称之为集群资源管理器(Cluster Resource Manager),这个层次在逻辑上称之为资源管理层,实现这个层次的软件常见的有:
        Heartbeat V1(legacy)
        Heartbeat V2(CRM)
        Heartbeat V3(Pacemaker)  + Cluster-glue
        Cman(Cluster manager)
        web界面:RHCS:luci/ricci,SUSE:hawk  

        Heartbeat V1 版也就是legacy版可以提供配置文件haresource.cf来管理服务的转移。
        Heartbeat V2 版名字就叫CRM,它提供了一个监听端口,可以用其它GUI工具来配置管理集群
        Heartbeat V3 版后资源管理器独立出来,而不是作为Heartbeat的一部分了,它的名字叫Pacemaker功能异常强大,还提供了命令行工具来管理集群。
        Cman 是红帽开发的一个资源管理器,在红帽5.X版本上可能遇到,6.x版本后红帽也开始使用强大的pacemaker
        Luci/ricci红帽开发的web界面资源管理器,hawk SUSE他们开发的没接触过


资源管理器根据信息层传递的健康信息来决定节点服务的启动或者停止,总是说资源,下面我们来谈谈资源,资源说白了就是一个完整服务需要用到的子项目 如:要运行web服务,IP地址,http的进程得需要吧,我们把这些子项目称之为集群资源。这些资源也是有类型的,可以分这么几类:

        primitive 也称之为local类型,同一时刻只能运行在一个节点
        group 组资源,组资源运行在一个节点上
        clone 需要在每个Node上运行的资源
        Master-Slave 只能运行在两个节点,一主一从

        资源管理器来决定集群资源的启动与停止,大家又知道资源之间是有相互关系的,比如我们的集群资源有:IP,httpd, 共享存储,显然httpd是需要先挂载共享存储,自己才运行的,否则自己运行起来也毫无意义的,所以我们又对资源定义了约束,常见约束有:

        位置约束 它定义了某个资源流在哪个节点的倾向性,举个例子,三个节点RS1,RS2,RS3,假如RS1挂了,资源应该向哪个节点转移?也就是资源更倾向于谁
        顺序约束 它定义了资源的启动顺序。比如:共享存储要先于httpd启动吧。
        排列约束 它定义了资源间的排列关系。比如:IP资源与httpd资源能不能运行在一起,还是必须在一起。

我们知道资源管理器是来决定各个资源的启动与终止的,有这种情况,RS1,RS2平时用共享存储,平时RS1挂载着共享存储,来响应客户的请求,加入RS1出现了故障,RS不能检测它的状态信息,这个时候假如RS1还能正常工作只不过联系不上RS2了,假如这个时候RS2也挂载了共享存储,当他们同时在共享存储写同一个文件时文件系统会崩溃,而这个后果我们是不能接受的,所以资源转移之前需要先完成其他节点的隔离,隔离一般分为两种:资源隔离和主机隔离。

        资源隔离 就是让被隔离资源不能能再使用这个资源。
        主机隔离 就是直接让改主机关机。

比如出现了这种状况总共五个节点,由于某种原因分为了两个组,一个组3个节点,另一个组两个节点,那到底哪个组中节点启动服务呢?这个时候就要引入quorum,即法定票数。在一个集群中会有一个角色叫DC(事务协调员),它负责统计各整个集群的事务信息,然后形成CIB(集群信息库),然后同步集群信息库到各个节点上。当节点出现分裂后,每个组会推选出DC,由它来统计各个组的法定票数quorum,大于原来总票数的二分之一的一组继续运行服务,小于二分之一的停止服务。每个节点可投的票数可以使不一致的,比如2个节点的一组的某个机器性能异常强大,我们就可以给这个节点多分配几票,而那3个节点都是1票,出现这种分裂,那2个节点运行服务,而那3个节点的组终止服务。集群能否继续存在的一个策略就是看quorum是否大于总票数的二分之一。

我们继续往下进行,资源管理器来决定是否集群是否继续运行下去,如果满足策略,集群会继续运行,这个时候资源管理器会调用资源代理(RA)来实现资源的启动与停止,资源管理本身没有启动资源的能力。那RA又是什么呢?你想想什么东西能启动我们的资源?相信大家都用过,那就是平时在/etc/rc.d/init.d下的服务脚本,它也是RA的一种。我们来看看RA有几种类型:

        LSB(Linux standard base):这个就是我们常见的/etc/rc.d/init.d下的标准Linux脚本
        Heartbeat V1 :Heartbeat V1上提供的脚本
        OCF(Open Cluster Framwork):OCF脚本是比LSB更强大的一种脚本,支持更多的参数
        STONITH:直接终止主机的RA设备,比如电源交换机

资源管理器通过HA隔离故障的节点或者节点上的资源,转移这些资源到其它节点,有些同学开始问了,这个资源怎么转移过去?呵呵,其实是在另一个节点上启动一模一样的资源而已。比如:设置一个VIP,启动本机上的httpd,挂载原来的共享设备,这样整个服务有在一个节点宕机后无痛的重建起来,期间的间隔时间很短,在几秒之间,从而实现了高可用。


我们根据原理来做一个简单的高可用实验吧
规划:
信息层:Heartbeat2
资源管理层:Heartbeat v2 的CRM
资源代理有:IPaddr,httpd
集群资源:IP,httpd服务
配置工具:Heartbeat_gui
VIP:172.16.1.1
RIP1:172.16.1.2
RIP2:172.16.1.3
一、构建前准备:
    1.1 Hostname 与 /etc/hosts解析一致


          rs1上操作:

  1. sed -i '$a\
  2.                 172.16.1.3        rs1.laoguang.me        rs1 ' /etc/hosts
  3. sed -i '$a\
  4.                 172.16.1.4        rs2.laoguang.me        rs2 ' /etc/hosts        
  5. sed -i 's/HOSTNAME.*/HOSTNAME=rs1.laoguang.me/' /etc/sysconfig/network
  6.   hostname rs1.laoguang.me
复制代码
         rs2上操作:
  1. sed -i '$a\
  2.          172.16.1.3  rs1.laoguang.me  rs1 '  /etc/hosts
  3.          sed -i '$a\
  4.          172.16.1.4        rs2.laoguang.me        rs2 ' /etc/hosts
  5. sed -i 's/HOSTNAME.*/HOSTNAME=rs2.laoguang.me/' /etc/sysconfig/network
  6.          hostname rs2.laoguang.me
复制代码

     1.2 建立双机互信


         r1上操作:

  1. ssh-keygen -t rsa -P ""  确认  ##生成认证key 在/root/.ssh下以id_rsa开头,pub的是公钥,另一个是私钥,把公钥拷到另一个主机
  2.          ssh-copy-id -i /root/.ssh/id_rsa.pub rs2   
复制代码
         r2上操作:
  1. ssh-keygen -t rsa -P ""  确认  ##生成认证key 在/root/.ssh下以id_rsa开头,pub的是公钥,另一个是私钥,把公钥拷到另一个主机
  2. ssh-copy-id -i /root/.ssh/id_rsa.pub rs1
复制代码

          ssh连接测试一下,是否输入密码,如果没有测表示成功


        1.3. 安装httpd
          两台机器上安装httpd,并禁止开机启动

  1. yum -y install httpd ##安装Httpd
  2.          chkconfig httpd off  ##不能开机启动,由资源调度器来完成
  3.          ##编辑主页面,echo “<h1>RS1</h1>" > /var/www/html/index.html     ##rs2生成不一样的内空
复制代码
        1.4 同步节点时间
  1. date -s "20121012 10:10" ;ssh rs2 ' date -s "20121012 10:10" '   ##如果有NTP就同步NTP时间
复制代码
二、安装Heartbeat(CRM有中集成),heartbeat_gui(crm配置文件xml格式的,不太容易写,所以有gui来配置)
         2.1 需要的软件包有
  1. heartbeat-2.1.4-9.el5.i386.rpm          ##heartbeat包
  2. heartbeat-devel-2.1.4-9.el5.i386.rpm    ##开发包
  3. heartbeat-gui-2.1.4-9.el5.i386.rpm      ##GUI界面配置工具
  4. heartbeat-pils-2.1.4-10.el5.i386.rpm    ##依赖包
  5. heartbeat-stonith-2.1.4-10.el5.i386.rpm ##devel依赖
  6. libnet-1.1.4-3.el5.i386.rpm             ##也是依赖包
  7. perl-MailTools-1.77-1.el5.noarch.rpm        ##GUI依赖包
复制代码
       2.2 每个节点安装这些软件包
  1. yum -y --nogpgcheck localinstall  *.rpm   ##在软件包目录下操作
复制代码
       2.3 准备配置文件
  1. rpm -ql heartbeat    ##查看生成样例配置文件位置,copy过来
  2.   cd /usr/share/doc/heartbeat-2.1.4/
  3.   cp ha.cf authkeys  /etc/ha.d    ##ha.cf 信息层配置文件  authkeys节点认证文件 
  4.   cd /etc/ha.d
复制代码
        2.4 修改配置文件 ha.cf
  1. crm on    #这个需要添加,指要用heartbeat V2版的资源管理器,v1的用的是haresource.cf配置文件
  2.         #logfile        /var/log/ha-log ##可以定义日志自定义存放位置,默认是/var/log/message
  3.         logfacility     local0  ##日志发送的facility
  4.         keepalive 2         ##发送心跳信息间隔
  5.         deadtime 15         ##多少秒收不到心跳就以为它挂点了
  6.         warntime 5          ##多少秒收不到心跳就发出警告信息
  7.         initdead 120        ##服务启动或者重启多少秒忽略心跳
  8.         udpport        694  ##心跳信息发送端口
  9.         mcast eth0 225.1.2.1 694 1 0 ##多播组,上面有详细的参数解释
  10.         auto_failback on    ##主节点挂点,从节点代替,当主节点又正常了,是否归还资源
  11.         node   rs1.laoguang.me  ##定义集群节点
  12.         node   rs2.laoguang.me  ##定义集群节点
  13.         ping 172.16.0.1     ##最好是一个网关
  14.         compression     bz2 ##是否压缩心跳报文
  15.         compression_threshold 2 ##大于多少才压缩
复制代码
       2.5 编辑authkeys
  1. dd if=/dev/urandom bs=1 count=256 | md5sum ##生成MD5随机数
  2.     619c9925cb10802d49d4b6b09c83ef82
  3. vim authkeys
  4.     auth 3   ##表示用第3种加密方式
复制代码
      2. 6 启动服务
  1.         service heartbeat start 
  2.         ssh rs2 'service heartbeat start'
  3.         ##查看各节点日志是不报错
  4.         tail /etc/log/message
  5.         ##然后查看各节点有没有正常启动
  6.         crm_mon  ##如果显示Online则代表正常
复制代码

     2.7启用GUI界面,配置管理资源

  1. hb_gui  ##启动gui工具
复制代码

三、配置集群资源
       3.1 新建资源组   右击Resources -- Add New item -- group --ID:WebService(这个自定义)

             --Resource ID:WebIP(自定义),选择资源代理IPaddr,添加IP为172.16.1.1--Add 添加


      

     3.2 新建资源httpd   右击WebService组 -- Add New item -- Native -- Resource ID:WebServer(自定义) --

           选择资源代理httpd -- Add 添加


      

       3.3 启动资源 右击WebService组,start 显实 running on 某个节点,表示成功,测试访问VIP
       3.4 停止已运行资源节点上的httpd 看资源能否正常转移,如果能,表示构建成功

这篇关于集群之高可用集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100052

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl