Pokazywanie postów oznaczonych etykietą backup. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą backup. Pokaż wszystkie posty

piątek, 8 czerwca 2012

Rancid - narzędzie do monitorowania zmian i backupu konfiguracji - część 1

W codziennej pracy z sieciami prędzej czy później natkniemy się na problem archiwizacji konfiguracji urządzeń sieciowych - routerów, switchy, firewalli itp. Na rynku jest dostępne wiele różnych płatnych narzędzi takich jak Kiwi CatTools czy kombajn Cisco LMS . Co jednak w sytuacji, gdy np. budżet IT niedużej firmy nie pozwala na zakup komercyjnego rozwiązania? Przy małej ilości urządzeń można sobie pozwolić na ręczne backupy konfiguracji urządzeń, ale gdy ilość urządzeń rośnie nakład czasu potrzebny do wykonania backupów rośnie. Oczywiście można się posiłkować skryptami automatyzującymi pracę, lecz może być to dość karkołomne dla mniej doświadczonych adminów.

Rozwiązaniem tego problemu może być RANCID (Really Awesome New Cisco confIg Differ) - znakomite narzędzie przeznaczone do automatycznego backupu konfiguracji urządzeń sieciowych. Oprócz tego RANCID potrafi zachowywać różne wersje konfiguracji i porównywać je za pomocą CVS (Concurrent Version System). Wbrew nazwie RANCID potrafi backupować urządzenia różnych producentów takich jak:  Juniper, HP, Foundry itd. Do działania nie są potrzebne dodatkowe protokoły jak SNMP. Rancid loguje się do urządzenia i kopjuje konfigurację. Sam RANCID jest narzędziem działającym w trybie tekstowym, można go jednak doposażyć w graficzną nakładkę CVS-WEB.

 instalacja RANCIDa

Opis instalacji dotyczy systemu Linux Debian 6.0
Do prawidłowego działania RANCIDa potrzebne są następujące programy:
- Apache2
- CVS
- RANCID :)
- CVS-WEB  

Do instalacji pakietów możemy użyć albo graficznego managera pakietów, albo tekstowego apt-get. W obu przypadkach, przy prawidłowo zainstalowanym Debianie, instalacja pakietu RANCID automatycznie zainstaluje potrzebne powiązane pakiety (Apache2, CVS). Na koniec będzie potrzebne doinstalowanie pakietu CVS-WEB.

Zatem zaczynamy:

1. Najpierw instalujemy RANCIDa

    #apt-get install rancid

W trakcie instalacji zostanie utworzone konto użytkownika i jego katalog domowy.

2. Teraz edytujemy plik konfiguracyjny rancid.conf znajdujący się w katalogu /etc/rancid . Należy dodać przynajmniej jedną grupę. 

   LIST_OF_GROUPS="urzadzenia"

Przy większych sieciach, może być pomocne skonfigurowanie kilku grup. Nazwy grup muszą być rozdzielone znakiem spacji. 

   LIST_OF_GROUPS="ruter switch firewall"  

 3. Następnie należy skonfigurować plik o nazwie .cloginrc zawierający hasła potrzebne do zalogowania się na urządzenia. Edytujemy plik zachowując odpowiednią składnię w zależności od urządzenia, w przykładzie składnia dla urządzeń Cisco

add password 1.1.1.1 {USER_PASSWORD} {ENABLE_PASSWORD}
add autoenable 1.1.1.1 1


Jeśli urządzenie używa protokołu SSH zamiast telnet (np. Cisco PIX/ASA) do konfiguracji  dodajemy: 

add method 1.1.1.1 ssh

Znak "#" standartowo oznacza komentarz, zatem jeśli chcemy z jakiegoś powodu wyłączyć dane urządzenie z backupów to wystarczy że postawimy "#" na początku odpowiedniej linii.

Należy być bardzo ostrożnym z uprawnieniami pliku .cloginrc gdyż przechowuje on hasła w postaci tekstowej niezaszyfrowanej. Jedyną możliwością ochrony pliku jest ograniczenie praw dostępu do pliku wyłacznie dla właściciela. Zatem ustawiamy

  chmod 600 /home/rancid/.cloginrc
  chown -R rancid:rancid /home/rancid 

