การเปลี่ยนเซิร์ฟเวอร์ - เปลี่ยนเส้นทางเป็น IP ใหม่ = ไม่หยุดทำงานหรือไม่


13

ฉันกำลังเปลี่ยนเซิร์ฟเวอร์ของเว็บไซต์ของฉัน ไม่สามารถย้าย IP ของเซิร์ฟเวอร์เก่าไปยังเซิร์ฟเวอร์ใหม่ได้ หากต้องการไม่มีเวลาหยุดทำงานฉันวางแผนที่จะทำสิ่งต่อไปนี้กรุณาบางคนยืนยันว่าจะใช้งานได้:

  1. ติดตั้งเซิร์ฟเวอร์ใหม่และฟัง IP ใหม่
  2. เซิร์ฟเวอร์เก่าเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดไปยัง IP ใหม่
  3. เปลี่ยนระเบียน DNS ให้ชี้ไปที่ IP ใหม่

ตรรกะของฉันบอกฉันว่าเมื่อฉันเปลี่ยนเส้นทางไปยัง IP ใหม่จากกล่องเก่าของฉันผู้ใช้จะไม่เห็นชื่อโดเมนในเบราว์เซอร์ แต่จะเห็น IP ใหม่ มีวิธีในการเปลี่ยนเส้นทางไปยัง IP ใหม่และส่งไปตาม HOSTNAME ด้วยเพื่อที่ผู้ใช้จะเห็นชื่อโดเมนในเบราว์เซอร์หรือไม่

ฉันกำลังทำเช่นนี้เพราะไซต์นั้นมีการใช้งานอย่างต่อเนื่องและเพียงแค่เปลี่ยนการตั้งค่า DNS จะไม่ทำเนื่องจากฐานข้อมูลจะไม่ถูกซิงค์ระหว่างเซิร์ฟเวอร์ใหม่และเซิร์ฟเวอร์เก่าระหว่างการเผยแพร่


3
คุณอาจคิดถึง แต่ไม่ได้พูดถึง: อย่าลืมลด TTL ของรายการ DNS ที่เกี่ยวข้อง
cjc

เว็บไซต์นี้มีการใช้งานโดยมนุษย์เท่านั้นหรือมีแอปพลิเคชันที่อาจเชื่อมต่อหรือไม่ เช่นใช้บริการเว็บหรือไม่ หากเป็นกรณีนี้คุณอาจหยุดทำงานได้ Java แคชผลลัพธ์ DNS และอาจไม่เคารพรายการ DNS ใหม่จนกว่าจะรีสตาร์ท หากคุณไม่สามารถส่งต่อออนไลน์ได้เป็นเวลานาน นอกจากนี้หากคุณใช้การเปลี่ยนเส้นทางเข้ารหัสจะเกี่ยวข้องกับขั้นตอนเพิ่มเติมบางอย่าง
Bram

คุณใช้ฐานข้อมูลประเภทใด คุณถูกต้องในการเปลี่ยนแปลง DNS ที่จะไม่แก้ปัญหาการหยุดทำงานของฉันฉันทำมันตลอดเวลาในงานของฉันและสามารถให้ขั้นตอนอย่างละเอียด แต่ถ้าฐานข้อมูลของคุณในเซิร์ฟเวอร์เดียวกันมันจะโยนปัญหาเล็กน้อยที่มักจะง่ายกว่า มา.
Anthony Fornito

นอกจากนี้เซิร์ฟเวอร์แบบไหนที่คุณมี windows หรือ linux หลังจากอ่านคำตอบบางคำแล้วพวกเขาก็ชี้ไปที่ linux แต่ฉันไม่เห็นอะไรเลยในคำถามของคุณว่าคุณใช้ IIS กับรสชาติของ linux vs linux
Fornito

คำตอบ:


19

