Skip to main content
intermediate Email gate

FortiGate HA Setup and Troubleshooting Cheat Sheet (Free PDF)

Reviewed 2026-10-13

FortiGate high availability (HA) joins two identical FortiGates into one cluster with the FortiGate Clustering Protocol (FGCP). One unit forwards traffic and the other waits, so a firewall failure doesn’t take the network down. This free FortiGate HA setup and troubleshooting PDF gives you the CLI to build an active-passive pair, the five commands to run first when it misbehaves, and 12 worked faults, from split brain to configs that won’t sync.

FortiGate HA topology: FGT-A primary and FGT-B secondary with two heartbeat links between a WAN switch and a LAN switch
A two-firewall FortiGate HA cluster with shared WAN and LAN and two heartbeat links.

What is HA in a FortiGate firewall?

FortiGate HA lets a cluster keep providing FortiGate services when one unit fails. Fortinet’s own words for FGCP are failover protection: the cluster carries on even when one device hits a problem that would take a standalone FortiGate offline.

In the active-passive design this PDF uses, one member is the primary and forwards all traffic. The other is the secondary and stays on standby. Both share the same WAN and LAN addresses, and after a failover the new primary takes over the same virtual MAC addresses, so neighbouring gear treats it as the same device.

The members must match. Fortinet’s HA formation guide lists the same model and the same hardware configuration as the starting point.

HA behaviour here follows Fortinet’s FortiOS 7.6 documentation (reviewed 2026-10-12). Syntax can differ between builds, so check it with ? on yours.

One limit to remember. HA protects against a firewall failure. The ISP, the WAN switch, the LAN switch and shared power are still single points of failure. Don’t describe it as complete end-to-end availability.

FortiGate HA setup: how to configure HA in a FortiGate firewall (CLI)

The PDF builds one small-office FortiGate HA configuration. FGT-A starts as primary and FGT-B is the secondary. Both connect to a shared WAN switch (port1) and a shared LAN switch (port2). Two direct cables link port3 and port4 as heartbeat, and port5 is kept for management.

PortRoleFGT-AFGT-B
port1WAN203.0.113.2/29 (shared)203.0.113.2/29 (shared)
port2LAN10.10.10.1/24 (shared)10.10.10.1/24 (shared)
port3 and port4Heartbeat HB1 and HB2Direct cablesDirect cables
port5Reserved management10.10.99.11/2410.10.99.12/24

The addresses are documentation examples. Configure FGT-A first, through the console:

config system global
    set hostname "SME-FGT-A"
end
config system ha
    set mode a-p
    set group-id 10
    set group-name "SME-HA"
    set password "<same-strong-HA-secret>"
    set hbdev "port3" 100 "port4" 50
    set priority 200
    set override disable
    set monitor "port1" "port2"
    set session-pickup enable
    set session-pickup-connectionless enable
end

Use the same block on FGT-B, with the hostname SME-FGT-B and priority 100. Replace every <placeholder>. Don’t paste angle brackets literally.

SettingWhat it does
mode a-pActive-passive operation
group-id, group-name, passwordThe shared cluster identity. Pick a group ID that doesn’t clash with other clusters nearby
hbdevThe dedicated heartbeat ports. The 100 and 50 are heartbeat interface priorities, not election priorities
priorityA per-unit election factor, different on A and B
override disableStops priority-driven takeover after recovery. It doesn’t promise a permanent primary
monitorWatches the listed physical links, not application or internet reachability
session-pickupCopies supported session state to the peer. The connectionless option adds UDP and ICMP

The order matters. Bring FGT-A up first. Connect the two heartbeat cables once A is healthy. Then confirm membership before you attach B’s data cables:

get system ha status
diagnose sys ha checksum cluster
execute ha manage ?

Check both serial numbers, the intended roles, two visible members and an in-sync config. Back up the config. Only then connect B’s port1 and port2, watch the event log and test traffic. Never join a peer that carries unknown production configuration.

Want to build this pair yourself instead of reading it? The FortiGate NSE4 Lab Workbook covers HA clustering on ready-made EVE-NG topologies, with CLI and GUI outputs. Fortinet’s active-passive setup guide shows the GUI route.

FortiGate HA setup order: configure FGT-A, prepare FGT-B, confirm with get system ha status, attach data cables
Four steps build the FortiGate HA pair in the right order.

FortiGate HA priority and override: who becomes primary?

Priority runs from 0 to 255 and defaults to 128. A higher number wins. Override is off by default, and when it’s on, priority beats uptime in the election. Fortinet’s primary unit selection criteria page says a new election runs when a unit joins or leaves and whenever a monitored interface changes state.

