−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS
เริ่มต้นใช้งาน

ย้าย VPS ไปผู้ให้บริการใหม่โดยไม่มีดาวน์ไทม์

Oct 10, 2026 · 2 นาทีในการอ่าน · EQVPS Team

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

นี่คือลำดับที่ได้ผล ไม่ว่าคุณจะย้ายออกจากผู้ให้บริการอื่นหรือย้ายระหว่างแพ็กเกจของเราเอง

1. สองวันก่อน: ลด TTL

หาเรคอร์ด DNS ที่คุณจะเปลี่ยน (ปกติคือ A, AAAA และ CNAME ที่ชี้ไปหามัน) แล้วลด TTL ลงเหลือ 300 วินาที จากนั้นรออย่างน้อยเท่ากับ TTL เดิม เรคอร์ดที่มี TTL หนึ่งวันหมายความว่า resolver บางตัวจะยังส่งที่อยู่เก่าต่อไปอีกหนึ่งวันหลังเปลี่ยน และไม่มีอะไรที่คุณทำบนเซิร์ฟเวอร์จะช่วยให้เร็วขึ้นได้

นี่คือขั้นตอนที่คนมักข้าม และมันคือสิ่งที่เปลี่ยนการสลับห้านาทีให้กลายเป็นวันที่ผู้ใช้ครึ่งหนึ่งยังเห็นเซิร์ฟเวอร์เก่า

2. ทำรายการทุกอย่างบนเซิร์ฟเวอร์เก่า

คุณกำลังจะสร้างเครื่องนี้ขึ้นใหม่ที่อื่น ดังนั้นจดว่ามันทำอะไรอยู่จริง ไม่ใช่สิ่งที่คุณจำได้ แต่คือสิ่งที่มันทำ

ss -tlnp                                # what is listening, and which process
crontab -l; ls /etc/cron.d              # scheduled jobs
systemctl list-timers --all             # the scheduled jobs people forget
systemctl list-units --type=service --state=running

เพิ่มลงในรายการด้วย ได้แก่ ใบรับรอง TLS และวิธีต่ออายุ ไฟล์ environment ที่มีข้อมูลลับ กฎไฟร์วอลล์ ผู้ใช้และคีย์ SSH ของพวกเขา ฐานข้อมูลและขนาดของมัน และทุกอย่างที่ติดต่อเซิร์ฟเวอร์ผ่าน IP กลุ่มสุดท้ายนี้แหละที่ร้ายกาจ เช่น allowlist ของพาร์ตเนอร์ การตั้งค่า webhook ของผู้ให้บริการชำระเงิน หรือการตรวจของระบบมอนิเตอร์

3. ตั้งเซิร์ฟเวอร์ใหม่ไว้ข้างเครื่องเก่า

สั่งเซิร์ฟเวอร์ใหม่แล้วปล่อยเครื่องเก่าไว้ก่อน เลือกแพ็กเกจจาก รายการ VPS ที่ดิสก์เท่ากับหรือมากกว่าที่คุณใช้จริง ไม่ใช่เท่าที่ถูกขายมา ถ้าเครื่องเก่ารับทราฟฟิกขาเข้าใด ๆ (เว็บไซต์ webhook API) เครื่องใหม่ต้องมี IPv4 ของตัวเอง แพ็กเกจ NAT รับการเชื่อมต่อขาเข้าได้แค่ที่พอร์ต SSH และ พอร์ตที่ส่งต่อเพียงพอร์ตเดียวทำอะไรได้และทำอะไรไม่ได้ อธิบายว่าทำไมเรื่องนี้สำคัญ

เชื่อมต่อ ติดตั้งแพ็กเกจชุดเดียวกัน สร้างผู้ใช้และไฟร์วอลล์ใหม่ เรื่องคีย์และการล็อกอินครั้งแรกอยู่ใน คู่มือการเชื่อมต่อ

4. ซิงก์ไฟล์สองรอบ

การซิงก์รอบแรกคัดลอกทุกอย่างขณะที่เซิร์ฟเวอร์เก่ายังทำงานอยู่ อาจใช้เวลาหลายชั่วโมง ไม่เป็นไร

rsync -aHAX --numeric-ids --info=progress2 /var/www/ root@203.0.113.10:/var/www/

