Tvheadend atsarginis serveris, kai atsijungia pagrindinis 1

Tvheadend atsarginis serveris, kai atsijungia pagrindinis

Tekstas atnaujintas

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

Vienos programos dėka, tai pavyko pasidaryti.

Daug nesiplėsiu.

Einam prie reikalo.

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 pamėginti ten pateiktą konfigūraciją, veikia, bet ją reikėjo truputį papildyti.

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 haproxy.cfg

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

global
 log 127.0.0.1 local0 notice
 maxconn 2000
 user haproxy
 group haproxy

 defaults
 log global
 mode http
 option httplog
 option dontlognull
 retries 3
 option redispatch
 timeout connect 5000
 timeout client 10000
 timeout server 10000

 listen http-adresas
 bind 0.0.0.0:9981
 mode http
 stats enable
 stats uri /haproxy?stats
 stats realm Strictly\ Private
 stats auth define_a_username:define_a_password
 balance first
 option httpclose
 option forwardfor
 server server2name atsarginio_severio_ip:portas
 server server3name atsarginio_severio_ip:portas 

 listen htsp-adresas
 bind 0.0.0.0:9982
 mode tcp
 stats enable
 stats uri /haproxy?stats
 stats realm Strictly\ Private
 stats auth define_a_username:define_a_password
 balance first
 option httpclose
 server server2name atsarginio_severio_ip:portas
 server server3name 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 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 veikti.

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.

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.

Kai pirmasis serveris grįžta į jį permeta tada, kai perjungiamas kanalas.

Kiek teko pastebėti viskas veikia sklandžiai tiek žiūrint per vlc ar naudojant kodi.

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.

Patiko puslapio turinys?
Prenumeruok naujienas.

Gauk žinutę nuo manęs apie naujus įrašus.
Invalid email address
Prižadu, spamas nebus siunčiamas.

One Comment

  • Haproxy apskritai labai stiprus įrankis ne vien balansavimui ar patikimumui (redudancy).
    Gali tarkim uždėti SSL kodavimą praktiškai kokiam nori protokolui (ne tik http ar paštui), mux’int kelis servisus po vienu portu ir panašiai.
    Žiūrėk tik jei tau reikia IP adresų loguose, nes jei paslėpi servisus po haproxy, log’uose nematysi užklausiančio IP, tik localhost. Apache turi extension, kuris supranta haproxy protokolą ir deda realius IP į log’us, kaip dėl kitų serverių nežinau.
    O TVH neesu bandęs, streaminimui ir įrašams daugiausia naudoju Emby serveriuką.

    Reply

Komentarai

Scroll to Top