From 11851b3bb9ccfe605d033a347230b520db9dea2e Mon Sep 17 00:00:00 2001 From: sangyun Date: Wed, 17 Jan 2024 17:29:05 +0900 Subject: [PATCH] fix keepalive error in config file --- Dockerfile | 36 +++++++++++++++++------- keepalived.conf | 41 --------------------------- keepalived.tmpl | 20 ++++++++++++++ run.sh | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 51 deletions(-) delete mode 100644 keepalived.conf create mode 100644 keepalived.tmpl create mode 100644 run.sh diff --git a/Dockerfile b/Dockerfile index 452de80..a155e97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,35 @@ FROM alpine:latest +#FROM ubuntu:latest -# tested alpine : 3.19 -# keepalived : https://pkgs.alpinelinux.org/package/edge/community/armhf/keepalived - -RUN apk update \ - && apk upgrade \ - && apk add --no-cache \ +RUN apk --update -t add \ keepalived \ curl \ ca-certificates \ + iproute2 \ + grep \ + bash \ + tcpdump \ + tini \ + sed \ && update-ca-certificates \ - && rm -rf /var/cache/apk/* \ + && rm -rf /var/cache/apk/* /tmp/* \ && keepalived --version -COPY keepalived.sh /etc/keepalived/keepalived.sh -RUN chmod +x /etc/keepalived/keepalived.sh; chown root:root /etc/keepalived/keepalived.sh +# RUN apt update \ +# && apt install -y keepalived vim curl ca-certificates \ +# && update-ca-certificates \ +# && rm -rf /var/cache/apk/* /tmp/* \ +# && keepalived --version -CMD ["/usr/sbin/keepalived", "--dont-fork", "--dump-conf", "--vrrp", "--log-detail", "--log-console"] \ No newline at end of file +COPY run.sh /usr/local/bin/ +COPY keepalived.tmpl /etc/keepalived/ + +ENTRYPOINT ["/sbin/tini", "--"] +CMD ["run.sh"] + +#RUN chmod 644 /etc/keepalived/keepalived.conf; chown root:root /etc/keepalived/keepalived.conf +# COPY keepalived.sh /etc/keepalived/keepalived.sh +# RUN chmod 755 /etc/keepalived/keepalived.sh; chown root:root /etc/keepalived/keepalived.sh + +#ENTRYPOINT ["/usr/sbin/keepalived", "--dont-fork", "--dump-conf", "--vrrp", "--log-detail", "--log-console"] +#CMD ["/usr/sbin/keepalived", "--dont-fork", "--dump-conf", "--vrrp", "--log-detail", "--log-console", "-f","/etc/keepalived/keepalived.conf"] \ No newline at end of file diff --git a/keepalived.conf b/keepalived.conf deleted file mode 100644 index 0e293fc..0000000 --- a/keepalived.conf +++ /dev/null @@ -1,41 +0,0 @@ -global_defs { - #Hostname will be used by default - router_id master_node - #vrrp_version 2 - #vrrp_garp_master_delay 1 - #vrrp_garp_master_refresh 60 - #Uncomment the next line if you'd like to use unique multicast groups - #vrrp_mcast_group4 224.0.0.{{VRID}} - #script_user root - #enable_script_security -} - -vrrp_script chk_haproxy { - script "/etc/keepalived/keepalived.sh" - timeout 1 - interval 1 # check every 1 second - fall 2 # require 2 failures for KO - rise 2 # require 2 successes for OK -} - -vrrp_instance VI_1 { - state MASTER - interface eth0 - virtual_router_id 51 - priority 100 - advert_int 1 - nopreempt #Prevent fail-back - - track_script { - chk_haproxy - } - - authentication { - auth_type PASS - auth_pass 1111 - } - - virtual_ipaddress { - 192.168.0.247 - } -} \ No newline at end of file diff --git a/keepalived.tmpl b/keepalived.tmpl new file mode 100644 index 0000000..e9c5be3 --- /dev/null +++ b/keepalived.tmpl @@ -0,0 +1,20 @@ +vrrp_instance VI__routerid_ { + state _state_ + priority _priority_ + + interface _interface_ + virtual_router_id _routerid_ + + advert_int 2 + + unicast_peer { + } + + authentication { + auth_type PASS + auth_pass _password_ + } + + virtual_ipaddress { + } +} \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..50ca685 --- /dev/null +++ b/run.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# 환경변수 설정 +if [ -z "${KEEPALIVED_ROUTER_ID}" ] || [ -z "${KEEPALIVED_UNICAST_PEERS}" ] || [ -z "${KEEPALIVED_VIRTUAL_IPS}" ]; then + echo "Error: Variables 'KEEPALIVED_ROUTER_ID' or 'KEEPALIVED_UNICAST_PEERS' or 'KEEPALIVED_VIRTUAL_IPS' is not specified!" + exit 1 +fi + +if [ -z "${KEEPALIVED_STATE}" ]; then + export KEEPALIVED_STATE="BACKUP" +fi +if [ -z "${KEEPALIVED_PRIORITY}" ] && [ "${KEEPALIVED_STATE^^}" == "BACKUP" ]; then + export KEEPALIVED_PRIORITY="$(($RANDOM%199))" +fi +if [ -z "${KEEPALIVED_PRIORITY}" ] && [ "${KEEPALIVED_STATE^^}" == "MASTER" ]; then + export KEEPALIVED_PRIORITY="200" +fi +if [ -z "${KEEPALIVED_INTERFACE}" ]; then + export KEEPALIVED_INTERFACE="eth0" +fi +if [ -z "${KEEPALIVED_PASSWORD}" ]; then + export KEEPALIVED_PASSWORD="P@ssw0rd" +fi + +# 구성 파일 설정 +cp -f /etc/keepalived/keepalived.tmpl /etc/keepalived/keepalived.conf +chmod 644 /etc/keepalived/keepalived.conf +chown root:root /etc/keepalived/keepalived.conf + +sed -i "s/_routerid_/${KEEPALIVED_ROUTER_ID}/g" /etc/keepalived/keepalived.conf && \ +sed -i "s/_state_/${KEEPALIVED_STATE}/g" /etc/keepalived/keepalived.conf && \ +sed -i "s/_priority_/${KEEPALIVED_PRIORITY}/g" /etc/keepalived/keepalived.conf && \ +sed -i "s/_interface_/${KEEPALIVED_INTERFACE}/g" /etc/keepalived/keepalived.conf && \ +sed -i "s/_password_/${KEEPALIVED_PASSWORD}/g" /etc/keepalived/keepalived.conf && \ + +num=`echo ${KEEPALIVED_UNICAST_PEERS} | sed 's/,/\n/g' | wc -l` +for n in $(seq ${num}); do + ip=$(echo ${KEEPALIVED_UNICAST_PEERS} | sed 's/,/\n/g' | sed -n ${n}p) + sed -i "/unicast_peer/a $(echo -e ${ip})" /etc/keepalived/keepalived.conf +done + +num=`echo ${KEEPALIVED_VIRTUAL_IPS} | sed 's/,/\n/g' | wc -l` +for n in $(seq ${num}); do + ip=$(echo ${KEEPALIVED_VIRTUAL_IPS} | sed 's/,/\n/g' | sed -n ${n}p) + sed -i "/virtual_ipaddress/a ${ip}" /etc/keepalived/keepalived.conf +done + +# keepalive 시작 +rm -rf /var/run/keepalived +if (pgrep -fl keepalived >/dev/null 2>&1); then + echo "Info: keepalived process already running, killing..." + pkill -9 keepalived +fi +keepalived --use-file /etc/keepalived/keepalived.conf --dont-fork --log-console & + +sleep 1 +echo "Info: keepalived process started!" + +# TRAP 처리 +trap "stop; exit 0;" SIGHUP SIGINT SIGQUIT SIGKILL SIGTERM +stop() { + echo "Info: killing keepalived process..." + pkill -2 keepalived + exit 0 +} + +# 동작확인 +while (pgrep -fl keepalived >/dev/null 2>&1) +do + sleep 5 +done +echo "Error: keepalived is not running, exiting..." +exit 1 \ No newline at end of file