KVM学习笔记(集群,pacemaker和corosync简单配置)

20 篇文章 2 订阅

1 Linux集群架构

Linux集群架构一般分为四个层次结构:

  • 信息层:负责心跳信息的传递,corosync负责

  • 成员关系层:集群中成员关系的选举,确定,corosync负责

  • 资源管理层:集群资源的管理,如虚拟IP,存储,数据库等等,pacemaker负责

  • 资源层:资源代理,pacemaker负责

高可用集群的层次结构

 

管理工具:

pcs:(Pacemaker Corosync Server)

CLVM:

集群化的LVM(Clustered LVM)

LVM的集群扩展,允许集群中的计算机通过LVM管理共享存储

DRBD:

Distributed Replicated Block Device

软件实现的、无共享的、服务器之间的镜像块设备内容的存储复制解决方案

GFS2/OCFS

Global File System 2/Oracle Cluster File System

集群文件系统,使集群中的所有节点并发的通过标准文件系统接口来访问存储设备

2 Pacemaker体系结构

集群总的结构分三个部分,资源代理,资源管理,信息及成员管理部分。

Pacemaker体系结构

 

Pacemaker内部组件

 

  CIB主要负责集群最基本的信息配置与管理,Pacemaker中的 CIB主要使用 XML的格式来显示集群的配置信息和集群所有资源的当前状态信息。CIB所管理的配置信息会自动在集群节点之间进行同步, PE将会使用 CIB所提供的集群信息来规划集群的最佳运行状态。并根据当前 CIB信息规划出集群应该如何控制和操作资源才能实现这个最佳状态,在 PE做出决策之后,会紧接着发出资源操作指令,而 PE发出的指令列表最终会被转交给集群最初选定的控制器节点( Designated controller,DC),通常 DC便是运行 Master CRMd的节点。
  在集群启动之初, pacemaker便会选择某个节点上的 CRM进程实例来作为集群 Master CRMd,然后集群中的 CRMd便会集中处理 PE根据集群 CIB信息所决策出的全部指令集。在这个过程中,如果作为 Master的 CRM进程出现故障或拥有 Master CRM进程的节点出现故障,则集群会马上在其他节点上重新选择一个新的 Master CRM进程。
  在PE的决策指令处理过程中,DC会按照指令请求的先后顺序来处理PEngine发出的指令列表,简单来说, DC处理指令的过程就是把指令发送给本地节点上的 LRMd(当前节点上的 CRMd已经作为 Master在集中控制整个集群,不会再并行处理集群指令)或者通过集群消息层将指令发送给其他节点上的 CRMd进程,然后这些节点上的 CRMd再将指令转发给当前节点的 LRMd去处理。当集群节点运行完指令后,运行有 CRMd进程的其他节点会把他们接收到的全部指令执行结果以及日志返回给 DC(即 DC最终会收集全部资源在运行集群指令后的结果和状态),然后根据执行结果的实际情况与预期的对比,从而决定当前节点是应该等待之前发起的操作执行完成再进行下一步的操作,还是直接取消当前执行的操作并要求 PEngine根据实际执行结果再重新规划集群的理想状态并发出操作指令。
  在某些情况下,集群可能会要求节点关闭电源以保证共享数据和资源恢复的完整性,为此, Pacemaker引人了节点隔离机制,而隔离机制主要通过 STONITH进程实现。 STONITH是一种强制性的隔离措施, STONINH功能通常是依靠控制远程电源开关以关闭或开启节点来实现。在 Pacemaker中, STONITH设备被当成资源模块并被配置到集群信息 CIB中,从而使其故障情况能够被轻易地监控到。同时, STONITH进程( STONITHd)能够很好地理解 STONITH设备的拓扑情况,因此,当集群管理器要隔离某个节点时,只需 STONITHd的客户端简单地发出 Fencing某个节点的请求, STONITHd就会自动完成全部剩下的工作,即配置成为集群资源的 STONITH设备最终便会响应这个请求,并对节点做出 Fenceing操作,而在实际使用中,根据不同厂商的服务器类型以及节点是物理机还是虚拟机,用户需要选择不同的 STONITH设备。

3 管理工具pcs

[root@controller1 ~]$ pcs --help

Usage: pcs [-f file] [-h] [commands]...
Control and configure pacemaker and corosync.

Options:
    -h, --help         Display usage and exit.
    -f file            Perform actions on file instead of active CIB.
    --debug            Print all network traffic and external commands run.
    --version          Print pcs version information.
    --request-timeout  Timeout for each outgoing request to another node in
                       seconds. Default is 60s.

Commands:
    cluster     Configure cluster options and nodes.
    resource    Manage cluster resources.
    stonith     Manage fence devices.
    constraint  Manage resource constraints.
    property    Manage pacemaker properties.
    acl         Manage pacemaker access control lists.
    qdevice     Manage quorum device provider on the local host.
    quorum      Manage cluster quorum settings.
    booth       Manage booth (cluster ticket manager).
    status      View cluster status.
    config      View and manage cluster configuration.
    pcsd        Manage pcs daemon.
    node        Manage cluster nodes.
    alert       Manage pacemaker alerts.

最为常用的管理命令有:

  • cluster 配置集群选项和节点

  • status 查看当前集群资源和节点以及进程状态

  • resource 创建和管理集群资源

  • constraint 管理集群资源约束和限制

  • property 管理集群节点和资源属性

  • config 以用户可读格式显示完整集群配置信息

4 集群资源

在 pacemaker高可用集群中,资源就是集群所维护的高可用服务对象。根据用户的配置,资源有不同的种类,其中最为简单的资源是原始资源(primitive Resource),此外还有相对高级和复杂的资源组(Resource Group)和克隆资源(Clone Resource)等集群资源概念。在 Pacemaker集群中,每一个原始资源都有一个资源代理(Resource Agent, RA), RA是一个与资源相关的外部脚本程序,该程序抽象了资源本身所提供的服务并向集群呈现一致的视图以供集群对该资源进行操作控制。

使用pcs resource agent可以查看当前集群正在使用的agent
[root@node1 ~]$ pcs resource agent
使用pcs resource 可以查看当前集群正在使用的资源
[root@node1 ~]$ pcs resource

4.1 Fencing Agent

隔离代理,Fencing在一个节点不稳定或者无应答时将其关闭,使得它不会损坏集群的其他资源,用于消除脑裂。
常见Fencing Agent类型:

  • Power类型
    将节点的电源断电,通常连接到物理设备如UPS
  • Storage类型
    确保某个时间只有一个节点会读写共享的存储

4.2 STONITH(shoot the other node in the head)

Heartbeat软件包的一个组件,用于防止集群出现脑裂现象。一旦集群中的节点相互之间失去了通信,无法知道其他节点的状态,此时集群中的每个节点将尝试fence(隔离或“射杀”)失去通信的节点,确保这些节点不再抢夺资源,然后才继续启动服务资源,对外提供服务。

  • 主服务器可以复位备用服务器的电源
  • 备用服务器也可以复位主服务器的电源

安装fence-agents软件包

yum -y install fence-agents

安装完毕后可查看到系统支持的stonith设备类型

[root@node1 ~]$ pcs stonith list
fence_apc - Fence agent for APC over telnet/ssh
fence_apc_snmp - Fence agent for APC, Tripplite PDU over SNMP
fence_bladecenter - Fence agent for IBM BladeCenter
fence_brocade - Fence agent for HP Brocade over telnet/ssh
fence_cisco_mds - Fence agent for Cisco MDS
fence_cisco_ucs - Fence agent for Cisco UCS
fence_compute - Fence agent for the automatic resurrection of OpenStack compute
                instances
fence_drac5 - Fence agent for Dell DRAC CMC/5
fence_eaton_snmp - Fence agent for Eaton over SNMP
fence_emerson - Fence agent for Emerson over SNMP
fence_eps - Fence agent for ePowerSwitch
fence_evacuate - Fence agent for the automatic resurrection of OpenStack compute
                 instances
