LAB project: Difference between revisions

From Essential
Jump to navigation Jump to search
No edit summary
Line 23: Line 23:
while (nc -zw2 infocepo.com 443 >/dev/null 2>&1 ||(sleep 10 ;nc -zw4 infocepo.com 443 >/dev/null 2>&1 ) );do
while (nc -zw2 infocepo.com 443 >/dev/null 2>&1 ||(sleep 10 ;nc -zw4 infocepo.com 443 >/dev/null 2>&1 ) );do
   if [ -z "$(find /root/ha_synced -type f -mmin -60 2>/dev/null )" ] ;then
   if [ -z "$(find /root/ha_synced -type f -mmin -60 2>/dev/null )" ] ;then
    haUpdate="$(cd /share/admin ;./bisync.sh /share/admin/ /share/admin/ infocepo.com |grep -w ha.sh )"
#    haUpdate="$(cd /share/admin ;./bisync.sh /share/admin/ /share/admin/ infocepo.com |grep -w ha.sh )"
    if [ ! -z "${haUpdate}" ] ;then
#    if [ ! -z "${haUpdate}" ] ;then
       (bash -x /root/enable/ha.sh >>/var/log/ha.log 2>&1 )&
#       echo "Alert! ha.sh updated"
      exit 1
#      (bash -x /root/enable/ha.sh >>/var/log/ha.log 2>&1 )&
    fi
#      kill -9 $$
#    fi
     rsync --numeric-ids --delete --force --modify-window=1 --ignore-errors --block-size=128.00K --inplace --no-whole-file \
     rsync --numeric-ids --delete --force --modify-window=1 --ignore-errors --block-size=128.00K --inplace --no-whole-file \
     -z --compress-level=9 \
     -z --compress-level=9 \
Line 51: Line 52:
#Random startup time
#Random startup time
sleep $((RANDOM%10))
sleep $((RANDOM%10))
#Restart if another instance
nc -zw2 "${ipPublic}" 443 >/dev/null 2>&1 &&systemctl start kexec.target
#Start
cd /share/admin &&./infocepoStart.sh &
cd /share/admin &&./infocepoStart.sh &


Line 78: Line 74:
#if ping -w2 -c1 wikipedia.org >/dev/null 2>&1 ;then
#if ping -w2 -c1 wikipedia.org >/dev/null 2>&1 ;then
#  (bash -x /root/enable/ha.sh >>/var/log/ha.log 2>&1 )&
#  (bash -x /root/enable/ha.sh >>/var/log/ha.log 2>&1 )&
exit 1
kill -9 $$
#fi
#fi



Revision as of 08:59, 24 February 2022

Projet de LAB CLOUD résiliant et faible consommation.

Diagram

Infocepo.drawio.png

ha.sh code

#!/bin/bash

echo "$(date): init"

#Screen off
vbetool dpms off

#Clean
cd /share/admin &&./stopInfocepo.sh

#If I was the master sleep a little !
ipPublic="$(dig +short myip.opendns.com @resolver1.opendns.com )"
ipMasterOld="$(nslookup infocepo.com |sed -rn 's#^Address: (.*)$#\1#p' )"
[ "${ipPublic}" = "${ipMasterOld}" ] &&sleep 240

#Wait master down (big loop)
while (nc -zw2 infocepo.com 443 >/dev/null 2>&1 ||(sleep 10 ;nc -zw4 infocepo.com 443 >/dev/null 2>&1 ) );do
  if [ -z "$(find /root/ha_synced -type f -mmin -60 2>/dev/null )" ] ;then
#    haUpdate="$(cd /share/admin ;./bisync.sh /share/admin/ /share/admin/ infocepo.com |grep -w ha.sh )"
#    if [ ! -z "${haUpdate}" ] ;then
#       echo "Alert! ha.sh updated"
#      (bash -x /root/enable/ha.sh >>/var/log/ha.log 2>&1 )&
#      kill -9 $$
#    fi
    rsync --numeric-ids --delete --force --modify-window=1 --ignore-errors --block-size=128.00K --inplace --no-whole-file \
     -z --compress-level=9 \
     -aAXxv \
     --backup-dir=rsync-rollback/$(date '+%Y-%m-%d') \
     --exclude=rsync-rollback \
     --exclude=.rsync_* \
     --rsh="ssh -i /root/.ssh/me@infocepo.com.key -p 1901 -oStrictHostKeyChecking=no" \
     infocepo.com:/share/ /share/ &&touch /root/ha_synced
  fi
  sleep 10
done

#Maybe it's me down ! If INTERNET down, reboot
! ping -w2 -c1 wikipedia.org >/dev/null 2>&1 &&systemctl start kexec.target

#Become master

#Register DNS
ipMasterDown="$(nslookup infocepo.com |sed -rn 's#^Address: (.*)$#\1#p' )"
curl 'https://dynamicdns.park-your-domain.com/update?host=@&domain=infocepo.com&password='"$(cat /share/admin/.namecheap-password )"'&ip='"${ipPublic}"

#Random startup time
sleep $((RANDOM%10))
cd /share/admin &&./infocepoStart.sh &

#Wait DNS propagation
sleep $((240-25))

#Monitor
echo "$(date): up"
[ "${ipPublic}" = "${ipMasterDown}" ] &&ipMasterDown=""
while [ "${ipPublic}" = "$(nslookup infocepo.com |sed -rn 's#^Address: (.*)$#\1#p' )" ] \
 &&( ! nc -zw2 "${ipMasterDown}" 443 >/dev/null 2>&1 ) \
 &&(nc -zw2 "${ipPublic}" 443 >/dev/null 2>&1 ||nc -zw4 "${ipPublic}" 443 >/dev/null 2>&1 ) \
 &&(nc -zw2 "${ipMasterDown}" 1901 >/dev/null 2>&1 ||ping -w2 -c1 debian.org >/dev/null 2>&1 ||ping -w2 -c1 wikipedia.org >/dev/null 2>&1 ) ;do
  sleep 4
done
echo "$(date): down"

#Stop
cd /share/admin &&./stopInfocepo.sh

#Comment these lines for production
#if ping -w2 -c1 wikipedia.org >/dev/null 2>&1 ;then
#  (bash -x /root/enable/ha.sh >>/var/log/ha.log 2>&1 )&
#  kill -9 $$
#fi

#Reboot
systemctl start kexec.target

CV

[CV]