HA(High Available),高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。


只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能, 更能满足用户不断出现的需求变化。


本指南以pfsense2.33来进行高可用性的配置示例。


高可用性集群配置的三个要点:

  • CARP用于IP地址冗余

  • XMLRPC用于配置同步

  • pfsync用于状态表同步

通过配置,两个节点充当“主动/被动”集群,一个节点用作主节点,另一个辅助节点用作备份角色,如果主节点出现故障,辅助节点则根据需要接管。


下面分以下几个章节展开介绍:

  • 高可用性集群的组件

  • 高可用性先决条件

  • 配置高可用性集群

  • 测试高可用性

  • 高可用性故障排除

  • 在高可用性集群上升级pfSense


高可用性集群的组成

虽然经常错误地称为“CARP群集”,但是运行pfSense软件的两个或多个冗余防火墙更适合称为“高可用性集群”或“HA集群”,因为CARP只是用于实现高可用性的几种技术之一,未来的CARP可以变换为不同的冗余协议。


最常见的高可用性(HA)集群配置只包含两个节点。在集群中可以有更多的节点,但是它们并没有更多的意义。本指南假设两个pfsense节点正在使用,一个充当主节点,另一个作为辅助节点。


重要的是我们区分HA(IP地址冗余,配置同步和状态表同步)的三个功能,因为这些任务发生在不同的地方。防火墙在同步接口上执行配置同步和状态同步,直接在防火墙单元之间进行通信。防火墙在CARP VIP的每个接口上发送CARP心跳。故障转移指令不会发生在同步接口上,而是发生在每个支持CARP的接口上。

pfSense高可用性集群设置指南_第1张图片

高可用性集群示例

IP地址冗余 (CARP)

为了通过集群连接以在故障切换期间无缝连接,到集群的流量必须使用冗余IP地址。通用地址冗余协议(CARP)通常用于完成这个任务。


CARP类型虚拟IP地址(VIP)在集群的节点之间共享。一个节点是主站并接收IP地址的流量,其他节点维护备份状态并监视心跳,以查看如果前一个主站失败,是否需要承担主机角色。由于一次只有一个群成员正在使用IP地址,因此CARP VIP没有IP地址冲突。


为了使故障转移正常工作,重要的是到达集群的入站流量将被发送到CARP VIP,并且从CARP VIP发送流量。入站流量包括路由上行流量,×××,NAT,本地客户端网关和DNS请求。出站流量包括出站NAT和×××。如果流量直接寻址到节点,而不是CARP VIP,则该流量将不会被其他节点获取。


CARP的工作类似于VRRP和HSRP,甚至在某些情况下可能会发生冲突。心跳在包含CARP VIP的每个接口上发送,每个接口每个VIP心跳一次。在偏离和基准的默认值下,VIP会每秒钟发送一次心跳。偏离确定在给定时间点哪个节点是主节点。无论哪个节点发送心跳,最快的都是主角色。较高的偏离值会导致以更多的延迟发送心跳,因此,如果网络或其他问题导致心跳延迟或丢失,则具有较低偏离值的节点将成为主机。


注意

不要使用CARP VIP访问防火墙GUI,SSH或其他管理机制。 出于管理目的,只能使用每个单独节点的接口上的实际IP地址,而不是VIP。不然可能不确定哪个节点被访问。


pfSense XML-RPC配置同步

为了使维护实际上相同的防火墙节点变得更加容易,可以使用XML-RPC进行配置同步。启用XML-RPC同步后,支持区域的设置将被复制到辅助设备,并在每次配置更改后激活。 XMLRPC同步是可选的,但是如果没有它,维护集群就会困难的多。


某些区域无法同步,例如接口配置,可以同步的部分包括:防火墙规则、别名、用户、证书、×××、DHCP、路由、网关等。作为一般规则,特定于硬件或特定安装的项目(例如 System > General 或 System > Advanced下的接口或值)不同步。支持的区域列表可能会根据使用的pfSense的版本而有所不同。有关要同步的区域的列表,请参阅XMLRPC部分中System > High Avail Sync的复选框。大多数插件不能同步,但有些插件包含有自己的同步设置。


配置同步应使用Sync接口,或者如果没有专用的Sync接口,请使用为pfsync配置的相同接口。


在双节点集群中,只能在主节点上启用XML-RPC设置,辅助节点必须禁用这些设置。


