Grafana high availability

Grafana high availability runs two or more active-active servers behind a load balancer on a shared MySQL or PostgreSQL database. This page covers the decisions, build sequence, effort drivers and checks for a setup your team can operate.

On this page

Grafana high availability starts with a shared database, not only extra servers

An operations or platform team that needs dashboards and alerts to survive a node failure should start with the database, not the server count. Grafana high availability means two or more active-active Grafana servers behind a load balancer, sharing a MySQL 8.0 or later or PostgreSQL 12 or later database, with database-backed auth tokens so any node can serve any user. If one node fails, the load balancer routes sessions to a surviving node and users keep their logins. Adding servers without a shared database does not achieves this, because each node would hold its own configuration, users, folders and sessions.

SQLite is the default store for Grafana configuration, and the Grafana installation documentation states that SQLite does not scale for production. A single-node SQLite deployment is useful for evaluation, but it cannot be the foundation of an HA design. Moving to MySQL or PostgreSQL is therefore a prerequisite, and it should be decided before the first production dashboard is built. The team should confirm which database engine and version its platform standards already support, which backup and restore tooling covers it, and who owns its patching and failover. Those answers determine whether the database itself needs its own high availability design, which is a separate concern from Grafana's.

Three things make Grafana HA harder than it looks. First, some state lives outside the database, such as local plugin directories, file-based provisioning, custom certificates and any image or asset files on disk, so every node must receive the same copies. Second, alert notifications can fire from every node, which produces duplicate pages unless alerting is configured to avoid it; the Grafana HA documentation says this needs additional configuration. Third, Grafana Live has limitations in HA setups, so real-time streaming features should be tested rather than assumed to behave as they do on a single node. Each of these needs an owner and a test before go-live.

Small sizing guidance does not settle HA capacity. The installation documentation sizes small deployments under 25 concurrent users at 2 cores and 2 to 4 GB of RAM, but that figure describes one server. An HA pair or group multiplies the compute and memory footprint, adds load balancer and database capacity, and changes how data source queries are spread across nodes. The team should ask for a sizing estimate based on its real user count, dashboard query load and alert rule count, and should load test the proposed topology with representative dashboards before relying on it.

Before committing to an architecture, the team should confirm four things in its own environment: the database engine and version, the load balancer's session handling for Grafana, where plugins and provisioning files are stored, and how alert notifications will be deduplicated. Each answer should be written down and tested in a non-production copy. Treating the database as the first design decision keeps the rest of the HA plan honest, because it determines what state each node shares and what each node must keep locally.

Which components a Grafana HA design depends on

A Grafana high availability design is only as strong as the weakest component it depends on. The cards below cover the Grafana nodes, the load balancer, the shared database, node-local state, provisioning files, alerting, Grafana Live and the data sources Grafana queries, so each can be checked against the official HA documentation for your version.

Grafana server nodes

Two or more active-active Grafana servers serve the same dashboards, users and configuration, so any node can handle a request. Each node must point at the same database and run a matching version and plugin set. Confirm in the official HA guide which settings must be identical across nodes and how your chosen version handles sessions and auth tokens.

Load balancer in front of nodes

The load balancer distributes user traffic across Grafana nodes and removes unhealthy ones from rotation. If it is a single instance, the whole service is unreachable even when every Grafana node is healthy. Check how it handles TLS termination, session affinity needs for your version, and the health check endpoint you will use to detect a failed node.

Shared MySQL or PostgreSQL database

The shared database holds Grafana configuration, users, dashboards, folders and database-backed auth tokens. Grafana documents SQLite as unsuitable for production, so MySQL 8.0 or later or PostgreSQL 12 or later is required for high availability. A single database instance without replication or failover becomes the one component that stops every node at once.

File and plugin state on each node

Each node keeps local files, including installed plugins and any data stored on disk. Plugin versions and local files that are not shared can differ between nodes and produce inconsistent behavior. Confirm in the HA documentation which state must be kept in sync, how plugins are installed on every node, and whether any local data path needs to be shared storage.

