loadbalancer_-_bash-skript
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| loadbalancer_-_bash-skript [2015-05-12 09:14:04] – [LoadBalancer - BASH-Skript] manfred | loadbalancer_-_bash-skript [2016-04-12 22:50:01] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== LoadBalancer - BASH-Skript ====== | ||
| + | |||
| + | **__Diese Skripte befinden sich z.Z. noch in der Testphase!__** | ||
| + | |||
| + | Vorbereitungen: | ||
| + | > cp / | ||
| + | > aptitude purge ldirectord | ||
| + | > aptitude update && aptitude install ifenslave net-tools ethtool wget ipvsadm | ||
| + | > cp / | ||
| + | |||
| + | so werden die neuen Skripte manuell benutzt: | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | |||
| + | |||
| + | === Beschreibung der einzelnen Skript-Aufrufe === | ||
| + | |||
| + | **''/ | ||
| + | - dieser Aufruf fährt die öffentlichen IP's (virtuelle IP's) auf dem lo-IF hoch | ||
| + | - und bindet die internen IP's (realen IP's) an die öffentlichen IP's (virtuelle IP's) | ||
| + | |||
| + | **''/ | ||
| + | - dieser Aufruf trennt die internen IP's (realen IP's) von den öffentlichen IP's (virtuelle IP's) | ||
| + | - und fährt die öffentlichen IP's (virtuelle IP's) auf dem lo-IF runter | ||
| + | |||
| + | **''/ | ||
| + | - dieser Aufruf kontrolliert einmal alle Verbindungen und setzt entsprechend die „Route“ | ||
| + | |||
| + | **''/ | ||
| + | - dieser Aufruf führt den Aufruf ''/ | ||
| + | - leg die Datei ''/ | ||
| + | - und führt anschließend das Kommando ''/ | ||
| + | - der zyklische Check läuft nur solange, wie die Datei ''/ | ||
| + | |||
| + | **''/ | ||
| + | - dieser Aufruf löscht die Datei ''/ | ||
| + | - und führt anschließend das Kommando ''/ | ||
| + | |||
| + | ===== Skripte ===== | ||
| + | |||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Betriebs-Modus | ||
| + | # | ||
| + | |||
| + | #set -x | ||
| + | |||
| + | # | ||
| + | VERSION=" | ||
| + | |||
| + | # | ||
| + | ### damit auch alle Programme gefunden werden | ||
| + | PATH="/ | ||
| + | ARBEITSVERZEICHNIS=" | ||
| + | |||
| + | # | ||
| + | ### Monitor | ||
| + | # | ||
| + | # ipvsadm -Ln -c | ||
| + | # ipvsadm -Ln --timeout | ||
| + | # ipvsadm -Ln --daemon | ||
| + | # ipvsadm -Ln --stats | ||
| + | # ipvsadm -Ln --rate | ||
| + | # ipvsadm -Ln --thresholds | ||
| + | # ipvsadm -Ln --persistent-conn | ||
| + | # | ||
| + | # | ||
| + | ### CFG-Block | ||
| + | # | ||
| + | # # | ||
| + | # virtual=kundenservice.victorvox.de: | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | |||
| + | # | ||
| + | # | ||
| + | ### Funktionen | ||
| + | |||
| + | # | ||
| + | vorbereitung() | ||
| + | { | ||
| + | # | ||
| + | ### hier werden die CFG-Bloecke in Zeilen umgewandelt | ||
| + | ### | ||
| + | ### virtual=www.telco.de: | ||
| + | LDIRECTORD_CF=" | ||
| + | export LDIRECTORD_CF | ||
| + | |||
| + | if [ -z " | ||
| + | echo "In der Datei '/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | ### nur zum testen | ||
| + | #echo " | ||
| + | # | ||
| + | #" | ||
| + | # | ||
| + | |||
| + | # | ||
| + | ### hier werden die vorgesehenen Interface-Namen ermittelt | ||
| + | ### | ||
| + | ### www.telco.de wwwtelco | ||
| + | INTERFACENAME=" | ||
| + | export INTERFACENAME | ||
| + | |||
| + | if [ -z " | ||
| + | echo "In der Datei '/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | ### nur zum testen | ||
| + | #echo " | ||
| + | # | ||
| + | #" | ||
| + | #exit 0 | ||
| + | # | ||
| + | ### hier werden die Hostnamen zu IP's aufgelöst | ||
| + | IP_FQDN=" | ||
| + | do | ||
| + | ### hier wird der FQDN in eine IP umgewandelt bzw. die IP uebernommen | ||
| + | IPADR=" | ||
| + | if [ -z " | ||
| + | IPADR=" | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | echo " | ||
| + | done)" | ||
| + | export IP_FQDN | ||
| + | |||
| + | ### nur zum testen | ||
| + | #echo " | ||
| + | # | ||
| + | #" | ||
| + | #exit 0 | ||
| + | # | ||
| + | ### | ||
| + | ### der hier ist recht langsam und muss schneller werden | ||
| + | ### | ||
| + | ### hier werden die entsprechenden lo: | ||
| + | LDIRECTORD_IFN_CF=" | ||
| + | do | ||
| + | # | ||
| + | unset BLOCK | ||
| + | BLOCK=" | ||
| + | VIRTUAL=" | ||
| + | IFNAME=" | ||
| + | |||
| + | ### hier wird der FQDN in eine IP umgewandelt bzw. die IP uebernommen | ||
| + | VIPADR=" | ||
| + | |||
| + | # | ||
| + | echo " | ||
| + | done)" | ||
| + | export LDIRECTORD_IFN_CF | ||
| + | |||
| + | if [ -z " | ||
| + | echo "Die Daten aus der Datei '/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | #echo " | ||
| + | echo " | ||
| + | #exit 0 | ||
| + | # | ||
| + | |||
| + | # | ||
| + | ### hier werden die lo: | ||
| + | ### | ||
| + | |||
| + | IST_IPLOIF=" | ||
| + | export IST_IPLOIF | ||
| + | |||
| + | IST_ALLELOIP=" | ||
| + | export IST_ALLELOIP | ||
| + | |||
| + | IST_ALLELOIF=" | ||
| + | export IST_ALLELOIF | ||
| + | |||
| + | } | ||
| + | # | ||
| + | |||
| + | # | ||
| + | ### Modus | ||
| + | |||
| + | case " | ||
| + | [Ss][Tt][Aa][Rr][Tt]) | ||
| + | vorbereitung | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | echo "${0} ${1}" | logger -t LoadBalancer | ||
| + | shift | ||
| + | ;; | ||
| + | [Ss][Tt][Oo][Pp]) | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | echo "${0} ${1}" | logger -t LoadBalancer | ||
| + | shift | ||
| + | ;; | ||
| + | [Cc][Hh][Ee][Cc][Kk]) | ||
| + | vorbereitung | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | shift | ||
| + | ;; | ||
| + | [Ss][Tt][Aa][Tt][Uu][Ss]) | ||
| + | ipvsadm -Ln | ||
| + | echo | ||
| + | ip a show dev lo | fgrep ' | ||
| + | echo | ||
| + | ps ax | fgrep -v grep | fgrep LB_Dienst | ||
| + | shift | ||
| + | ;; | ||
| + | *) | ||
| + | echo "${0} Start" | ||
| + | echo "${0} Stop" | ||
| + | echo "${0} Check" | ||
| + | shift | ||
| + | exit 1 | ||
| + | ;; | ||
| + | esac | ||
| + | </ | ||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Start | ||
| + | # | ||
| + | |||
| + | #set -x | ||
| + | |||
| + | # | ||
| + | VERSION=" | ||
| + | |||
| + | # | ||
| + | ### damit auch alle Programme gefunden werden | ||
| + | PATH="/ | ||
| + | |||
| + | # | ||
| + | ### dieses Skript kann nicht einzeln gestartet werden | ||
| + | |||
| + | if [ -z " | ||
| + | ARBEITSVERZEICHNIS=" | ||
| + | echo " | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### Funktionen | ||
| + | |||
| + | # | ||
| + | ip_out() | ||
| + | { | ||
| + | if [ -z " | ||
| + | host ${1} | awk ' | ||
| + | else | ||
| + | echo ${1} | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | # | ||
| + | ### hier werden die lo: | ||
| + | ### entfernt | ||
| + | ### | ||
| + | |||
| + | #echo " | ||
| + | # | ||
| + | #" | ||
| + | |||
| + | TEMPDATEI=" | ||
| + | echo " | ||
| + | do | ||
| + | ### egal was es ist, es wird eine IP ausgegeben | ||
| + | ip_out ${IPNM} | ||
| + | done | awk ' | ||
| + | #exit | ||
| + | |||
| + | # | ||
| + | # inet 10.31.2.178/ | ||
| + | # inet 193.227.192.234/ | ||
| + | ip addr show dev lo | fgrep "scope global" | ||
| + | do | ||
| + | # _INET VIPADR _BR _IP _SCOPE _GLOBAL UEIFLABEL | ||
| + | # oder | ||
| + | # _INET VIPADR _SCOPE _GLOBAL UEIFLABEL | ||
| + | VIPADR=" | ||
| + | _IPADR=" | ||
| + | IFLABEL=" | ||
| + | |||
| + | #echo " | ||
| + | if [ -n " | ||
| + | #echo " | ||
| + | ### Verbindungen aus dem LB entfernen | ||
| + | ipvsadm -Ln | fgrep " | ||
| + | do | ||
| + | ipvsadm -Lnt " | ||
| + | do | ||
| + | echo "-e -t ${VIPPORT} -r ${RIPPORT} -w 0 | ||
| + | -d -t ${VIPPORT} -r ${RIPPORT} | ||
| + | -D -t ${VIPPORT}" | ||
| + | |||
| + | echo "-e -t ${VIPPORT} -r ${RIPPORT} -w 0 | ||
| + | -d -t ${VIPPORT} -r ${RIPPORT} | ||
| + | -D -t ${VIPPORT}" | ||
| + | done | ||
| + | done | ||
| + | |||
| + | if [ -n " | ||
| + | echo "ip addr del ${VIPADR} dev lo label ${IFLABEL}" | ||
| + | ip addr del ${VIPADR} dev lo label ${IFLABEL} | ||
| + | else | ||
| + | echo "ip addr del ${VIPADR} dev lo" | logger -t LoadBalancer | ||
| + | ip addr del ${VIPADR} dev lo | ||
| + | fi | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | rm -f ${TEMPDATEI} | ||
| + | |||
| + | # | ||
| + | echo " | ||
| + | do | ||
| + | # | ||
| + | #echo " | ||
| + | unset BLOCK | ||
| + | BLOCK=" | ||
| + | IFNAME=" | ||
| + | VIPADR=" | ||
| + | VIRTUAL=" | ||
| + | |||
| + | ### hier wird (wegen der Einfachheit) der Port von " | ||
| + | TCPPORTS=" | ||
| + | ALLEREALIPS=" | ||
| + | FALLBACK=" | ||
| + | SCHEDULER=" | ||
| + | PERSISTENT=" | ||
| + | PROTOCOL=" | ||
| + | |||
| + | # | ||
| + | ### hier werden fehlende externe IPs an lo montiert | ||
| + | if [ -n " | ||
| + | #ip addr | fgrep " | ||
| + | if [ -z "$(ip addr | fgrep " | ||
| + | # | ||
| + | # ip addr add 193.227.192.136/ | ||
| + | # ip addr del 193.227.192.136/ | ||
| + | ip addr add ${VIPADR}/ | ||
| + | |||
| + | if [ -z "$(ip addr | fgrep " | ||
| + | echo " | ||
| + | fi | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### hier werden die Server-Verbindungen aktiviert | ||
| + | (for TPORT in ${TCPPORTS} | ||
| + | do | ||
| + | echo "-A -t ${VIPADR}: | ||
| + | for REAL_IP in ${ALLEREALIPS} ${FALLBACK} | ||
| + | do | ||
| + | echo "-a -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | done | ||
| + | done) | ipvsadm -R 2>/ | ||
| + | |||
| + | done | ||
| + | </ | ||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Stop | ||
| + | # | ||
| + | |||
| + | #set -x | ||
| + | |||
| + | # | ||
| + | VERSION=" | ||
| + | |||
| + | # | ||
| + | ### damit auch alle Programme gefunden werden | ||
| + | PATH="/ | ||
| + | RUN="/ | ||
| + | |||
| + | # | ||
| + | ### laufende Auftraege beenden | ||
| + | |||
| + | rm -f ${RUN} / | ||
| + | |||
| + | # | ||
| + | |||
| + | ipvsadm -Ln | awk ' | ||
| + | do | ||
| + | # | ||
| + | VIPADR=" | ||
| + | TCPPORTS=" | ||
| + | ALLEREALIPS=" | ||
| + | # | ||
| + | ### hier werden die Server-Verbindungen aktiviert | ||
| + | (for TPORT in ${TCPPORTS} | ||
| + | do | ||
| + | for REAL_IP in ${ALLEREALIPS} | ||
| + | do | ||
| + | echo "-d -t ${VIPADR}: | ||
| + | done | ||
| + | echo "-D -t ${VIPADR}: | ||
| + | done) | ipvsadm -R 2>/ | ||
| + | done | ||
| + | |||
| + | # | ||
| + | ### | ||
| + | ### hier werden alle lo: | ||
| + | ### | ||
| + | |||
| + | ip a show dev lo | awk '/ | ||
| + | do | ||
| + | # echo "ip addr del ${LOIP} dev lo label ${LOIF}" | ||
| + | ip addr del ${LOIP} dev lo label ${LOIF} | ||
| + | done | ||
| + | |||
| + | # | ||
| + | </ | ||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Check | ||
| + | # | ||
| + | |||
| + | #set -x | ||
| + | |||
| + | # | ||
| + | VERSION=" | ||
| + | |||
| + | # | ||
| + | ### damit auch alle Programme gefunden werden | ||
| + | PATH="/ | ||
| + | WGETOPTS=" | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # Die Verbindungsüberprüfung wird auf eine Anzahl von Prozessen verteilt, | ||
| + | # die in dieser Variablen gespeichert wird. | ||
| + | # | ||
| + | # Sollte diese Variable leer sein, wird die Anzahl der CPU-Kerne verwendet. | ||
| + | #PROZESSE=8 | ||
| + | |||
| + | if [ -z " | ||
| + | PROZESSE=" | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### dieses Skript kann nicht einzeln gestartet werden | ||
| + | |||
| + | if [ -z " | ||
| + | ARBEITSVERZEICHNIS=" | ||
| + | echo " | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### Funktionen | ||
| + | |||
| + | # | ||
| + | ip_out() | ||
| + | { | ||
| + | if [ -z " | ||
| + | host ${1} | awk ' | ||
| + | else | ||
| + | echo ${1} | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # | ||
| + | check_now() | ||
| + | { | ||
| + | cat " | ||
| + | do | ||
| + | # | ||
| + | # | ||
| + | VIPADR=" | ||
| + | unset BLOCK | ||
| + | BLOCK=" | ||
| + | VIRTUAL=" | ||
| + | |||
| + | ### hier wird (wegen der Einfachheit) der Port von " | ||
| + | TPORT=" | ||
| + | ALLEREALIPS=" | ||
| + | # | ||
| + | FALLBACK=" | ||
| + | # | ||
| + | SERVICE=" | ||
| + | REQUEST=" | ||
| + | RECEIVE=" | ||
| + | # | ||
| + | # | ||
| + | |||
| + | # | ||
| + | ### hier wird die FallBack-Verbindung wieder entfernt | ||
| + | |||
| + | #echo " | ||
| + | if [ -z " | ||
| + | FB_AUS="" | ||
| + | else | ||
| + | FBEINTAG=" | ||
| + | FBADR=" | ||
| + | FBPORT=" | ||
| + | |||
| + | FB_EIN=" | ||
| + | -e -t ${VIPADR}: | ||
| + | |||
| + | FB_AUS=" | ||
| + | -d -t ${VIPADR}: | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | |||
| + | (for REAL_IP in ${ALLEREALIPS} | ||
| + | do | ||
| + | TEMP="/ | ||
| + | |||
| + | # | ||
| + | ### hier wird der FQDN der REAL-Hosts in eine IP umgewandelt bzw. die IP uebernommen | ||
| + | RIPADR=" | ||
| + | if [ -z " | ||
| + | RIPADR=" | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### hier wird der IST-Zustand einer LB-Verbindung zum Real-Server ausgelesen | ||
| + | #echo "3: ipvsadm -Ln | fgrep \" | ||
| + | #echo "# | ||
| + | IST_WEIGHT=" | ||
| + | if [ -z " | ||
| + | IST_WEIGHT=" | ||
| + | if [ " | ||
| + | IST_WEIGHT=" | ||
| + | else | ||
| + | IST_WEIGHT=" | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | if [ -n " | ||
| + | |||
| + | #echo "5: RIPADR: | ||
| + | # | ||
| + | if [ " | ||
| + | # | ||
| + | # SMTP | ||
| + | # | ||
| + | #echo " | ||
| + | #echo "6: wget ${WGETOPTS} -O ${TEMP} http:// | ||
| + | wget -q ${WGETOPTS} -O ${TEMP} http:// | ||
| + | BEKOMMEN=" | ||
| + | #echo " | ||
| + | |||
| + | if [ " | ||
| + | if [ " | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | fi | ||
| + | else | ||
| + | if [ " | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | fi | ||
| + | fi | ||
| + | else | ||
| + | # | ||
| + | # HTTP / HTTPS | ||
| + | # | ||
| + | #echo " | ||
| + | #echo "7: wget ${WGETOPTS} -O ${TEMP} ${SERVICE}:// | ||
| + | VERBUNDEN=" | ||
| + | #echo "8: VERBUNDEN=' | ||
| + | |||
| + | BEKOMMEN=" | ||
| + | #echo "9: BEKOMMEN=' | ||
| + | |||
| + | if [ " | ||
| + | #echo "- ipvsadm: 1" >> / | ||
| + | if [ -z " | ||
| + | #echo "- ipvsadm: 2" >> / | ||
| + | if [ " | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | fi | ||
| + | else | ||
| + | #echo "- ipvsadm: 4" >> / | ||
| + | if [ " | ||
| + | #echo "- ipvsadm: 05" >> / | ||
| + | if [ " | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | fi | ||
| + | else | ||
| + | #echo "- ipvsadm: 07" >> / | ||
| + | if [ " | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | fi | ||
| + | fi | ||
| + | fi | ||
| + | else | ||
| + | if [ " | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | echo "-e -t ${VIPADR}: | ||
| + | fi | ||
| + | fi | ||
| + | fi | ||
| + | fi | ||
| + | # | ||
| + | ### FallBack | ||
| + | if [ -n " | ||
| + | IPVSADM_LNT=" | ||
| + | ROUTE_SUM=" | ||
| + | ROUTE_CL=" | ||
| + | ROUTE_FB=" | ||
| + | if [ " | ||
| + | if [ -z " | ||
| + | echo "Added fallback server: ${FBADR}: | ||
| + | echo " | ||
| + | fi | ||
| + | else | ||
| + | if [ -n " | ||
| + | echo " | ||
| + | echo " | ||
| + | fi | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | done) | ipvsadm -R # | ||
| + | done | ||
| + | |||
| + | rm -f ${1} | ||
| + | |||
| + | ### wenn Schluss ist, dann muss auch Schluss sein | ||
| + | if [ " | ||
| + | then | ||
| + | echo "Ende von ${STARTZEIT}" | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | } | ||
| + | |||
| + | # | ||
| + | ### Run | ||
| + | |||
| + | ### | ||
| + | ### Bearbeitung je Cluster | ||
| + | ### mit mehreren Prozessen | ||
| + | ### maximale Anzahl der Prozesse = ${PROZESSE} | ||
| + | ### | ||
| + | echo " | ||
| + | do | ||
| + | # | ||
| + | ### es duerfen nur max. soviele Prozesse laufen, | ||
| + | ### wie CPU-Kerne im System stecken | ||
| + | |||
| + | ANZAHL_LAUFEN=" | ||
| + | #echo " | ||
| + | |||
| + | while (( ${ANZAHL_LAUFEN} >= ${PROZESSE} )) | ||
| + | do | ||
| + | sleep 0.1 | ||
| + | ANZAHL_LAUFEN=" | ||
| + | #echo " | ||
| + | done | ||
| + | |||
| + | # | ||
| + | ### wenn Schluss ist, dann muss auch Schluss sein | ||
| + | |||
| + | while [ " | ||
| + | do | ||
| + | exit 0 | ||
| + | done | ||
| + | |||
| + | # | ||
| + | ### Start | ||
| + | |||
| + | DATENDATEI="/ | ||
| + | echo " | ||
| + | ( check_now ${DATENDATEI} ) & | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Hintergrunddienst zur Überwachung | ||
| + | # | ||
| + | # dieses Skript startet/ | ||
| + | # | ||
| + | |||
| + | # | ||
| + | VERSION=" | ||
| + | |||
| + | # | ||
| + | ### damit auch alle Programme gefunden werden | ||
| + | PATH="/ | ||
| + | ARBEITSVERZEICHNIS=" | ||
| + | RUN="/ | ||
| + | export RUN | ||
| + | STARTZEIT=" | ||
| + | export STARTZEIT | ||
| + | |||
| + | WARTEZEIT=" | ||
| + | |||
| + | # | ||
| + | ### Funktionen | ||
| + | # | ||
| + | lbstop() | ||
| + | { | ||
| + | rm -f ${RUN} | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | } | ||
| + | |||
| + | # | ||
| + | ### Start/Stop | ||
| + | |||
| + | case " | ||
| + | [Ss][Tt][Aa][Rr][Tt]|[Rr][Ee][Ll][Oo][Aa][Dd]) | ||
| + | AKTION=START | ||
| + | shift | ||
| + | ;; | ||
| + | [Ss][Tt][Oo][Pp]|[Hh][Aa][Ll][Tt]) | ||
| + | lbstop | ||
| + | shift | ||
| + | ;; | ||
| + | [Rr][Ee][Ss][Tt][Aa][Rr][Tt]) | ||
| + | lbstop | ||
| + | AKTION=START | ||
| + | shift | ||
| + | ;; | ||
| + | [Ss][Tt][Aa][Tt][Uu][Ss]) | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | shift | ||
| + | ;; | ||
| + | *) | ||
| + | echo "${0} [Start|Restart|Reload]" | ||
| + | echo "${0} [Stop|Halt]" | ||
| + | echo "${0} [Status]" | ||
| + | shift | ||
| + | exit 1 | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | # | ||
| + | |||
| + | if [ " | ||
| + | |||
| + | # | ||
| + | echo " | ||
| + | # | ||
| + | ### checken | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | echo " | ||
| + | |||
| + | while [ \" | ||
| + | do | ||
| + | ${ARBEITSVERZEICHNIS}/ | ||
| + | sleep ${WARTEZEIT} | ||
| + | done | ||
| + | # | ||
| + | ### sauber machen | ||
| + | rm -f / | ||
| + | " > / | ||
| + | |||
| + | chmod 0755 / | ||
| + | screen -dmS LB_Check-Dienst_${STARTZEIT} / | ||
| + | # | ||
| + | |||
| + | fi | ||
| + | |||
| + | # | ||
| + | </ | ||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/sh | ||
| + | # | ||
| + | ### BEGIN INIT INFO | ||
| + | # Short-Description: | ||
| + | # Provides: | ||
| + | # Required-Start: | ||
| + | # Required-Stop: | ||
| + | # Default-Start: | ||
| + | # Default-Stop: | ||
| + | ### END INIT INFO | ||
| + | # | ||
| + | # Author: Yoda | ||
| + | # | ||
| + | # init script for LB-Dienst.sh | ||
| + | # | ||
| + | |||
| + | PATH="/ | ||
| + | NAME=LB_Dienst.sh | ||
| + | DAEMON="/ | ||
| + | CONFIG="" | ||
| + | |||
| + | test -x $DAEMON || exit 0 | ||
| + | |||
| + | test -x / | ||
| + | |||
| + | . / | ||
| + | |||
| + | CONFIG_FILE="" | ||
| + | #[ -f " | ||
| + | # | ||
| + | |||
| + | test -f ${CONFIG_FILE} | ||
| + | RC=$? | ||
| + | if [ $RC -ne 0 ] ; then | ||
| + | log_warning_msg "No configuration file found, doing nothing." | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | case " | ||
| + | start|stop|restart|reload|halt|status) | ||
| + | log_daemon_msg " | ||
| + | ##exec " | ||
| + | exec " | ||
| + | RC=$? | ||
| + | log_end_msg $RC | ||
| + | exit $RC | ||
| + | ;; | ||
| + | *) | ||
| + | echo " | ||
| + | " | ||
| + | exit 1 | ||
| + | ;; | ||
| + | esac | ||
| + | </ | ||
| + | |||
| + | den neuen Dienst bootfest machen: | ||
| + | # chmod 0755 / | ||
| + | # update-rc.d lb_dienst defaults | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | watch ' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ==== / | ||
| + | |||
| + | <file bash / | ||
| + | checktimeout=3 | ||
| + | checkinterval=10 | ||
| + | autoreload=yes | ||
| + | logfile=" | ||
| + | quiescent=yes | ||
| + | |||
| + | # | ||
| + | virtual=www.domain.de: | ||
| + | real=ttshop01.public: | ||
| + | real=ttshop02.public: | ||
| + | fallback=fallback01.oqrm.public: | ||
| + | service=http | ||
| + | request=" | ||
| + | receive=" | ||
| + | scheduler=wlc | ||
| + | persistent=30 | ||
| + | protocol=tcp | ||
| + | checktype=negotiate | ||
| + | |||
| + | virtual=www.domain.de: | ||
| + | real=ttshop01.public: | ||
| + | real=ttshop02.public: | ||
| + | fallback=fallback01.public: | ||
| + | service=https | ||
| + | request=" | ||
| + | receive=" | ||
| + | scheduler=wlc | ||
| + | persistent=30 | ||
| + | protocol=tcp | ||
| + | checktype=negotiate | ||
| + | </ | ||
| + | |||
| + | |||
| + | Die Namensauflösung muss funktionieren, | ||
| + | > host www.domain.de | ||
| + | www.domain.de has address 203.202.201.200 | ||
| + | |||
| + | |||
| + | wenn der LB gestartet ist, dann ist die letzte Zeile hier zu sehen (mit dem INTERFACENAME -> '' | ||
| + | > ip a show dev lo | ||
| + | 1: lo: < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | inet 203.202.201.200/ | ||
| + | |||
| + | |||
| + | dieser Test, stellt sicher, dass das System kein ro-Dateisystem hat, was bei einem Fehlerhaften System auftreten kann: | ||
| + | <file bash / | ||
| + | <?php | ||
| + | $ldirectorPage = " | ||
| + | echo ($temp = tmpfile()) ? file_get_contents($ldirectorPage) : "Keine Schreibrechte!"; | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | |||
| + | <file bash / | ||
| + | www.domain.de | ||
| + | </ | ||