要使XML-RPC运行,两个节点都必须在相同的端口和协议上运行GUI,例如:端口443上的HTTPS,这是默认设置。无法禁用管理员帐户,并且两个节点必须具有相同的管理员帐户密码。


状态表同步(pfsync)

pfsync启用群节点之间的防火墙状态表的同步。对主节点状态表的更改通过Sync接口发送到辅助防火墙,反之亦然。当pfsync处于活动状态并正确配置时,如果主节点发生故障,则备份节点将接管,并且客户端将不会注意到这种切换。


pfsync默认使用多播,也可以定义IP地址来强制单播更新用于只有两个防火墙的环境,组播无法正常运行。任何活动接口都可用于发送pfsync更新,但是使用专用接口更有利安全性和性能提升。 pfsync不支持任何身份验证方法,因此如果使用专用接口以外的任何方式,任何具有本地网络访问权限的用户都可以将状态插入到状态表中。在不注重安全的低吞吐量环境中,可以使用LAN接口。这种状态同步所需的带宽将从一个环境变化到另一个环境,但是可能达到防火墙吞吐量的10%,具体取决于网络中的状态插入和删除速率。


故障切换仍然可以在没有pfsync的情况下运行,但不能无缝连接。没有pfsync,如果一个节点失败,另一个接管,用户连接将被丢弃。用户可以立即通过其他节点重新连接,但在转换期间它们将被中断。根据特定环境中的使用情况,这可能会被忽视,也有可能是一个简短的中断。


当使用pfsync时,必须在参与状态同步的所有节点(包括辅助节点)上启用pfsync设置,否则它将无法正常运行。


高可用性先决条件

在实现冗余配置之前,必须满足一些先决条件。

本指南假定:

  • 只使用两个群节点

  • 两个集群节点均使用相同的pfsense设备

  • 两台设备为出厂默认配置,没有进行其他设置


注意

不要将两个单元的LAN端口连接到同一个LAN交换机,应该在基本设置被应用到每个节点后才连接, 否则将出现IP地址冲突,导致不能单独与每个节点进行通信。


确定同步接口

本指南假定每个集群节点上的一个接口专用于同步任务。 这通常被称为“同步”接口,它被防火墙用于配置同步和pfsync状态同步。 可以使用任何可用的接口。 在本指南中,OPT4接口(igb5)将用于同步流量。

注意

有人称之为“CARP”接口,这是错误的,且非常容易误导。 CARP心跳在每个接口上发生CARP VIP。CARP流量和故障切换操作不使用Sync接口。


接口分配

必须在所有节点上以相同的顺序对接口进行分配。 如果接口未对齐,则配置同步和其他任务将无法正常运行。 如果对接口分配进行了任何调整,则它们必须在两个节点上相同地进行复制。 

pfSense高可用性集群设置指南_第2张图片

接口分配示意图

IP地址要求

高可用性集群在每个子网中需要三个IP地址以及用于同步接口的单独的未使用的子网。  每个节点使用一个IP地址,加上一个共享的CARP VIP地址进行故障切换。 同步接口每个节点只需要一个IP地址。


本指南使用的IP地址如下表所示,你可以根据需要换成自己的IP地址。

WAN IP地址分配
IP 地址 用途
198.51.100.200/24 CARP共享IP地址
198.51.100.201/24 主节点 WAN IP 地址
198.51.100.202/24 辅助节点WAN IP地址

LAN IP 地址分配
IP 地址 用途
192.168.1.1/24 CARP共享IP地址
192.168.1.2/24 主节点 LAN IP 地址
192.168.1.3/24 辅助节点LAN IP地址

同步IP地址分配
IP 地址 用途
172.16.1.2/24 主节点同步IP地址 
172.16.1.3/24 辅助节点同步IP地址


单地址CARP

在技术上可以将具有CARP VIP的接口配置为给定子网中的唯一IP地址,但是我们不建议使用这种类型的配置。 当广域网使用这种配置时,它只允许从主节点到上游网络(例如Internet)的通信,这使得诸如更新、插件安装、网关监控或需要来自辅助节点的外部连接的任何事情变得复杂化。 它更适合内部接口,但是内部接口通常不会受到与WAN相同的IP地址限制,因此仍然优先选择在所有节点上配置IP地址。 本指南不涵盖此类配置。

确定CARP VHID可用性