fence_hpblade - Fence agent for HP BladeSystem
fence_ibmblade - Fence agent for IBM BladeCenter over SNMP
fence_idrac - Fence agent for IPMI
fence_ifmib - Fence agent for IF MIB
fence_ilo - Fence agent for HP iLO
fence_ilo2 - Fence agent for HP iLO
fence_ilo3 - Fence agent for IPMI
fence_ilo3_ssh - Fence agent for HP iLO over SSH
fence_ilo4 - Fence agent for IPMI
fence_ilo4_ssh - Fence agent for HP iLO over SSH
fence_ilo_moonshot - Fence agent for HP Moonshot iLO
fence_ilo_mp - Fence agent for HP iLO MP
fence_ilo_ssh - Fence agent for HP iLO over SSH
fence_imm - Fence agent for IPMI
fence_intelmodular - Fence agent for Intel Modular
fence_ipdu - Fence agent for iPDU over SNMP
fence_ipmilan - Fence agent for IPMI
fence_kdump - Fence agent for use with kdump
fence_mpath - Fence agent for multipath persistent reservation
fence_rhevm - Fence agent for RHEV-M REST API
fence_rsa - Fence agent for IBM RSA
fence_rsb - I/O Fencing agent for Fujitsu-Siemens RSB
fence_sbd - Fence agent for sbd
fence_scsi - Fence agent for SCSI persistent reservation
fence_virt - Fence agent for virtual machines
fence_vmware_soap - Fence agent for VMWare over SOAP API
fence_wti - Fence agent for WTI
fence_xvm - Fence agent for virtual machines

以上输出中的每个Fence agent都是一种Stonith设备,从名字的后缀可以看出,这些Agent有以下几类:
  通过服务器的管理口来关闭被fencing节点的电源,如ilo,ipmi,drac,绝大多数Agent属于此类,这些用于控制物理服务器节点。
  通过Hybervisor虚拟层或云平台关闭被fencing的节点,如virt,vmware,xvm,compute,这些用于控制虚机节点。
  通过禁止被fencing节点访问特定资源阻止起启动,如scsi,math,brocade。
  前两种都属于电源类型的Stonith设备,而第三种和电源无关,之所以要这样划分,是因为:
  使用非电源类型Stonith设备时,被fenced的节点没有关闭电源,仅仅是服务没有启动。在对其重启前,必须进行unfence,这样节点才能正常重启。因此创建此种类型的Stonith设备时需指定参数meta provides=unfencing
  使用电源类型的stonith设备则无需指定,因为被fenced的节点电源已经被关闭,而启动节点这个操作本身即为unfenced。

4.3 Pacemaker服务模式

  1. Active/Active模式
    负载均衡模式
  2. Active/Passive模式
    主备模式
  3. N+1模式
    所谓的N+1就是多准备一个额外的备机节点,当集群中某一节点故障后该备机节点会被激活从而接管故障节点的服务。在不同节点安装和配置有不同软件的集群中,即集群中运行有多个服务的情况下,该备机节点应该具备接管任何故障服务的能力,而如果整个集群只运行同一个服务,则N+1模式便退变为 Active/Passive模式。
  4. N+M模式
    在单个集群运行多种服务的情况下,N+1模式下仅有的一个故障接管节点可能无法提供充分的冗余,因此,集群需要提供 M(M>l)个备机节点以保证集群在多个服务同时发生故障的情况下仍然具备高可用性, M的具体数目需要根据集群高可用性的要求和成本预算来权衡。

5 集群安装及基本配置

5.1 安装软件

需要安装pacemaker、corosync、pcs、psmic、policycoretils-python、fence-agents-all

5.2 配置SSH免密登录

使用ssh-keygen,ssh-copy-id命令

5.3 配置时钟服务器

在crontab中写入定时同步任务

每隔30分钟,同步一次时间
[root@node1 ~]$ crontab -e
*/30  *  *  *  * /usr/sbin/ntpdate time.windows.com &> /dev/null

5.4 添加防火墙规则

firewalld自带high-availability服务,可以打开以下端口:

  • TCP:端口2224、3121、21064
  • UDP:端口5405
  • DLM:端口21064