Provisioning files across nodes

Provisioned data sources, dashboards, plugins and alerting resources are loaded from files at startup. If the files differ between nodes, each node can present different data sources or alert rules. Use one source of truth for the provisioning directory, deliver it identically to every node, and confirm how your version reloads provisioned resources after a change.

Alerting engine and duplicate notifications

Grafana Alerting evaluates rules on the nodes, and without extra configuration several nodes can send the same notification. The HA documentation says alerting needs additional configuration to avoid duplicates. Confirm the deduplication approach for your version, how alert state is shared, and how you will test that one contact point receives one notification during a node failure.

Grafana Live limits in HA

Grafana Live provides real-time streaming updates to browsers. The HA documentation lists limitations for Grafana Live when several nodes run behind a load balancer, so live panels may not behave the same on every node. Confirm the current limitations for your version, decide whether teams depend on live streaming, and test those views through the load balancer.

Data sources Grafana queries

Grafana itself is only the query and visualization layer. Prometheus, Loki, SQL databases and other sources hold the data, and a dashboard is unavailable when its source is down even if every Grafana node is healthy. Confirm the high availability design of each data source, its query limits, and the credentials each Grafana node uses to reach it.

Grafana high availability decisions that shape the design

This table compares the main design choices for a highly available Grafana deployment and the operational cost each one adds. Read each row as a decision to settle before build, starting with the database and load balancer, which the rest of the design depends on. The main takeaway is that the identity provider and alerting approach affect feature availability and duplicate notifications, so they should be decided early rather than after go-live.

DecisionWhen it fitsWhat it costs operationally
Database engine: MySQL 8.0 or laterTeams that already run MySQL with tested backup and failover practicesSchema upgrades run against a shared database, so backups and restore tests must cover it
Database engine: PostgreSQL 12 or laterTeams with existing PostgreSQL operations skills or a preference for itNeeds its own backup, failover and version lifecycle alongside Grafana upgrades
Managed or self-run databaseManaged suits teams without DBA capacity; self-run suits strict data placement rulesManaged adds service fees and provider-defined maintenance windows; self-run adds patching and failover ownership
Deployment platform: VM packagesStable estate of virtual machines managed by configuration toolingEach node needs patching, service configuration and sync of plugins and provisioning files
Deployment platform: Docker images or Helm chart on KubernetesTeams already operating Kubernetes with GitOps or standard ingressRequires cluster skills, persistent storage decisions and chart version tracking
Load balancer and session handlingTwo or more active nodes where users must reach any nodeHealth checks must match Grafana's endpoint; confirm the chosen sticky or non-sticky behavior with testing
Identity provider and edition featuresLDAP, generic OAuth, Entra ID, Okta or GitHub work in open source; SAML and team sync need Enterprise or CloudEnterprise adds licensing cost and a license to manage; open source requires role mapping to be designed by hand
Alert notification approach across nodesAny HA setup sending alerts, since each node evaluates rulesNeeds extra configuration to avoid duplicate notifications; test with a forced node failure
Grafana Live featuresTeams relying on live streaming dashboards in productionGrafana documents limitations in HA, so confirm which Live features behave correctly before depending on them

Build sequence for Grafana high availability