如果网络上的其他设备使用冲突的标识符,CARP可能会干扰VRRP、HSRP或使用CARP的其他系统。 为了确保某个网段不会有冲突的流量,请在每个接口上执行数据包捕获,寻找CARP流量。 每个2层上的VHID必须是唯一的,因此每个接口都必须单独检查。 只要网段处于单独的广播域中,可以在不同的网段上使用相同的VHID。


如果显示任何CARP或VRRP流量,请注意VHID / VRID,并在以后配置CARP VIP VHID时避免使用该标识符。


本指南假定没有其他可能存在冲突的流量。


设置要求

使用安装向导或手动设置之后,使用唯一的主机名和非冲突的静态IP地址配置每个防火墙。


  • 例如,一个节点可以是"firewall-a.example.com"另一个节点可以是"firewall-b.example.com",也可以是更个性化的一对名称。

  • 避免命名节点为master和backup,因为它们是状态而不是角色,可以命名为primary和 secondary。

  • 对于IP地址,出厂默认LAN地址为192.168.1.1。 在本例中,该地址将是CARP VIP。 使用该子网将每个节点移动到子网中的自己的地址,例如主节点的192.168.1.2和辅助节点的192.168.1.3。

  • 在辅助节点上,在Services > DHCP Server 的LAN选项卡下禁用LAN段的DHCP服务器。 此服务将在配置同步后自动启用,如果在完全配置HA之前启用,主服务器和辅助节点上可能会发生IP地址冲突。

  • 一旦每个节点具有唯一的LAN IP地址,并且辅助节点上的DHCP被禁用,则两个节点都可以插入同一个LAN交换机。

  • 两个节点都必须在相同的端口和协议上运行GUI。 本指南假定在端口443上使用HTTPS。

  • 不能禁用管理员帐户,并且两个节点必须具有相同的管理员帐户密码。

  • 在pfSense2.4及更高版本上,任何用户都可以用于配置。 同步用户必须具有System - HA node sync权限。 现在我们使用admin,然后可以更改它。

  • 两个节点必须在同一子网中具有静态IP地址,并在WAN接口设置上配置正确的网关。

  • 两个节点都必须正确配置DNS,或者使用禁用转发功能的DNS解析器,或者在System > General Setup下设置DNS服务器。

  • 访问Services > DNS Resolver。 查看设置,即使没有更改,单击保存一次以确保默认值被设置。


交换机/二层配置

CARP相关

CARP心跳利用组播传送,并且可能需要在集群涉及的交换机上进行特殊处理。 某些交换机过滤、速率限制或以其他方式干扰可能导致CARP组播失败。 此外,一些交换机采用可能无法正常使用CARP的端口安全方法。


所以交换机必须:


  • 允许使用CARP VIP在不影响端口的情况下发送和接收组播流量。

  • 允许使用多个MAC地址发送和接收流量。

  • 允许CARP VIP MAC地址在端口之间移动。


CARP未能正确反映预期状态的几乎所有问题都是交换机故障或其他2层问题,因此在继续操作之前,请确保交换机已正确配置。


端口配置

每个节点的WAN端口必须连接到相同的WAN交换机,然后连接到WAN CPE / Modem / 上游链路。 LAN端口都将连接到同一个LAN交换机,依此类推。 Sync接口可以直接连接在两个节点之间,而无需交换机。 


配置高可用性集群

设置同步接口

在继续之前,必须配置集群节点上的Sync接口。 同步IP地址分配列出了要用于每个节点上的同步接口的地址。

  • 导航到Interfaces > OPT4

  • 设置 Enable Interface(启用接口)

  • 为 SYNC 输入说明文字

  • 设置IPv4 Configuration Type(IPv4配置类型) 为Static IPv4(静态IPv4)

  • 设置IPv4 address (IPv4地址)为 172.16.1.2 ,这是在主节点模式的情况下。如果是辅助节点,则设置为  172.16.1.3 

  • IPv4 address(地址)旁边的CIDR下拉列表中选择24为子网掩码

  • 不要选中Block private networks 或 Block bogon networks

  • 单击 Save

  • 单击Apply Changes(应用更改)

在主节点上完成此过程后,请在具有相应IPv4 address(地址)值的辅助节点上再次执行该过程。

添加同步防火墙规则

要完成Sync接口配置,请将防火墙规则添加到两个节点以允许同步。