In the PDF, A gets 200 and B gets 100 with override disabled. That stops A from grabbing the primary role back the moment it recovers. It still doesn’t guarantee A stays primary. Priority alone doesn’t explain every election, so don’t assume the higher number always wins. Read the selection reason the device reports:

diagnose sys ha history read

How to access the secondary FortiGate firewall in HA (GUI and CLI)

You have two ways in, and the PDF sets up both.

The CLI, through the primary. List the members, then jump to the secondary:

execute ha manage ?
execute ha manage <index> <admin-user>

Use the index your device shows. Don’t assume it’s 1. Type exit to come back.

The GUI or SSH, through a reserved management interface. Reserve port5 and give each unit its own address:

config system ha
    set ha-mgmt-status enable
    config ha-mgmt-interfaces
        edit 1
            set interface "port5"
            set gateway 10.10.99.1
        next
    end
end
# On FGT-A only:
config system interface
    edit "port5"
        set ip 10.10.99.11 255.255.255.0
        set allowaccess ping https ssh
    next
end
# On FGT-B: repeat the interface block with 10.10.99.12

With https allowed, you open each unit’s GUI at its own management IP. Reserved management settings aren’t synchronized, so set them on both units. Fortinet describes this in its out-of-band management guide.

Can’t reach the secondary? Check the peer’s own IP, allowaccess, the gateway, the management VLAN and any trusted-host rules. Keep management on an isolated admin network and off the internet. Leave ha-direct off unless you’ve designed per-unit logging on purpose.

FortiGate HA troubleshooting: status commands for your first five minutes

Check FortiGate HA status first, and capture before you change anything:

get system status
get system ha status
show full-configuration system ha
diagnose sys ha history read
diagnose sys ha checksum cluster

Write down both serial numbers, the model, the firmware build, each unit’s role, the member count, the config status, the monitored links and the selection reason. Then compare the incident time with the event logs and recent changes. For a wider command list, see our FortiGate CLI commands cheat sheet and Fortinet’s CLI troubleshooting cheat sheet.

Then pick the branch that matches the symptom:

SymptomStart here
Only one member is visibleFormation, heartbeat and compatibility
Both members visible, status is out-of-syncConfiguration checksum comparison
The primary keeps changingElection history, monitored links, resource health
New primary looks healthy, applications failSessions, routes and upstream switching
Secondary management doesn’t answerThe per-member management path

A healthy cluster passes four separate tests: the members can talk, the checksums agree, session state reaches the peer, and the new primary forwards your real application traffic. Passing one doesn’t prove the other three.

FortiGate HA out of sync: find the difference before you force a sync

Two members show up, but one says out-of-sync. Compare checksums from the top down:

diagnose sys ha checksum cluster
diagnose sys ha checksum show global
diagnose sys ha checksum show root
diagnose sys ha checksum show root firewall.policy

If global agrees, root differs and firewall.policy differs, you’ve found the table to inspect. Then compare the actual policy entries on both units. Replace root with the affected VDOM. Fortinet’s community has a good walkthrough of troubleshooting a checksum mismatch.

Back up both units first. Decide which config is the authoritative one, fix the specific cause, and let the sync settle. Recalculating checksums doesn’t repair different configs, so treat it as a later step:

diagnose sys ha checksum recalculate

Don’t reach for a forced sync (execute ha synchronize start) or a rebuild of the peer just to clear the label. And don’t treat every difference as a fault. Per-unit settings such as the reserved management interface differ by design.

After an interrupted upgrade, capture get system status on both members with the full build numbers and check the upgrade logs and the supported upgrade path. If sync still fails on matching builds, collect a short hasync debug for Fortinet support.

FortiGate split brain, repeated failover and HA members that won’t join

A replacement unit won’t join. Compare the model, the exact firmware build, HA mode, group settings, HA password and heartbeat ports. Check the cables and link counters on both ends. Keep the new unit’s data ports unplugged until its config and role are right.

Split brain. A switch outage hits both heartbeat paths and both units claim primary. Fortinet describes the result: two primaries using the same IP and virtual MAC, which causes address conflicts. A ping on a data port doesn’t prove the heartbeat works. Use the console on each unit, isolate the unit that shouldn’t forward, save both configs, restore the heartbeat and decide which config is authoritative before you reconnect.

Repeated failover or an unexpected failback. A monitored uplink may be flapping, or a recovered unit may have taken the primary role. Read the HA history and the selection reasons, then line them up with link, reboot and resource logs. Fix the flapping path. Don’t raise the heartbeat thresholds just to hide packet loss.