This sequence takes a single Grafana server to two or more active-active nodes behind a load balancer, sharing one MySQL or PostgreSQL database, with each step closed by a check the team can run and record.

  1. Confirm the target Grafana version and support window

    Choose the Grafana minor release the environment will run and record its support window before anything is built. Grafana's upgrade guidance says each minor release is supported for 9 months and the last minor release of a major version for 15 months, so the team should check where the chosen version sits in that cycle and plan its next upgrade against it. Confirm the release notes for breaking changes and check that every data source plugin in scope supports that version. The step is done when the version, its end-of-support date from the official upgrade guidance, and the plugin compatibility list are written into the change record and approved by the platform owner.

  2. Provision the shared database and its backups first

    Before any Grafana node is installed, the platform team provisions the shared MySQL 8.0 or later, or PostgreSQL 12 or later, instance that all nodes will use. SQLite does not scale for production, so this database is a requirement for high availability, not an option. The team should confirm the database's own high availability design, its network access rules from the planned Grafana subnets, its backup schedule, and a tested restore procedure with the database owner. The step is done when a restore has been rehearsed into a separate instance and the team has confirmed the restored data can be read by a test client.

  3. Move configuration off SQLite on a single node

    Start with one Grafana node installed from the chosen package, Docker image or Helm chart. Point its database settings at the shared MySQL or PostgreSQL instance using a dedicated database user with only the privileges Grafana needs, and keep the database credentials in a secrets store, not in plain configuration files. Restart the node and confirm that Grafana migrates its schema without errors in the logs. Then migrate any existing SQLite data if the instance is not new. The step is done when a query against the database shows Grafana's tables and a recent write, and the login page and a test dashboard load from that node.

  4. Build the second node from identical packages

    Build the second Grafana node from the same package version, image digest or Helm chart release as the first, using the same configuration file and the same database connection. Copy or synchronize the provisioning files for data sources, dashboards, plugins and alerting resources so that both nodes load the same definitions at startup. Provisioning files are loaded when Grafana starts, so any drift between nodes will persist until someone corrects it. The step is done when a diff of the two nodes' configuration and provisioning directories shows no differences, the installed plugin list and versions match, and both nodes report the same Grafana version on their health endpoints.

  5. Configure load balancer health checks and TLS

    Place both nodes behind the chosen load balancer and configure a health check against Grafana's health endpoint, with a check interval and failure threshold agreed with the network team. Terminate TLS at the load balancer or at each node according to the organization's certificate standard, and make sure the secure cookie and proxy settings in Grafana match the public hostname users will see. Confirm that the load balancer removes a node from rotation when its health check fails. The step is done when a request through the load balancer returns a valid certificate and a successful login, and a test that stops one node shows traffic moving to the remaining node without a manual change.

  6. Enable and verify database-backed auth tokens

    Confirm that the Grafana configuration stores authentication tokens in the shared database, which is what allows a session started on one node to be accepted by the other. Log in through the load balancer, then force subsequent requests to reach the second node, for example by stopping the first node briefly or by testing each node's address directly with the same session. Repeat with a second user and with the session from a different browser. The step is done when a login made on one node is accepted on the other, and a query against the session or token table in the shared database shows the entries created by that login.

  7. Configure HA alerting and confirm single notifications

    Grafana's documentation states that alerting needs additional configuration in an HA setup to avoid duplicate notifications, so follow the official high availability alerting guidance for the installed version and apply it to both nodes. Configure a test alert rule, a contact point and a notification policy, then trigger the alert and watch the receiving channel. The team should record which node sends each notification and confirm that the contact point receives one message per firing alert, not one from each node. The step is done when a controlled test alert produces exactly one notification at the receiver and the alert state is consistent when viewed on either node.

  8. Validate Grafana Live for the team's use

    Grafana documents limitations for Grafana Live in high availability setups, so the team should check exactly which live features its users depend on, such as live dashboard updates or streaming panels, and test them through the load balancer with at least two users on different nodes. Compare what users see with what they expect and decide whether any live feature needs a fallback, such as periodic refresh, or a documented limitation for users. Confirm the outcome with the team that will use the dashboards. The step is done when a written list of Grafana Live features in use records the observed behavior on the two-node setup and the accepted limitations have been signed off by the dashboard owners.

  9. Run the failover checks from the verification section

    Run the full set of failover tests defined in the verification section of this page against the completed two-node setup. These cover stopping each node under a normal workload, restarting the database connection, rotating a certificate, and confirming alert delivery during a node loss. Record the observed results, any errors in the Grafana and load balancer logs, and the time each test took to recover as measured by the team. Any failed check goes back to the step that owns it, and the sequence is repeated from that step. The step is done when every verification test has a recorded pass with its evidence attached to the change record.

How HA differs on VMs, Kubernetes and air-gapped networks

