除了典型的 Heartbeat/Pacemaker/CoroSync 组合之外,在 Linux 上是否还有其他主要的自动故障转移替代方案?特别是,我正在 EC2 实例上设置故障转移,它只支持单播 - 没有多播或广播。我专门尝试处理我们拥有的少数软件,这些软件还没有自动故障转移功能并且不支持多主环境。这包括 HAProxy 和 Solr 等工具。
我有 Heartbeat+Pacemaker 工作,但我对此并不感到兴奋。以下是我的一些问题:
起搏器工作得很好,尽管它的功率使其难以设置。Pacemaker 的真正问题在于没有简单的方法来自动化配置。我真的很想启动一个 EC2 实例,安装 Chef/Puppet 并在没有我干预的情况下启动整个集群。
刚刚完成我对设置 Web 服务器集群的研究,但我仍未决定与 Pacemaker 一起使用哪个消息传递层。我使用的服务器都是 Fedora,所以这两层都可以通过 YUM 获得,两者都有很好的文档记录,据说可以很好地与 Pacemaker 配合使用。我无法找到的是关于哪个更好的意见。有没有人对这两种方法都有经验,并且对哪一种更好有偏好?是否有更大的社区支持基础?一个比另一个更稳定吗?或者这是一个随意的决定?
我正在尝试使用 corosync 和起搏器设置一个主动/被动(2 个节点)Linux-HA 集群来启动和运行 PostgreSQL 数据库。它通过 DRBD 和 service-ip 工作。如果节点 1 失败,节点 2 应该接管。如果 PG 在 node2 上运行并且失败,则相同。除了 STONITH 之外,一切正常。
节点之间是专用的 HA 连接(10.10.10.X),所以我有以下接口配置:
eth0 eth1 host
10.10.10.251 172.10.10.1 node1
10.10.10.252 172.10.10.2 node2
Run Code Online (Sandbox Code Playgroud)
Stonith 已启用,我正在使用 ssh-agent 进行测试以杀死节点。
crm configure property stonith-enabled=true
crm configure property stonith-action=poweroff
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore
crm configure primitive stonith_postgres stonith:external/ssh \
params hostlist="node1 node2"
crm configure clone fencing_postgres stonith_postgres
Run Code Online (Sandbox Code Playgroud)
crm_mon -1 显示:
============
Last updated: Mon Mar 19 15:21:11 2012
Stack: openais …Run Code Online (Sandbox Code Playgroud) DRBD 文档(在将 DRBD 与 Pacemaker 集群集成部分)建议在 Pacemaker 集群中禁用 DRBD:
如果您正在使用 DRBD OCF 资源代理,建议您将 DRBD 启动、关闭、升级和降级专门推迟到 OCF 资源代理。这意味着你应该禁用DRBD初始化脚本:
chkconfig drbd off。
在 systemd 下,这相当于systemctl disable drbd.service.
尽管有此建议,但启用 DRBD 是否有任何危害?这个想法是启用 DRBD,但禁用 Corosync 和 Pacemaker,以便在集群节点出现故障并重新启动后,它将继续接收 DRBD 同步的数据,但将保持“被动”状态。这应该允许在故障节点重新进入集群之前对其进行分析,但同时仍将实时数据保存在两个集群节点上。该建议背后的理由是什么?
我将按照本指南为 MySQL 复制(1 个主和 1 个从)设置故障转移:https : //github.com/jayjanssen/Percona-Pacemaker-Resource-Agents/blob/master/doc/PRM-setup-guide .rst
这是输出crm configure show:
node serving-6192 \
attributes p_mysql_mysql_master_IP="192.168.6.192"
node svr184R-638.localdomain \
attributes p_mysql_mysql_master_IP="192.168.6.38"
primitive p_mysql ocf:percona:mysql \
params config="/etc/my.cnf" pid="/var/run/mysqld/mysqld.pid"
socket="/var/lib/mysql/mysql.sock" replication_user="repl"
replication_passwd="x" test_user="test_user" test_passwd="x" \
op monitor interval="5s" role="Master" OCF_CHECK_LEVEL="1" \
op monitor interval="2s" role="Slave" timeout="30s"
OCF_CHECK_LEVEL="1" \
op start interval="0" timeout="120s" \
op stop interval="0" timeout="120s"
primitive writer_vip ocf:heartbeat:IPaddr2 \
params ip="192.168.6.8" cidr_netmask="32" \
op monitor interval="10s" \
meta is-managed="true"
ms ms_MySQL p_mysql \ …Run Code Online (Sandbox Code Playgroud) failover mysql-replication high-availability pacemaker corosync
首先,我不是 linux 专家,我一直在学习教程并在 google 的帮助下工作,直到现在这都很好,但目前我遇到了一个问题。
我使用的是 CentOS 6.5 和 DRBD 版本 8.4.4。
我有两个运行起搏器的节点,到目前为止一切正常,我设置了 DRBD,我可以手动将一个节点设置为主节点并挂载 DRBD 资源,这样也可以正常工作。
现在我创建了一个起搏器资源来控制 DRBD,但它无法将两个节点中的任何一个提升为 master,这也阻止了它被挂载。
pcs 状态如下所示:
Cluster name: hydroC
Last updated: Wed Jun 25 14:19:49 2014
Last change: Wed Jun 25 14:02:25 2014 via crm_resource on hynode1
Stack: cman
Current DC: hynode1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured
4 Resources configured
Online: [ hynode1 hynode2 ]
Full list of resources:
ClusterIP (ocf::heartbeat:IPaddr2): Started hynode1
Master/Slave Set: MSdrbdDATA [drbdDATA]
Slaves: [ hynode1 hynode2 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Haproxy 对复制的 mysql 主服务器进行负载平衡。我还使用 Heartbeat 和 Pacemaker 进行 Active/Active ip 故障转移,并在两个负载均衡器上使用两个虚拟 ip,以实现 Web 服务器的高可用性。我使用起搏器中的位置在每个负载均衡器上保留一个 VIP,我使用指向 VIP 的循环 DNS 域来负载均衡负载均衡器。到目前为止一切看起来都很好!
| LB1 : | 循环-->| 1.2.3.4 | 心跳起搏器 | 代理 | 192.168.1.1
Run Code Online (Sandbox Code Playgroud)| | | | || LB2 : | 循环-->| 5.6.7.8 | 心跳起搏器 | 代理 | 192.168.1.2
crm配置显示
node $id="394647e0-0a08-451f-a5bf-6c568854f8d1" lb1
node $id="9e95dc4f-8a9a-4727-af5a-40919ac902ba" lb2
primitive vip1 ocf:heartbeat:IPaddr2 \
params ip="1.2.3.4" cidr_netmask="255.255.255.0" nic="eth0:0" \
op monitor interval="40s" timeout="20s"
primitive vip2 ocf:heartbeat:IPaddr2 \
params ip="5.6.7.8" cidr_netmask="255.255.255.0" nic="eth0:1" \
op monitor …Run Code Online (Sandbox Code Playgroud) 这似乎是一个简单的问题,但尽管多次查阅起搏器文档,我似乎还是找不到答案。
我已经使用起搏器设置了 corosync 以共享虚拟 IP。我想要做的就是在备份节点接管资源之前设置一个超时值。如果网络中断 <1-2 分钟,我希望起搏器继续正常运行,而不是触发故障转移,但如果中断超过一定数量,则将其切换。
资源超时 - 但这似乎是等待资源启动的超时,而不是整个集群的超时。
我以前做过这样的设置,没有任何问题。现在我无法执行“crm 配置”,因为当前包中没有可用的 crm 命令。
我错过了什么吗?也许它被其他方式/命令取代?
[root@node1 src]# find / -name crm*|grep bin
/usr/sbin/crm_mon
/usr/sbin/crmadmin
/usr/sbin/crm_error
/usr/sbin/crm_shadow
/usr/sbin/crm_ticket
/usr/sbin/crm_failcount
/usr/sbin/crm_resource
/usr/sbin/crm_master
/usr/sbin/crm_diff
/usr/sbin/crm_attribute
/usr/sbin/crm_node
/usr/sbin/crm_simulate
/usr/sbin/crm_standby
/usr/sbin/crm_verify
/usr/sbin/crm_report
Run Code Online (Sandbox Code Playgroud) 我正在关注http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Clusters_from_Scratch/_verify_corosync_installation.html文档以在 AWS 中设置 2 节点集群。两个节点都安装了起搏器并启用了 FW 规则。当我在两个节点上运行 pcs status 命令时,我收到消息说另一个节点是 UNCLEAN(离线)。
我设置的两个节点是 ha1p 和 ha2p。
ha1p 上的输出
[root@ha1 log]# pcs status
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Wed Dec 24 21:30:44 2014
Last change: Wed Dec 24 21:27:44 2014
Stack: cman
Current DC: ha1p - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured
0 Resources configured
Node ha2p: UNCLEAN (offline)
Online: [ ha1p ]
Full list of resources:
Run Code Online (Sandbox Code Playgroud)
ha2p 上的输出 …