นี่คือวิธีการที่เหมาะกับฉัน:

  1. ซิงค์ไฟล์และฐานข้อมูลกับเซิร์ฟเวอร์ใหม่
  2. ทำการซิงค์อีกครั้งก่อนที่จะถูกตัดออก
  3. เปลี่ยน DNS ให้ชี้ไปที่เซิร์ฟเวอร์ใหม่
  4. ส่งต่อคำขอที่มาถึง ip เก่าไปยังเซิร์ฟเวอร์ใหม่จนกว่าการเผยแพร่ DNS จะเสร็จสมบูรณ์

นี่คือวิธีที่ฉันจะทำขั้นตอนที่ 4:

เราจะกำหนดค่า IPTables บนเซิร์ฟเวอร์ลินุกซ์ที่จะเปลี่ยนเส้นทางการจราจรทั้งหมดเข้ามาในพอร์ต 80 (ซึ่งเป็นพอร์ตของเซิร์ฟเวอร์เว็บเริ่มต้น), ไปยังเซิร์ฟเวอร์ที่มี 122.164.34.240IP ขั้นตอนแรกคือการตั้งค่ากล่อง Linux ของคุณเพื่อให้การส่งต่อชนิดนี้เกิดขึ้น เปิดหน้าต่างเทอร์มินัลล็อกอินในฐานะผู้ใช้รูทแล้วรันคำสั่งต่อไปนี้:

# 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 คือการลบกฎใช่ไหม อย่างไรก็ตามหลังจากที่ฉันทำเสร็จแล้วกล่องเก่าพยายามเปลี่ยนเส้นทางเนื่องจากมันไม่ได้โหลดเว็บอีกต่อไป แต่มันล้มเหลวเพราะเว็บใหม่ไม่แสดงเช่นกัน มีการตั้งค่าอื่น ๆ ที่ฉันต้องทำหรือไม่? อาจมีบางอย่างในกล่องใหม่ของฉัน
เดนิส Pshenov

ไม่เป็นไรฉันจะซ่อมมัน! ปรากฎว่าสิ่งที่ฉันถูกบล็อกไว้คือการเปลี่ยนเส้นทาง ฉันอนุญาตในกฎ
Denis Pshenov

ฉันขอโทษเกี่ยวกับเรื่องนั้น คุณพูดถูกมันเป็น - และไม่ใช่ -D ฉันได้อัปเดตโพสต์แล้ว
Shain Padmajan

1
เพียงคำเตือน - วิธีการใช้ iptables จะส่งต่อปริมาณการใช้งานทั้งหมดไปยังไซต์ใหม่ แต่เมื่อมาถึงที่นั่นจะปรากฏว่ามีต้นกำเนิดมาจากเซิร์ฟเวอร์เก่าของคุณและไม่ใช่จากที่อยู่ IP จริงของเบราว์เซอร์ดั้งเดิม สิ่งนี้จะทำลายสิ่งต่างๆเช่นการวิเคราะห์ทางภูมิศาสตร์ โดยเฉพาะอย่าถูกล่อลวงให้ส่งต่อพอร์ต 25 ด้วยวิธีนี้สำหรับอีเมลหรือคุณอาจสร้างรีเลย์แบบเปิดเนื่องจากอีเมลจากสแปมเมอร์ผ่านเซิร์ฟเวอร์เก่าจะได้รับการจัดการโดยเซิร์ฟเวอร์ใหม่ของคุณราวกับว่ามาจากหนึ่งในเครื่องของคุณเองซึ่งอาจ มีความน่าเชื่อถือและได้รับอนุญาตให้ถ่ายทอด
Gary Bilkus

@ShainPadmajan ถึงแม้ว่าจะช้าขอบคุณมากมันใช้งานได้อย่างมีเสน่ห์แม้ในปี 2558
Abhishek Madhani

5

นอกจากนี้คุณยังสามารถดูการเพิ่มระเบียน A หลายรายการ ตัวอย่างเช่น Google ใช้สิ่งนี้ตรวจสอบผลลัพธ์ที่ค้นหา:

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 ใหม่เป็นบันทึกพิเศษ 24 ชั่วโมงล่วงหน้าเริ่มเซิร์ฟเวอร์ใหม่ปิดเครื่องเก่าลบ IP