On virtual machines, Grafana is installed from the vendor's packages for Debian, Ubuntu, RHEL, Fedora, SUSE, macOS or Windows, and each node runs its own service with its own configuration file. Small single-node deployments, under 25 concurrent users at 2 cores and 2 to 4 GB of RAM, are sized differently from HA nodes. In HA, the larger change is the database and load balancer work, not the server install. Shared state lives in MySQL 8.0 or later or PostgreSQL 12 or later, so the database is the shared storage layer.

What changes on VMs:

  • Node identity: each host has its own hostname and certificate, but every node must run the same version, plugin set and provisioning files. Verify this with configuration management and a configuration diff check.
  • Shared storage: no shared file system holds state, but provisioning files and custom plugins must exist on every node.
  • Probes: point the load balancer health check at the health endpoint documented for your version, and confirm the exact path and expected response.
  • Load balancing: users must be able to reach any node because auth tokens are database-backed. Confirm the documented Grafana Live limitations before adding session affinity.
  • Patching: drain one node from the load balancer, apply the package update, verify it, then return the node to service and repeat.

Confirm with the vendor documentation the supported database versions, the HA configuration settings for your release and how alerting avoids duplicate notifications.

How alerting avoids duplicate notifications across Grafana nodes

In a Grafana high availability setup, every node runs the alerting engine, so each node can evaluate the same alert rule and send the same notification. The Grafana high availability documentation states that alerting needs additional configuration to avoid duplicate notifications, so treat this as a required build step rather than an optional tuning exercise. Before the first node goes live, confirm for your Grafana version which alerting settings the documentation requires, how the nodes find each other and share alert state, and which network ports must be open between them. Record those answers in the build plan so the team knows what must be configured and verified.

The main decision is how alert evaluation and notification are coordinated across nodes. Ask whether the team must keep one node responsible for each evaluation, or whether the nodes should share state so that each alert instance is notified once. These are different problems. Shared database access and load balancing let any node serve a user request, but they do not, by themselves, stop two nodes from notifying about the same alert. Assign an owner for each alerting setting, and keep those settings in the same infrastructure-as-code repository as the rest of the configuration so that a later change does not quietly reintroduce duplicates. Rule design, contact points and notification policies are covered in the Grafana alerting sibling page.

Test the behavior before relying on it. Create a test alert rule with a condition that you can trigger on demand, and route it to a test contact point that logs every delivery. Trigger the alert and count the notifications per alert instance. Repeat the test with the alert evaluated by each node, and again after restarting one node, so you see the behavior across the full lifecycle. Check resolved notifications as well as firing ones. Illustrative example: if three nodes are running and one firing alert produces three deliveries, the coordination is not working, and the configuration must be corrected before production use. Run these tests in a non-production environment that matches the production database and load balancer layout.

Plan for a node failure explicitly. When a node stops, the remaining nodes should continue to evaluate and notify, but the documentation and your own tests must confirm how quickly responsibilities move and whether an alert can be delayed or duplicated during that transition. Test this by stopping a node while an alert is firing and recording what reaches the contact point. Decide whether your on-call process can tolerate a short delay or an extra notification during failover, and document that expectation for responders. Grafana Live also has limitations in high availability, which apply to live updates in the UI. Those limits are listed in the decisions table on this page.

What drives the effort and cost of a Grafana HA project

This table lists the factors that change how much design, build and ongoing work a Grafana high availability project needs, and what each one asks of your team. Use it to see what a written quote is built from and which decisions you can make early to keep scope predictable. The main takeaway is that the database, the data sources behind Grafana, and alerting design usually matter more than the number of Grafana nodes.