For a quick debug capture, always stop what you start:

diagnose debug reset
diagnose debug console timestamp enable
diagnose debug application hatalk -1
diagnose debug application hasync -1
diagnose debug enable
# Observe briefly, then always stop:
diagnose debug disable
diagnose debug reset

hatalk helps with HA communication and hasync with synchronization. Verbose output adds load and can expose configuration details, so clean up captures before you share them.

FortiGate HA troubleshooting: failover works, but applications don’t

A role change is only part of recovery. Four faults on the reference network show how often the cluster is fine and the path isn’t:

FaultWhat happensWhat to check
FGT-A loses its LAN cableA’s port2 drops while B’s stays upBoth port2 states and HA history. A monitored link can trigger the takeover
LAN switch loses powerBoth LAN links fail togetherThe switch and its power. A firewall role change can’t repair a shared failed switch
ISP fails but port1 stays upThe ISP router has link, the internet is downThe ISP next hop and a remote target. HA monitors the physical link, so use a second WAN with SD-WAN health checks
B becomes primary, users can’t browseNew HTTPS sessions failB’s port1 and port2 cabling, switch VLANs, routes, policy logs and upstream MAC learning
FortiGate HA troubleshooting: four faults, LAN cable loss, LAN switch power loss, ISP failure and B primary with no browsing
Where the failure sits decides whether FortiGate failover can help.

Three more cases come up all the time:

  • TCP survives, voice drops. Check session-pickup and session-pickup-connectionless, and remember that config sync and session sync are separate. Session pickup helps supported sessions continue. It doesn’t promise zero interruption for every application, and a ping can’t prove voice works.
  • New primary is healthy, traffic is blackholed. Capture on ingress and egress and check routes, next hops, VLANs, LACP and return routing. A failover uses virtual MACs and gratuitous ARP, so also check the upstream switch’s MAC table. Don’t clear all sessions or switch off security profiles without evidence.
  • Secondary unreachable by SSH. Use execute ha manage, then repair the per-member management path as described above.

Capturing at the packet level is the fastest way to split a firewall problem from a switching one. Our network troubleshooting commands PDF covers the capture basics.

How to failover a FortiGate firewall safely

Test failover on purpose, before an outage does it for you. Don’t pull all the heartbeat cables to do it. Use a documented test method for your exact build, and run it in an isolated lab first.

  • Before: backups, console access, the intended primary, a healthy peer, a synchronized config, test clients and a rollback plan.
  • During: record the trigger time, the role-change time, packet loss, session behaviour and how long the application takes to recover.
  • After: confirm membership, config sync, interfaces, routes, VPNs, application traffic and management access. Repeat in the reverse direction only if your test plan says so.

Agree the acceptable recovery time with the owner of the business system, and don’t promise a universal number. Measure the real thing, such as an ERP login, a payment or a voice call. A calm dashboard and a successful ping are supporting checks, not acceptance. On a production pair, work in a maintenance window with console access and expect some interruption.

These actions change state, so each needs a planned change or a lab: checksum recalculation, forced synchronization, priority or override edits, a reboot, session deletion and a manual failover. An NSE4 lab workbook gives you a cluster where breaking things is safe.

Four tests of a healthy FortiGate HA cluster: members, checksums, session state and real application traffic
A healthy FortiGate HA cluster passes four separate tests.

Where does this free PDF stop?

It teaches a method and one two-unit design. It doesn’t give you a cluster to break. Its own scope is a standard two-member active-passive FGCP cluster, so active-active, FGSP, public-cloud HA and FortiGate 6000 and 7000 designs need their own guides. You read the configs here. You don’t run them.

The FortiGate lab workbook with EVE-NG scenarios fills that gap. Chapter 1 covers HA (active-passive and active-active) and firmware management and upgrades. Chapter 4 covers VPN redundancy and failover. You get ready-made EVE-NG topologies, CLI and GUI outputs, verification steps and a free 25-page sample before you decide. Need the lab itself first? Read how to add a FortiGate VM to EVE-NG. New to the platform? Start with What Is FortiGate?.

Free FortiGate HA setup and troubleshooting PDF compared with the FortiGate NSE4 Lab Workbook: read the method, then run it
Read the HA method in the PDF, then run it on a cluster in the workbook.

Frequently asked questions

