数据库修仙筑基篇八——corosync-qdevice使用

本文详细介绍了corosync-qdevice的使用,包括其用途、基本组件(corosync、qnetd、qdevice)、编译运行步骤。还对比了双节点qnet与三节点corosync的区别,分析了votequorum与corosync-qdevice两种投票仲裁机制,以及在双节点场景下的不同解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

corosync-qdevice使用

qdevice要用途是让群集能够承受大于标准仲裁规则所允许的节点故障数量。在分布式一致性协议中,基于多数派quorum的协议解决脑裂等问题,因而当集群存活节点挂死超过一半时,集群将无法对外提供服务。qdevice提供仲裁机制,使集群在多数节点挂掉后仍然能提供服务。典型的如双节点集群发生网络分区后,qdevice可以使其中一台机器继续提供服务,进而保证高可用。

QDevice 和 QNetd 会参与仲裁决定。在仲裁方 corosync-qnetd 的协助下,corosync-qdevice 会提供一个可配置的投票数,以使群集可以承受大于标准仲裁规则所允许的节点故障数量。我们强烈建议为双节点群集部署 corosync-qnetdcorosync-qdevice,但对于所含节点数为偶数的群集,一般也建议使用 QNetd 和 QDevice。

基本组件

corosync

corosync提供分布式一致性协议和配置。

qnetd

qnetd提供与qdevice通信的网络服务器。

qdevice

每个群集节点上与 Corosync 一起运行的 systemd 服务(守护程序)。这是 corosync-qnetd 的客户端。其主要用途是让群集能够承受大于标准仲裁规则所允许的节点故障数量。

QDevice 可以与不同的仲裁方配合工作,但目前仅支持与 QNetd 配合工作。

编译运行

编译

qdevice依赖corosync,在编译qdevice前应先编译corosync。

  • 下载源码

    git clone https://github.com/corosync/corosync-qdevice.git
    
  • 编译

    cd corosync-qdevice
    ./autogen.sh
    ./configure
    make -j 8
    sudo make install
    

    若编译时找不到libcorosync_common库,则需要导出pkgconfig文件路径到PKG_CONFIG_PATH,如:

    export PKG_CONFIG_PATH="/home/ha/code/corosync/pkgconfig"
    

    编译完成后会生成corosync-qnetd和corosync-qdevice。

    ha@ha-virtual-machine:~/code/corosync-qdevice$ ls install
    bin  etc  sbin  share  var
    ha@ha-virtual-machine:~/code/corosync-qdevice$ ls install/bin/
    corosync-qnetd  corosync-qnetd-certutil  corosync-qnetd-tool
    ha@ha-virtual-machine:~/code/corosync-qdevice$ ls install/sbin/
    corosync-qdevice  corosync-qdevice-net-certutil  corosync-qdevice-tool
    ha@ha-virtual-machine:~/code/corosync-qdevice$ ls install/etc/
    corosync  init.d
    ha@ha-virtual-machine:~/code/corosync-qdevice$ ls install/etc/corosync/
    qdevice  qnetd
    

运行

corosync-qnetd可以独立运行,同时corosync-qdevice在启动时候需要连接qnetd,因而需先启动corosync-qnetd。

一般我们使用非root用户运行,运行配置步骤如下:

  1. 先创建非root用户;

    groupadd -r coroqnetd
    useradd -r -g coroqnetd -d / -s /sbin/nologin -c "User for corosync-qnetd" coroqnetd
    chown -R coroqnetd:coroqnetd /etc/corosync/qnetd /var/run/corosync-qnetd
    
  2. 在/etc/corosync/qnetd/下创建corosync-qnetd.sysconfig写下如下内容

    # Corosync Qdevice Network daemon init script configuration file
    
    # COROSYNC_QNETD_OPTIONS specifies options passed to corosync-qnetd command
    # (default is no options).
    # See "man corosync-qnetd" for detailed descriptions of the options.
    COROSYNC_QNETD_OPTIONS=""
    
    # COROSYNC_QNETD_RUNAS specifies user under which qnetd daemon should be running
    # (not set or empty is default and means "user who executes init script")
    # Make sure to set correct owner of directories /etc/corosync/qnetd and
    # /var/run/corosync-qnetd
    # This has no effect if systemd unit is used (you have to change unit file)
    COROSYNC_QNETD_RUNAS="coroqnetd"
    
  3. 运行qnetd

    /etc/init.d/corosync-qnetd start
    