DriverWhy it mattersHow to keep it down
Concurrent users and dashboardsLoad sets the node count, CPU and memory, and how much query traffic reaches data sources. Heavy dashboards with many panels cost more to size and test than their user count suggests.Confirm peak concurrent users and the top dashboards by panel count. Tune refresh intervals and query caching before adding nodes.
Number and type of data sourcesEach data source Grafana depends on may also need its own HA design, backups and credentials. Prometheus, Loki and SQL sources differ in how they are made redundant.List every data source with its owner and existing HA posture. Agree which sources are in scope for this project and which remain with their current owners.
Database engine and hosting modelProduction and HA require MySQL 8.0 or later or PostgreSQL 12 or later, not SQLite. A managed database shifts patching and failover work to the provider, while a self-run database adds build and operations work to the project.Confirm the supported engine version and whether a managed service is available in your environment. Decide hosting early, since it changes the scope of the database build.
Number of environmentsDevelopment, test and production each need Grafana nodes, a database and data source connections. Keeping environments consistent adds build and verification work.Use one code path for all environments with different variable files. Agree which environments need full HA and which can run a single instance.
Identity integrationSign-in through LDAP, generic OAuth, Entra ID, Okta or other providers needs configuration, testing and role mapping. SAML, team sync and SCIM are available only in Grafana Enterprise and Grafana Cloud, which changes both the build and the licensing decision.Confirm your identity provider and the required login methods before scoping. Map roles and folders on paper first, and confirm which features your chosen edition includes.
Alerting volume and contact pointsAlerting in an HA setup needs extra configuration to avoid duplicate notifications. High alert counts, many contact points and complex notification policies increase design, testing and tuning time.Inventory existing alert rules and contact points. Remove stale rules and consolidate routes before migration, and test duplicate suppression with each node in turn.
Provisioning as code versus manual setupManual setup in the UI is quick to start but adds rework when environments diverge. File provisioning, Terraform or Git Sync adds up-front build work and then reduces repeated effort across environments.Decide early which objects are provisioned as code. Keep UI edits to a minimum in production and document the review workflow.
Compliance evidence needsAssessors often ask for backup records, restore tests, access logs and change history. Producing this evidence needs logging, retention and documented procedures built into the design. DeployOpen prepares evidence but does not issue audit reports or certifications.Ask your assessor or compliance lead which evidence they expect. Define retention, backup schedules and restore tests in the written scope so the quote covers them.
Ongoing upgrade cadenceGrafana ships major releases once a year, minor releases about every other month and patch releases at least monthly. Each minor release is supported for 9 months, so the upgrade workload recurs across every node and environment.Agree a patch and minor upgrade schedule before go-live. Ask whether ongoing support or a retainer covers upgrades, testing and security patch rollout.

How to test Grafana high availability and confirm it fails safely

The most useful thing a high availability test plan can do is prove that a failure produces a predictable, visible and reversible outcome. For Grafana, that means two or more active-active servers behind a load balancer, sharing a MySQL 8.0 or later or PostgreSQL 12 or later database, with database-backed auth tokens so a user's session survives a move to another node. Each test below names the action, the expected behavior and the evidence to keep. Run them in a staging environment that matches production topology, and record results before any change window is approved.

Test 1: stop one node during active sessions. Start a set of browser sessions and a scripted dashboard refresh loop against the load balancer address, then stop the Grafana service on one node. Expected behavior: sessions routed to the stopped node reconnect through the load balancer, and users are not forced into a repeated sign-in. Keep the load balancer access log, the health check transitions, the Grafana server log from both nodes and a timestamped screen recording of one affected session. Also confirm that the stopped node's removal does not leave a stale alert or session record in the shared database.

Test 2: restart or fail over the database. Restart the database primary, or trigger your managed failover, while dashboards are loading. Expected behavior: Grafana returns errors during the window, then recovers without a manual restart of either node. Confirm that the Grafana database connection pool re-establishes and that dashboard saves made during the window are either committed or clearly rejected, never half-written. Keep the database failover event log, Grafana error logs with timestamps, and a before and after comparison of dashboard versions. Confirm the exact failover behavior of your database platform with its vendor documentation, since recovery timing depends on it.

Test 3: take the load balancer health check path offline. Block or change the path your load balancer checks so that one node is marked unhealthy, then restore it. Expected behavior: traffic drains from the unhealthy node and returns only after the health check passes. Verify that the health check endpoint does not expose version or sensitive detail to unauthenticated callers, in line with the security hardening guidance. Keep the load balancer state history and confirm no user received a sign-in prompt loop during the change.