--numeric-ids เก็บเจ้าของไฟล์ไว้ตามหมายเลข ช่วยเลี่ยงเรื่องคลาสสิกที่ว่า "ทุกอย่างเป็นของผู้ใช้ผิดคน" เมื่อสองระบบสร้างผู้ใช้ในลำดับต่างกัน ถ้าคุณไม่เคยใช้ rsync ผ่าน SSH วิธีโอนไฟล์ไปยัง VPS อธิบายไว้ทีละขั้น

การซิงก์รอบที่สอง ก่อนสลับทันที จะคัดลอกเฉพาะสิ่งที่เปลี่ยนไปหลังรอบแรก ปกติใช้เวลาไม่กี่วินาที

5. ย้ายฐานข้อมูลอย่างตั้งใจ

ไฟล์นั้นง่าย ฐานข้อมูลที่รับการเขียนคือส่วนเดียวที่ "ไม่มีดาวน์ไทม์" ต้องแลกด้วยการยอมเล็กน้อยหรือทำงานเพิ่ม

ทางง่าย ทำ dump แล้วกู้คืนหนึ่งครั้งเพื่อทดสอบ แล้วตอนสลับให้หยุดการเขียนหนึ่งนาที (ตั้งแอปเป็นโหมดอ่านอย่างเดียวหรือหยุดแอป) ทำ dump ใหม่ กู้คืนบนเซิร์ฟเวอร์ใหม่ แล้วเปิดแอปที่นั่น สำหรับโปรเจกต์เล็กส่วนใหญ่ นี่คือการหยุดหนึ่งถึงสองนาทีที่แจ้งล่วงหน้าได้

ทางที่ไม่ต้องหยุด ตั้งค่า replication จากฐานข้อมูลเก่าไปยังใหม่ ปล่อยให้ตามทัน แล้วยกตัวใหม่เป็นหลักตอนสลับ ต้องเตรียมมากกว่า และคุ้มค่าเมื่อแม้การเขียนหายไปหนึ่งนาทีก็รับไม่ได้

6. ทดสอบเซิร์ฟเวอร์ใหม่ก่อนที่คนอื่นจะเห็น

DNS ยังชี้ไปที่เซิร์ฟเวอร์เก่า คุณจึงทดสอบเครื่องใหม่แบบส่วนตัวได้ ส่งคำขอของโดเมนจริงไปยังที่อยู่ใหม่

curl --resolve example.com:443:203.0.113.10 https://example.com/health

ถ้ายังไม่มีใบรับรอง ให้ทดสอบแบบเดียวกันผ่าน HTTP หรือเพิ่มบรรทัดชั่วคราวในไฟล์ hosts แล้วคลิกดูเว็บในเบราว์เซอร์ ตรวจการล็อกอิน การอัปโหลด งานเบื้องหลัง และอีเมลขาออก นี่คือช่วงเวลาที่ถูกที่สุดในการเจอว่าขาดส่วนขยาย PHP ตัวไหน

7. สลับ และเปิดเซิร์ฟเวอร์เก่าไว้ต่อ

ทำการซิงก์ไฟล์รอบสุดท้ายและขั้นตอนฐานข้อมูล แล้วเปลี่ยนเรคอร์ด DNS ด้วย TTL 300 วินาที ทราฟฟิกส่วนใหญ่จะย้ายไปภายในไม่กี่นาที เฝ้าดูล็อกการเข้าถึงของเซิร์ฟเวอร์เก่า ยังจะมีคำขอไหลเข้ามาเล็กน้อยจาก resolver และไคลเอนต์ที่ไม่สนใจ TTL เปิดมันไว้โดยไม่แก้อะไรสักสองสามวัน จากนั้นอัปเดตทุกอย่างที่ชี้ไป IP เก่า ได้แก่ allowlist ของพาร์ตเนอร์ URL ของ webhook และสำหรับอีเมลคือ reverse DNS ของที่อยู่ใหม่ (บนแพ็กเกจ IP เฉพาะของเรา คุณตั้งค่าเองได้ ดู reverse DNS) และเรคอร์ด SPF ของคุณ

สิ่งที่พังบ่อยที่สุด

เรียงคร่าว ๆ ตามความถี่ที่เราเจอ ได้แก่ timer ของ systemd ที่ไม่มีใครจดไว้ ไฟล์คอนฟิกที่เขียน IP เก่าไว้ตายตัว ไฟล์ที่เป็นของผู้ใช้ผิดคน ไฟร์วอลล์ที่บล็อกพอร์ตของแอปเอง ใบรับรองที่ต่ออายุบนเครื่องเก่าแต่ไม่ต่อบนเครื่องใหม่ และอีเมลที่ตกไปอยู่ในสแปมเพราะที่อยู่ใหม่ยังไม่มี reverse DNS