4. Kolej teraz na stworzenie architektury CVS. W tym celu należy zalogować się na konto użytkownika rancid 

  su rancid
  rancid@linux:~ /home/rancid/rancid/bin/rancid-cvs

Po tym w katalogu rancida powinna zostac utworzona struktura CVS on nazwie grupy jaką podaliśmy w pliku konfiguracyjnym.

5. Teraz dodajemy urządzenia do grupy /home/rancid/rancid/{nazwa_grupy}/router.db
Składnia pliku jest prosta: "ip_address":"typ_urządzenia":"status"  np.:

   1.1.1.1:cisco:up

 Następnie testujemy, czy rancid ma dostęp do skonfigurowanego urządzenia.

   rancid@linux:~ /home/rancid/rancid/bin/clogin 1.1.1.1

1.1.1.1
spawn telnet 1.1.1.1
Trying 1.1.1.1...
Connected to 1.1.1.1.
Escape character is '^]'.

User Access Verification

Username:
Password:

Router#

6. I uruchamiamy RANCIDa

  rancid@linux:~ /home/rancid/rancid/bin/rancid-run

Logi RANCID są dostępne w katalogu /var/log/rancid

7. By RANCID sprawdzał konfiguracje bez naszego udziału trzeba do crona dodać

   crontab -e -u rancid

   # uruchom rancid-run każdego dnia o 01:00 

   0 1 * * * /home/rancid/rancid/bin/rancid-run

Poza tym możemy pokusić się o automatyczne usuwanie logów. Rancid zapisuje osobne logi dla każdej grupy po każdorazowym zakończeniu pracy. Przy dużej ilości urządzeń i grup oraz szczególnie częstym uruchamianiu skryptu logów będzie bardzo dużo i ich ilość będzie przyrastała w zastraszającym tempie. Pokusiłem się o automatyczne usuwanie starych logów. By to zrobić do crona należy dodać linię.

  crontab -e -u rancid 


  # czyść logi co miesiąc o 00:15 
  15 00 1 * * find /var/lib/rancid/logs/ -type f -mtime +30 -exec rm {} \;


 instalacja CVS-WEB

RANCID pracuje, ale jak odczytać wyniki jego pracy? Można zrobić to przez interfejs tekstowy CVSa, ale jest to dość trudne. Z pomocą przychodzi nam bardzo przejrzysty i łatwy w użyciu CVS-WEB.
Zatem:

1. Instalujemy pakiet

  apt-get install cvsweb

2. W pliku /etc/cvsweb/cvsweb.conf należy odnaleźć sekcję @CVSrepositories i dodać katalog gdzie znajduje się główne repozytorium.

@CVSrepositories = (
#'local' => ['Local Repository', '/var/lib/cvs'],
'moje_urzadzenia' => ['urządzenia', '/var/lib/rancid/CVS'],

#'freeebsd' => ['FreeBSD', '/var/ncvs'],
#'openbsd' => ['OpenBSD', '/var/ncvs'],
#'netbsd' => ['NetBSD', '/var/ncvs'],
#'ruby' => ['Ruby', '/var/anoncvs/ruby'],
);

Następnie tworzymy link symboliczny do katalogu, gdzie znajdują się ikony i pliki css

  ln -s /usr/share/cvsweb /var/www/cvsweb

3. Teraz możemy przetestować CVS-WEB wpisując w przeglądarce:

  http://127.0.0.1/cgi-bin/cvsweb


XenServer - backup konfiguracji i oprogramowania serwera

Oprócz opisanego w poprzednim poście backupu maszyn wirtualnych, konsola XenServera umożliwia wykonanie kopii zapasowej samego serwera oraz jego konfiguracji. W tym celu należy wykonać komendę:

# xe host-backup host=<HOSTNAME> file-name=<PATH and FILENAME.xbk>

np.

# xe host-backup host=xen1 file-name=/mnt/nfs/xen1bckp.xbk

UWAGA: Aby odtworzyć serwer z kopii zapasowej należy wystartować system z dysku instalacyjnego XenServer. W przeciwieństwie do kopii zapasowych maszyn wirtualnych, odtworzenie kopii zapasowej serwera jest możliwe jedynie na oryginalnej maszynie.

XenServer - prosty backup maszyny wirtualnej