Test 4: alerts fire once and recover. Create a test alert rule that fires on a synthetic condition, then check the contact point. Expected behavior: one notification per alert transition, one resolved notification when the condition clears, and no duplicates from the second node. The Grafana HA documentation states that alerting needs additional configuration to avoid duplicate notifications, so verify that configuration rather than assuming it. Keep the notification receiver logs, the alert state history and the exact time of each notification.

Test 5: provisioning drift after restart. Edit a provisioned dashboard or data source through the UI, then restart the nodes one at a time. Expected behavior: provisioned resources reload from their files at startup, and the UI edit is either overwritten or flagged according to your provisioning settings. Check that both nodes end with identical provisioned state. Stale provisioned dashboards are a sign of unsafe failure, so keep a diff of the file-defined and live objects from each node. Finally, restore a database backup into a separate environment and confirm it loads, shows the expected dashboards and data sources, and that a test query succeeds. Keep the restore runbook, the timing and the verification checklist signed by the operator who ran it.

What unsafe failure looks like. Treat these as failed tests even if the page loads: duplicate notifications for one alert, users looping between the sign-in page and a dashboard, nodes serving different provisioned dashboard versions, and restores that start but show empty folders or broken data sources. Detect them with the notification receiver counts, load balancer logs showing repeated authentication redirects, a periodic comparison of dashboard JSON across nodes, and a restore check that counts dashboards and data sources against the source inventory. Ask your team to define pass and fail thresholds before testing, and confirm with your auditor or assessor what evidence format they accept.

Access control and secrets for HA nodes

Running two or more active-active Grafana servers multiplies the places where credentials, network paths and configuration can drift or be exposed. The cards below cover the HA-specific controls that sit alongside the wider hardening work in the Grafana security hardening guide, which holds the full checklist.

Database credentials and network paths

Every node connects to the same MySQL or PostgreSQL database, so one leaked credential exposes all Grafana configuration and stored state. Use a dedicated database account for Grafana with only the privileges it needs, and restrict the database listener so that only the Grafana node subnets can reach it. Confirm the database version meets the minimum Grafana documents for production use before you lock the network rules down.

TLS between load balancer and nodes

The load balancer terminates user TLS in most designs, but traffic from it to each Grafana node may cross a network segment you do not fully control. Decide whether that hop must be encrypted under your policy, and if so, configure TLS on each node and trust the certificate chain on the load balancer. Check that health checks still work after the change, since a failed handshake can look like a node outage.

Data source credentials across nodes

Each node needs the same data source connections, but copying passwords into configuration files in Git repositories is the usual leak path. Supply secrets at runtime through environment variables or your secrets manager, and keep only references in provisioning files. Verify that every node resolves the same data source names and that rotating a credential requires one change, not a manual edit on each node.

Who can change nodes, balancer and provisioning

In an HA setup, a single change to the load balancer, a node's configuration file or a provisioning file affects every user at once. List the people and service accounts allowed to change each of these layers, and separate them where possible. Require review for changes to provisioning files, since those can add or alter data sources that every node loads at startup.

Consistent metrics endpoint and version settings

Nodes deployed at different times or by different people can end up with different settings for the metrics endpoint and for version disclosure. An unauthenticated metrics endpoint or a visible version string on one node can expose more than the others. Compare the effective configuration on every node after each deployment, and confirm the endpoint requires authentication and the version is hidden from unauthenticated users as the hardening guide recommends.

What to monitor, back up and upgrade after go-live

Go-live is the start of the operating work, not the end of the project. A two-node or larger Grafana high availability setup has more moving parts than a single server, and each part needs a named owner and a health signal. Monitor three layers separately: each Grafana node (process up, response time, error rate and memory), the shared database (connections, replication or failover state, storage growth and slow queries), and the load balancer pool (which backends are in service, health check failures and session distribution). A healthy Grafana node does not prove the database is healthy, and a healthy pool can hide a node that is quietly failing its health check. Confirm with your load balancer vendor which health check endpoint Grafana exposes and how your pool reacts when it fails.