至少防火墙规则必须通过配置同步流量(默认情况下,端口443上的HTTPS)和pfsync流量。 在大多数情况下,使用简单的“allow all(允许全部)”样式规则。 对于本指南,两者将被显示,它也将作为同步工作的指标。


在主节点上进行如下设置:

  • 导航到Firewall > Rules 的SYNC 选项卡

  • 单击 fa-level-up 在列表顶部创建一个新的规则

  • 设置 Action 为Pass

  • 设置 Protocol 为TCP

  • 设置 SourceYNC Net

  • 设置 Destination 为SYNC Address

  • 设置 Destination port range 为 443 或从下拉式选择器中选择HTTPS

  • 设置 Description 为Allow configuration synchronization

  • 单击 Save

  • 单击 fa-level-up 在列表顶部创建另一个新的规则

  • 设置 Action 为 Pass

  • 设置 Protocol 为 pfsync

  • 设置 Source 为 SYNC Net

  • 设置 Destination 为any

  • 设置 Description为 Allow state synchronization

  • 单击 Save

  • 单击 Apply Changes

完成后,规则将如下图“示例同步接口防火墙规则”所示,该规则还包括允许ICMP回显(ping)用于诊断目的的规则。

pfSense高可用性集群设置指南_第3张图片

示例同步接口防火墙规则

在辅助节点进行如下设置:

  • 导航到Firewall > Rules 的 SYNC 选项卡

  • 单击 fa-level-up 在列表顶部创建一个新的规则

  • 设置 Action 为 Pass

  • 设置 Protocol 为 any

  • 设置 Source 为SYNC Net

  • 设置 Destination 为any

  • 设置 Description 为 Temp rule for sync

  • 单击 Save

  • 单击 Apply Changes

注意

辅助节点的规则是不同的, 一旦进行了第一次配置同步,则辅助节点上的临时规则将被主节点的规则所替代。 


配置 pfsync

必须在主节点和辅助节点上配置使用pfsync的状态同步才能运行。


首先在主节点上,然后在辅助节点上执行以下操作:

  • 导航到System > High Avail Sync

  • 在页面上找到 State Synchronization Settings (pfsync) 部分

  • 启用Synchronize States

  • 设置Synchronize Interface 为SYNC

  • 设置pfsync Synchronize Peer IP 同步另一个节点。 在主节点上设为 172.16.1.3 ,在辅助节点上设置为 172.16.1.2 

  • 单击Save

配置XMLRPC


注意

只能在主节点上配置同步。仅在主节点上执行以下操作:


  • 导航到System > High Avail Sync

  • 设置Synchronize Config to IP 为辅助节点的Sync接口 IP地址,172.16.1.3

  • 输入Remote System Username(远程系统用户): admin

    注意

    在pfSense2.3.x以及之前,这一定是永远是admin,不能填其他用户! 在pfSense2.4及更高版本上,任何用户都可以用于配置。 同步用户必须具有System - HA node sync权限。

  • 输入Remote System Password (远程系统密码),初始如果没改变则为pfsense。


  • 单击Save

在辅助节点上导航到Firewall > Rules  SYNC选项卡,你会发现现在的规则已经与主节点同步了。


注意

不要在设置为同步的区域中对辅助节点进行更改! 下一次主节点执行同步时,这些更改将会被覆盖。


添加CARP VIPs

现在配置同步完成后,CARP虚拟IP地址只需要添加到主节点,并通过配置同步自动复制到辅助节点。 下面来我们设置。这需要将增加两个CARP VIP:一个用于WAN,一个用于LAN。

  • 导航到主节点的Firewall > Virtual IPs菜单

  • 单击 fa-plus 在列表的顶部创建一个新的VIP

  • 选择Type 为CARP

  • 选择InterfaceWAN

  • Address(es) 框中输入WAN CARP VIP地址和子网掩码。 在本例中输入198.51.100.200 和24

  • Virtual IP Password中输入随机密码,并在确认框中再次输入密码。 这只需要在两个节点之间进行匹配,这将通过同步来处理。

  • 选择“确定CARP VHID可用性”中确定的未使用的VHID Group

注意

一个常见的策略是使VHID与IP地址的最后一个八位字节相匹配,因此在这种情况下,本例中使用了200的VHID。

  • Advertising Frequency 设置Base =1, Skew = 0。当复制到辅助节点时,该值将自动调整。

  • 在 Description 中输入描述 WAN CARP VIP

  • 单击Save