双节点qnet与三节点corosync的区别

  1. qnet主要作为第三方仲裁,配合qdevice来提供投票仲裁服务,不属于集群内节点,不承担任何集群节点功能;
  2. QDevice 支持多种不同的算法,而这些算法决定着如何分配投票的行为,如:
    • FFSplit (“fifty-fifty split”) 为默认算法,用于所含节点数为偶数的群集。如果群集分裂为两个相似的部分,此算法会根据启发检查结果和其他因素为其中一个部分提供一个投票
    • LMS (“last man standing”) 允许仅剩的那个节点看到 QNetd 服务器以获取投票。因此此算法适用于只有一个活动节点应保留法定票数的群集
  3. 启用qdevice加qnet后,corosync里的last_man_standing 选项(即动态修改quorum)与其不兼容,但qdevice如上描述可以选择LMS算法来进行投票;
  4. qnet一般需要独立于主集群,不要与 corosync 环或者环位于同一个网络网段,一般不在现有集群节点中运行制裁设备;
  5. 多个集群可以共用一个qnet仲裁服务,且不同的集群可以配置不同投票算法;

corosync1.0版本没有投票机制,需要使用corosync-qdevice来配合投票仲裁,corosync2.0版本通过votequorum提供投票机制。

votequorum与corosync-qdevice

votequorum和corosync-qdevice都是投票仲裁机制。

votequorum不需要引入第三方仲裁,直接作为一个服务集成到corosync中。votequorum通过为集群中的每个系统分配一定数量的选票,并确保只有当多数票出现时,才允许进行集群操作。

corosync-qdevice需要引入第三方仲裁qnet,除运行corosync服务、corosync-qdevice服务外,还需要在一台非集群节点运行corosync-qnetd服务。在仲裁方 corosync-qnetd 的协助下,corosync-qdevice 会提供一个可配置的投票数,以使群集可以承受大于标准仲裁规则所允许的节点故障数量。这里的标准仲裁规则是指当集群节点数超过一般挂死时集群将不可用。

双节点场景

对于双节点场景来说,

  • votequorum通过在corosync.conf中配置two_node来解决双节点场景的高可用问题,且这样配置后只能处理两个节点的情况,当有第三个节点加入时,two_node配置自动失效
  • 而corosync-qdevice通过在corosync.conf的device配置模块中配置algorithm: ffsplit来解决