ยกเว้นอย่าเพิ่มระเบียน A จนกว่าเซิร์ฟเวอร์ใหม่จะเริ่มขึ้น :)
Aaron Copley

@Aaron: ทำไมไม่ การเพิ่มระเบียน A จะใช้เวลาหลายชั่วโมง (สูงสุด 24 ชั่วโมงเพื่อให้สามารถใช้งานได้เต็มรูปแบบ) และตราบใดที่เซิร์ฟเวอร์ที่สองยังไม่หมดลูกค้าจะเลือกระเบียนแรก
JapyDooge

เมื่อ TTL สำหรับโซนหมดอายุเนมเซิร์ฟเวอร์ของคุณจะถูกสอบถามอีกครั้งสำหรับทรัพยากรและจะได้รับคำตอบทั้งคู่ หากคุณเพิ่มระเบียน A ใหม่และรอเวลาในการเริ่มต้นเซิร์ฟเวอร์ตามอำเภอใจผู้คนจะได้รับการแก้ไขไปยังโฮสต์ที่ยังไม่พร้อมใช้งาน หากเซิร์ฟเวอร์ใหม่มีอยู่แล้วคุณไม่ต้องกังวลกับมัน
Aaron Copley

1

ตัวเลือกอื่นคือใช้ VIP (IP เสมือน) ดังนั้นขั้นตอนของคุณจะเป็น:

  1. ติดตั้งเซิร์ฟเวอร์ใหม่และฟัง IP ใหม่
  2. เพิ่ม VIP ลงในเซิร์ฟเวอร์เก่า
  3. เปลี่ยนระเบียน DNS ให้ชี้ไปที่ IP IP จนถึงขณะนี้ทราฟฟิกทั้งหมดจะยังคงถูกส่งไปยังเซิร์ฟเวอร์เก่า แต่ใช้วีไอพี
  4. เมื่อพร้อมแล้วให้ย้าย VIP ไปที่เซิร์ฟเวอร์ใหม่
  5. คุณสามารถเปลี่ยน DNS เป็น IP เซิร์ฟเวอร์ใหม่และลบ VIP (หลังจากผ่านไประยะหนึ่ง) จาก DNS

ฉันชอบทางออกของคุณ แต่ฉันไม่คุ้นเคยกับ VIP และวิธีรับ คุณชี้ไปในทิศทางที่ถูกต้องได้ไหม?
เดนิส Pshenov

มันง่ายจริงๆ คำสั่งที่ชอบ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
Denis Pshenov

แสดงของคุณiptables-save และcat /etc/sysctl.conf | grep ip_forwardโปรด
yadaya

0

คุณสามารถใช้ HA-Proxy ต่อหน้าเว็บเซิร์ฟเวอร์ของคุณเมื่อหนึ่งในนั้นกำลังเข้าสู่โหมดการบำรุงรักษาเซิร์ฟเวอร์รองจะรับช่วงต่อ


-1

รายการสิ่งที่ต้องทำของคุณดูสมเหตุสมผล

ตัวอย่างเช่นสมมติว่าคุณใช้ apache เมื่อคุณทำสิ่งนี้ใน apache บนเซิร์ฟเวอร์เก่า:

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

ผู้ใช้จะเห็นโดเมนใหม่ในเบราว์เซอร์เมื่อเรียกดูเว็บไซต์เก่า ในกรณีนี้การเปลี่ยนเส้นทางจะเป็นการถาวรตราบใดที่เบราว์เซอร์กำลังทำงาน

ดังนั้นตราบใดที่คุณใช้การเปลี่ยนเส้นทางบางอย่างในเว็บเซิร์ฟเวอร์ของคุณนอกเหนือจากการเปลี่ยนแปลงอื่น ๆ ของคุณคุณก็ควรจะปรับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.