除了典型的 Heartbeat/Pacemaker/CoroSync 组合之外,在 Linux 上是否还有其他主要的自动故障转移替代方案?特别是,我正在 EC2 实例上设置故障转移,它只支持单播 - 没有多播或广播。我专门尝试处理我们拥有的少数软件,这些软件还没有自动故障转移功能并且不支持多主环境。这包括 HAProxy 和 Solr 等工具。
我有 Heartbeat+Pacemaker 工作,但我对此并不感到兴奋。以下是我的一些问题:
起搏器工作得很好,尽管它的功率使其难以设置。Pacemaker 的真正问题在于没有简单的方法来自动化配置。我真的很想启动一个 EC2 实例,安装 Chef/Puppet 并在没有我干预的情况下启动整个集群。
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
这似乎是一个简单的问题,但尽管多次查阅起搏器文档,我似乎还是找不到答案。
我已经使用起搏器设置了 corosync 以共享虚拟 IP。我想要做的就是在备份节点接管资源之前设置一个超时值。如果网络中断 <1-2 分钟,我希望起搏器继续正常运行,而不是触发故障转移,但如果中断超过一定数量,则将其切换。
资源超时 - 但这似乎是等待资源启动的超时,而不是整个集群的超时。
我有两个运行 Corosync 和 Pacemaker 的HA 负载平衡器(hollywood和wolfman)。所述eth1接口被连接到广域网,以及eth0接口的LAN,使用虚拟IP作为网关用于后端服务器。的eth1IPhollywood是xxx.xxx.195.45, 的eth1IPwolfman是xxx.xxx.195.46。该bindnetaddr在Corosync是xxx.xxx.195.32,同为广域网的网络地址和端口Corosync是默认的5405。
两台服务器上的相关IP表规则是:
*filter
--flush
:INPUT DROP
--append INPUT --protocol udp --destination-port 5404 --jump ACCEPT
--append INPUT --protocol udp --destination-port 5405 --jump ACCEPT
Run Code Online (Sandbox Code Playgroud)
这种设置似乎做工精细,但最初我加--in-interface eth1和--source xxx.xxx.195.46来wolfman,并--source xxx.xxx.195.45到hollywood。大多数情况下这似乎有效,但重新启动被动平衡器有时会终止负载平衡器之间的通信,将这些错误写入系统日志:
[TOTEM] 由于操作系统或网络故障,图腾无法形成集群。此消息的最常见原因是本地防火墙配置不正确。
因此,我认为所有 Corosync 流量直接在两个负载均衡器之间的简单信念似乎eth1是错误的,或者是其他原因导致了问题。
我想将5404/5405IPTables 中的端口锁定到集群。我需要做什么才能实现这一目标?
编辑: …
我正在使用具有 2 个根服务器和 1 个故障转移 ip 的设置(在我们的登台系统上)。作为软件,我们使用 corosync 和起搏器。Corosync 配置为通过端口 5405 进行多播通信。--> 一切正常。
现在我想在带有故障转移 ip 的 2 个根服务器上部署这个系统。好吧,多播通信将不起作用,因为根服务器没有直接连接;它们与路由器相连并位于不同的数据中心
现在我根据udpu支持更改了corosync.conf(如示例)。我正在使用 corosync v.1.4.1
corosync.conf:
compatibility: whitetank
totem {
version: 2
secauth: off
interface {
member {
memberaddr: A.A.A.A
}
member {
memberaddr: B.B.B.B
}
ringnumber: 0
bindnetaddr:A.A.A.A
mcastport: 5405
}
transport: udpu
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
service {
name: pacemaker
ver: …Run Code Online (Sandbox Code Playgroud) 我有 2 台服务器配置了 drbd、corosync 和pacemaker。一切工作正常,如果主服务器发生故障,则主服务器将成为辅助服务器,辅助服务器将成为主服务器。
但是如果第一台服务器在故障转移后再次出现,drbd 将无法再次连接,我必须执行
drbdadm 连接所有
在现在的中学。
这是来自 server1 的日志,其中包含我所做的所有输入(https://www.refheap.com/95997):
root@server1:~# ifdown eth4
Jan 12 08:11:37 server1 kernel: [237958.935578] ixgbe 0000:04:00.0: removed PHC on eth4
Jan 12 08:11:43 server1 kernel: [237965.430849] cib[2877]: segfault at 0 ip 00007f7d342c8aca sp 00007fffaba39e58 error 4 in libc-2.19.so[7f7d34247000+19f000]
Jan 12 08:11:44 server1 kernel: [237966.427423] crmd[2878]: segfault at 0 ip 00007eff7d291aca sp 00007fffaae51538 error 4 in libc-2.19.so[7eff7d210000+19f000]
Jan 12 08:11:46 server1 kernel: [237967.955014] drbd r0: peer( Secondary -> Unknown ) conn( …Run Code Online (Sandbox Code Playgroud) 我的集群中有两个带有 drbd+pacemaker+corosync 的节点当第一个节点出现故障时,第二个节点会承担服务并且没问题,但是当我们必须进行故障回复(节点 1 重新联机)时,它会显示一些错误并且集群停止工作。
这是一个 CentOS 6 集群,内核为 2.6.32-504.12.2.el6.x86_64 和这些包:
kmod-drbd83-8.3.16-3、drbd83-utils-8.3.16-1、corosynclib-1.4.7-1、corosync-1.4.7-1、pacemaker-1.1.12-4、pacemaker-cluster-libs- 1.1.12-4、pacemaker-libs-1.1.12-4、pacemaker-cli-1.1.12-4。
Drbd 配置:
resource r0
{
startup {
wfc-timeout 30;
outdated-wfc-timeout 20;
degr-wfc-timeout 30;
}
net {
cram-hmac-alg sha1;
shared-secret sync_disk;
max-buffers 512;
sndbuf-size 0;
}
syncer {
rate 100M;
verify-alg sha1;
}
on XXX2 {
device minor 1;
disk /dev/sdb;
address xx.xx.xx.xx:7789;
meta-disk internal;
}
on XXX1 {
device minor 1;
disk /dev/sdb;
address xx.xx.xx.xx:7789;
meta-disk internal;
}
}
Run Code Online (Sandbox Code Playgroud)
同步:
compatibility: whitetank
totem {
version: 2
secauth: …Run Code Online (Sandbox Code Playgroud) 鉴于下面描述的 Pacemaker/Corosync 资源配置,是否可以在资源组内的特定位置添加资源?配置是使用 RHEL 提供的集群附加组件的 CentOS 7.2。
这是一个 NFS 服务器集群,Pacemaker 处理 NFS 守护进程、卷、导出、虚拟 IP 和 NFS 客户端通知。
当我想将 NFS 挂载(exportfs 资源)添加到集群设置时,它最终会列在nfs-notify 资源之后。这以丑陋的方式破坏了集群。
我找到了基本pcs resource order命令,它们似乎允许指定资源 X 需要在资源 Y 之前运行,但这不可扩展。
这可能吗?
[root@zfs1-node1 ~]# pcs status
Cluster name: zfs1
Last updated: Tue Jan 5 04:09:11 2016 Last change: Tue Jan 5 04:08:15 2016 by root via cibadmin on zfs1-node1
Stack: corosync
Current DC: zfs1-node1 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 9 …Run Code Online (Sandbox Code Playgroud) 我有一个 DRBD 集群,其中一个节点关闭了几天。单节点运行良好,没有出现任何问题。当我打开它时,我遇到了一种情况,所有资源都停止了,一个 DRBD 卷是辅助卷,其他卷是主要卷,因为它似乎试图对刚刚打开的节点执行角色交换(ha1 处于活动状态,然后我打开 ha2)为了便于理解日志,在 08:06)
我的问题:
下面是我能想象到的所有可能有用的信息。
bash-5.1# cat /proc/drbd
version: 8.4.11 (api:1/proto:86-101)
srcversion: 60F610B702CC05315B04B50
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:109798092 nr:90528 dw:373317496 dr:353811713 al:558387 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:415010252 nr:188601628 dw:1396698240 dr:1032339078 al:1387347 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
2: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:27957772 nr:21354732 dw:97210572 dr:100798651 al:5283 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Run Code Online (Sandbox Code Playgroud)
集群状态最终为
bash-5.1# …Run Code Online (Sandbox Code Playgroud)