By Arnon Puitrakul - 15 กุมภาพันธ์ 2021
จากเมื่อสัปดาห์ก่อนที่เรา Post ลงไปใน Facebook Page Arnondora ว่า เว็บเรามีปัญหา ไม่สามารถเข้าใช้งานได้ชั่วคราว ขอบคุณผู้ติดตามหลาย ๆ ท่านที่เข้ามาให้กำลังใจ ถามไถ่ว่าเกิดอะไรขึ้น วันนี้เราจะมาเล่าให้อ่านกันว่า มันเกิดอะไรขึ้น เราแก้ไขอย่างไร และ ทำอย่างไร เพื่อให้มั่นใจว่ามันจะไม่เกิดขึ้นอีก
เรื่องของเรื่องมันมีอยู่ว่า เว็บที่ทุกคนกำลังอ่านอยู่ตอนนี้ ไม่ได้เอาไปฝากกับ Hosting ที่ไหนหรอก แต่เรา Host จากที่บ้านเราออกไป ก็คือ เครื่อง Server ก็อยู่ที่บ้านเราใน NAS ของเรานั่นเอง
ใน NAS ของเราก็รัน Unraid ที่เราเคยรีวิวไปเมื่อนานมากละ ส่วนของเว็บ และ Database ทั้งหมด เรารันอยู่บน RAID5 SSD ที่ให้เรื่องของความปลอดภัยของข้อมูลพอสมควร เมื่อเกิดเหตุการณ์ Disk มีปัญหาสักลูก เราก็เอาลูกใหม่ใส่เข้าไป มันก็ควรจะ Rebuild ข้อมูลมาให้เราใหม่
เพื่อให้เรื่องราวมันปะติดปะต่อกันมากขึ้น เราจะพาทุกคนย้อนกลับไปเมื่อช่วงสิ้นปี 2020 ที่เว็บล่มไปเป็นวัน ๆ เลย เรื่องมันมีอยู่ว่า หลายวันก่อนหน้านั้น ใน Unraid มันก็ขึ้น SMART Wanring มา ด้วยความที่รู้ว่าจะต้องไปเที่ยวอยู่ห่างจากเครื่องหลายวัน ถ้ามีปัญหามันไม่น่าจะดี กับอยู่ในช่วง COVID ถ้าต้องถอด SSD เอาไปเคลมเลย เราก็ไม่อยากเข้าไป เลยซื้อลูกใหม่มาเปลี่ยน
โชคดีที่ SSD ลูกใหม่มาในวันก่อนที่เราจะไปเที่ยวพอดี เราก็เลยเอา SSD ลูกที่มีปัญหาออกแล้วใส่ลูกใหม่เข้าไป มันก็ไม่มีปัญหาอะไร มันก็แค่ทำการ Rebuild ข้อมูลจากลูกที่เหลือได้เลย เว็บก็ใช้งานได้ปกติไม่มีปัญหาอะไร ระบบอื่น ๆ ก็ดูไม่มีปัญหาอะไร ส่วน Disk ที่เสีย เราก็เอาออกมาก่อน ไว้ COVID มันดีขึ้นกว่านี้ แล้วเราค่อยเอาไปเคลมก็ได้ไม่เป็นไร
จนเราไปถึงโรงแรมคืนแรกเลย จะเข้าเว็บไปเขียนบทความปรากฏว่า เข้าไม่ได้จ้าาา VPN เข้าไปที่บ้านก็เข้า Server ไม่ได้เลย ก็ งง อยู่ว่าเกิดอะไรขึ้น แต่อยู่ตรงนั้นเราก็ทำอะไรไม่ได้แล้ว (ทำให้อยากได้ IPMI มาก) จนกลับถึงบ้าน เราก็มาดุว่าเกิดอะไรขึ้น
เข้าไปดูใน Log ของ Unraid ก็คือ เจอว่ามันพยายามที่จะทำ TRIM Operation แต่ดันไม่ได้ Update Disk List ก่อนที่จะทำ ทำให้ใน List มันมี Mount Path ของ SSD ลูกเก่าอยู่ พอมันทำถึง Disk ลูกเก่า มันก็หาไม่เจอแล้ว Crash ไปเลย การแก้ปัญหาก็คือ เราก็สั่งให้มัน Update List ใหม่ แล้วเปิด TRIM ก็จบเรื่องแล้ว เรื่องก็จบไปแบบไม่ได้มีความเสียหายมาก
หลังปีใหม่เราก็เอา SSD ไปเคลมที่ Pantip ประตูน้ำ ซึ่งปกติแล้วสาเหตุที่เราชอบใช้ WD ส่วนนึงเพราะคุณภาพ และอีกส่วนคือการเคลม ถ้าเป็น Internal Storage และเขามีของอยู่ใน Stock เราก็สามารถเอาไปเคลมและรับกลับได้ในวันนั้นเลย อาจจะเพราะสถานการณ์ COVID ด้วย ทำให้ของที่ควรจะมีใน Stock ขาดไป เราก็เลยต้องเคลม และมารับของทีหลัง ตอนแรกพี่เขาบอกว่า 2-3 วัน แต่จริง ๆ ก็คือ 2-3 ....... อาทิตย์ ฮ่า ๆ
วันก่อนหน้าที่จะมีปัญหา ทาง WD ก็โทรมาบอกว่า SSD ที่จะเอาไปเคลมมันได้แล้วนะ ให้เข้าไปเอาได้เลย เราก็เออ ไหน ๆ เราก็จะไปเอาแล้ว มันมีลูกที่มีปัญหาอยู่ ถ้าเราถอดมันไป และ ไปเอาลูกใหม่ที่เคลมมาเปลี่ยนเลย เราก็จะได้ขับรถไปรอบเดียว ก็เลยลองถอด SSD ที่มีปัญหาออกมา ปรากฏว่าเว็บมันก็ Down ไปเลย นึกว่ามันจะ Simulate ข้อมูลให้ชั่วคราวรอเอาลูกใหม่มาเสียบ
เราก็เลยลองหาวิธีที่จะเอามันออกมาอย่างปลอดภัย จนมาถึงว่าเราเอาลูกที่มีปัญหาออกจาก Array ใน List เลย พอ Start Service มันก็ Down อยู่ดี เราก็เลยโอเคไม่เป็นไร เรา Reverse โดยการเอา Disk ที่เอาออกมา ใส่กลับเข้าไปแล้ว Start พอกด Start เท่านั้นแหละ ไม่มี Dialogue อะไรทั้งนั้น ข้อมูลหายหมดเลยจ้าาาาาาา หมดแบบหมดเกี้ยงเลย ตอนนั้นบอกเลยว่า มือสั่น ใจสั่น เพราะเว็บที่เขียนมาทั้งหมด 7 ปี + Smart Home ที่ทำมาปีนึง และ ข้อมูลที่เก็บสำหรับทำ Product หายไปในพริบตา
ก็เลยลองดูว่าข้อมูลมันหายไปจริง ๆ หรือมันสร้าง Partition ใหม่แล้วกำลัง Migrate Array อะไรรึเปล่า ปรากฏว่า ใช่แล้วฮ่ะ มัน Format SSD ที่ทำ RAID5 ทั้ง 4 ลูกไปหมดเลย ก็คือ ข้อมูลเราได้หายไปแล้ว พร้อมกับ เราไม่เคย Backup พวก VM และข้อมูลอะไรออกมาเลย
ทำให้ทางต่อไปคือ เราอาจจะต้องพยายามกู้ข้อมูลเอง แต่เราเองก็ไม่ได้เชี่ยวชาญด้านนี้ และมันเป็น File System แบบพิเศษ กับเป็น RAID ด้วย ทำให้วิธีการกู้ข้อมูลมันไม่เหมือนกับ Disk อันเดียวที่เราใช้กันเป็นปกติ ทำให้เรา การใช้บริการกู้ข้อมูล เลยลองโทรไปสอบถามราคากับศูนย์ที่รับกู้ข้อมูล เราก็เล่าสถานการณ์ให้เขาฟัง เขาก็บอกว่า เขาประเมินที่ราคาลูกละ 10,000 บาท ใน Array เรามี 4 ลูกก็คือ 40,000 บาทในการกู้ นี่คือราคาประเมินนะ เราก็เลยเออ ถอดใจละ เราจ่ายไม่ไหวแน่ ๆ จึง ทำให้เราต้องจำใจทิ้งข้อมูลทั้งหมดไป และ พยายาม Reconstruct ข้อมูลเท่าที่ได้
ตอนนั้นเราก็รีบเอา SSD ไปเคลม และเอาลูกใหม่กลับมาใส่ และทำการ Clean Install ทุกอย่างให้หมดเลย ไหน ๆ ก็ทำใหม่ละ ก็เอาให้สุดเลย ในส่วนของเว็บเอง เรามี VM ที่รัน Ghost ซึ่งเป็น CMS แล้ว Link ไปที่ Nginx ที่เป็น Docker Container อีกตัวที่คอยเป็น Reverse Proxy สำหรับหลาย ๆ เว็บที่ Host อยู่ พร้อมกับจัดการเรื่อง SSL ไปด้วย
ทำให้เราเริ่มจากตัว VM ก่อน การ Install ใหม่ ไม่ใช่เรื่องยากเท่าไหร่ เราแค่เปิด VM ลง OS และ Dependencies ทั้งหมดให้เรียบร้อย 20 นาทีเราก็ได้ Ghost Instance พร้อมใช้งานใน Local ละ
ปัญหาต่อไปคือ เรื่องของข้อมูล พวก บทความ และ รูปภาพต่าง ๆ นึกขึ้นได้ว่า เออ เรายังมีเว็บเก่าซึ่งมันเป็น Markdown อยู่ เราก็แค่เอา Python Script ที่เราเคยเขียนตอน Migrate รันเข้าไป เราก็ได้ Ghost Package ที่พร้อม Import เข้า Ghost ได้เลย แต่นั่นเป็นบทความถึงแค่เมื่อเดือน May ของปีก่อนเท่านั้นเอง บทความที่เราเขียนหลังจากที่ย้ายมา Ghost แล้วมันก็หายหมดเลยนะ
เพื่อนเราแนะนำว่า มันอาจจะมีพวก Cloudflare และ Google ที่คอย Cache หน้าเราให้อยู่แล้วด้วย เราก็เลยเข้าไปทีละลิงค์ บางหน้ามันก็ Cache ไว้ให้ โดยเฉพาะบทความที่คนอ่านเยอะมัน Cache มาให้เราดีเลยละ แต่บทความไหนไม่มีคนอ่านเยอะมันก็ไม่ได้ Cache ไว้ให้ ทำให้บทความพวกนั้นก็คือ หายไปเลย หายไปกับสายลมเลย ไม่กลับมาแล้ว
หลังจากได้หน้าที่ Cache เราก็ทำการ Copy Content จากหน้าที่ Cache อยู่ลง Ghost ทีละหน้า ๆ ก๊อปมือทั้งหมดเลย ก็กินเวลาอยู่เป็นวัน ๆ ได้สุดท้าย เว็บก็กลับมามรันได้เป็นปกติ แต่บทความบางตัวก็หายไปเลย เสียดายมาก ๆ
การป้องกันจริง ๆ ทำได้ง่ายมาก ๆ เพียงแค่เราสำรองช้อมูลอย่างสม่ำเสมอ แต่ยอมรับเลยว่า เพราะความประมาท และ ความขี้เกียจของเราเองด้วย ที่ไม่ยอมหาวิธี และ จัดการกับมันสักที จนเรื่องมันเกิดขึ้น รอบนี้เจ็บแล้วจำ ทำให้เราเลยไปหา Solution ในการทำ Automatic Backup
ในส่วนของ VM ตัว Unraid มันมี Plugin ที่สามารถทำได้ โดยที่มันทำได้ยันการทำ VM Snapshot ทำให้เราสามารถ Backup VM ได้โดยที่เราไม่ต้องปิดเครื่องก่อนได้ พร้อมกับตั้งเวลาในการ Backup ได้เลย
และส่วนของ Docker Container ใน Unraid มันก็มี Plugin ในการ Backup Docker Container เหมือนกัน ก็โหลดลงมาแล้วตั้งเวลาในการ Backup ได้เลย แต่ข้อเสียคือ ณ ตอนที่มัน Backup มันจะต้องปิด Container ทำให้เว็บมันจะต้อง Down สัก 1 นาทีในทุก ๆ วัน แต่พวก Nginx ที่เป็น Docker Container มันไม่ได้เปลี่ยนอะไรเลย หลังจากที่เรา Setup เสร็จเรียบร้อยแล้ว ทำให้เราก็เลย Ignore ไม่ให้มัน Backup Nginx ในทุก ๆ วัน ก็ทำทีเดียวพอ
ข้อมูลที่ Backup ออกมาทั้งหมด ก็จะเก็บไว้ใน NAS ส่วนที่เป็น HDD และ เพื่อความปลอดภัยที่มากขึ้น เราก็สั่งให้มันโยนไฟล์ไปที่ NAS ตัวเล็กอีกตัวที่อยู่ในบ้านเหมือนกัน พร้อมกับทำ Off-site Backup ไปอีกที่เพื่อป้องกันข้อมูลสูญหายอีกชั้นด้วย เรียกได้ว่า หวาดกลัว แล้ว ฮ่า ๆ
หลังจากเรื่องราวที่ได้เจอมา ก็ทำให้เราได้บทเรียนราคาแพงในการจัดการข้อมูลให้ดีกว่านี้ โดยเฉพาะ เมื่อเรารัน Server ในบ้านที่ Serve ให้กับหลาย ๆ คน การ Down ทีนึงก็ถือว่าเป็นเรื่องใหญ่เลยทีเดียว ก็จะทำให้มันดีขึ้นเรื่อย ๆ และบอกเลยว่าของเล่นใหม่ ๆ ก็กำลังทำอยู่เหมือนกัน รอติดตามในเพจได้เลย
หลังจากเมื่อหลายอาทิตย์ก่อน Apple ออก Mac รัว ๆ ตั้งแต่ Mac Mini, iMac และ Macbook Pro ที่ใช้ M4 กันไปแล้ว มีหลายคนถามเราเข้ามาว่า เราควรจะเลือก M4 ตัวไหนดีถึงจะเหมาะกับเรา...
จากตอนก่อน เราเล่าเรื่องการ Host Website จากบ้านของเราอย่างปลอดภัยด้วย Cloudflare Tunnel ไปแล้ว แต่ Product ด้าน Zero-Trust ของนางยังไม่หมด วันนี้เราจะมาเล่าอีกหนึ่งขาที่จะช่วยปกป้อง Infrastructure และ Application ต่าง ๆ ของเราด้วย Cloudflare Access กัน...
ทุกคนเคยได้ยินคำว่า Mainframe Computer กันมั้ย เคยสงสัยกันมั้ยว่า มันต่างจากเครื่องคอมพิวเตอร์ที่เราใช้งานกันทั่ว ๆ ไปอย่างไรละ และ Mainframe ยังจำเป็นอยู่มั้ย มันได้ตายจากโลกนี้ไปหรือยัง วันนี้เรามาหาคำตอบไปด้วยกันเลย...
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...