The database holds the dashboards, data source definitions, users, teams, folders, alert state and the auth tokens that let a user reach any node. Back it up on a schedule that matches how often people change dashboards and alerts, and keep the backup retention policy written down. Equally important, the backups have to be restorable. Schedule restore tests into a separate environment, check that Grafana starts against the restored database, and confirm that a sample of dashboards, data sources and alert rules comes back intact. Your provisioning repository is the second recovery source. If dashboards, data sources and alert rules are defined as files or code, a rebuild from the repository can restore much of the configuration, but it will not restore UI edits that were never committed, so decide which changes must go through review.

Upgrades in an HA cluster should be rolling, with one node taken out of the load balancer pool, upgraded, checked and returned before the next node is touched. Read the release notes for every minor release you apply, not only for major releases, because breaking changes and deprecations are announced there. Grafana's upgrade guidance describes major releases once a year in April or May, minor releases every other month, and patch releases at least monthly. Each minor release is supported for 9 months, and the last minor release of a major version for 15 months. Use those windows to set your own patch and minor review cadence, and confirm the current support dates on the release pages before you plan. The upgrade sequence, rollback steps and plugin checks are covered in more depth in the Grafana upgrades and support topic.

Finally, the topology and the operating model must be written down before the first incident. Record the node inventory, load balancer configuration, database engine and version, backup locations, the provisioning repository, alerting contact points and which node or service sends each notification. Assign an owner for each runbook, including failover of the database, removing and adding a Grafana node, restoring from backup and emergency rollback. Name an owner for the cadence itself, the person who tracks new minor and patch releases and schedules the work. Review the runbooks after each upgrade and after each restore test, because the first real failover is usually when gaps in these documents appear.

Questions teams ask before building Grafana high availability

What does a Grafana high availability project cost?

The cost depends on the scope agreed in writing, and DeployOpen does not publish a price list, so a quote follows from that scope. Cost components: design and sizing of two or more Grafana servers, database setup, load balancer and network configuration, alerting deduplication, failover testing, documentation and handover. One-time versus recurring: the build is one-time, while infrastructure, database licensing or hosting, and any ongoing support or upgrade retainer recur. Drivers: the number of nodes and environments, whether the database and load balancer already exist, how many data sources need their own high availability, identity integration, and how much provisioning as code is in scope. Ask the quote to separate what you pay directly to infrastructure providers from DeployOpen's effort, testing, handover and any retainer.

How long does it take to build Grafana high availability?

No duration figure applies to every environment, so confirm the timeline against your own scope and readiness. DeployOpen's fixed-scope timelines are agreed in writing before work starts. What sets the schedule: whether a MySQL 8.0 or later, or PostgreSQL 12 or later, database is ready with backups and access, whether the load balancer and DNS changes can be made, how quickly identity provider settings are approved, the number of change windows your organization allows, and whether the data sources Grafana depends on also need high availability. Alerting design and Grafana Live testing often take longer than teams expect because they need validation against real failover behavior. Ask for the schedule to list each dependency and the party responsible for it.

Can our internal team build Grafana high availability without a partner?

Often yes, if the team has working knowledge of Linux, database administration, load balancing and Grafana configuration. The Grafana documentation describes the core pattern: two or more active-active Grafana servers behind a load balancer, sharing a MySQL or PostgreSQL database, with database-backed auth tokens so users can reach any node. The gaps usually sit in the details: alerting needs extra configuration to avoid duplicate notifications, Grafana Live has limitations in HA, and the data sources themselves may not be highly available. Before deciding, test each of these areas in a non-production environment. A partner can be useful when skills are thin, when deadlines are fixed, or when your team needs to keep running existing services while the build proceeds.

What must our team provide before a Grafana HA build starts?