[root@node1 ~]$ firewall-cmd --add-service=high-availability --permanent 
[root@node1 ~]$ firewall-cmd --reload

5.5 配置pcsd守护程序

pcs软件包包括守护程序、命令行工具、GUI工具

打开pcsd守护程序,并设置自动启动
[root@node1 ~]$ systemctl start pcsd
[root@node1 ~]$ systemctl enable pcsd

5.6 配置hacluster账户密码

安装集群软件包时,会创建一个hacluster账户,它的密码默认是禁用的

[root@node1 ~]$ getent shadow hacluster
hacluster:!:18531::::::
第二个字段是!表示禁止此账号登录

此账号是用于集群之间通信时的身份认证的,必须要在每个节点上设置密码以启用此账户

[root@node1 ~]$ echo 'linuxplus' | passwd --stdin hacluster
[root@node1 ~]$ getent shadow hacluster
hacluster:$6$UbmPEg20$UMxkxEBbeQHadgq6dgmM87LZ8s5yDcnnEDnuTdMQ3.CrdCULHVX8TxTNAKeR6MVMWC0i.wbGWFmvMuMdfajki/:18531::::::
第二个字段变为了加密的密码

5.7 集群及Pacemaker配置文件

配置文件为corosync.conf和cib.xml,默认不存在。
/etc/corosync/下有corosync.conf.example官方的配置示例。
/var/lib/pacemaker/cib/cib.xml是自动生成的集群数据库文件。
corosync.conf提供corosync使用的集群参数。
cib.xml存储集群配置及所有资源的信息,pcsd负责在集群的所有节点上同步cib的内容。
不推荐手工修改配置文件,推荐使用pcs工具进行管理维护

6 集群的创建

6.1 认证集群节点

认证组成集群的节点,在任意一个节点上验证所有的节点,使用之前配置的hacluster账号。

pcs cluster auth [<node>[:<port>]] [...] [-u <username>] [-p <password>] [--force] [--local]
[root@node1 ~]$ pcs cluster auth node1 node2 -u hacluster -p linuxplus
node1: Authorized
node2: Authorized

6.2 配置和同步集群节点

创建配置文件/etc/corosync/corosync.conf:

  • 手工创建:参考example文件
  • 自动生成:通过pcs cluster setup命令创建,推荐使用这种方式

pcs cluster setup --name <cluster name> <node1[,node1-altaddr]> [<node2[,node2-altaddr]>]
[root@node1 ~]$ pcs cluster setup --name cluster1 node1 node2

6.3 在集群节点中启动集群服务

使用pcs cluster start命令,默认只会启动本节点,需要添加--all参数

[root@node1 ~]$ pcs cluster start --help

Usage: pcs cluster start...
    start [--all | <node>... ] [--wait[=<n>]] [--request-timeout=<seconds>]
        Start a cluster on specified node(s). If no nodes are specified then
        start a cluster on the local node. If --all is specified then start
        a cluster on all nodes. If the cluster has many nodes then the start
        request may time out. In that case you should consider setting
        --request-timeout to a suitable value. If --wait is specified, pcs
        waits up to 'n' seconds for the cluster to get ready to provide
        services after the cluster has successfully started.
[root@node1 ~]$ pcs cluster start --all
node1: Starting Cluster (corosync)...
node2: Starting Cluster (corosync)...
node1: Starting Cluster (pacemaker)...
node2: Starting Cluster (pacemaker)...

查看集群状态,发现集群组件已经启动,node1是目前的DC
[root@node1 ~]$ pcs cluster status
Cluster Status:
 Stack: corosync
 Current DC: node1 (version 1.1.21-4.el7-f14e36fd43) - partition WITHOUT quorum
 Last updated: Mon Sep 28 12:29:38 2020
 Last change: Sat Sep 26 21:27:37 2020 by hacluster via crmd on node1
 2 nodes configured
 0 resources configured

PCSD Status:
  node1: Online
  node2: Online



作者:一个反派人物
链接:https://www.jianshu.com/p/57a60d430cff
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载至https://www.jianshu.com/p/57a60d430cff

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值