Zmiana serwerów - przekierowanie do nowego adresu IP = brak przestojów?


13

Zmieniam serwery mojej witryny. Adres IP starego serwera nie może zostać przeniesiony na nowy. Aby nie mieć żadnych przestojów, planuję wykonać następujące czynności, proszę o potwierdzenie, że to zadziała:

  1. Skonfiguruj nowy serwer i nasłuchuj nowego adresu IP
  2. Stary serwer przekierowuje cały ruch do nowego adresu IP
  3. Zmień rekordy DNS, aby wskazywały nowy adres IP

Moja logika mówi mi, że kiedy przekierowuję do nowego adresu IP ze starego urządzenia, użytkownik nie zobaczy nazwy domeny w przeglądarce, ale zobaczy nowy adres IP. Czy istnieje sposób przekierowania do nowego adresu IP i wysłania go wraz z HOSTNAME, aby użytkownik zobaczył nazwę domeny w przeglądarce?

Robię to, ponieważ witryna jest w ciągłym użyciu i po prostu zmiana ustawień DNS nie będzie wystarczająca, ponieważ baza danych nie będzie synchronizowana między nowym a starym serwerem podczas propagacji.


3
Prawdopodobnie o tym pomyślałeś, ale o tym nie wspomniałeś: nie zapomnij zmniejszyć TTL odpowiednich wpisów DNS.
cjc

Czy ta strona jest używana tylko przez ludzi, czy istnieją aplikacje, które mogą się z nią połączyć? Np. Korzystasz z usług internetowych? W takim przypadku możesz mimo to mieć przestoje. Java buforuje wyniki DNS i może nie respektować nowego wpisu DNS, dopóki nie zostanie ponownie uruchomiony. Chyba że możesz utrzymać przekazywanie online przez długi czas. Również w przypadku przekierowania szyfrowania konieczne będą dodatkowe kroki.
Bram

Z jakich baz danych korzystasz? Masz rację, że zmiana DNS nie rozwiąże problemu przestoju, robię to cały czas w mojej pracy i mogę dać ci szczegółowe kroki, jednak jeśli baza danych na tym samym serwerze powoduje niewielki problem, który zwykle łatwo jest rozwiązać chodź.
Anthony Fornito,

Także na jakim serwerze masz Windows lub Linux, po przeczytaniu niektórych odpowiedzi wszystkie wskazują na Linux, ale naprawdę nie widzę w twoim pytaniu niczego, że używasz IIS vs Linux
Anthony Fornito

Odpowiedzi:


19

Oto metoda, która zadziałała dla mnie:

  1. Zsynchronizuj pliki i bazy danych z nowym serwerem.
  2. Wykonaj ponowną synchronizację tuż przed odcięciem.
  3. Zmień DNS, aby wskazywał na nowy serwer.
  4. Przekaż żądanie przychodzące do starego adresu IP na nowy serwer, dopóki propagacja DNS nie zostanie zakończona.

Oto jak zrobiłbym krok 4:

Skonfigurujemy IPTables na serwerze Linux, aby przekierowywać cały ruch przychodzący na porcie 80 (który jest domyślnym portem serwera WWW), na serwer z adresem IP 122.164.34.240. Pierwszym krokiem jest skonfigurowanie twojego Linux-a, aby umożliwiał tego rodzaju przekazywanie. Otwórz okno terminala, zaloguj się jako użytkownik root i uruchom następującą komendę:

# echo 1 >/proc/sys/net/ipv4/ip_forward

Następnym krokiem jest poinformowanie IPTables o przekierowaniu ruchu na nowy serwer:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240

Oto, gdzie dzieje się magia IPTables. W trzecim i ostatnim kroku mówimy IPTables, aby przepisało pochodzenie połączeń z portem 80 nowego serwera, aby wyglądało, jakby pochodziło ze starego serwera.

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE

Ostatni krok jest wymagany, ponieważ jeśli nie powiemy serwerowi internetowemu nowego serwera, że ​​połączenia pochodzą z komputerów klienckich, wydawałoby się, że pochodzą one ze starego serwera.

Możesz to powtórzyć dla baz danych i portu serwera e-mail.


miałeś na myśli -A zamiast -D? -D ma usunąć regułę, prawda? W każdym razie, po tym, jak to zrobiłem, stare okno zdecydowanie próbuje przekierować, ponieważ nie ładuje już sieci, ale kończy się niepowodzeniem, ponieważ nowa strona też się nie wyświetla, po prostu mówi, że upłynął limit czasu połączenia. Czy muszę wprowadzić jakieś inne ustawienia? Może coś na moim nowym pudełku?
Denis Pshenov

Nieważne, naprawiłem to! Okazało się, że moja ściana blokowała przekierowanie. Pozwoliłem na to w przepisach.
Denis Pshenov

Przykro mi z tego powodu. Masz rację, to było -A, a nie -D. Zaktualizowałem post.
Shain Padmajan