Your team must provide the infrastructure and access the build depends on. Database: a MySQL 8.0 or later, or PostgreSQL 12 or later, instance with backup and recovery arrangements. Load balancer: a place to terminate traffic in front of the Grafana nodes, plus DNS control. Identity: a configured provider, such as LDAP, Entra ID, Okta or a generic OAuth source, with a test account and agreed role mapping. Network: routes and firewall rules between the nodes, the database, the data sources and user networks. Hosting: virtual machines, containers or a Kubernetes cluster where the Grafana nodes will run. People and time: a named owner, approvers for production changes, and change windows for cutover and failover testing. Missing any of these usually adds waiting time rather than technical complexity.

Can we keep SQLite for a small Grafana high availability setup?</br>

No. The Grafana installation documentation states that SQLite does not scale for production, and Grafana high availability requires a shared MySQL or PostgreSQL database. SQLite can run a single, small Grafana instance, and the installation docs size small deployments at under 25 concurrent users with 2 cores and 2 to 4 GB of RAM, but that sizing applies to one server, not a cluster. What this means for planning: if you start on SQLite, plan the move to MySQL or PostgreSQL before adding a second node. That move includes exporting configuration and data, validating dashboards, data sources and users after import, and scheduling a cutover. Confirm the current database requirements for your Grafana version in the documentation before finalizing the architecture.

Does Grafana Live work in a high availability setup?

Grafana Live has limitations in high availability setups, according to the Grafana high availability documentation. Confirm the current limitations for your Grafana version before you design around any live streaming behavior in dashboards. What to check: which Live features your dashboards and users depend on, how requests are routed through your load balancer, and whether reconnection after a node failure behaves acceptably for your teams. Test these with two or more nodes behind the real load balancer, not only on a single server. If Live features are central to your use case, record the limitation in the design and agree on the expected behavior with the business owner so the gap is a known decision, not a surprise after go-live.

What stays our responsibility after Grafana high availability handover?

Most of the ongoing work stays with the owning team unless a support retainer is in place. Platform upkeep: applying patch releases, which Grafana's upgrade guidance describes as at least monthly, and planning minor releases, which come every other month. Each minor release is supported for 9 months, and the last minor release of a major version for 15 months, so upgrade planning must keep pace with those windows. Operations: database backups, capacity and failover tests, load balancer configuration, certificate renewal, data source high availability, plugin vetting and user access reviews. Change control: alert rules, provisioning files and identity mappings change over time and need review. DeployOpen offers ongoing support, upgrades and continuous testing as retainers, and the handover documentation should state who owns each item.

How DeployOpen scopes, builds and hands over Grafana high availability

DeployOpen plans and builds Grafana high availability inside your own infrastructure, starting from a written scope that names the Grafana servers, database, load balancer and data sources in play. The work is delivered as a fixed-scope project with documented deliverables, followed by optional retainer support for upgrades and continuous testing.

How we scope

  • Confirm the number of Grafana nodes, the load balancer design and where each node runs in your environment.
  • Agree the MySQL 8.0 or PostgreSQL 12 or later database that replaces SQLite and holds shared configuration and sessions.
  • Record which data sources, alert contact points and identity providers the high availability design must support.

How we build

  • Deploy two or more active-active Grafana servers behind your load balancer, all sharing the same database and database-backed auth tokens.
  • Configure alerting to avoid duplicate notifications across nodes and test failover of a single node during a live session.
  • Document the known Grafana Live limitations in high availability and agree with your team how dashboards relying on live streaming will behave.

How we hand over

  • Deliver architecture diagrams, configuration files and runbooks covering node replacement, database failover and certificate rotation.
  • Provision data sources, dashboards and alerting resources as files where possible so the setup can be reviewed and rebuilt.
  • Walk your platform and on-call teams through failover tests, monitoring of the Grafana nodes and the rollback procedure.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after handover, covering patch releases and minor upgrades.
  • Retest the load balancer, database and alerting behavior after each Grafana upgrade, since high availability changes need re-verification.
  • Confirm with your team which support scope, response expectations and service terms apply before any retainer begins.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.