使用corosync和pacemaker实现高可用

Linux ginotang 2060℃ 0评论

使用corosync和pacemaker实现高可用

corosync在高可用中处于消息发送层,用于检测节点间通讯是否正常,而pacemaker则用于管理集群资源。通常在使用corosync和pacemaker的时候,我们都会使用统一的工具对它们进行管理,例如旧式的crmsh和新式的pcs。

使用crmsh或者pcs管理的好处是我们不必面向配置文件,而是直接通过命令行的方式管理集群节点,减少编辑配置文件造成的错误。另一个好处是降低学习成本,我们可以不必学习corosync和pacemaker的相关配置命令,只需要学习crmsh或者pcs如何使用。

虽然我们可以不去学习corosync和pacemaker如何配置,但是它们的工作原理还是必须知道的。

安装corosync和pacemaker

前面说过,我们选择使用第三方管理工具配置corosync和pacemaker,因此需要把这个管理工具也安装上。

这里我们选择了pcs

配置集群

软件包安装好后,它们各自拥有一个守护进程,分别是corosync、pacemaker和pcsd。默认情况下它们没有被启动,但是我们不必把所有3个进程都启动,只需要启动pcsd即可,然后通过pcsd来管理其他两个进程。

通常,pcs命令只需要在其中一个节点运行即可。pcs命令通过pcsd进程和其他节点进行通讯。

以下情况如果没有特别说明,则pcs命令只运行于某个节点上

  • 启动pcsd服务

    以下命令需要在每个节点都运行

  • 关闭防火墙

    为了避免不必要的麻烦,关闭所有节点的防火墙

  • 更新hacluster密码

    hacluster是软件安装过程中自动创建的账号,集群节点必须通过这个账号进行通讯

    所有节点的密码必须相同

  • 授权集群节点

    让节点间可以正常通讯

  • 添加集群节点成员

    创建一个名为mycluster的集群,并把centos7-host1和centos7-host2添加为成员。

  • 启动集群节点

    下面的命令成功启动后,corosync和pacemaker守护进程会一同被启动,可以通过systemctl status corosyncsystemctl status pacemaker观察。

    也可以单独启动某个节点

添加资源

  • 添加虚拟ip

    虚拟ip用于给外界提供服务,因此也可以叫服务ip。

  • 添加http服务

    默认情况下,资源启动后,pacemaker并不会保证它们会正常运作,如果希望pacemaker对资源进行监视,则可以设置op的值为monitorinterval用于设置监视时间间隔。

  • 检查资源配置是否有错误

    如果资源没有启动成功(pcs status 显示 stop),可以使用下面的命令检查配置是否有错误,如果有error,则要先修复错误,资源才能被正常启动

    上面的错误提示我们要么配置STONITH,要么禁用STONITH,可以通过下面的命令禁用

管理资源

  • 添加约束

    约束是可选的功能,它只是为资源添加了额外的限制

    • colocation约束

    colocation约束了资源必须处于同一个节点的时候才能启动,例如下面命令行的意思是:WebSite资源启动的节点必须是VirtualIP所在的节点。

    • order约束

    order约束了资源的启动顺序,例如先启动VirtualIP然后启动WebSite

    • 地点约束

    地点约束指定资源优先在哪一个节点启动,例如让资源在性能更好的节点上运行,以下命令假设centos7-host2性能更好。

    注意50只是一个权重,权重越大,则约束效果优先执行。相同权重的约束可以同时存在于两个节点,因此如果有相同权重的约束,则需要删除其中一个约束才能生效。

    • 检查约束是否生效

    • 删除约束

    约束的删除需要引用约束的完全限定名称,可以通过下面的命令查看

    id后面就是完全限定名称,然后可以通过remove指令删除约束

    • 查看约束的权重(score值)

  • 手动在节点间移动资源

    资源的移动也是依赖于约束来实现的,只需要设置location约束的权重为INFINITY即可。

克隆资源

只有能够同时在多个节点中处于活跃状态的资源适合克隆,也就是说,资源必须具有以下两个特点才可以被克隆

  1. 资源可以同时在各个节点中存在
  2. 资源可以同时处于激活状态

常见的例如DRBD就是可以克隆的资源。

克隆资源中的多状态资源

多状态资源是特殊的克隆资源,它们允许资源处于Master和Slave状态的其中之一。可以通过下面两种方法创建多状态资源

方法1,创建资源的同时利用--master提升资源

方法2,创建资源和提升资源分开两个步骤

如果不指定克隆名称,则名称默认为resource_id-master

常用资源克隆选项

  • master-max 可将多少资源副本提升至master状态,默认1
  • master-node-max 单一节点中可将多少资源副本提升至master状态,默认1
  • clone-max 需要多少资源副本才可以启动,默认为该集群中的节点数
  • clone-node-max 需要多少资源副本才可以在单一节点中启动,默认1
  • notiry 停止或启动克隆副本时,应在开始操作前,以及操作成功后通知其他所有副本,默认值false。

配合DRBD实现高可用

安装DRBD

添加DRBD资源

编辑/etc/drbd.d/r0.res文件,如果没有则创建一个。

/dev/sdb1如果不存在则需要先创建

使用pacemaker控制drbd资源

需要先通过pcs命令创建drbd资源并提升为master,下面的命令创建了一个DrbdData-master的克隆资源

为drbd设备挂载文件系统

添加约束

当一方节点离线,需要先把drbd资源提升为master(即drbd中的primary),因为drbd中的secondary是无法挂载设备的。

添加其他可选约束,目的是使资源更加健壮

colocation让资源必须在同一节点生效

with-src-role选项的意思是WebFS所在的节点必须是Master节点,pcs命令最终都会把这些信息写入到cib文件中,可以使用下面命令显示cib信息,cib以xml格式保存这些内容,该命令会把信息输出到标准输出:

可以看到cib中的约束

其他相关命令

  • 启动集群

  • 停止集群

  • 查看集群状态

    可以看到集群的一些信息,例如名称、节点数,资源数等,Current DC是指当前启动资源的节点

  • 查看系统提供的资源

    这些资源都是一些脚本文件,例如最常用的ocf提供的资源,保存在/usr/lib/ocf/resource.d/目录中。

  • 查看资源的使用帮助
    例如想知道关于资源ocf:heartbeat:nginx的使用帮助

转载请注明:Pure nonsense » 使用corosync和pacemaker实现高可用

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x