1
Tylko ostrzeżenie - podejście wykorzystujące iptables przekieruje cały ruch do nowej witryny, ale kiedy tam dotrze, będzie wyglądać, jakby pochodziła ze starego serwera, a nie z faktycznego adresu IP oryginalnej przeglądarki. To zepsuje rzeczy takie jak analiza geograficzna. W szczególności nigdy nie kusi Cię, aby przekierować port 25 w ten sposób na pocztę e-mail lub możesz przypadkowo utworzyć otwarty przekaźnik, ponieważ poczta od spamera za pośrednictwem starego serwera będzie traktowana przez nowy serwer tak, jakby pochodziła z jednego z twoich komputerów, które mogą zaufajcie i przekażcie je.
Gary Bilkus

@ShainPadmajan, choć późno, dziękuję bardzo, działało to jak urok nawet w 2015 roku.
Abhishek Madhani

5

Możesz także rozważyć dodanie wielu rekordów A. Na przykład Google używa tego, sprawdź ich wyniki nslookup:

Name:       google.com
Addresses:  209.85.148.101
            209.85.148.102
            209.85.148.113
            209.85.148.138
            209.85.148.100
            209.85.148.139

Jeśli dodasz wiele rekordów A do domeny, odwiedzający otrzymają wiele adresów IP i wypróbują je w tej kolejności. Jeśli jedna zawiedzie, klient przechodzi do następnej, aby spróbować.

Ustaw nowy adres IP jako dodatkowy rekord A 24 godziny z góry, uruchom nowy serwer, zamknij stary, usuń adres IP.


Z wyjątkiem, nie dodawaj rekordu A, dopóki nowy serwer nie zostanie uruchomiony. :)
Aaron Copley

@Aaron: dlaczego nie? Dodanie rekordu A zajmuje wiele godzin (do 24 godzin, aby być w pełni aktywnym) i dopóki drugi serwer nie jest włączony, klienci wybiorą pierwszy.
JapyDooge

Po wygaśnięciu TTL dla strefy serwer nazw zostaje ponownie zapytany o zasób i otrzyma obie odpowiedzi. Jeśli dodasz nowy rekord A i zaczekasz dowolną ilość czasu, aby uruchomić serwer, ludzie prawdopodobnie już zdecydują się na hosta, który nie jest jeszcze dostępny. Jeśli nowy serwer jest już uruchomiony, nie musisz się o to martwić.
Aaron Copley

1

Inną opcją jest użycie VIP (wirtualny adres IP). Twoje kroki będą następujące:

  1. Skonfiguruj nowy serwer i nasłuchuj nowego adresu IP.
  2. Dodaj VIP do starego serwera.
  3. Zmień rekordy DNS, aby wskazywały adres IP VIP. Do tej pory cały ruch będzie nadal wysyłany na stary serwer, ale przy użyciu VIP.
  4. Gdy będziesz gotowy, przenieś VIP na nowy serwer.
  5. Opcjonalnie możesz zmienić DNS na nowy adres IP serwera i usunąć VIP (po pewnym czasie) z DNS.

Podoba mi się twoje rozwiązanie. Ale nie znam VIP-a i jak go zdobyć. Czy mógłbyś wskazać właściwy kierunek?
Denis Pshenov

To jest naprawdę proste. Takie polecenie ifconfig eth0:0 <ip> <mask> uputworzy pod-interfejs skonfigurowany z adresem IP i ifconfig eth0:0 downwystarczy go dezaktywować.
Khaled

0

Ok, ponieważ wspomniałeś o replikacji bazy danych, musisz wykonać następujące czynności.

  1. Skonfiguruj replikację między bazami danych na dwóch serwerach.
  2. Podczas przełączania ustaw DB nowego serwera jako serwer podstawowy, a stary serwer jako tylko do odczytu.
  3. Wskaż ciąg połączenia bazy danych aplikacji na Nowy serwer zarówno na starym, jak i na nowym serwerze. Jeśli Twoja witryna używa Sesji, upewnij się, że sesja jest utrwalona w DB.
  4. Zmień adres IP w DNS na nowy serwer.
  5. Kontynuuj działanie obu serwerów przez co najmniej 48 godzin.

0
  1. Skonfiguruj nowy serwer i nasłuchuj nowego adresu IP
  2. Następnie skonfiguruj przezroczyste przekierowanie. Na starym serwerze zainstaluj rinetd.

W rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Zmień rekordy DNS, aby wskazywały nowy adres IP

Zrobiłem apt-get install rinetd, zmieniłem /etc/rinetd.conf na nowe ustawienia, zrestartowałem z /etc/init.d/rinetd restart, ale nie przekierowuje. też nic nie pokazuje w logu /var/run/rinetd.log
Denis Pshenov

Pokaż iptables-save i cat /etc/sysctl.conf | grep ip_forwardproszę.
yadaya

0

możesz użyć HA-Proxy przed serwerami WWW, gdy jeden z nich przejdzie w tryb konserwacji, serwer zastępczy przejmie.


-1

Twoja lista rzeczy do zrobienia wygląda całkiem rozsądnie.

Na przykład, zakładając, że używasz apache, kiedy robisz coś takiego w apache na starym serwerze:

redirect permanent / http://newserver.example.com

Użytkownik zobaczy nową domenę w przeglądarce, gdy przejdzie do starej witryny. W takim przypadku przekierowanie jest również trwałe, dopóki przeglądarka jest uruchomiona.

Tak długo, jak zaimplementujesz jakieś przekierowanie na swoim serwerze internetowym oprócz innych zmian, wszystko powinno być w porządku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.