<think>嗯,用户现在问的是关于在Linux上安装和配置高可用性集群相关软件包的命令:yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd。我需要先理解这个命令中的每个软件包的作用,以及用户可能的背景和使用场景。 首先,用户可能是在搭建一个高可用性集群,比如用于Web服务器数据库或者虚拟化环境。他们可能是一个系统管理员或者DevOps工程师,负责确保服务的高可用性。命令中的每个包都是集群的关键组件,所以需要逐一解释。 corosync是集群通信层,负责节点间的消息传递和成员管理。pacemaker是资源管理器,负责监控和迁移服务资源。pcs是配置工具,用来管理集群配置。fence-agents和fence-virt用于STONITH(Shoot The Other Node In The Head),防止脑裂问题。corosync-qdevice提供仲裁设备支持,确保集群在节点数偶数时也能正确决策。sbd是STONITH的块设备,用于节点隔离。 接下来,需要分析用户可能的需求。他们可能正在设置一个新的集群,或者扩展现有集群的功能。用户可能对高可用性集群有一定的了解,但需要确认各个组件的用途和安装后的配置步骤。需要确保用户明白这些包的作用,以及安装后的下一步操作,比如配置Corosync、Pacemaker,设置STONITH设备,配置仲裁设备等。 另外,用户可能是在CentOS或RHEL系统上操作,因为使用的是yum命令。需要注意不同版本的软件包可能有差异,尤其是RHEL和CentOS的版本兼容性。同时,用户可能需要指导如何启用必要的仓库,比如High Availability或Resilient Storage仓库,如果这些软件包不在默认仓库中。 用户可能没有明确说出他们的最终目标,但根据安装的软件包,可以推测他们需要一个稳定可靠的集群环境,可能用于生产环境。因此,在回答时需要强调配置的最佳实践,比如正确配置STONITH,避免脑裂,使用仲裁设备提高集群可靠性,以及SBD的配置注意事项。 在解释每个包的时候,要简明扼要,同时提供足够的背景信息,让用户理解为什么需要安装这些包。例如,解释fence-agents和fence-virt的区别,前者是通用的fencing代理,后者是针对虚拟化环境(如KVM)的代理。同样,corosync-qdevice用于跨站点的集群仲裁,而sbd则是一种基于共享存储的隔离机制。 还需要注意用户可能的误区,比如安装完软件包后直接启动服务而没有正确配置,导致集群无法正常工作。因此,在回答中可以简要提到安装后的初始步骤,如使用pcs命令进行集群初始化,配置认证,启动服务等,但不需要太详细,因为用户当前的问题是关于安装命令的。 最后,确保回答结构清晰,分点解释每个软件包,并总结它们如何共同工作来构建高可用集群。可能还需要提到参考资料或官方文档链接,方便用户进一步学习。以下</think>是在 Linux 系统中使用 `yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd` 命令安装的软件包及其作用的详细介绍。这些工具共同构成了一个完整的 **高可用性(HA)集群解决方案**,适用于构建企业级容灾系统。 --- ### **各软件包功能说明** #### **1. `corosync`** - **作用**:集群通信引擎,负责节点间的心跳检测、状态同步和消息传递。 - **关键特性**: - 通过多播(Multicast)或单播(Unicast)实现节点间通信。 - 维护集群成员关系,检测节点故障或网络分区。 - 与 Pacemaker 配合,构成高可用集群的基础层。 #### **2. `pacemaker`** - **作用**:集群资源管理器,负责监控服务状态、执行故障转移和资源调度。 - **关键特性**: - 管理资源(如虚拟 IP、数据库、Web 服务)的启动、停止和迁移。 - 支持复杂的资源约束(如依赖关系、启动顺序)。 - 提供脑裂(Split-Brain)防护机制(需配合 STONITH)。 #### **3. `pcs`** - **作用**:Pacemaker/Corosync 的配置工具,用于简化集群的创建和管理。 - **常用命令**: - `pcs cluster setup`:初始化集群。 - `pcs resource create`:定义集群资源。 - `pcs constraint`:设置资源约束规则。 #### **4. `fence-agents` 与 `fence-virt`** - **作用**:实现 STONITH(Shoot The Other Node In The Head)机制,用于在节点故障时强制隔离(断电或关闭)故障节点,防止脑裂。 - **分类**: - `fence-agents`:通用隔离代理(如 IPMI、iLO、AWS/Azure 云平台接口)。 - `fence-virt`:专为虚拟化环境(如 KVM/QEMU)设计的隔离代理,通过 `libvirt` 控制虚拟机。 #### **5. `corosync-qdevice`** - **作用**:提供 **仲裁设备(QDevice)** 支持,用于在集群节点数为偶数时,通过外部仲裁设备(如专用服务器或虚拟机)决定集群的活跃分区,避免脑裂。 - **典型场景**:跨数据中心的双活集群,或节点数偶数的集群。 #### **6. `sbd`** - **作用**:STONITH Block Device,基于共享存储(如 SAN/iSCSI)的节点隔离机制。通过向共享磁盘写入“毒药包”(Poison Pill),触发节点自隔离。 - **优势**:在网络隔离场景下仍能可靠隔离节点,常用于无硬件电源控制(IPMI)的环境。 --- ### **典型应用场景** - **虚拟化高可用**:在 KVM 环境中,若宿主机故障,自动将虚拟机迁移到其他节点。 - **数据库主从切换**:如 MySQL、PostgreSQL 的主库故障时自动切换至备库。 - **Web 服务容灾**:通过虚拟 IP(VIP)在节点间漂移,保障服务持续可用。 --- ### **安装后的关键配置步骤** 1. **初始化集群**: ```bash pcs cluster auth node1 node2 # 节点间认证 pcs cluster setup --name my_cluster node1 node2 # 创建集群 pcs cluster start --all # 启动所有节点 ``` 2. **配置 STONITH**(以 KVM 为例): ```bash pcs stonith create my_fence fence_virt pcmk_host_list="node1 node2" pcs property set stonith-enabled=true ``` 3. **配置仲裁设备**(可选): ```bash corosync-qdevice-nettool setup -i # 初始化 qdevice pcs quorum device add model net host=仲裁设备IP ``` 4. **配置 SBD**(需先准备共享存储): ```bash sbd -d /dev/sdb create # 初始化 SBD 设备 sbd -d /dev/sdb allocate node1 # 为节点分配槽位 ``` 5. **添加集群资源**(示例:虚拟 IP 和 Apache 服务): ```bash pcs resource create WebVIP ocf:heartbeat:IPaddr2 ip=192.168.1.100 pcs resource create WebService ocf:heartbeat:apache pcs constraint colocation add WebService with WebVIP INFINITY ``` --- ### **注意事项** 1. **网络配置**:确保节点间通信使用专用网络(如心跳网络),避免与业务流量冲突。 2. **STONITH 必须启用**:未配置隔离机制的集群可能因脑裂导致数据损坏。 3. **测试故障场景**:通过 `pcs cluster stop` 或手动触发故障,验证自动恢复是否生效。 4. **版本兼容性**:RHEL/CentOS 7/8/9 的 Pacemaker 配置命令可能略有差异,需参考对应版本文档。 --- ### **总结** 通过安装这些软件包,您可以构建一个支持自动故障转移、资源隔离和脑裂防护的高可用集群。核心组合为: - **通信层**:Corosync - **资源管理**:Pacemaker + pcs - **隔离机制**:fence-agents + sbd - **仲裁支持**:corosync-qdevice 建议参考官方文档进一步学习:[ClusterLabs 官方指南](https://clusterlabs.org/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值