---
title: "SafeKit: Docker High Availability & Real-Time Data Replication Software"
description: "SafeKit: Docker High Availability & Real-Time Data Replication Software"
canonical: "https://safekit.eviden.com/solutions/docker-container-high-availability-cluster-synchronous-replication-failover/"
topics: "How the SANless SafeKit Mirror Cluster Works with Docker, Table of Contents, How the SafeKit software simply implements a Docker high availability cluster?, How the SafeKit mirror cluster works with Docker?, SafeKit High Availability Limitations, Comparison: SafeKit SANless Cluster vs. Traditional Docker HA, Comparison: SafeKit vs. Open-Source Linux HA (Pacemaker/Corosync/DRBD), Docker High Availability Summary, 🔍 SafeKit High Availability Navigation Hub"
category: "solutions"
lang: "en"
---

<h1 id="safekit-docker-high-availability--real-time-data-replication-software">SafeKit: Docker High Availability &amp; Real-Time Data Replication Software</h1>
<h2 id="how-the-sanless-safekit-mirror-cluster-works-with-docker">How the SANless SafeKit Mirror Cluster Works with Docker</h2>
<p>SafeKit offers a lightweight, <strong>&ldquo;just-enough&rdquo; HA solution</strong> tailored for organizations that find <strong>Kubernetes</strong> too resource-intensive, complex, or over-engineered for localized or edge-computing container workloads.</p>
<p><strong>SafeKit</strong> provides a streamlined, all-in-one 2-node <strong>high-availability cluster for Docker</strong> on Linux. It serves as a seamless, integrated alternative to the complex &ldquo;Do It Yourself&rdquo; (DIY) Linux HA stack—eliminating the technical burden of manually configuring <strong>Corosync</strong> for node membership, <strong>Pacemaker</strong> for resource orchestration, and <strong>DRBD</strong> for block-level replication.</p>
<p>By utilizing real-time synchronous replication and an <strong>automatically switched Virtual IP address</strong> , SafeKit creates a robust <strong>SANless cluster</strong> that removes the requirement for expensive shared storage. This architecture ensures transparent client reconnection, rapid automatic failover, and a <strong>zero data loss guarantee (RPO=0)</strong> for containerized applications.</p>
<ul>
<li>✅ <strong>Kubernetes Alternative:</strong> High availability for containers without the overhead of K8s networking (Ingress/Load Balancers) and orchestration.</li>
<li>✅ <strong>Simplified Architecture:</strong> Replaces the Corosync/Pacemaker/DRBD stack with a single software package.</li>
<li>✅ <strong>No Shared Storage Required:</strong> SANless architecture using local disks and byte-level replication.</li>
<li>✅ <strong>Automatic Virtual IP (VIP) Failover:</strong> Ensures transparent client reconnection during a switch.</li>
<li>✅ <strong>Synchronous Data Replication:</strong> Guaranteed zero data loss (RPO=0) between nodes.</li>
<li>✅ <strong>Automated Failover and Failback:</strong> Rapid application restart on the redundant node without manual scripts.</li>
</ul>
<img src="/wp-content/uploads/2026/02/safekit-docker-5-1024.jpg" width="512" alt="SafeKit High Availability Cluster Architecture for Docker providing Virtual IP, Automatic Failover, Automatic Failback, and Real-time replication">
<p><strong>A high-availability (HA) solution for Docker containers using SafeKit&rsquo;s SANless architecture.</strong></p>
<p><a class="btn-quick-install" href="/quick-install/safekit-quick-installation-guide-with-docker/">⚡ Quick HA installation guide for Docker &gt;</a></p>
<h2 id="table-of-contents">Table of Contents</h2>
<ul>
<li><a href="#how-safekit-implements-docker-ha">How the SafeKit software simply implements a Docker high availability cluster?</a></li>
<li><a href="#safekit-mirror-cluster">How the SafeKit mirror cluster works with Docker?</a></li>
<li><a href="#safekit-ha-limitations">SafeKit High Availability Limitations</a></li>
<li><a href="#safekit-docker-comparison">Comparison: SafeKit SANless Cluster vs. Traditional Docker HA</a></li>
<li><a href="#safekit-vs-linux-ha-stack">Comparison: SafeKit vs. Open-Source Linux HA (Pacemaker/Corosync/DRBD)</a></li>
<li><a href="#docker-ha-summary-quick-installation-guide">Docker High Availability Summary</a></li>
<li><a href="#hub">🔍 SafeKit High Availability Navigation Hub</a></li>
</ul>
<h2 id="how-safekit-implements-docker-ha">How the SafeKit software simply implements a Docker high availability cluster?</h2>
<h3 id="how-can-i-achieve-high-availability-for-docker-on-two-servers">How can I achieve high availability for Docker on two servers?</h3>
<p><strong>SafeKit</strong> provides a high-availability solution for <strong>Docker</strong> between two redundant servers without requiring a shared disk. The system works by configuring <strong>real-time replication</strong> of directories associated with Docker&rsquo;s persistent data. In the event of a failure, SafeKit manages the automatic failover and restarts your containers on the secondary node in seconds.</p>
<h3 id="how-does-automatic-network-failover-work-for-docker-containers">How does automatic network failover work for Docker containers?</h3>
<p>SafeKit implements an <strong>automatically switched Virtual IP (VIP) address</strong>. This VIP serves as a single entry point for client applications. If the primary server fails, SafeKit moves the Virtual IP to the redundant server using <strong>Gratuitous ARP</strong>. This ensures that clients reconnect transparently to the same IP address where the Docker application has been restarted.</p>
<h3 id="what-is-a-sanless-cluster-for-docker">What is a &ldquo;SANless&rdquo; cluster for Docker?</h3>
<p>A <strong>SANless cluster</strong> for Docker is an architecture that provides high availability without the need for an expensive Storage Area Network (SAN) or Network Attached Storage (NAS). <strong>SafeKit</strong> uses host-based <strong>synchronous replication</strong> to mirror data between the local disks of two servers. This eliminates shared storage as a single point of failure and ensures a <strong>Recovery Point Objective (RPO) of zero</strong> , meaning no data loss occurs during a failover.</p>
<h3 id="is-it-possible-to-set-up-a-docker-cluster-without-kubernetes-skills">Is it possible to set up a Docker cluster without Kubernetes skills?</h3>
<p>Yes. This article explains how to <a href="/quick-install/safekit-quick-installation-guide-with-docker/"><strong>quickly implement a Docker cluster</strong></a> without specialized clustering skills or complex Kubernetes orchestration. By using SafeKit’s <strong>automatic restart scripts</strong> to handle the start and stop of Docker applications, you get a robust redundancy solution that is much simpler to deploy and maintain than K8s.</p>
<h3 id="how-does-safekit-replication-differ-from-block-level-solutions-like-drbd-for-docker">How does SafeKit replication differ from block-level solutions like DRBD for Docker?</h3>
<p>Unlike most SANless solutions that use <strong>block-level replication</strong> (such as DRBD), <strong>SafeKit</strong> performs <strong>host-based replication at the file level</strong>. This approach is completely transparent for the Docker application because it does not require you to migrate data to a specific, newly created &ldquo;replicated disk&rdquo; volume. Instead, you simply configure SafeKit to replicate existing application folders—even those on the <strong>system disk</strong>. This allows you to implement high availability for Docker exactly where it is already installed, without complex disk reconfiguration or application changes.</p>
<h3 id="can-safekit-provide-high-availability-for-applications-beyond-docker">Can SafeKit provide high availability for applications beyond Docker?</h3>
<p>Yes. <strong>SafeKit</strong> is a highly versatile, generic high-availability software compatible with both <strong>Windows and Linux</strong>. Beyond Docker, SafeKit can be used to implement <strong>real-time replication and automatic failover</strong> for any file directory, service, or database. It supports a wide range of technologies, including <strong>Hyper-V and KVM virtual machines</strong> , <strong>Docker</strong> , <strong>K3s</strong> , and various <strong>Cloud applications</strong>. This makes SafeKit a universal clustering solution for protecting critical workloads across diverse IT environments without requiring specialized hardware.</p>
<h2 id="safekit-mirror-cluster">How the SafeKit mirror cluster works with Windows/Linux?</h2>
<h3 id="step1">Step 1. Real-time replication</h3>
<p>Server 1 (PRIM) runs the Windows/Linux application. Clients are connected to a <a href="/best-practises/how-a-virtual-ip-address-works/">virtual IP address</a>. SafeKit replicates in real time modifications made inside files through the network.</p>
<img src="/wp-content/uploads/2023/02/safekit-prim-second-300.png" width="300" alt="File replication at byte level in a mirror Windows/Linux cluster">
<p>The replication is <a href="/best-practises/synchronous-replication-vs-asynchronous-replication/">synchronous</a> with no data loss on failure contrary to asynchronous replication.</p>
<p>You just have to configure the names of directories to replicate in SafeKit. There are no pre-requisites on disk organization. Directories may be located in the system disk.</p>
<h3 id="step2">Step 2. Automatic failover</h3>
<p>When Server 1 fails, Server 2 takes over. SafeKit switches the virtual IP address and restarts the Windows/Linux application automatically on Server 2.</p>
<p>The application finds the files replicated by SafeKit uptodate on Server 2. The application continues to run on Server 2 by locally modifying its files that are no longer replicated to Server 1.</p>
<img src="/wp-content/uploads/2023/02/safekit-stop-alone-300.png" width="300" alt="Failover of Windows/Linux in a mirror cluster">
<p>The failover time is equal to the fault-detection time (30 seconds by default) plus the application start-up time.</p>
<h3 id="step3">Step 3. Automatic failback</h3>
<p>Failback involves restarting Server 1 after fixing the problem that caused it to fail.</p>
<p>SafeKit automatically resynchronizes the files, updating only the files modified on Server 2 while Server 1 was halted.</p>
<img src="/wp-content/uploads/2023/02/safekit-resynchro-alone-300.png" width="300" alt="Failback in a mirror Windows/Linux cluster">
<p>Failback takes place without disturbing the Windows/Linux application, which can continue running on Server 2.</p>
<h3 id="step-4-back-to-normal">Step 4. Back to normal</h3>
<p>After reintegration, the files are once again in mirror mode, as in step 1. The system is back in high-availability mode, with the Windows/Linux application running on Server 2 and SafeKit replicating file updates to Server 1.</p>
<img src="/wp-content/uploads/2023/02/safekit-second-prim-300.png" width="300" alt="Return to normal operation in a mirror Windows/Linux cluster">
<p>If the administrator wishes the application to run on Server 1, this can be done manually through the web console at an appropriate time, or automatically through configuration.</p>
<h3 id="safekit-mirror-cluster-configure">How to configure a SafeKit Mirror Cluster for Windows/Linux?</h3>
<img src="/wp-content/uploads/2026/01/safekit-mirror-cluster-config.png" width="763" alt="SafeKit Web Console: High Availability configuration dashboard for Windows/Linux showing heartbeat networks, virtual IP setup, and real-time directory replication for a mirror cluster.">
<p>The <strong>SafeKit web console</strong> provides an intuitive interface to orchestrate high availability for your critical applications. In just a few steps, you can configure a <strong>SafeKit mirror cluster</strong> to ensure business continuity:</p>
<ul>
<li><strong>Application Failover (Macros Tab):</strong> Define the specific application services to be automatically restarted in the event of a failure.</li>
<li><strong>Heartbeat network(s):</strong> Dedicated communication path(s) used by cluster nodes to continuously monitor each other&rsquo;s health and availability and synchronize failover decisions.</li>
<li><strong>Virtual IP Management:</strong> Set up the Virtual IP (VIP) for transparent client reconnection after a failover.</li>
<li><strong>Real-Time Replication:</strong> Select the critical directories for host-based, synchronous byte-level replication.</li>
<li><strong>Checkers:</strong> Monitor the application&rsquo;s health and trigger automatic recovery if a process failure is detected.</li>
</ul>
<p>The SafeKit cluster includes a dedicated split-brain checker to resolve network isolation issues without the need for a third witness machine or an additional heartbeat network. Learn more about <a href="/best-practises/heartbeat-failover-quorum-windows-linux-cluster/">heartbeat, failover and quorum in a cluster</a>.</p>
<h3 id="safekit-mirror-cluster-monitoring">How to monitor a SafeKit mirror cluster for Windows/Linux?</h3>
<img src="/wp-content/uploads/2026/05/mirror-monitoring-prim-second.png" width="604" alt="SafeKit Web Console: Real-time monitoring of a 2-node mirror cluster for Windows/Linux showing PRIM and SECOND states with active data replication.">
<p>The <strong>SafeKit management console</strong> offers a unified view of your high availability infrastructure. It allows administrators to monitor the <strong>operational state</strong> of the cluster and track data synchronization in real-time.</p>
<p>For a 2-node mirror cluster, the console clearly displays the roles of each server:</p>
<ul>
<li><strong>PRIM (Primary):</strong> The active node currently running the application and managing the Virtual IP. It performs writes to the local storage and real-time replication to the secondary node.</li>
<li><strong>SECOND (Secondary):</strong> The standby node receiving synchronous byte-level updates. It is ready to take over instantly if the Primary fails.</li>
<li><strong>ALONE State:</strong> Visually alerts you when the cluster is running on a single node (e.g., during maintenance or after a failure), indicating that redundancy is temporarily lost.</li>
<li><strong>Resynchronization Progress:</strong> When a failed node recovers, its status turns orange during background data reintegration, ensuring no downtime during the &ldquo;return to normal&rdquo; phase.</li>
</ul>
<p>Beyond simple status icons, the interface provides <strong>one-click failover orchestration</strong> , allowing you to manually reassign the primary role for planned maintenance while ensuring continuous availability for user activity.</p>
<h2 id="safekit-ha-limitations">SafeKit High Availability Limitations</h2>
<h3 id="why-a-replication-of-a-few-tera-bytes">Why a replication of a few Tera-bytes?</h3>
<p>Resynchronization time after a failure (<a href="/architectures/file-replication-byte-level-with-failover-mirror-cluster/#safekit-mirror-cluster">step 3</a>)</p>
<ul>
<li>1 Gb/s network ≈ 3 Hours for 1 Tera-bytes.</li>
<li>10 Gb/s network ≈ 1 Hour for 1 Tera-bytes or less depending on disk write performances.</li>
</ul>
<h4 id="alternative">Alternative</h4>
<ul>
<li>For a large volume of data, use <a href="/best-practises/san-vs-nas-shared-storage-for-a-failover-cluster/">external shared storage</a>.</li>
<li>More expensive, more complex.</li>
</ul>
<h3 id="why-a-replication-lt-1000000-files">Why a replication &lt; 1,000,000 files?</h3>
<ul>
<li>Resynchronization time performance after a failure (<a href="/architectures/file-replication-byte-level-with-failover-mirror-cluster/#safekit-mirror-cluster">step 3</a>).</li>
<li>Time to check each file between both nodes.</li>
</ul>
<h4 id="alternative-1">Alternative</h4>
<ul>
<li>Put the many files to replicate in a virtual hard disk / virtual machine.</li>
<li>Only the files representing the virtual hard disk / virtual machine will be replicated and resynchronized in this case.</li>
</ul>
<h3 id="why-a-failover--32-replicated-vms">Why a failover ≤ 32 replicated VMs?</h3>
<ul>
<li>Each VM runs in an independent mirror module.</li>
<li>Maximum of 32 mirror modules running on the same cluster.</li>
</ul>
<h4 id="alternative-2">Alternative</h4>
<ul>
<li>Use an external shared storage and another VM clustering solution.</li>
<li>More expensive, more complex.</li>
</ul>
<h3 id="why-a-lanvlan-network-between-remote-sites">Why a LAN/VLAN network between remote sites?</h3>
<ul>
<li>Automatic failover of the <a href="/best-practises/how-a-virtual-ip-address-works/">virtual IP address</a> with 2 nodes in the same subnet.</li>
<li>Good bandwidth for resynchronization (<a href="/architectures/file-replication-byte-level-with-failover-mirror-cluster/#safekit-mirror-cluster">step 3</a>) and good latency for <a href="/best-practises/synchronous-replication-vs-asynchronous-replication/">synchronous replication</a> (typically a round-trip of less than 2ms).</li>
</ul>
<h4 id="alternative-3">Alternative</h4>
<ul>
<li>Use a <a href="/best-practises/how-a-virtual-ip-address-works/">load balancer for the virtual IP address</a> if the 2 nodes are in 2 subnets (supported by SafeKit, especially in the cloud).</li>
<li>Use backup solutions with asynchronous replication for high latency network.</li>
</ul>
<h2 id="safekit-docker-comparison">Comparison: SafeKit SANless Cluster vs. Traditional Docker HA</h2>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Traditional HA (K8s / Shared Storage)</th>
<th>SafeKit (SANless Mirror)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Storage Architecture</td>
<td>Requires expensive <strong>SAN or NAS</strong> (Shared Disk)</td>
<td><strong>Shared-Nothing</strong> : Uses local disks only</td>
</tr>
<tr>
<td>Replication Type</td>
<td>Often Block-level (Complex to configure)</td>
<td><strong>Byte-level File Replication</strong> (Transparent)</td>
</tr>
<tr>
<td>Data Consistency</td>
<td>Depends on external storage reliability</td>
<td><strong>Synchronous Replication</strong> (RPO = 0)</td>
</tr>
<tr>
<td>Network Setup</td>
<td>Complex (Load balancers, Ingress, etc.)</td>
<td><strong>Automatic Virtual IP (VIP)</strong> failover</td>
</tr>
<tr>
<td>Skill Requirement</td>
<td>Expert (Kubernetes/Clustering specialists)</td>
<td><strong>Simple</strong> : No specialized skills required</td>
</tr>
<tr>
<td>Failback Process</td>
<td>Manual or complex re-syncing</td>
<td><strong>Automatic Resynchronization</strong> of modified data</td>
</tr>
</tbody>
</table>
<h2 id="safekit-vs-linux-ha-stack">Comparison: SafeKit vs. Open-Source Linux HA (Pacemaker/Corosync/DRBD)</h2>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Linux HA Stack (Pacemaker + Corosync + DRBD)</th>
<th>SafeKit (SANless Mirror)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Architecture</td>
<td><strong>Modular:</strong> Requires managing 3+ distinct tools and kernel modules.</td>
<td><strong>All-in-One:</strong> Single integrated software for replication and failover.</td>
</tr>
<tr>
<td>Replication Level</td>
<td><strong>Block-level (DRBD):</strong> Replicates the entire partition/disk volume.</td>
<td><strong>Byte-level (SafeKit):</strong> Replicates only modified data inside specific files.</td>
</tr>
<tr>
<td>Ease of Configuration</td>
<td><strong>Complex:</strong> Requires CLI (Command Line Interface) expertise to manually program ordering constraints (Virtual IP, mounts), application recovery scripts, and quorum/fencing rules.</td>
<td><strong>Simple:</strong> Intuitive web console and ready-to-use application modules.</td>
</tr>
<tr>
<td>Fencing (STONITH)</td>
<td><strong>Mandatory to prevent corruption:</strong> STONITH (Shoot The Other Node In The Head) requires a specialized hardware (IPMI/iDRAC) to literally cut the power or reboot the failing server.</td>
<td><strong>Software-based:</strong> <a href="/best-practises/heartbeat-failover-quorum-windows-linux-cluster/">Intelligent split-brain resolution without extra hardware.</a></td>
</tr>
<tr>
<td>Failback Process</td>
<td><strong>Manual/Technical:</strong> Risk of data divergence or &ldquo;split-brain&rdquo; during re-sync.</td>
<td><strong>Automatic &amp; Transparent:</strong> Background resynchronization with safe failback.</td>
</tr>
<tr>
<td>Maintenance</td>
<td>Requires high specialized skills to update/troubleshoot individual components.</td>
<td>Easy to maintain by general system administrators via web dashboard.</td>
</tr>
</tbody>
</table>
<h2 id="docker-ha-summary-quick-installation-guide">Docker High Availability Summary</h2>
<p><strong>SafeKit</strong> provides a simple <strong>2-node HA cluster for Docker</strong> , offering a lightweight <strong>Kubernetes alternative</strong> for mission-critical workloads. By replacing the complex <strong>Corosync, Pacemaker, and DRBD</strong> stack, SafeKit eliminates the need for expensive <strong>SAN/NAS</strong> shared storage.</p>
<p>Through <strong>real-time synchronous replication</strong> and an <strong>automatic Virtual IP (VIP) failover</strong> , SafeKit ensures <strong>zero data loss (RPO=0)</strong> and transparent application recovery. It is the ideal solution for organizations requiring robust, <strong>SANless high availability</strong> with minimal configuration and administrative overhead.</p>
<h2 id="hub">🔍 SafeKit High Availability Navigation Hub</h2>
<p><strong>Explore SafeKit: Features, technical videos, documentation, and free trial</strong></p>
<table>
<thead>
<tr>
<th>Resource Type</th>
<th>Description</th>
<th>Direct Link</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Key Features</strong></td>
<td>Why Choose SafeKit for Simple and Cost-Effective High Availability?</td>
<td><a href="/#why-choose-safekit-for-ha" title="Discover SafeKit features for simple and cost-effective high availability">See Why Choose SafeKit for High Availability</a></td>
</tr>
<tr>
<td><strong>Use Cases</strong></td>
<td>Explore How SafeKit Ensures the High Availability of Critical Infrastructure</td>
<td><a href="/#safekit-use-cases" title="Explore SafeKit high availability use cases">See All Use Cases (OEM Software, Edge Servers, SCADA, and more)</a></td>
</tr>
<tr>
<td><strong>Deployment Model</strong></td>
<td>All-in-One SANless HA: Shared-Nothing Software Clustering</td>
<td><a href="/#all-in-one-sanless-ha" title="Learn about all-in-one SANless high availability with shared-nothing software clustering">See SafeKit All-in-One SANless HA</a></td>
</tr>
<tr>
<td><strong>HA Strategies</strong></td>
<td>SafeKit: Infrastructure (VM) vs. Application-Level High Availability</td>
<td><a href="/#safekit-ha-redundancy-choices" title="Compare VM-level redundancy with SafeKit application-level high availability strategies">See SafeKit HA &amp; Redundancy: VM vs. Application Level</a></td>
</tr>
<tr>
<td><strong>Technical Specifications</strong></td>
<td>Technical Limitations for SafeKit Clustering</td>
<td><a href="/#safekit-ha-limitations" title="Technical requirements and limitations for SafeKit application clustering">See SafeKit High Availability Limitations</a></td>
</tr>
<tr>
<td><strong>Proof of Concept</strong></td>
<td>SafeKit: High Availability Configuration &amp; Failover Demos</td>
<td><a href="/#safekit-failover-tutorials" title="Step-by-step videos on SafeKit high availability, from installation to automated failover">See SafeKit Failover Tutorials</a></td>
</tr>
<tr>
<td><strong>Architecture</strong></td>
<td>How the SafeKit Mirror Cluster works (Real-Time Replication &amp; Failover)</td>
<td><a href="/#safekit-mirror-cluster" title="See technical architecture and failover mechanism of SafeKit Mirror Cluster">See SafeKit Mirror Cluster: Real-Time Replication &amp; Failover</a></td>
</tr>
<tr>
<td><strong>Architecture</strong></td>
<td>How the SafeKit Farm Cluster works (Network Load Balancing &amp; Failover)</td>
<td><a href="/#safekit-farm-cluster" title="Technical overview of SafeKit Farm Cluster architecture with network load balancing">See SafeKit Farm Cluster: Network Load Balancing &amp; Failover</a></td>
</tr>
<tr>
<td><strong>Competitive Advantages</strong></td>
<td>Comparison: SafeKit vs. Traditional High Availability (HA) Clusters</td>
<td><a href="/#safekit-ha-comparison" title="Detailed comparison of SafeKit software vs traditional hardware-based HA clusters">See SafeKit vs. Traditional HA Cluster Comparison</a></td>
</tr>
<tr>
<td><strong>Technical Resources</strong></td>
<td>SafeKit High Availability: Documentation, Downloads &amp; Trial</td>
<td><a href="/#safekit-ha-technical-resources" title="Access SafeKit free trial, technical documentation, and high availability white papers">See SafeKit HA Free Trial &amp; Technical Documentation</a></td>
</tr>
<tr>
<td><strong>Pre-configured Solutions</strong></td>
<td>SafeKit Application Module Library: Ready-to-Use HA Solutions</td>
<td><a href="/#safekit-ha-application-modules" title="Browse the library of pre-configured SafeKit modules for automated application failover">See SafeKit High Availability Application Modules</a></td>
</tr>
</tbody>
</table>
<div class="button-row">
  <a class="btn-action" href="https://safekit.eviden.com/contact-us-for-safekit/">🧑 Contact us</a>
  <a class="btn-action" href="/resources/safekit-free-trial/">🎁 SafeKit free trial</a>
  <a class="btn-action" href="https://training.my.evidian.com/mod/page/view.php?id=712">🏅 Free certification</a>
  <a class="btn-action" href="https://safekit.eviden.com/get-a-quote-safekit/">💰 Perpetual license cost</a>
</div>