Base 和 Skew共同决定CARP心跳发送的频率。 Base的值增加了整秒,应该在两个节点之间匹配。 Skew 值增加1/25秒的增量。 主节点应始终偏移0或1,辅助节点必须要更高一点,通常为100+。 该调整由配置同步过程自动处理。

注意

如果CARP对给定网络上的延迟太敏感,我们建议一次添加一秒钟来调整Base,直到达到稳定。

LAN CARP VIP重复以上过程。

  • 导航到Firewall > Virtual IPs

  • 单击 fa-plus 在列表的顶部创建一个新的VIP

  • 选择Type 为 CARP

  • 选择 Interface 为 LAN

  • Address(es) 框中输入LAN CARP VIP地址和子网掩码,在本例中输入192.168.1.1 和24 

  • Virtual IP Password中输入随机密码,并在确认框中再次输入密码。

  • 选择“确定CARP VHID可用性”中确定的未使用的VHID Group

  • Advertising Frequency 设置Base =1, Skew = 0。

  • Description 输入描述 LAN CARP VIP

  • 单击 Save

  • 单击 Apply Changes

如果在WAN子网中有其他IP地址被用于1:1 NAT,端口转发,×××等等,那么现在可以将其添加为CARP VIP。

检查辅助节点上的 Firewall > Virtual IPs,以确保VIP按预期方式同步。

如果设置同步成功,两个节点上的虚拟IP地址将看起来像CARP虚拟IP列表。

../_images/ha-carp-vips.png

CARP 虚拟IP列表

检查CARP状态

现在在两个节点上访问 Status > CARP以确认正确的状态。 主节点应显示所有VIP(主要CARP VIP状态)的MASTER状态,辅助节点应显示所有VIP的BACKUP状态(辅助节点上的CARP VIP状态)。 如果状态不正确,请参阅高可用性故障排除。

../_images/ha-status-pri.png

主节点CARP VIP 状态

../_images/ha-status-sec.png

辅助节点CARP VIP状态

设置手动出站 NAT

NAT的设置将会自动同步,因此这些修改只需要对主节点进行。

在主节点上导航到Firewall > NATOutbound 选项卡

  • Mode(模式) 更改为Manual Outbound NAT rule generation(手动出站NAT规则生成)

  • 单击 Save, 规则列表将使用与默认自动出站NAT所使用的规则相同的规则进行填充。


  • 注意

    如果列表中没有规则出现,请确保WAN在Interfaces > WAN下选择了一个网关。


  • 单击 fa-pencil 编辑LAN子网的规则

  • 设置Translation Address 为WAN CARP VIP,在本例中为198.51.100.200 。

  • 单击 Save

  • 对列表中的每个规则重复该编辑,但来源为127.0.0.0/8的规则除外。

  • 单击 Apply Changes

  • 访问辅助节点的Firewall > NATOutbound选项卡,以确保出站规则更改在那里有反映。

注意

如果稍后添加其他本地接口,例如第二个LAN,DMZ等,并且该接口使用专用IP地址,则此时必须添加其他手动出站NAT规则。

完成后,规则更改将与CARP VIP的LAN出站NAT规则中的更改相似。


pfSense高可用性集群设置指南_第4张图片

CARP VIP的LAN出站NAT规则

其他NAT有关

如果有任何端口转发要使用WAN CARP VIP,必须使用Firewall > NATPort Forward 选项卡添加。 端口转发将按照常规方式工作,但Destination(目的地)将是WAN CARP VIP。

设置DHCP

集群节点上的DHCP服务器守护进程需要进行调整,以便它们可以协同工作。 这些更改将从主服务器自动同步到辅助服务器,因此与VIP和出站NAT一起,这些更改只需要在主节点上进行。

  • 导航到Services > DHCP ServerLAN 选项卡

  • 将DNS服务器列表中的第一个条目设置为LAN CARP VIP, 这里是 192.168.1.1

  • Gateway (网关)设置为LAN CARP VIP, 这里是 192.168.1.1

  • Failover Peer IP (故障转移对等IP)设置为辅助节点的实际LAN IP地址,这里是 192.168.1.3

  • 单击 Save

将DNS服务器和网关设置为CARP VIP可确保本地客户端正在与故障转移地址进行通信,而不是直接连接到任一节点。 这样,如果主节点失败,本地客户端将继续与辅助节点通话。

故障转移对等IP允许守护进程在该子网中直接与对等体通信,以交换诸如租约信息之类的数据。 当设置与辅助设备同步时,会自动调整此值,以便辅助节点返回主站。

在两个节点上,访问Status > DHCP Leases以查看状态。其中包含故障转移池状态,每个本地接口池将显示一行。 当两个节点正常工作时,两个都将指示normal(正常)状态,如下图所示。

../_images/ha-dhcp-status.png

DHCP故障切换状态

×××s 和其他服务

当配置×××(如Open×××或IPsec)时,选择WAN CARP VIP作为×××的接口,并确保远程对等体也使用CARP VIP作为对等地址构建隧道的另一侧。


对于其他本地服务、插件等,同样,如果服务将在两个节点上工作,我们建议使用CARP VIP进行绑定。


各类插件的高可用性支持各不相同。 检查插件的说明文档,以了解对高可用性的支持情况。


附加接口

重复配置其他本地接口所需的几个相同步骤:

  • 在两个节点上分配接口

  • 在两个节点上启用接口,在同一子网内使用不同的IP地址

  • 在新子网中添加CARP VIP(仅限主节点)

  • 添加防火墙规则(仅限主节点)

  • 为新子网添加手动出站NAT,利用CARP VIP进行转换(仅限主节点)

  • 使用CARP VIP为DNS和网关角色配置新子网的DHCP服务器(可选,仅主节点)


测试高可用性

在所有配置完成后,现在必须进行测试以验证有效性。 下面列出了系统各个方面的测试。 如果测试失败,请查看配置,并根据后面的帮助查找解决办法。


验证一般功能

在LAN上设置客户端,确保接收到DHCP IP地址,并显示LAN CARP VIP作为其网关和DNS服务器。 验证客户端是否可以解析主机名,访问Internet,是否按预期方式运行。

验证 XMLRPC 同步是否正常工作

XMLRPC配置同步可以通过几种方法进行测试。 最简单的方法是对主要的任何支持的区域(如防火墙规则)进行更改,然后查看更改是否会在辅助节点反映出来(一般只需要几秒钟)。

强制配置同步测试XMLRPC的手动方法是访问主节点上的Status > Filter Reload ,然后单击Force Config Sync(强制配置同步)。 状态将短暂更改,然后如果一切正常,将显示一条消息,指示同步已成功完成。


验证 CARP 是否正常工作

在两个节点上访问Status > CARP,以检查CARP是否正常工作。 所有CARP VIP的主节点将显示“MASTER”,而所有CARP VIP的辅助节点将显示“BACKUP”。 如果状态屏幕指示CARP被禁用,请点击Enable CARP (启用CARP)按钮。

验证状态同步是否正常工作

Status > CARP页面列出了指示状态同步状态的pfsync节点。 在两个节点上,这些值可能并不总是相同,但是它们将是接近的。 如果两者非常不同,则可能提示状态同步的问题。 如果它们相同或几乎相同,则状态同步正在工作。

测试故障转移

可以通过以下四种方式进行故障转移测试:


  • 单击主节点上的Status > CARP上的Enter Persistent CARP Maintenance Mode(持久CARP维护模式)。 这将永久禁用CARP,即使重新启动主节点。 要退出维护模式,请单击 Leave Persistent CARP Maintenance Mode (保持CARP维护模式),再次启用CARP。 这是一种比禁用CARP更容易和更快速的改变方式。

  • 拔下CARP VIP的接口(如WAN或LAN)的网络电缆。 这将触发故障切换, 将电缆重新插入以恢复。

  • 在主节点Status > CARP上单击Temporarily Disable CARP(临时禁用CARP)。 这将暂时禁用CARP,如果主节点重新启动,它将重新启动。 单击启用CARP重新打开它。

  • 关闭或重新启动主节点。

  

在任何上述测试期间,请访问辅助节点的的Status > CARP,以确认CARP VIP已经接管并显示MASTER状态。


在触发故障转移之前、期间和之后,测试从LAN上的客户端到Internet的连接,以确保连接在每个步骤中起作用。 下载文件,流媒体很有可能会持续不间断。 但基于VoIP的电话可能会有轻微的中断,因为它们不像其他电话那样会缓冲数据。


