Tvheadend atsarginis serveris, kai atsijungia pagrindinis

Tvheadend atsarginis serveris, kai atsijungia pagrindinis 1

Skaitymo laikas: 3 minutės

Tekstas atnaujintas: 2020-05-01

Ilgą laiką norėjau tokios sistemos, jog atsijungus pagrindiniam tvheadend, būtų permesta į atsarginį.

Vienos programos dėka, tai pavyko.

Daug nesiplėsiu.

Einam prie reikalo.

Prenumeruok

Gauk į paštą žinutę apie naujus įrašus

Haproxy

Žinojau jog nginx irgi turi funkciją kuri permeta srautą, jeigu kažkas atsitinka kitiems serveriams, bet neteko rasti konfigūracijos kuri veiktų su tvheadend.

Radau tik konfigūraciją su haproxy. Užsimaniau išmėginti ten pateiktą konfigūraciją, veikia, bet ją reikėjo truputį pakoreguotai.

Tad viską nuo pradžių, kaip reikia daryti.

Konfigūracija

Reikės haproxy programos.

sudo apt install haproxy

Šios programos pagrindinis failas randasi /etc/haproxy aplankale, kurį reikia pakoreguoti. Failo pavadinimas haproxy.cfg

sudo nano /etc/haproxy/haproxy.cfg

Į šį failą reikia įrašyti tokį konfigą:

global
 maxconn 2000
 user haproxy
 group haproxy

 defaults
 option httpclose
 option dontlognull
 retries 3
 option redispatch
 timeout connect 5000
 timeout client 10000
 timeout server 10000

 listen http-adress
 bind 0.0.0.0:9981
 option forwardfor
 balance first
 mode http
 server serverio1_pav atsarginio_severio_ip:portas
 server serverio2_pav atsarginio_severio_ip:portas 

 listen htsp-adress
 bind 0.0.0.0:9982
 mode tcp
 option tcp-check
 balance first
 server serverio1_pav atsarginio_severio_ip:portas
 server serverio2_pav atsarginio_severio_ip:portas  

Norint jog startuotų kartu su sistema reikia atsidaryti: /etc/init.d/haproxy ir pakeisti iš enabled=0 į enabled=1

Dabar aptarkim, ką pakeičiau nuo komandos kurią radau tvheadend puslapyje.

Keičiau listen dalį.

Ten buvo aprašyta tik viena listen dalis, o kaip žinia tvheadend reikia dviejų prievadų norint jog veiktų, puslapio dalis ir susijungimas su htsp/kodi.

Tai pridėjau dar vieną listen kuris skirtas htsp.

Kadangi htsp nėra http, tai teko pakeisti:

mode http į mode tcp, tada pradėjo kodi rodyti vaizdą.

Pastebėjau jog mėto srautą tarp dviejų serverių nors abudu jie pasiekiami, tai kodi rodydavo naujausią sąrašą kanalų iš pirminio tvheadend ir paskui sumažina nes atsarginiam ne viskas naujausia buvo.

Tada pakeičiau:

balance roundrobin į balance first.

Srautas nebebuvo pastoviai mėtomas. Dabar visada prijungia prie pirmo serverio kuris yra sąraše ir ten palieka iki tol kol jis atsijungia.

Taip pat reikia atkreipti į:

bind 0.0.0.0:9091 ir bind 0.0.0.0:9092, tai pagrindinio serverio kuris turėtų būti visada pasiekiamas prievadai. Būtent į šiuos kreipsis visos programos.

Sutvarkius nustatymus galima startuoti:

sudo service haproxy restart

Startuojant programai yra mėtomos kelios klaidos, bet jos leidžia startuoti, per laiką gal apšlifuosiu konfigūraciją arba jeigu kažkas žino ko tikrai nereikia, tai galit palikit komentarą apačioje.

Konfigūraciją atnaujinau, panaikinau ko nereikėjo. Dabar klaidų neturėtų rodyti.

Kaip viskas veikia?

Kai haproxy startuoja reikia sutikrinti, kad visi klientai kreiptųsi į pagrindinį serverį kuris turės būti pasiekiamas visada. Geriausia tai būtų laikyti kokiam VPS.

Kai vlc ar kodi kreipiasi į haproxy, šias programas nukreipia į pirmąjį tvheadend.

Jeigu pirmasis atsijungia tada sekundės bėgyje haproxy permeta į sekantį tvheadend.

Naudojant vlc tas permetimas gali būti net nepastebimas, kodi irgi tvarkingai permeta.

Kai pirmasis serveris grįžta į jį permeta. Naudojant vlc bus permesta jungiant kitą kanalą, kodi bus permestas, kai bus išjungtas kanalas ~5 sekundžių bėgyje. Kitaip sakant anksčiau ar vėliau visus grąžins prie pagrindinio 😀

Vienintelis minusas kurį pastebėjau tai nerodo teisingo ip adreso jeigu žiūrima per kodi (vartotoją rašo), per vlc žiūrint, ip adresą rodo.

Tvheadend sinchronizacija tarp serverių

Realaus laiko sinchronizacijos neradau nes tvheadend reikia perkrauti norint jog atsinaujintų.

Kadangi žiūrima visada per pagrindinį serverį tai naujausių tvheadend nustatymų nereikia turėti visuose serveriuose.

Teko improvizuoti ir susikurti bash skriptą kuris pasileidžia naktį pasinaudojus crontab.

Taip atsarginiuose serveriuose yra paros laiko senumo tvheadend.

Home direktorijoje yra hts aplankalas, jame yra reikalingi failai.

Bash skriptas yra patalpintas ten kur yra hts aplankalas.

Tad sukuriam ten bash:

cd /home
nano tvhbackup.sh

Įkeliam:

!/bin/bash
 echo "Tvheadend old backup remove"
 cd /home && rm backup_hts.tar.bz2 > /dev/null 2>&1;
 echo "Tvheadend backup compress"
 cd /home && tar cvjf backup_hts.tar.bz2 hts > /dev/null 2>&1;

Taip gausime backup_hts.tar.bz2 failą.

Tada reikia bash skripto kuris paims šį failą ir atnaujins:

Taip pat bash skriptas home aplankale, nepamištam jog tai turi būti atsarginiam serveryje.

cd /home
nano tvh.sh

Įkeliam:

!/bin/bash
 echo "Download Tvheadend Backup"
 cd /home && /usr/bin/wget http://serverio_ip/backup_hts.tar.bz2 -O     backup_hts.tar.bz2 > /dev/null 2>&1;
 echo "Tvheadend stop"
 service tvheadend stop > /dev/null 2>&1;
 echo "Remove old Tvheadend"
 cd /home && /bin/rm -rf hts > /dev/null 2>&1;
 echo "Extract"
 cd /home && /bin/tar xvjf backup_hts.tar.bz2 > /dev/null 2>&1;
 echo "Start Tvheadend"
 service tvheadend start > /dev/null 2>&1

Reiktų atkreipti į: wget http://serverio_ip/backup_hts.tar.bz2

Paimt naujausią kopiją naudoju nginx. Šitoje vietoje reiktų pasikeisti pagal save, kaip norėsit jog paimtų naujausią kopiją.

Dabar reikia sukurti crontab, pagrindiniam serveryje:

crontab -e

Failo apačioje paliekame:

0 4 * * * sh /home/tvhbackup.sh

Atsarginiame darome tą patį, tik paliekame:

1 4 * * * sh /home/tvh.sh

Finale gauname tokį rezultatą:

  1. Naktį, o tiksliau 04:00 val. bus paleistas skriptas kuris sukurs tvheadend kopiją.
  2. Tada 04:01 val. bus parsiųstas failas iš pagrindinio.
  3. Stabdomas tvheadend atsarginiame serveryje.
  4. Ištrinamas hts aplankalas.
  5. Išskleidžiamas parsiųstas backup_hts.tar.bz2
  6. Startuoja tvheadend su naujausiais nustatymais.

Mini pastebėjimas, reiktų įsitikinti, kad epg paėmimas per external skriptus yra visuose serveriuose, nes kodi gali nerodyti epg jeigu permeta į kitą serverį.

Taip pat tarp tvheadend nustatymų reiktų įjungti: Use PROXY protocol & X-Forwarded-For.

Ar patiko įrašas?

Spausk jog įvertinti.

Vidutinis įvertinimas / 5. Įvertino:

Įvertinimų nėra, būk pirmas!

Jeigu įrašas patiko...

Pasidalink!

Jeigu įrašas nepatiko.

Padėk patobulinti įrašą!

Būtų malonu sužinoti kodėl?


Jeigu patiko įrašas, siūlau prenumeruoti, kaip tai padaryti aprašiau čia (el. paštu, telegram ir discord kanalai, facebook, twitter).

Gal patiks ir kiti įrašai
Linux programos
Skaityti

Linux programos kurias naudoju

Tekstas atnaujintas: 2021-01-25 Nieko mandraus šiame įraše nebus, tiesiog mėginsiu trumpai apžvelgti ką naudoju. Gal kažkas suras kažką…