Зміна серверів - перенаправлення на новий IP = Немає простою?


13

Я змінюю сервери свого веб-сайту. IP старого сервера не можна перенести на новий. Щоб не було простоїв, я планую зробити наступне, будь ласка, хтось підтвердить, що це спрацює:

  1. Налаштуйте новий сервер і слухайте новий IP
  2. Старий сервер перенаправляє весь трафік на новий IP
  3. Змініть записи DNS, щоб вказати на новий IP

Моя логіка підказує мені, що коли я переспрямую на новий IP-адресу зі свого старого вікна, користувач не побачить доменне ім’я у браузері, але побачить новий IP-адресу. Чи є спосіб перенаправити на новий IP-адресу та надіслати разом із ним HOSTNAME, щоб користувач побачив доменне ім’я у браузері?

Я роблю це, тому що сайт постійно використовується і просто зміна налаштувань DNS не буде робити, оскільки база даних не буде синхронізована між новим та старим серверами під час поширення.


3
Ви, напевно, про це думали, але не згадували про це: не забудьте зменшити TTL відповідних записів DNS.
cjc

Цей веб-сайт використовується лише людьми чи є додатки, які можуть підключитися до нього? Наприклад, споживають веб-сервіси? Якщо це так, можливо, у вас є простої. Java кешує результати DNS і може не поважати новий запис DNS до їх перезавантаження. Якщо ви не можете тримати пересилання в Інтернеті тривалий час. Крім того, якщо ви використовуєте шифрування, переадресація буде включати кілька додаткових кроків.
Брам

Які бази даних ви використовуєте? Ви вірні в тому, що зміна DNS не вирішить проблему простою, я роблю це весь час на своїй роботі і можу дати вам детальні кроки, але якщо база даних у вас на тому ж сервері, це все-таки кине незначну проблему, яка зазвичай легко закінчується прийти.
Ентоні Форніто

Крім того, на якому сервері у вас є Windows чи Linux, прочитавши частину відповіді, всі вони вказують на Linux, але я дійсно не бачу нічого у вашому запитанні, що ви використовуєте IIS vs linux смак
Ентоні Форніто

Відповіді:


19

Ось метод, який працював для мене:

  1. Синхронізуйте файли та бази даних з новим сервером.
  2. Виконайте повторну синхронізацію безпосередньо перед відключенням.
  3. Змініть DNS, щоб вказати на новий сервер.
  4. Пересилайте запит, що надходить на старий ip, на новий сервер, поки розповсюдження DNS не завершиться.

Ось як я зробив би крок 4:

Ми налаштуємо IPTables на сервері Linux для перенаправлення всього трафіку, що надходить на порт 80 (який є портом веб-сервера за замовчуванням), на сервер з IP-адресою 122.164.34.240. Перший крок - встановити поле Linux, щоб дозволити таке переадресація. Відкрийте вікно терміналу, увійдіть як користувач root та запустіть таку команду:

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

Наступний крок - повідомити IPTables перенаправити трафік на новий сервер:

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

Ось де відбувається магія IPTables. На третьому та останньому кроці ми повідомляємо IPTables переписати походження з'єднань до порту 80 нового сервера, щоб здатися, що вони надходять із старого сервера.

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

Заключний крок необхідний, тому що якщо ми не скажемо веб-серверу нового сервера, що з'єднання надходять від клієнтських машин, було б думати, що вони походять зі старого сервера.

Ви можете повторити це також для баз даних та порту сервера електронної пошти.


ви мали на увазі -A замість -D ?? -D - це видалити правило, чи не так? У будь-якому випадку, після того, як я зробив це, старий ящик, безумовно, намагається перенаправити, тому що він більше не завантажує Інтернет, але він не вдається, оскільки нове веб-сайти не відображається, просто каже, що з'єднання вичерпано. Чи є якісь інші настройки, які мені потрібно зробити? Можливо, щось у моїй новій коробці?
Денис Пшенов

Неважливо, я це виправив! Виявляється, мій береговий стін блокував переадресацію. Я мав це дозволити в правилах.
Денис Пшенов

Мені про це шкода. Ви маєте рацію, це було -A, а не -D. Я оновив публікацію.
Шайн Падмаджан