Istnieje co najmniej kilka metod wykonywania kopii zapasowych maszyn w Citrix XenServer. Większość z nich to dość drogie rozwiązania komercyjne jak PHD Virtual Backup . Oczywiście oferują one wiele użytecznych funkcji, ale czy jest to niezbędne, gdy mamy do backupu kilka maszyn wirtualnych, które na dodatek pracują na darmowej wersji XenServera? Nie, XenServer ma wbudowane narzędzie do wykonania i przywracania kopii zapasowej maszyny. Nie jest ono może intuicyjne i wymaga nieco wiedzy od użytkownika, ale jest w pełni funkcjonalne i sprawnie wykonuje żądane czynności. Zatem, jak to zrobić?

 przygotowanie do backupu

Do wykonania kopii zapasowej musimy przygotować miejsce. Najlepiej by był to jakiś dysk sieciowy, który potrafi udostępniać swoje zasoby jako dysk NFS. Oczywiście musi być on udostępniony z prawami do zapisu. Z konsoli XenServera należy utworzyć miejsce, gdzie podmontujemy dysk sieciowy:

 ~# mkdir /mnt/nfs

a następnie montujemy zasób sieciowy

~# mount -t nfs <IP_ADDR_>:<PATH> /mnt/nfs

<IP_ADDR> - adres IP dysku sieciowego 
<PATH>     - ścieżka do katalogu na dysku sieciowym, gdzie będzie wykonywana kopia zapasowa

UWAGA: nie jest to ścieżka zasobu SMB tylko NFS więc o ile jest to możliwe, należy sprawdzić na dysku, jaka jest prawidłowa ścieżka. Np. na moim Icy Box IB-NAS4220-B ścieżka NFS do zasobu public to /mnt/ide1/public

  wykonanie backupu 

Gdy mamy już przygotowane miejsce, możemy przystąpić do wykonywania kopii zapasowej. Najpierw należy wyświetlić listę maszyn wirtualnych:

 # xe vm-list
  
uuid ( RO)           : 2eff6db7-cf0d-24c2-8009-6c45c4435e0f
     name-label ( RW): machine1
    power-state ( RO): running


uuid ( RO)           : 2e4a8a77-e75a-47e7-5eb6-1aa9b5cf6b54
     name-label ( RW): machine2
    power-state ( RO): running


Jeśli zostały zainstalowane poprawnie XenTools na maszynach wirtualnych to wykonujemy kopię zapasową maszyny

 # xe vm-export vm=<UUID> filename=<PATH and FILENAME.xva>

np.

# xe vm-export vm=2eff6db7-cf0d-24c2-8009-6c45c4435e0f filename=/mnt/nfs/machine1_backup.xva

I możemy się cieszyć wykonana kopią maszyny. Nieco problemów stworzy maszyna, która z różnych powodów nie ma zainstalowanych XenTools. Taką maszynę musimy zatrzymać przed wykonaniem kopii zapasowej i uruchomić po zakończeniu operacji

 # xe vm-shutdown vm=<UUID>

 # xe vm-start vm=<UUID>

Kopię zapasową wykonujemy w identyczny sposób jak poprzednio. 

TU jest prosty skrypt, który realizuje backup wybranych maszyn. Nazwy maszyn trzeba wpisać w zmienną $HOSTS.

  przywracanie kopii zapasowej

Przywrócenie kopii zapasowej wykonujemy w podobny sposób jak backup. Najpierw należy sie upewnić czy jest prawidłowo podmontowany zasób z kopią zapasową. Następnie należy wyświetlić listę dostępnych Storage Repository i ich UUID

# xe sr-list

uuid ( RO)                : fffb9b4d-16e5-20b0-8154-962781d362c2
          name-label ( RW): Local storage
    name-description ( RW):
                host ( RO): xen1
                type ( RO): lvm
        content-type ( RO): user


uuid ( RO)                : d5175b5c-d042-aa49-ec90-1fcc6d2fc7a2
          name-label ( RW): Local Storage 2
    name-description ( RW):
                host ( RO): xen1
                type ( RO): lvm
        content-type ( RO): user 


Przywrócenie kopii wykonujemy za pomocą komendy

# xe vm-import sr-uuid=<UUID> filename=<PATH and FILENAME.xva>

np.

# xe vm-import sr-uuid=fffb9b4d-16e5-20b0-8154-962781d362c2 filename=/mnt/nfs/machine1_backup.xva