Introduction
Pada tutorial ini kita akan melakukan setup multiple haproxy server menggunakan keepalived dan Git untuk maintenance konfigurasi dan versioning konfigurasi.
Untuk topology seperti dibawah ini

Preparation
Untuk persiapan haproxy yaitu
- 2 Nodes (1 master, 1 slave)
- IP Address untuk keepalived (sebagai ip utama untuk koneksi dari client ke haproxy)
- Repo git (github atau gitlab)
Installation
Instalasi Keepalived
Untuk instalasi keepalived bisa dilihat pada link berikut,
https://cygnenoir.net/install-keepalived-on-ubuntu-24-04/
Instalasi Haproxy
Untuk instalasi haproxy kita akan menggunakan haproxy versi 3.2 (LTS), dan dilakukan di ALL NODES
Install dependencies
sudo apt install software-properties-common git -yadd repository haproxy yang berasal dari vbernat
sudo add-apt-repository ppa:vbernat/haproxy-3.2 -yInstall haproxy
sudo apt install haproxy -yCheck version haproxy
sudo haproxy -v
Setup Git (haproxy_1)
Kita sudah menyediakan repository kosong pada git, kita akan menggunakan Private Access Token (PAT) untuk koneksi ke private repository.
Init git
cd /etc/haproxy/
sudo git init --initial-branch=main
sudo git remote add origin <URL REPOSITORY>
sudo git add .
sudo git commit -m "Initial commit"
sudo git push --set-upstream origin mainNanti kita ditanyakan username dan password, masukan saja PAT yang sudah dibuat.
Sekarang kita setup untuk store access token ke server. Kita akan membuat README.md
sudo git config credential.helper store
echo "Test haproxy_1" | sudo tee README.md
sudo git add .
sudo git commit -m "Add Readme.md"
sudo git push Nanti kita diminta memasukan username dan password, setelah masukan username dan password, kita bisa cek akses ada di /root/.git-credentials
Setup GIT (haproxy_2)
Karena kita sudah init git pada haproxy_1, sekarang kita hapus folder /etc/haproxy (karena kita akan menggunakan folder config yang berasal dari git)
sudo rm -rf /etc/haproxy/
sudo git clone <URL REPO> /etc/haproxy/Sekarang kita setup untuk store access token ke server
cd /etc/haproxy/
sudo git config credential.helper store
sudo echo "Test haproxy_2" >> README.md
sudo git add .
sudo git commit -m "Add Readme.md"
sudo git push GIT pada kedua server sudah dikonfigurasi, tahap selanjutnya automation.
Create Auto PULL Every minute (ALL Nodes)
Sekarang kita akan membuat auto pull git setiap menit, jadi kita akan menggunakan script bash untuk auto pull dan kemudian untuk auto pull kita akan menggunakan systemd (Recomended). Kita akan konfigurasi pada kedua haproxy tersebut
Script BASH
Membuat script bash pada /usr/local/bin/haproxy-update.sh
sudo nano /usr/local/bin/haproxy-update.sh#!/bin/bash
set -e
cd /etc/haproxy || exit 1
# Fetch latest changes
git fetch origin
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse @{u})
if [ "$LOCAL" != "$REMOTE" ]; then
echo "$(date) - Updating HAProxy config..."
git pull origin main
# Validate config before reload
if haproxy -c -f /etc/haproxy/haproxy.cfg; then
systemctl reload haproxy
echo "$(date) - Reloaded HAProxy successfully."
else
echo "$(date) - ERROR: Config validation failed!"
fi
else
echo "$(date) - Config already up-to-date."
fiSetelah itu berikan mod execution
sudo chmod +x /usr/local/bin/haproxy-update.shTimer using systemd
Buat service untuk haproxy-update
sudo tee /etc/systemd/system/haproxy-update.service << EOF
[Unit]
Description=Update HAProxy config from Git
[Service]
Type=oneshot
ExecStart=/usr/local/bin/haproxy-update.sh
Environment="HOME=/root"
WorkingDirectory=/etc/haproxy
EOFBuat service untuk haproxy-timer
sudo tee /etc/systemd/system/haproxy-update.timer << EOF
Description=Periodic HAProxy config update
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
Persistent=true
[Install]
WantedBy=timers.target
EOFReload daemon dan enable service
sudo systemctl daemon-reload
sudo systemctl enable --now haproxy-update.timerUntuk logs bisa kita check
sudo journalctl -u haproxy-update.service -fCreate Script PUSH every update config (ALL NODE)
Kita buat script push ini jika kita ingin ada perubahan config pada haproxy dan otomatis push ke git repo.
Buat script
sudo nano /usr/local/bin/haproxy-push#!/bin/bash
set -e
cd /etc/haproxy || exit 1
#!/bin/bash
set -e
cd /etc/haproxy || exit 1
# Fetch latest changes
git fetch origin
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse @{u})
COMMIT_MSG="Auto-sync from $(hostname) on $(date '+%Y-%m-%d %H:%M:%S')"
# Detect local changes
if ! git diff --quiet || ! git diff --cached --quiet; then
echo "Local changes detected. Validating HAProxy config first..."
# Validate before committing
if haproxy -c -f /etc/haproxy/haproxy.cfg; then
echo "HAProxy config is valid. Proceeding with Git commit."
git add -A
git commit -m "$COMMIT_MSG"
git push origin main
systemctl reload haproxy
echo "$(date) - Reloaded HAProxy successfully."
else
echo "❌ ERROR: HAProxy config validation failed! Aborting Git push."
exit 1
fi
else
echo "$(date) - No local config changes."
fiTambahkan mod execution
sudo chmod +x /usr/local/bin/haproxy-pushKetika kita ingin melakukan editing pada haproxy, kita tinggal menggunakan perintah haproxy-push untuk melakukan apply configuration dan push ke git
sudo haproxy-push