1
Лише попередження - підхід із використанням iptables перенаправить увесь трафік на новий сайт, але коли він приїде туди, він, схоже, походить із вашого старого сервера, а не з фактичної IP-адреси оригінального браузера. Це порушить такі речі, як географічний аналіз. Зокрема, ніколи не спокушайтесь пересилати порт 25 таким чином для електронної пошти, або ви можете випадково створити відкрите ретрансляцію, оскільки пошта від спамера через старий сервер буде оброблятися вашим новим сервером так, як ніби з однієї з ваших власних машин, яка може добре довіряти і дозволяти естафеті.
Гарі Білкус

@ShainPadmajan, хоча запізнився, велике спасибі, це спрацювало як шарм навіть у 2015 році.
Абхішек Мадхані

5

Ви також можете додати кілька A-записів. Наприклад, Google використовує це, перевірте їх вихід 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

Якщо ви додасте кілька A-записів до домену, відвідувачі отримають кілька IP-адрес і спробують їх у такому порядку. Якщо одна виходить з ладу, клієнт переходить до наступного, щоб спробувати.

Налаштуйте новий IP як додатковий запис A на 24 години вперед, запустіть новий сервер, вимкніть старий і видаліть IP-адресу.


За винятком випадків, не додайте запис A доти, доки не буде запущено новий сервер. :)
Аарон Коплі

@Aaron: чому б і ні? Додавання запису A потребує декількох годин (до 24 годин, щоб повністю бути активними), і поки другий сервер не працює, клієнти вибирають перший.
JapyDooge

Коли термін TTL для зони закінчується, ваш сервер імен знову запитується на ресурс, і він отримає обидві відповіді. Якщо ви додасте новий запис A і зачекаєте деяку кількість довільної кількості часу, щоб запустити сервер, люди, ймовірно, вже мають доступ до хосту, який ще недоступний. Якщо новий сервер вже запущений, вам не доведеться турбуватися про це.
Аарон Коплі

1

Ще один варіант - використовувати VIP (віртуальний IP). Отже, вашими кроками будуть:

  1. Налаштуйте новий сервер і слухайте новий IP.
  2. Додайте VIP на старий сервер.
  3. Змініть записи DNS, щоб вказати на VIP IP. До цього часу весь трафік все ще буде спрямований на старий сервер, але за допомогою VIP.
  4. Коли будете готові піти, перемістіть VIP на новий сервер.
  5. За бажанням ви можете змінити DNS на новий IP сервера та видалити VIP (через деякий час) з DNS.

Мені подобається ваше рішення. Але я не знайомий з VIP і як його отримати. Не могли б ви вказати в правильному напрямку?
Денис Пшенов

Це дійсно просто. Така команда ifconfig eth0:0 <ip> <mask> upстворить підінтерфейс, налаштований з IP, і ifconfig eth0:0 downйого достатньо для його деактивації.
Халед

0

Гаразд, оскільки ви згадали про реплікацію бази даних, ви повинні зробити наступне.

  1. Налаштування реплікації між базами даних на двох серверах.
  2. Під час прорізування створіть БД нового сервера як основний, а старий - як тільки читання.
  3. Наведіть рядок підключення до бази даних програми на новий сервер як на старому, так і на новому сервері. Якщо ваш сайт використовує сеанси, переконайтеся, що сеанс зберігається в БД.
  4. Змініть IP-адресу в DNS на новий сервер.
  5. Продовжуйте працювати обидва сервери принаймні 48 годин.

0
  1. Налаштуйте новий сервер і слухайте новий IP
  2. Потім налаштуйте прозоре перенаправлення. На старий сервер встановити rinetd.

У rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Змініть записи DNS, щоб вказати на новий IP

Я зробив apt-get install rinetd, змінив /etc/rinetd.conf на нові налаштування, перезапустив перезавантаження /etc/init.d/rinetd, але він не перенаправляє. також нічого не показувати в журналі /var/run/rinetd.log
Денис Пшенов

Покажіть своє iptables-save і cat /etc/sysctl.conf | grep ip_forwardбудь ласка.
yadaya

0

ви можете використовувати HA-Proxy на своїх веб-серверах, коли один з них перейде в режим обслуговування вторинний сервер перейде в режим.


-1

Ваш список того, що робити, виглядає цілком обґрунтованим.

Як приклад, якщо припустити, що ви використовуєте apache, коли ви робите щось подібне в apache на старому сервері:

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

Користувач побачить новий домен у веб-переглядачі, коли перегляне старий сайт. У цьому випадку переспрямовування також є постійним, поки працює браузер.

Тож поки ви впровадите якесь переадресацію на своєму веб-сервері, крім інших змін, у вас все буде добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.