AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 410865
Accepted
jetboy
jetboy
Asked: 2012-07-25 14:51:22 +0800 CST2012-07-25 14:51:22 +0800 CST 2012-07-25 14:51:22 +0800 CST

使用 Heartbeat 和 Pacemaker 监控 Varnish

  • 772

我有一对服务器设置为高可用性负载平衡器/反向代理。每个都运行 Ubuntu 12.04 x64 服务器、Varnish、Heartbeat 和 Pacemaker,并使用 Varnish 负载平衡后端服务器的流量。

如果任一负载均衡器发生故障,Heartbeat/Pacemaker 会将一组虚拟 IP 传输到另一台服务器,然后流量恢复。这一点工作正常。

我没有考虑的是 Varnish 是否没有在任何一台服务器上运行。目前可以在不触发 Heartbeat/Pacemaker 的任何动作的情况下停止 Varnish。我希望当前服务器上缺少可操作的 Varnish 以触发向备份的移动(而不是尝试重新启动 Varnish),但我正在努力寻找任何类型的在线指导。谁能帮忙?

编辑达夫后的帮助:

我最终得到的结果与我最初的请求有点不同:Pacemaker 尝试重新启动 Varnish 一次,如果失败,它会将所有资源移动到被动节点。

我的设置是两台服务器,serverA(主动)和 serverB(被动)。我假设消息传递层(Heartbeat 或 Corosync)已经设置好并可以正常工作。为了让 Pacemaker 控制 Varnish,我们需要修复 Ubuntu 的 Varnish init 脚本:

sudo vim /etc/init.d/varnish

代替:

--start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \

在 start_varnish_d() 函数中:

--start --quiet --pidfile ${PIDFILE} --oknodo --exec ${DAEMON} -- \

所以它按照此处概述的规则工作。现在使用两个虚拟 IP 在 serverA 上设置一个基本的 Pacemaker 集群:

sudo crm configure property no-quorum-policy=ignore
sudo crm configure property stonith-enabled=false
sudo crm configure primitive virtual_ip_1 ocf:heartbeat:IPaddr params ip="192.168.1.134" nic="eth1" cidr_netmask="24" broadcast="192.168.1.255" op monitor interval="10s" timeout="20s"
sudo crm configure primitive virtual_ip_2 ocf:heartbeat:IPaddr params ip="192.168.1.135" nic="eth1" cidr_netmask="24" broadcast="192.168.1.255" op monitor interval="10s" timeout="20s"

为 Varnish 添加一个原语,提供监控频率,以及启动和停止 Varnish 的大量时间:

sudo crm configure primitive varnish lsb:varnish op monitor interval="10s" timeout="20s" op
start interval="0" timeout="15s" op stop interval="0" timeout="15s"

将 varnish 基元与虚拟 IP 分组,以便 Pacemaker 在发生故障时将所有资源迁移到被动节点:

sudo crm configure group cluster virtual_ip_1 virtual_ip_2 varnish

设置迁移阈值,以便 Pacemaker 在将所有资源移动到被动节点之前容忍两次故障。对于 Varnish,这意味着一次初始失败,再加上一次失败的重启尝试:

sudo crm_attribute --type rsc_defaults --attr-name migration-threshold --attr-value 2

设置失败超时。这似乎做了两件事:

  1. 在迁移到被动节点之前,为 Pacemaker 提供一次 Varnish 重启尝试的时间。

  2. 防止失败的节点在 30 秒后被标记为失败,允许将资源移回它,而无需在失败后手动运行 crm 资源清理清漆。这对我的设置来说是件好事,因为我没有在节点上设置任何权重,但在不同的环境中这可能是一个非常糟糕的主意。

sudo crm_attribute --type rsc_defaults --attr-name failure-timeout --attr-value 30s

就是这样,但请参阅下面达夫的回答以获取有关粘性的评论,我最终没有使用它。我能看到的唯一缺点是,如果您手动将节点置于待机状态,Pacemaker 将关闭该节点上的 Varnish,从而清除内存中的缓存。对我来说,这不是什么大不了的事。

varnish
  • 1 1 个回答
  • 2443 Views

1 个回答

  • Voted
  1. Best Answer
    daff
    2012-07-25T15:51:12+08:002012-07-25T15:51:12+08:00

    您的集群架构让我感到困惑,因为您似乎正在同时在两个节点上独立运行集群管理的服务(如 Varnish),让集群资源管理器(CRM)只是处理 IP 地址。

    您希望通过集群设置实现什么目标?容错?负载均衡?两个都?请注意,我说的是集群资源(Varnish、IP 地址等),而不是 Varnish 分配负载的后端服务器。

    对我来说,这听起来像是您想要一个提供容错能力的主动-被动双节点集群。一个节点是活动的,运行 Varnish、虚拟 IP 地址和可能的其他资源,而另一个节点是被动的,在集群资源管理器将资源移到被动节点之前什么都不做,此时它变为活动节点。这是一个久经考验的架构,与时间本身一样古老。但要使其正常工作,您需要让 CRM 完全控制资源。我建议从头开始学习 Clusters,然后对您的集群进行建模。

    在您更新的问题后进行编辑:您的 CIB 看起来不错,并且一旦您修补了 Varnish init 脚本以便重复调用“开始”返回 0 您应该能够添加以下原语(根据您的喜好调整超时和间隔):

    primitive p_varnish lsb:varnish \
        op monitor interval="10s" timeout="15s" \
        op start interval="0" timeout="10s" \
        op stop interval="0" timeout="10s" 
    

    不要忘记将它添加到平衡器组(列表中的最后一个元素):

    group balancer eth0_gateway eth1_iceman_slider eth1_iceman_slider_ts \
        eth1_iceman_slider_pm eth1_iceman_slider_jy eth1_iceman eth1_slider \
        eth1_viper eth1_jester p_varnish
    

    编辑 2:要降低迁移阈值,请在 CIB 末尾添加一个资源默认值部分,并将该migration-threshold属性设置为较低的数字。将其设置为 1 表示资源将在单次失败后迁移。设置资源粘性也是一个好主意,这样由于节点故障(重启或关闭)而迁移的资源不会在节点再次可用时自动迁移回来。

    rsc_defaults $id="rsc-options" \
        resource-stickiness="100" \
        migration-threshold="1" 
    
    • 3

相关问题

  • 清漆配置仅缓存未登录用户

  • Varnish 缓存如何处理不同的域?

  • 缩放大文件下载?

  • Gzip 与反向代理缓存

  • 在 Windows XP 主机上使用虚拟化 linux 来宾评估 Varnish 的最简单方法是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve