Zasady tworzenia serwerów lustrzanych Gentoo
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
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 |
# /etc/init.d/rsyncd start
# 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 |
# rsync 192.168.0.1::
gentoo-portage Gentoo Portage
# rsync your_server_name::gentoo-portage
|
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 |
SYNC="rsync://192.168.0.1/gentoo-portage"
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 |
# emerge --info|grep SYNC
SYNC="rsync://your_server_name/gentoo-portage"
# 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:
- :00 do :10
- :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.
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|