Service High Availability with Keepalived

Keepalived Overview

Keepalived is an open-source software initially designed for managing LVS clusters, providing health monitoring for service nodes. It latter incorporated VRRP functionality to enable high availability solutions for various services like Nginx, HAProxy, and MySQL.

Core Functionality

  1. LVS load balancer management
  2. Health monitoring for cluster nodes
  3. Network service failover capability

VRRP Protocol Implementation

Keepalived uses the Virtual Router Redundancy Protocol (VRRP) to maintain service continuity. VRRP solves single point of failure issues in static routing by creating virtual routers that automatically failover when primary nodes become unavailable.

Configuration Example

Primary Node Configuration

global_defs {
   node_id primary_node
}

vrrp_instance VI_1 {
    state PRIMARY
    interface eth0
    virtual_router_id 50
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secure123
    }
    virtual_ipaddress {
        192.168.1.100/24
    }
}

Secondary Node Configuration

global_defs {
   node_id backup_node
}

vrrp_instance VI_1 {
    state SECONDARY
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secure123
    }
    virtual_ipaddress {
        192.168.1.100/24
    }
}

Split-Brain Mitigation

Split-brain occurs when cluster nodes lose communication but continue operating endependently. Prevention strategies include:

  • Redundant heartbeat connections
  • Resource locking mechanisms
  • Ping-based arbitration systems

Common Causes

  • Heartbeat connecsion failures
  • Firewall blocking VRRP traffic
  • Configuration mismatches

Service Monitoring

Health Check Script

#!/bin/bash

while true
do
  active_services=$(systemctl list-units --state=active | grep nginx | wc -l)
  if [ $active_services -lt 1 ]; then
    systemctl stop keepalived
    exit 1
  fi
  sleep 5
done

Multi-Instance Configuration

Primary Node Setup

vrrp_instance VI_2 {
    state SECONDARY
    interface eth0
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secondary_pass
    }
    virtual_ipaddress {
        192.168.1.101/24
    }
}

Service Integration

server {
    listen 192.168.1.100:80;
    server_name primary.domain;
    location / {
        proxy_pass http://backend_pool;
    }
}

server {
    listen 192.168.1.101:80;
    server_name secondary.domain;
    location / {
        proxy_pass http://fallback_pool;
    }
}

Tags: Keepalived VRRP high-availability load-balancing nginx

Posted on Mon, 31 Aug 2026 16:21:33 +0000 by leewad