还有客户端尝试通过辅助节点运行时从DHCP获取IP地址。


如果已经配置了×××或其他服务,那么在测试过程中也要检查它们,以确保在辅助节点上建立的×××继续通过流量。


一旦主节点返回到“MASTER”状态,确保一切都继续工作。


高可用性故障排除

如果测试失败,请检查以下设置。


查看配置

在深入下面的技术细节之前,首先检查配置,确保所有步骤都正确。

CARP疑难解答

检查各接口状态

如果接口为CARP状态显示“INIT”,如下图所示,最常见的情况是这表明该VIP所在的接口没有连接任何东西。 如果没有连接到交换机或另一个端口,则该接口关闭,并且VIP无法完全初始化。 如果插入了线缆,那么请重新配置它。

pfSense高可用性集群设置指南_第5张图片

主接口上的CARP状态与断开接口

如果接口掉线并将保持掉线,例如防火墙尚未使用的接口,则从接口中删除CARP VIP,直到其准备就绪。 在掉线接口上配置CARP VIP会导致防火墙自身降级,导致故障转移不稳定。

冲突的VHID

VHID确定CARP IP使用的虚拟MAC地址。 pfSense中输入验证将不允许在一对防火墙上使用冲突的VHID,但是如果同一广播域中有多个群运行CARP,则可能会产生冲突。 VRRP还使用相同的虚拟MAC地址方案,因此使用与CARP IP VHID相同的VRID的VRRP IP也会产生相同的MAC地址冲突。


在WAN接口上使用CARP时,也意味着上游网络/ ISP使用的VRRP或CARP也可能发生冲突。 请确保使用该广播域上的ISP没有使用的VHID。


除了创建可能干扰流量的MAC冲突之外,它还可能会干扰CARP VIP状态。


子网掩码不正确

CARP VIP的子网掩码必须与同一子网的接口IP地址上的子网掩码相匹配。 例如,如果接口IP地址为192.168.1.2/24,则CARP VIP必须使用/ 24的CIDR掩码。

二层交换机问题

通常,二层交换机问题本身表现为显示一个或多个CARP VIP的“MASTER”状态的两个单元。如果发生这种情况,请检查以下项目:

  • 确保两个接口(WAN,LAN等)连接到正确的二层交换机的 VLAN。例如,确保两个设备的LAN端口都连接到同一个交换机的 VLAN。

  • 验证两个节点是否可以在每个网段上相互通过(例如通过ICMP回显)。防火墙规则可能需要添加到WAN以适应这种测试。

  • 如果插入到单独的交换机中,请确保交换机正确中继和传递广播/组播流量。

  • 如果正在使用调制解调器/ CPE背面的开关,请尝试使用真正的开关。这些内置交换机通常不能正确处理CARP流量。通常将防火墙插入适当的交换机,然后上传到CPE将消除问题。

  • 禁用IGMP Snooping或其他组播限制和检查功能。如果它们已经关闭,请尝试启用该功能并再次禁用该功能。


XMLRPC疑难解答

如果XMLRPC同步尝试失败,则会在GUI中生成通知以引起注意,如下图所示。 通知通常包含有关为什么失败及指向修复的信息,如果还不足以排除故障,请检查本节中的其他项目。

pfSense高可用性集群设置指南_第6张图片

XMLRPC 同步问题通知  

检查系统日志

XMLRPC故障详细信息会记录到主系统日志(Status > System LogsGeneral 选项卡)。 通常错误都会明确显示,例如身份验证失败将指示在同步设置上为管理员用户输入的密码不正确。 如下图所示,同步尝试期间发生超时, 在这个例子中,是由于缺少防火墙规则。

../_images/ha-xmlrpc-fail-log.png

XMLRPC 同步问题日志记录

检查防火墙日志

在辅助节点上访问Status > System LogsFirewall 选项卡。 检查日志中的条目未能到达GUI端口上的辅助同步接口,如下图所示。 如果流量显示为阻止,请根据需要调整同步接口规则。

../_images/ha-xmlrpc-fail-fwlog.png

XMLRPC 同步问题防火墙日志访条目

检查管理员用户

访问 System > User Manager,并确保在两个系统上启用管理员用户,并且两个系统上的管理员密码都相同。 访问System > High Avail Sync,并重新检查是否正确输入了管理员用户名和密码。


