You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何基于连接接口确定HA集群主节点优先级(DRBD+Pacemaker场景)

基于Bond接口连接数实现Pacemaker主节点切换(DRBD集群场景)

没问题,这个需求完全可以通过Pacemaker的自定义节点属性监测+优先级规则来实现,我帮你拆解成可落地的步骤:

1. 先搞定Bond连接数的状态采集

首先我们需要一个脚本,用来读取bond接口的已连接网卡数量,并把这个值同步给Pacemaker作为节点属性。

创建一个监测脚本/usr/local/bin/check_bond_status.sh,内容如下:

#!/bin/bash
# 替换成你的bond接口名称,比如bond0
BOND_INTERFACE="bond0"

# 统计已连接的网卡数量(从/proc/net/bonding/读取状态)
CONNECTED_NICS=$(grep -c "Link Status: Up" /proc/net/bonding/${BOND_INTERFACE})

# 将结果设置为当前节点的Pacemaker属性
pcs property set node $(uname -n) bond_connected_count=${CONNECTED_NICS}

给脚本添加执行权限:

chmod +x /usr/local/bin/check_bond_status.sh

2. 配置周期性监测,自动更新节点属性

Pacemaker不会主动监听bond状态变化,所以我们需要定期执行上面的脚本,让节点属性实时同步bond的连接情况。用cron来实现最直接:

# 添加每分钟执行一次的cron任务
echo "* * * * * root /usr/local/bin/check_bond_status.sh" >> /etc/cron.d/pacemaker_bond_monitor

3. 配置Pacemaker的优先级与切换规则

接下来设置节点的默认优先级,以及基于bond连接数的动态调整规则:

第一步:设置默认节点优先级

# 设置server-1默认优先级为5(作为默认主节点)
pcs property set node server-1 priority=5
# 设置server-2默认优先级为3
pcs property set node server-2 priority=3

# 配置资源粘性,避免无意义的切换(可选但推荐)
pcs resource defaults resource-stickiness=100

第二步:添加动态优先级调整规则

我们需要实现:当server-1的bond接口只有1个网卡正常连接时,它的优先级降低2(从5变为3),此时让server-2晋升为主节点。

用Pacemaker的规则来实现这个逻辑:

# 替换成你的DRBD资源名称,比如drbd_data
DRBD_RESOURCE="drbd_data"

# 当server-1的bond连接数不等于2时,给它的资源位置分数减2
pcs constraint location ${DRBD_RESOURCE} rule node server-1 score=-2 expr "bond_connected_count ne 2"

补充:更严谨的切换逻辑(可选)

如果想确保当server-1的bond故障时,server-2必定成为主节点,可以调整规则让server-2在此时获得更高的优先级:

# 正常情况下优先让server-1持有资源
pcs constraint location ${DRBD_RESOURCE} prefers server-1=5
# 当server-1的bond连接数不足2时,让server-2的优先级高于server-1
pcs constraint location ${DRBD_RESOURCE} prefers server-2=4
pcs constraint location ${DRBD_RESOURCE} rule node server-1 score=-6 expr "bond_connected_count ne 2"

这样当server-1的bond故障时,它的有效分数是5-6=-1,而server-2的分数是4,资源会自动切换到server-2。

4. 验证配置效果

你可以手动模拟bond故障来测试:

  1. 在server-1上down掉一个bond成员网卡:ifdown eth0(替换成你的实际网卡名)
  2. 等待1分钟(cron执行周期),然后用pcs property show node server-1查看bond_connected_count是否变为1
  3. 查看资源状态:pcs status,此时DRBD主资源应该已经切换到server-2
  4. 恢复网卡:ifup eth0,等待1分钟后,资源会切回server-1(因为默认优先级更高)

额外注意事项

  • 确保两台服务器的bond配置完全一致,且/proc/net/bonding/bond0的输出格式相同,否则脚本的grep命令可能出错
  • DRBD资源必须配置为master-slave模式,Pacemaker才能正确管理主从切换
  • 建议开启Pacemaker的STONITH功能(节点 fencing),避免脑裂风险

这样配置下来,就能完美实现你想要的基于bond连接数的主节点切换策略了,要是遇到具体的配置问题,随时说细节我帮你排查~

内容的提问来源于stack exchange,提问作者bakasan

火山引擎 最新活动