What is HA in a FortiGate firewall?
FortiGate HA (high availability) joins two identical FortiGate firewalls into one cluster using the FortiGate Clustering Protocol (FGCP). One unit forwards traffic as primary while the other waits as secondary. According to Fortinet's FortiOS 7.6 documentation, the cluster keeps providing service when one unit fails. It doesn't protect against ISP, switch or power failures.
How do I set up and configure HA on a FortiGate firewall?
To set up FortiGate HA in the CLI, run config system ha on both units with the same mode (a-p), group-id, group-name and password but different priorities, then set the heartbeat ports (hbdev) and monitored interfaces. Configure the primary first, connect the heartbeat cables once it's healthy, verify with get system ha status, then connect the peer's data cables.
What are the requirements for a FortiGate HA cluster?
A FortiGate HA cluster needs members with the same model and hardware configuration, according to Fortinet's HA formation guide. They also need the same exact firmware build, HA mode, group settings and HA password, plus working heartbeat links. Check each of these first when a replacement unit won't join the cluster.
How do I access the secondary FortiGate in an HA cluster?
From the primary FortiGate, run execute ha manage ? to list the members, then execute ha manage to open the secondary. For GUI or SSH access, enable a reserved management interface with ha-mgmt-status enable and give each unit its own IP with https or ssh allowed. These settings aren't synchronized, so set them on both units.
How do I check FortiGate HA status?
Run get system ha status to see each member's role, serial number and configuration state. Run diagnose sys ha history read for role changes and the primary selection reason, and diagnose sys ha checksum cluster to confirm the configuration is in sync. Record both serial numbers and firmware builds before changing anything.
What is the default HA priority on a FortiGate, and what does override do?
According to Fortinet's FortiOS 7.6 documentation, the default HA priority is 128, on a scale of 0 to 255, and a higher number wins. Override is disabled by default. When override is enabled, device priority beats uptime in the primary election. Check why a unit won with diagnose sys ha history read.
How do I fail over a FortiGate firewall safely?
Test failover in an isolated lab first by powering off the current primary FortiGate. Record the role-change time, packet loss and application recovery, then confirm the unit rejoins in sync. Never pull all heartbeat cables as a normal failover test. On a production pair, use a maintenance window, console access and a rollback plan.
Why is my FortiGate HA cluster out of sync?
An out-of-sync FortiGate HA cluster means the members' configurations differ somewhere. Run diagnose sys ha checksum cluster, then compare the global, root and table checksums (for example root firewall.policy) on both units. Fix the specific difference. Recalculating checksums with diagnose sys ha checksum recalculate doesn't repair different configurations.
What is split brain in FortiGate HA, and how do I fix it?
Split brain happens when FortiGate cluster members can't talk over the heartbeat links, so each assumes the primary role and uses the same IP and virtual MAC address. According to Fortinet's documentation, that causes address conflicts. Isolate the unit that shouldn't forward, restore the heartbeat, then decide which configuration is authoritative before reconnecting.
Does FortiGate HA protect against an ISP failure?
No. FortiGate HA monitors physical links, so a firewall can see its WAN port as healthy while the ISP is down, and switching to the peer on the same ISP path won't help. Use an independent second WAN with SD-WAN health checks. HA only covers a firewall failure, not ISP, switch or power faults.
What is the difference between active-passive and active-active FortiGate HA?
In active-passive FortiGate HA, the primary forwards all traffic and the secondary waits on standby. In active-active, the cluster also spreads some traffic processing, such as content inspection, across members while still failing over. SMEnode Labs' PDF covers active-passive. See Fortinet's FortiOS HA documentation for active-active.
Where can I download a FortiGate HA setup and troubleshooting cheat sheet PDF?
SMEnode Labs offers a free FortiGate HA setup and troubleshooting cheat sheet PDF. It covers an active-passive setup with CLI, the first five commands to run when HA misbehaves, and 12 troubleshooting scenarios, from split brain to out-of-sync configurations and failover problems. Schema

Reviewed by

CCDE/CCIE

How to cite this resource

SMEnode Labs (2026). FortiGate HA Setup and Troubleshooting Cheat Sheet (Free PDF). SMEnode Labs. https://smenode-labs.com/free-pdf/cybersecurity/fortigate-ha-setup-troubleshooting/

APA

SMEnode Labs. (2026). FortiGate HA Setup and Troubleshooting Cheat Sheet (Free PDF). SMEnode Labs. https://smenode-labs.com/free-pdf/cybersecurity/fortigate-ha-setup-troubleshooting/

BibTeX

@misc{smenodelabs2026,
  title = {FortiGate HA Setup and Troubleshooting Cheat Sheet (Free PDF)},
  author = {{SMEnode Labs}},
  year = {2026},
  url = {https://smenode-labs.com/free-pdf/cybersecurity/fortigate-ha-setup-troubleshooting/},
  note = {SMEnode Labs}
}