ที่ที่เช็กลิสต์นี้ไม่เหมาะ

ฐานข้อมูลที่ยุ่งมาก เขียนตลอดเวลาและรับการหยุดไม่ได้เลย ต้องการ replication อย่างจริงจังและการซ้อมใหญ่ ไม่ใช่เช็กลิสต์จากบล็อก เซิร์ฟเวอร์ Windows ย้ายด้วยเครื่องมืออื่นที่ไม่ใช่ rsync และถ้าการย้ายครั้งนี้จริง ๆ แล้วเป็นเรื่องขนาดเครื่อง ให้อ่านข้อนี้ก่อน ที่นี่แพ็กเกจขยายได้ในที่เดิม การย้ายไปแพ็กเกจที่ใหญ่กว่าในประเภทเครือข่ายเดียวกันจะเพิ่ม vCPU, RAM และดิสก์ด้วยการรีบูตครั้งเดียว ไม่ต้องย้ายอะไรเลย ต้องใช้เซิร์ฟเวอร์ใหม่ก็ต่อเมื่อจะลดขนาดเท่านั้น ถ้าคุณย้ายเพราะไม่แน่ใจว่าเครื่องใหญ่พอ เมื่อไหร่ที่คุณต้องการ RAM 64 GB จริง ๆ อาจช่วยให้ไม่ต้องย้าย และ VPS เทียบกับ shared hosting เซิร์ฟเวอร์เฉพาะ และคลาวด์ จะช่วยถ้าคุณยังไม่แน่ใจว่า VPS คือบ้านที่ใช่

FAQ

ควรลด TTL ของ DNS ล่วงหน้านานแค่ไหน

อย่างน้อยเท่ากับ TTL ปัจจุบัน และดีที่สุดคือหนึ่งถึงสองวันก่อนย้าย ถ้าเรคอร์ดมี TTL 86400 วินาที resolver อาจเก็บคำตอบเก่าไว้ทั้งวัน การลดก่อนสลับแค่ชั่วโมงเดียวจึงไม่ช่วยอะไร

ย้ายแบบไม่มีดาวน์ไทม์เลยได้จริงไหม

สำหรับบริการที่ไม่มีสถานะ ได้ ให้รันทั้งสองเซิร์ฟเวอร์ เปลี่ยน DNS แล้วปล่อยให้ทราฟฟิกค่อย ๆ ย้ายไป สำหรับฐานข้อมูลที่รับการเขียน คุณต้องยอมหยุดการเขียนสั้น ๆ ระหว่างซิงก์รอบสุดท้าย หรือตั้งค่า replication ให้เซิร์ฟเวอร์ใหม่อัปเดตอยู่เสมอ

จะทดสอบเซิร์ฟเวอร์ใหม่ก่อนเปลี่ยน DNS ได้อย่างไร

ชี้แค่เครื่องของคุณเองไปที่เซิร์ฟเวอร์ใหม่ ใช้ curl พร้อม --resolve เพื่อส่งคำขอของโดเมนจริงไปยัง IP ใหม่ หรือเพิ่มบรรทัดชั่วคราวในไฟล์ hosts คนอื่นทั้งหมดยังใช้เซิร์ฟเวอร์เก่าต่อไป

ปิดเซิร์ฟเวอร์เก่าได้เมื่อไหร่

เมื่อล็อกของมันไม่มีทราฟฟิกจริงอย่างน้อยหนึ่งวันหลังจาก TTL เก่าหมดอายุ resolver และไคลเอนต์บางตัวไม่สนใจ TTL ถ้าทำได้ ให้เปิดเซิร์ฟเวอร์เก่าไว้โดยไม่แก้ไขอะไรต่ออีกสองสามวัน

หลังย้ายแล้ว อะไรพังบ่อยที่สุด

งานตั้งเวลาที่ถูกลืม IP ที่เขียนตายตัวในไฟล์คอนฟิกและใน allowlist ของพาร์ตเนอร์ เจ้าของไฟล์หลังการคัดลอก กฎไฟร์วอลล์ และอีเมล คือ reverse DNS กับเรคอร์ด SPF ที่ยังชี้ไปที่อยู่เก่า

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง