W dniu 11 marca 2015 21:58 użytkownik Tomasz Chiliński < tomasz.chilinski@chilan.com> napisał:
W dniu 11.03.2015 21:45, Marcin Nastałek napisał(a):
Nie wiem kolego czy coś Ci to pomoże ale ja kwestię zapasowego
serwera rozwiązałem następująco:
- Zgrałem po kluczach rsa ze sobą dwa serwery z LMS.
- Z głównego serwera wykonuje sobie skrypt:
#!/bin/bash CREATE=`date +%F` DELETE=`date +%F -d"-28 day"` ARCHIWUM=`date +%F -d"-1 day"` rm /backups/lms.sql wait sleep 5 mysqldump -u baza_lms -phaslo_lms > /backups/lms.sql wait sleep 5
ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/lms.sql ] then cp /backups/lms.sql /backups/archiwum/$CREATE.lms.sql fi exit" wait ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/lms.sql ] then rm /backups/lms.sql fi exit" ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/archiwum/$DELETE.lms.sql ] then rm /backups/archiwum/$DELETE.lms.sql fi exit" sleep 5 scp -i /root/backups/id_rsa -P 9876 /backups/lms.sql root@adres_IP_serwerabackupu:/backups/lms.sql wait sleep 5 ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/lms.sql ] then mysql -u user_bazy_na_serwerze_backupu -phaslo_do_bazy_na_serwerze_backupu lms < /backups/lms.sql fi exit" sleep 5 exit
Skrypt jaki jest każdy widzi, prosty jak budowa cepa. CREATE=`date +%F` DELETE=`date +%F -d"-28 day"` ARCHIWUM=`date +%F -d"-1 day"`
Definicja danych które pozwalają mi segregować logi i tworzyć archiwum na serwerze backupu. rm /backups/lms.sql
Usunięcie kopii lokalnej backupu z wczoraj
mysqldump -u baza_lms -phaslo_lms > /backups/lms.sql
Wykonanie nowego zrzutu.
ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/lms.sql ] then cp /backups/lms.sql /backups/archiwum/$ARCHIWUM.lms.sql fi exit"
Loguje się na serwer backupu za pomocą klucza RSA (9876 to port ssh) i kopiuje do archiwum backup z wczoraj dodając do niego datę z wczoraj.
ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/lms.sql ] then rm /backups/lms.sql fi exit"
Usuwam stary backup z folderu roboczego.
ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/archiwum/$DELETE.lms.sql ] then rm /backups/archiwum/$DELETE.lms.sql fi exit" sleep 5
Jeśli istnieje na serwerze kopia starsza niż 27 dni to ją usuwam żeby utrzymać porządek.
scp -i /root/backups/id_rsa -P 9876 /backups/lms.sql root@adres_IP_serwerabackupu:/backups/lms.sql wait sleep 5
Kopiuje po scp backup na serwerek.
ssh -p 9876 -i /backups/id_rsa root@adres_IP_serwerabackupu "if [ -e /backups/lms.sql ] then mysql -u user_bazy_na_serwerze_backupu -phaslo_do_bazy_na_serwerze_backupu lms < /backups/lms.sql fi exit" sleep 5 exit
Wrzucam backup bazy danych.
- Dodałem sobie powyższy skrypt do crona na 4:00 rano żeby nie
zakłócać działania (lekki lag przy zgrywaniu kopii bazy).
Sumując: na dwóch serwerach mam identyczne dane za wyjątkiem danych z obecnego dnia. Można sobie robić co godzinę a nawet co 10 minut jak nie masz dużo mało klientów, faktur itd. U mnie to troszkę trwa więc przez dzień tego nie robię. Replikacja się może wysypać ale ten skrypt się nie sypie. Możesz sobie np. wypluć do pliku echo z wykonania i na jego podstawie ponawiać co kilka minut. Pamiętaj tylko żeby funkcje SQL na dwóch serwerach były identycznie dopisane. Ja tym sposobem działam od 10 lat, główny LMS kilka razy mi się wysypał ale conajwyżej 10 nowych klientów dopisanych tego dnia traciło na chwilę neta (jeśli ich rozłączyło co też nie często się u mnie trafia więc tak naprawdę nikt oprócz mnie nie zauważył awarii). Do płaskich plików to można zapisywać jak się ma setkę klientów. Przy większej liczbie klientów znacznie szybsza jest baza mysql. Polecam percone zoptymalizować pod radiusa, obecnie testuję także na MariaDB działa to naprawdę błyskawicznie. Dalej idąc tym tym tokiem możesz nawet działać na dowolnym LMS i porównywać liczbę wierszy w pliku SQL i w zalezności od tego kopiować z backupu na główny lub na odwrót. u mnie jest dużo sleepów po wait bo miałem trochę przywieszek przy dużych bazach (nie wiem dlaczemu) dodanie sleepów po wykonaniu komendy sprawiło że śmiga znakomicie, u Ciebie na 99% będziesz mógł je usunąć i przyśpieszyć.
Pozdrawiam
- Poczytaj:
man ssh_config (jak dobrze poczytasz to może Ci się mocno skrypt uprości). 2) Poczytaj również: man nice man ionice 3) "Do płaskich plików to można zapisywać jak się ma setkę klientów. Przy
większej liczbie klientów znacznie szybsza jest baza mysql."
Podasz jakieś źródło takiego wniosku? ;-)
Nie oszukuj :)
W pliku masz gotowe dane pobrane z widoku, procedury etc. - tu nie ma nawet czego porównywać.
Gdyby rzeźba z plikami była taka trendy & sexy, to nie wynalezionoby baz danych ..
-- Pozdrawiam Tomasz Chiliński, Chilan _______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms