Gentoo Logo

Zasady tworzenia serwerów lustrzanych Gentoo

Spis treści:

1.  Wstęp

Kilka definicji

Ten opis jest przeznaczony dla osób, które chcą skonfigurować serwer lustrzany rsync. Może zostać zastosowany zarówno do budowy jednego z serwerów oficjalnych jak i serwera obsługującego prywatną sieć.

Są trzy rodzaje serwerów rsync. Główne serwery rotacyjne, serwery społeczności i serwery prywatne. Główne serwery rotacyjne są zarządzane przez zespół Gentoo Infrastructure. Obsługują one największą część ruchu rsync. Serwery społeczności są utrzymywane przez różnych użytkowników Gentoo. Serwery prywatne nie służą społeczności, obsługują lokalne sieci w celu obniżenia obciążenia łącz jakie synchronizacja wszystkich komputerów osobno mogłaby wywołać.

W tej chwili mamy wystarczającą ilość serwerów lustrzanych i nie szukamy nowych. Poniżej znajdują się informacje o głównych serwerach:

  • Co najmniej 2GHz Pentium 4 (lub jego odpowiednik)
  • Co najmniej 1GB RAM (1.5GB - 2GB jest idealne)
  • 10GB miejsca na dysku (może być IDE)

Z chęcią przyjmiemy komputery o takich parametrach oraz łącza internetowe dla nich. Możemy również sami zaopiekować się takim serwerem, jeśli zostanie on nam przysłany. Przeciętne obciążenie łącza wynosi około ~7Mbps (2 TB miesięcznie). Wraz ze wzrostem ilości głównych serwerów te liczby będą oczywiście spadały.

Jeśli zatem chcesz podzielić się z nami swoim komputerem, napisz e-mail do Administratorów Serwerów Lustrzanych z wszelkimi dotyczącymi niego informacjami.

2.  Konfiguracja lokalnego serwera rsync

Wprowadzenie

Wielu użytkowników posiada zainstalowane Gentoo na więcej niż jednym komputerze. W takiej sytuacji koniecznością jest synchronizacja drzewa Portage na każdym z nich. Oznacza to marnotrawstwo zasobów po obu stronach, zarówno na serwerach lustrzanych jak i u użytkownika. Znacznie szybciej i wydajniej jest synchronizować jeden komputer z serwerów lustrzanych, a następnie pozostałe w sieci lokalnej z niego. Dzięki temu obniżamy zarówno obciążenie serwerów lustrzanych jak i naszego łącza internetowego.

To samo dotyczy firm, które kontrolują nasze serwery rsync. Mogą one pobierać dane z serwera rsync za pomocą lokalnej sieci, zamiast korzystać z drogiego i mniej wydajnego połączenia z Internetem.

Wszystko co trzeba zrobić to skonfigurować odpowiednio komputer, który ma służyć za lokalny serwer rsync. Należy wybrać taki sprzęt, który będzie w stanie znieść obciążenie związane z obsługą rsync. Musi to być również komputer, do którego dostęp będą miały wszystkie inne maszyny, za każdym razem gdy zajdzie na nich potrzeba synchronizacji drzewa Portage. Powinien on również posiadać stały adres IP i domenę, która zawsze będzie działać. Konfiguracja DHCP i DNS nie należy do tematyki tego dokumentu.

We wszystkich poniższych instrukcjach zakładamy, że serwer rsync działa pod kontrolą Gentoo. Jeśli miałby on działać pod kontrolą innej dystrybucji, poniższy opis konfiguracji serwera społeczności znacznie lepiej będzie pasował do sytuacji. Nie należy synchronizować takiego serwera częściej niż dwa razy dziennie.

Konfiguracja serwera

Nie ma żadnych dodatkowych pakietów, które trzeba by zainstalować. Całe oprogramowanie już znajduje się na dysku. Cały problem sprowadza się do odpowiedniego skonfigurowania demona rsyncd tak, aby katalog /usr/portage był dostępny w sieci do synchronizacji. Należy utworzyć następujący plik /etc/rsyncd.conf:

Listing 2.1: Przykładowy /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid
max connections = 5
use chroot = yes
uid = nobody
gid = nobody
# Opcjonalnie: ograniczenie dostępu tylko do komputerów z naszej sieci
hosts allow = 192.168.0.1 192.168.0.2 192.168.1.0/24
hosts deny  = *

[gentoo-portage]
path=/usr/portage
comment=Gentoo Portage
exclude=distfiles/ packages/

Nie trzeba korzystać z opcji hosts allow i hosts deny. Domyślnie wszystkie komputery mogą się połączyć. Również kolejność wpisywania opcji konfiguracyjnych nie jest ważna. Serwer zacznie sprawdzanie od opcji hosts allow i pozwoli na połączenie jeśli komputer łączący się do niego pasuje do jednego z podanych tam warunków. Następnie serwer sprawdzi regułę hosts deny i odrzuci połączenia od wszystkich pasujących do niej komputerów. Wszystkie komputery, które nie będą pasowały do powyższych reguł uzyskają pozwolenie na połączenie. Strona man rsyncd.conf zawiera więcej informacji na ten temat.

Następnie należy uruchomić demona rsync z konta roota:

Listing 2.2: Uruchamianie demona rsync

(Uruchamiamy demona)
# /etc/init.d/rsyncd start
(Dodajemy go na domyślny poziom uruchomieniowy)
# rc-update add rsyncd default

Teraz możemy przetestować serwer rsync. Niekoniecznie musi być to test przeprowadzany z drugiego komputera, ale właśnie taki zalecamy. Jeśli serwer nie ma żadnej konkretnej nazwy, można użyć jego adresu IP.

Listing 2.3: Sprawdzanie serwera

(Można wykorzystać zarówno nazwę serwera jak i jego IP)
# rsync 192.168.0.1::
gentoo-portage     Gentoo Portage
# rsync your_server_name::gentoo-portage
(Powinna wyświetlić się zawartość katalogu /usr/portage na serwerze)

Na tym kończy się konfiguracja serwera rsync. Aktualizacji drzewa na nim dokonuje się za pomocą polecenia emerge --sync. Można wykorzystać demona cron do uruchamiania tego polecenia co jakiś czas, ale nie częściej niż dwa razy dziennie.

Uwaga: Synchronizowanie się z publicznym serwerem częściej niż dwa razy dziennie jest traktowane jako łamanie zasad i może zakończyć się zbanowaniem danego IP na danym serwerze.

Konfiguracja klientów

Następnie należy się upewnić, że wszystkie pozostałe komputery korzystają z lokalnego serwera rsync. W tym celu należy edytować plik /etc/make.conf i sprawić, by zmienna SYNC wskazywała na odpowiednią maszynę.

Listing 2.4: Definiowanie zmiennej SYNC w pliku /etc/make.conf

(Korzystamy z adresu IP)
SYNC="rsync://192.168.0.1/gentoo-portage"
(Albo z nazwy serwera)
SYNC="rsync://your_server_name/gentoo-portage"

Potem należy sprawdzić czy komputer synchronizuje się z lokalnym serwerem lustrzanym. Wystarczy wpisać w tym celu następujące polecenia:

Listing 2.5: Sprawdzanie i synchronizacja

(Sprawdzamy czy ustawiona jest zmienna SYNC)
# emerge --info|grep SYNC
SYNC="rsync://your_server_name/gentoo-portage"
(Synchronizacja)
# emerge --sync

Po ustawieniu tych opcji można synchronizować wszystkie komputery za pomocą lokalnego serwera rsync za pomocą polecenia emerge --sync.

3.  Konfiguracja serwera dla społeczności

Wprowadzenie

Uwaga: Przykładowe pliki konfiguracyjne znajdują się w pakiecie gentoo-rsync-mirror. Instaluje się go poleceniem emerge gentoo-rsync-mirror.

W tym momencie kopia drzewa Portage zajmuje około 600 MB, czyli niezbyt dużo miejsca. Zapewnienie 1 GB miejsca na jego przyszły rozwój powinno wystarczyć. Konfiguracja serwera lustrzanego dla Portage jest proste. Po pierwsze należy się upewnić, że pakiet rsync jest zainstalowany. Potem należy zmienić plik rsyncd.conf w następujący sposób:

Listing 3.1: rsyncd.conf

uid = nobody
gid = nobody
use chroot = yes
max connections = 15
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync/rsyncd.motd
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[gentoo-portage]
#modern versions of portage use this entry
path = /gentoo/rsync
comment = Gentoo Linux Portage tree mirror
exclude = distfiles

Można wybrać własne lokacje dla większości plików. Ważna jest nazwa sekcji ([gentoo-portage]). Jest to miejsce, z którym będzie synchronizował się nasz serwer.

Z powodów bezpieczeństwa niezbędne jest zamknięcie serwera w chroocie. Niesie to ze sobą pewne konsekwencje. Opiszemy je w sekcji FAQ poniżej.

Następnie należy stworzyć kopię drzewa Portage. Można skorzystać w tym celu z poniższego skryptu. Można dostosować katalogi, w których znajdą się pliki do własnych potrzeb. Należy jednak pamiętać, aby pasowały do tych z pliku rsyncd.conf.

Listing 3.2: rsync-gentoo-portage.sh

#!/bin/bash

RSYNC="/usr/bin/rsync"
OPTS="--quiet --recursive --links --perms --times -D --delete --timeout=300"
#Uncomment the following line only if you have been granted access to rsync1.us.gentoo.org
#SRC="rsync://rsync1.us.gentoo.org/gentoo-portage"
#If you are waiting for access to our master mirror, select one of our mirrors to mirror from:
SRC="rsync://rsync.de.gentoo.org/gentoo-portage"
DST="/space/gentoo/rsync/"

echo "Started update at" `date` >> $0.log 2>&1
logger -t rsync "re-rsyncing the gentoo-portage tree"
${RSYNC} ${OPTS} ${SRC} ${DST} >> $0.log 2>&1

echo "End: "`date` >> $0.log 2>&1

Plik rsyncd.motd powinien zawierać adres IP i inne ważne informacje na temat serwera, takie jak nazwa firmy, która się nim opiekuje i adres kontaktowy administratora. Po wykonaniu tych wszystkich czynności można przetestować serwer tak jak opisano to w rozdziale Konfiguracja lokalnego serwera rsync powyżej.

Po zaakceptowaniu serwera jako oficjalnego serwera lustrzanego rsync, włączymy mu alias w formie rsync[numer].[kraj].gentoo.org.

4.  Krótkie FAQ

Z kim kontaktować się w sprawie problemów z serwerami lustrzanymi?

Należy zgłosić błąd w produkcie "Mirrors" i komponencie "Server Problem" w Bugzilli Gentoo.

Jak sprawdzić czy oficjalny serwer jest aktualny?

Zespół Gentoo infrastructure dokładnie kontroluje czy serwery są aktualne. Wyniki testów znajdują się pod tym adresem.

Czy firmowe serwery rsync mogą uzyskać dostęp do rsync1.us.gentoo.org?

Nasze zasoby są ograniczone i dlatego limitujemy dostęp do głównych serwerów tak, aby mogły służyć całej społeczności, a nie pojedyńczym jednostkom. W związku z tym tylko inne serwery lustrzane mogą korzystać z przywileju współpracy z głównymi maszynami. W związku z tym, wszyscy użytkownicy, którzy takich serwerów nie prowadzą muszą korzystać z serwerów publicznych. Nie ma problemu jeśli chodzi o synchronizację prywatnych serwerów z publicznymi, należy jednak pamiętać o przestrzeganiu pewnych zasad jakie przy tym obowiązują.

Czy serwer musi być synchronizowany dwa razy na godzinę?

Tak, to bardzo ważne. Synchronizacje nie muszą odbywać się dokładnie o pełnej godzinie i pół godziny później, można je przeprowadzać w następujących przedziałach minutowych:

  1. :00 do :10
  2. :30 do :40

Dodatkowo, należy się upewnić, że synchronizacje dzieli różnica dokładnie 30 minut. Zatem jeśli jedna synchronizacja odbywa się 8 minut po pełnej godzinie, druga musi odbywać się w 38 minucie.

Z czym synchronizować serwer lustrzany rsync zanim stanie się oficjalnym?

  • Europa: rsync.de.gentoo.org
  • USA: rsync.us.gentoo.org
  • Pozostali: rsync.us.gentoo.org

Jak znaleźć najbliższy serwer rsync?

Program netselect to potrafi. Instaluje się go za pomocą polecenia emerge netselect. Następnie należy uruchomić netselect rsync.gentoo.org. Po około minucie netselect wyświetli adres IP. Należy wciąć ten adres, dodać do niego dwa dwukropki i podać jako parametr do polecenia rsync (rsync 1.2.3.4::). Po chwili pojawi się nazwa serwera lustrzanego razem z innymi informacjami o serwerze. Wystarczy dodać ją do pliku /etc/make.conf.

Czy podczas synchronizacji z rsync1.us.gentoo.org można korzystać z kompresji?

Nie. Kompresja kosztuje za dużo zasobów serwera, więc ją wyłączyliśmy na rsync1.us.gentoo.org. Nie wolno korzystać z kompresji przy synchronizacji z tego serwera.

Rsync pozostawia wiele starych i zbędnych procesów, jak się ich pozbyć?

Poniższe polecenie pozwala na zabicie starych procesów rsync, które czasem mogą pozostać w systemie w związku z zerwanymi połączeniami. Warto często je zabijać, ponieważ blokują one możliwość połączenia się użytkownikom, zawyżając statystykę dla opcji 'max connections'. Można uruchamiać to polecenie co godzinę w cronie, wyszuka i zabije ona wtedy wszystkie połączenia starsze niż godzina.

Listing 4.1: Zabijanie procesów

/bin/kill -9 `/bin/ps --no-headers -Crsync -o etime,user,pid,command|/bin/grep nobody | \
             /bin/grep "[0-9]\{2\}:[0-9]\{2\}:" |/bin/awk '{print $3}'`

Zbyt duża ilość użytkowników łączy się do serwera, całkowicie go zapychając. Co robić?

W niektórych przypadkach użytkownicy potrafią być uciążliwi i synchronozować swoje drzewo Portage znacznie częściej niż raz czy dwa razy dziennie. W ekstremalnych przypadkach ustawiają synchronizację w cronie co 15 minut. Od strony serwera wygląda to jak atak typu DoS i oznacza zwykle nieprzerwane zajmowanie jednego ze slotów serwera rsync, który mógłby przecież służyć innym osobom. Można temu zapobiec za pomocą skryptu w perlu, który skanuje logi rsync, wybiera adresy, które łączyły się z serwerem więcej niż N razy tego dnia i automatycznie tworzy plik rsyncd.conf z linią, w której adres łobuza jest podawany w regule 'hosts deny'. Liczbę N ustawia się w następującym miejscu:

Listing 4.2: Definiowanie maksymalnej liczby połączeń dla adresu IP

@badhosts=grep {$hash{$_}>4} keys %hash;

Jeśli korzysta się z tego skryptu, należy ustawić rotację logów serwera rsync na codziennną i zmienić go odpowiednio, aby wskazywał miejsce rsyncd.conf. Skrypt ten był testowany tylko na Gentoo, ale powinien działać na wszystkich innych architekturach, które wspierają perla i rsync.



Drukuj

Zaktualizowano 28 grudnia 2006

Podsumowanie: Opis tworzenia oficjalnego serwera lustrzanego rsync.

Gentoo Mirror Administrators
Autor

Tobias Klausmann
Autor

Xavier Neys
Redaktor

Łukasz Damentko
Tłumaczenie

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.