在pfSense2.4及更高版本中,确保同步用户存在于辅助节点上,并具有“System - HA node sync”权限。


验证连接

检查Status > Interfaces,并确保同步接口在两个单元上显示链接。 如果没有链路,请确保两台设备之间连接了一条电缆。  如果链路仍然无法实现,请尝试在两个节点之间使用小型交换机或VLAN。


向Sync接口添加防火墙规则以允许ICMP回显请求,然后尝试从一个防火墙ping另一个防火墙,以确保它们可以在第3层彼此相遇。如果不能,请仔细检查接口IP地址和子网掩码设置, 以及布线。


pfsync疑难解答

如果pfsync节点在Status> CARP下不排队,则提示状态尚未同步。

检查防火墙规则

在两个节点的Status > System LogsFirewall选项卡上检查防火墙日志。 如果存在任何pfsync协议流量,则同步接口上的防火墙规则可能不正确。


查看Firewall > Rules 的 Sync 接口选项卡的规则。 确保规则将pfsync协议流量或任何协议的流量传递到任何目的地。 相应地调整规则,并再次检查日志和CARP状态,看看它是否开始工作。


验证连接

请参阅上面的验证连接以检查节点之间的连接。

检查接口

如果状态似乎同步,但故障切换仍然不能顺利完成,请检查Interfaces > (Assign) ,并确保接口全部按照物理名称排列。 在pfSense2.2及更高版本中,状态绑定到接口,因此,如果LAN接口在一个节点上是igb0,而在另一个节点上是igb3,则状态将不会排队。 调整接口,使它们在两个节点上是相同的。


本地服务疑难解答

DNS解析

如果本地客户端无法从集群中的CARP VIP获取DNS响应,请检查以下项目:

  • 如果使用默认DNS解析器(unbound),请访问Services > DNS Resolver,然后单击主节点上的保存,确保默认值得到充分尊重。

  • 如果使用DNS解析器或DNS转发器,请确保守护程序配置为侦听所有接口或至少本地主机和内部CARP VIP。

  • 确保本地接口防火墙规则通过TCP和UDP端口53到用于本地DNS的CARP VIP。

  • 确保防火墙本身在System > General下配置了DNS服务器,特别是如果使用DNS转发器(dnsmasq)而不是DNS解析器(未绑定)。


DHCP

如果DHCP故障转移池状态未显示为“normal(正常)”,则需要检查以下几项:


  • 确保两台设备在正确的接口上连接到相同的交换机/子网

  • 验证该接口上两台设备之间的连接

  • 确保故障转移对等IP地址已正确配置

  • 确保有问题的接口上有CARP VIP

  • 确保主节点上的CARP VIP的 skew为0或1,并且辅助节点的 skew为100或更高。

  • 如果一切都失败:

  • 可以在两个节点的Status > Services 上单击fa-stop-circle停止DHCP服务 

  • 在两个节点上访问 Diagnostics > Command 

  • 在两个节点的“Shell Execute”框中运行以下命令:rm /var/dhcpd/var/db/dhcpd.leases*

  • 在两个节点的Status > Services 上单击fa-play-circle启动DHCP服务 



在高可用性集群上升级pfSense


查看更新日志和升级指南

在开始升级任何部分之前,请首先查看pfSense博客和更新日志,确定版本变化及升级注意事项。


备份

在开始之前,先在两个节点的 Diagnostics > Backup/Restore 下备份各自的配置。

注意

备份是快速解决各类问题的最好方法。


升级辅助节点

首先在辅助节点上执行升级。 这样,如果升级失败,则不会有中断,如果需要重新安装,则可以毫不费力地完成。

测试辅助节点

一旦辅助节点系统启完成后,登录并确认它正在运行。 如果所有服务都处于活动状态,CARP状态为OK,那么是时候测试了。 通过将主节点置于维护模式(请参阅测试故障切换)并观察辅助节点上发生的情况,强制从主节点进行故障切换。 如果辅助接管OK并且流量继续流动,则可以继续。

升级主节点

主节点处于维护模式时,无需额外的干扰即可升级。 启动操作系统升级,并让防火墙重新启动。 一旦重新启动,请确认本地服务按预期运行,然后将节点退出维护模式。

测试主节点

使用当前操作系统和活动的两个节点,运行最终测试以确保服务正常运行,流量正在流动、CARP、DHCP和其他状态区域都正常运行。

翻译自pfsense book