ใช้ GCP f1-micro รันเว็บไซต์ส่วนตัวฟรีๆ – ตอนที่ 4 เปิด swap + ล็อค IP Address

หลังจากเราเปิดบัญชี Google Cloud Platform และ เริ่มรัน Virtual Machine บน Compute Engine ตามขั้นตอนในตอนที่แล้ว มาในตอนนี้เราจะเริ่มต้นเปิด swap และล็อค IP Address กันครับ

เปิด swap ไปทำไม

Swap ที่ว่านี้ไม่ได้หมายถึงการทำสัญญาแลกเปลี่ยน (swap) ในทางการเงินนะครับ แต่หมายถึงหน่วยความจำของเครื่อง ซึ่งเป็นเหมือนแรมเสมือนบน Hard Drive สำหรับให้โปรแกรมต่างๆ สามารถรันได้ครับ

คืออย่างนี้ครับ โดยหลักการง่ายๆ หน่วยความจำของคอมพิวเตอร์เราแบ่งเป็น 2 แบบ

  • Volatile Memory หรือ หน่วยความจำแบบลบเลือนได้ หน่วยความจำแบบนี้ต้องอาศัยไฟฟ้าในการหล่อเลี้ยง ถ้าไม่มีไฟฟ้าก็ดับ ตัวอย่างเช่น RAM (Random Access Memory หรือ แรม) หน่วยความจำประเภทนี้มักจะทำงานได้เร็ว เข้าถึงข้อมูลได้ไวกว่า แต่ก็แลกมาด้วยความเสี่ยงที่ว่า ไฟดับแล้วข้อมูลหายไปเลย (เคยทำงานแล้วจู่ๆ ไฟดับ แล้วคอมดับ ต้องมานั่งทำงานใหม่กันไหมครับ? ข้อมูลที่หายไปนั่นแหละครับ อยู่ใน Volatile Memory นี่แหละ)
  • Non-volatile Memory หรือ หน่วยความจำแบบถาวร แบบที่สองนี้คือหน่วยความจำที่ถ้าสมมติไฟฟ้าดับแล้ว หรือไม่มีกระแสไฟฟ้าหล่อเลี้ยง ข้อมูลก็ยังจะคงอยู่ ไม่ถูกลบเลือนไปด้วย ตัวอย่างเช่น Hard Disk Drive, ROM (Read-only Memory), Solid State Drive, eMMC เป็นต้น ซึ่งก็แยกย่อยได้เป็นสารพัดรูปแบบอีกเช่นกัน

ทั้งนี้ ถ้าท่านเป็นคนที่รู้เรื่องคอมพิวเตอร์มากกว่านี้อีกนิด ท่านจะทราบดีว่าถ้าแบ่งตามระดับชั้น (hierarchy) แล้ว มันมีทั้ง Primary Storage, Secondary Storage, Tertiary Storage และ Off-line Storage ด้วยนะ ซึ่งในกรณีของ Volatile Memory ก็เป็น Primary Storage เพราะเข้าถึงหน่วยประมวลผลกลาง (CPU) ได้โดยตรง ส่วน Seconary Storage ก็คือ HDD Drive เพราะข้อมูลต้องผ่านระบบ I/O (Input/Output) ไปก่อน (ซึ่งผมคงขอข้ามการอธิบายส่วนนี้ไป เนื่องจากไม่เกี่ยวข้องโดยตรงนั่นเอง)

ภาพจาก Pexels.com โดย Pixabay

แล้วมันเกี่ยวอะไรกับ swap?

คืออย่างนี้ครับ… ถ้าคอมพิวเตอร์ของท่านมี RAM ติดตั้งมาน้อย แล้วท่านเปิดโปรแกรม A อยู่ แล้วเกิดอยากเปิดโปรแกรม B แต่ว่าโปรแกรม A ดันใช้พื้นที่ไปหมดแล้ว โปรแกรม B ก็เปิดไม่ขึ้นครับ

เหมือนกับว่า A ใช้ห้องน้ำอยู่ แล้วจู่ๆ B อยากใช้ห้องน้ำด่วน แต่ A ยังทำธุระในห้องน้ำไม่เสร็จน่ะครับ B ก็โปรดรอต่อไป เพราะถ้าจู่ๆ B เกิดเปิดประตูเข้าไปในห้องน้ำที่มี A อยู่ ก็อาจจะต้องออกมาอย่างรวดเร็ว (อันนี้ยกเว้น A และ B เป็นแฟนกัน ไม่ก็ด้วยเหตุผลอื่นนะครับ)

อีกประเด็นคือ Volatile Memory มักมีพื้นที่น้อยกว่า Non-volatile Memory และมีราคาที่แพงกว่าครับ เช่น สมมติแรม DDR4 16 GB 2666 MHz ราคาจำหน่ายประมาณ 3,000 บาท ขณะที่ SSD 500 GB ราคาเท่ากัน เป็นต้นครับ (ซึ่งจริงๆ หน่วยความจำมันก็คนละวัตถุประสงค์อยู่แล้ว เทียบตรงๆ แทบจะคนละเรื่องเลย)

ปัญหาดังกล่าว เลยถูกแก้ด้วยสิ่งที่เรียกว่า swap นี่แหละครับ ว่าง่ายๆ คือเอาพื้นที่ใน Non-volatile Memory มาทำเป็น Volatile Memory เสียเลย หรือถ้าแปลงเป็นภาษามนุษย์ความเข้าใจง่ายๆ เอาพื้นที่ว่างใน Hard Disk มาทำเป็นแรมนั่นแหละครับ!

ใน Windows ก็มีนะครับ เรียกว่า Virtual Memory เทคนิคก็ไม่ต่างกันเลย ลองอ่านบทความได้จากที่นี่ครับ ส่วนถ้าใครอยากอ่านหลักการและคำอธิบายเพิ่มเติมเกี่ยวกับ swap บน Linux ก็อ่านได้จากที่นี่เช่นกัน

Photo by Dominika Roseclay from Pexels

ข้อดีและข้อเสียที่ควรพิจารณา

การเปิด swap นั้นมีข้อดีและข้อเสียที่ควรพิจารณาอยู่บ้างนะครับ ในแง่ของข้อดีก็คือ

  • เสมือนได้แรมเพิ่มแบบอ้อมๆ โดยไม่ต้องซื้อแรมใหม่ อันนี้ก็ชัดเจน คือได้แรมเพิ่มโดยที่ไม่ต้องซื้อเครื่องใหม่นั่นเอง
  • ทำได้ง่าย อยากเพิ่ม อยากมี ปรับลด ฯลฯ อะไร ทำได้หมด แค่ไม่กี่เคาะเท่านั้น

อย่างไรก็ตาม ข้อเสียของการเปิดก็ใช่ว่าจะไม่มี… มีอยู่ดังนี้ครับ

  • ช้า ประสิทธิภาพตก แน่นอนว่า swap ไม่มีทางวิ่งเร็วเท่า RAM ปกติที่ติดมากับเครื่องแน่นอน ดังนั้นถ้าเปิดแล้ว ก็ย่อมต้องเจอ performance drop แน่นอน อันนี้เลี่ยงไม่พ้น (แต่ถ้าเปิดเว็บส่วนตัว ก็คงไม่ต้องแคร์สักเท่าไหร่)
  • อ่าน เขียน เยอะๆ ลดอายุ Hard Drive/SSD อันนี้สำหรับกรณีที่รันในเครื่องจริงหรือใช้กับเครื่องที่บ้าน การใช้พื้นที่ swap ที่ต้องเขียนและอ่านข้อมูลบ่อยๆ เท่ากับกำลังอ่านและเขียนบน Hard Drive/SSD เยอะๆ ทำให้ลดอายุในการใช้งานไปโดยไม่จำเป็น แต่ในกรณีของ Cloud ซึ่งเราไม่ต้องรับผิดชอบตัวอุปกรณ์ อันนี้ก็จะหายกังวลไป

อย่างไรก็ตาม ในกรณีของเครื่อง f1-micro ที่มีแรมมาให้เพียง 0.6 GB (หารออกมาในเลขฐาน 2 ตกประมาณ 572 MB!) เราคงเลี่ยงไม่ได้ที่จะต้องเปิด swap กันแน่นอนครับ ในตอนที่ผมยังไม่เปิด MySQL/MariaDB ปิดตัวเองตลอดจนน่ารำคาญใจ (+ ตะโกนออกมาด้วยว่า เกิดอะไรขึ้น)

ว่าแล้วก็มาเปิดกันดีกว่าครับ

Can’t Live Without You! เปิดใช้ swap บน VM หนีตายสถานการณ์แรมต่ำ

ขั้นแรกไปที่หน้า Google Cloud Platform แล้วไปที่ Compute Engine แล้วจะเจอหน้านี้ครับ

จากนั้นตรงคอลัมน์ Connect ให้กดปุ่ม SSH ครับ ก็จะปรากฎหน้าจอสีดำทะมึนขึ้นมา ซึ่งก็ขอยินดีต้อนรับท่านสู่ MS-DOS หน้าจอ Secured Shell Console ในการควบคุมเครื่องผ่าน Terminal ซึ่งจากนี้ท่านจะต้องเจอกับทุกสิ่งทุกอย่างแบบข้อความ พิมพ์คำสั่งเอง

เฮ AS/400 #เดี๋ยวนะ #ผิด

หลังจากเจอหน้าจอนี้ ก็ลุยเลยครับ พิมพ์คำสั่งตามนี้ครับ จะได้ swapขนาด 2 GB (ถ้าอยากเพิ่มเป็น 4 GB ก็เปลี่ยนเป็น 4G ที่ไม่ใช่ความเร็วอินเทอร์เน็ต)

sudo fallocate -l 2G /swapfile

จากนั้นก็พิมพ์ต่อคำสั่งด้านล่าง เพื่อกำหนดการอนุญาต (permission) ว่าใครใช้ไฟล์นี้ได้บ้าง

sudo chmod 600 /swapfile

หลังจากกำหนดแล้ว ขั้นต่อไปให้ไฟล์ที่กำหนดนี้ บอกค่าในระบบปฎิบัติการ (OS) ซึ่งก็คือ Linux ของเรารับรู้ว่า เป็นไฟล์สำหรับทำ swap

sudo mkswap /swapfile

จากนั้นก็เปิดใช้งานด้วยสำสั่งด้านล่าง

sudo swapon /swapfile

จากนั้นก็ทำสรุป แสดงว่า swap เราทำงานได้แล้วครับ

sudo swapon -s

หรือถ้าเอาให้มั่นใจ ก็พิมพ์คำสั่ง free -m เพื่อดูหน่วยความจำ ก็จะปรากฎพื้นที่ swap ครับ

หน้าตาของหน้าจอ ถ้าพิมพ์คำสั่งออกมาแล้วก็จะประมาณนี้

อย่างไรก็ตาม คำสั่งการเพิ่ม swap นี้เป็นการเพิ่มไม่ถาวร เพราะถ้าสั่ง sudo reboot หรือรีสตาร์ทเครื่องใหม่, ปิดเครื่อง พอเปิดมาอีกที swap ที่ตั้งค่านี้ก็จะถูก unmount หรือเอาออกจากระบบครับ ต้องสั่ง sudo swapon /swapfile ทุกครั้ง

สิ่งที่เราจะทำต่อคือการทำให้เวลาเปิดเครื่อง เรามี swap ทุกครั้งไป โดยไม่จำเป็นต้องเรียก swapon ครับ โดยต้องไปแก้คำสั่งในไฟล์ /etc/fstab ที่เป็นไฟล์กำหนดโครงสร้างฮาร์ดดิสก์ (File System Table)

แต่ก่อนจะแก้ไข เราต้องมี editor ก่อน ซึ่งในคู่มือนี้เราจะใช้ nano ครับ (ใครอยากใช้ vim ยากๆ ก็แล้วแต่ศรัทธา) ก็เริ่มที่

sudo apt-get update && sudo apt-get install nano

หลังจากนั้น Terminal จะคายคำตอบแสดงผลค่าให้เราชุดหนึ่งยาวๆ แบบนี้ครับ ซึ่งนั่นก็แปลว่า จบแล้ว เราติดตั้ง nano ที่เป็น editor เรียบร้อยลงเครื่องแล้ว

เราก็มาลุยกันต่อเลยครับ พิมพ์คำสั่งด้านล่างนี้

sudo nano /etc/fstab

ก็จะปรากฎหน้าจอสีดำทะมึนอันนี้ขึ้น

หน้าจอนี้คือไฟล์ที่ระบุ File System Table ของ Linux ในเครื่อง ให้เราเพิ่มบรรทัดนี้ (อย่าลบบรรทัดก่อนหน้านะครับ!) ในไฟล์

/swapfile none swap sw 0 0

หน้าตาจะเป็นแบบนี้

จากนั้นกดปุ่ม Ctrl + x เพื่อออกจากโปรแกรม Nano จะถามเราว่าต้องการบันทึกการแก้ไขหรือไม่ ให้กดปุ่ม y บนแป้นพิมพ์เรา เพื่อยืนยัน

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

ซึ่งถ้าอยากเอาให้ชัวร์ว่าจะเป็นไปตามที่เราตั้งค่า พิมพ์ sudo reboot แล้วกด Enter เพื่อทำการรีสตาร์ทเครื่อง กดปิดหน้าจอ SSH ของเราไปก่อน รอสัก 3 นาที จากนั้นกลับไปที่หน้า Instance แล้วเปิด SSH ใหม่อีกรอบ พิมพ์ free -m เพื่อดูผลครับ ถ้างอกบรรทัด swap ออกมาก็แปลว่าได้ผล

เฮ

เท่านี้เราก็จะได้ swap บนเครื่องเราแล้วครับ

เนื่องจากหลายคนอาจจะงงว่าพิมพ์อะไรไปบ้าง ผมขอขยายความอธิบายคำสั่งเพิ่มเติม คือ

  • sudo = Superuser Do เป็นการขอสิทธิ์ระดับผู้ดูแลระบบ (root) เพื่อกระทำการบางอย่างที่ผู้ใช้ทั่วไปทำไม่ได้นั่นเองครับ ที่ต้องทำแบบนี้เพราะ Linux ของ GCP ไม่ให้ใช้สิทธิ root โดยตรงครับ (และอันที่จริงแล้วก็ไม่ควรให้เป็นแบบนั้นด้วย)
  • fallowcate = คำสั่งสร้างไฟล์ขนาดใหญ่ที่วางใน disk ถ้าค่ากลับคืนมาเป็น 0 ก็แปลว่าสำเร็จ ถ้าเป็น 1 แปลว่าล้มเหลว (อ่านเพิ่มเติมได้ที่นี่)
  • chmod = คำสั่งกำหนดว่าใครเข้าถึงไฟล์นี้ได้ว่า โดยใช้เลข 3 ตัวเป็นการกำหนด (อ่านเพิ่มเติมได้ที่นี่) ส่วนตัวเลขและที่มา อ่านได้จากที่นี่
  • mkswap = คำสั่งให้ระบบสร้าง swap ขึ้นมาในระบบ (อ่านเพิ่มเติมได้ที่นี่)
  • swapon = คำสั่งเปิดใช้ swap ที่เราสร้างขึ้น (อ่านเพิ่มเติมได้ที่นี่)
  • apt-get หรือ apt = เป็นโปรแกรมที่ไว้ติดตั้งโปรแกรมหรือซอฟต์แวร์ตัวอื่นๆ ให้กับระบบ ย่อมาจาก Advanced Package Tool นิยมใช้ในสาย Debian ครับ (ถ้าฝั่ง Fedora ที่นิยมมักจะเป็น rpm ครับ)

ล็อคค่า IP Address และเชื่อมเข้ากับโดเมน

ขั้นตอนต่อมาเราจะมาล็อค IP Address และเชื่อมต่อเข้ากับโดเมนกันครับ

ทำไมถึงต้องล็อค IP Address และเชื่อมต่อโดเมน?

ปกติแล้ว คอมพิวเตอร์หรืออุปกรณ์ทุกเครื่องบนโลกที่เชื่อมต่อกับอินเทอร์เน็ต จะต้องมีสิ่งที่เรียกว่า IP Address (Internet Protocol Address) เปรียบเสมือนที่อยู่ของเครื่อง/อุปกรณ์ และข้อมูลจะส่งไปได้นั้น ก็จำเป็นที่จะรู้รหัสเหล่านี้

คราวนี้ในหลายกรณี เมื่อเรารีสตาร์ทเครื่องไปแล้วเชื่อมต่ออีกครั้ง รหัสเหล่านี้จะเปลี่ยนแปลงตามไป ซึ่งถ้าเราใช้คอมพิวเตอร์ที่เป็นเครื่องส่วนตัวคงไม่ซีเรียสอะไรมาก

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

ทีนี้ พอรหัสมันซับซ้อน ก็มีคนคิดว่า เออ ทำไมเราไม่ใช่ชื่อแทนล่ะ จำง่ายๆ เช่น รหัสไอพี 198.41.214.162 ก็แทนด้วย cloudflare.com เสียเลย ระบบชื่อ หรือ Domain Name System (DNS) จึงเกิดขึ้นนั่นเอง

เมื่อคนพิมพ์ cloudflare.com ระบบคอมพิวเตอร์ก็จะวิ่งไปหาเครื่องที่รวมรายชื่อพวกนี้ เรียกว่า DNS Server เพื่อดูรายชื่อ (lookup) และร้องขอให้ระบุว่า จะติดต่อเครื่องไหน จากนั้นเมื่อ DNS Server เจอค่าแล้วส่งกลับมา เครื่องก็จะติดต่อโดยตรงกับ Server ให้บริการนั้นโดยตรงเอง เพราะรู้แล้วว่า cloudflare.com = 198.41.214.162 นั่นเองครับ

ความสัมพันธ์มันก็จะประมาณนี้ (Remember ก็พิมพ์ตกอีก ฮ่วย สะเพร่าจริงข้าพเจ้านี่)

คราวนี้ คงพอเดาออกใช่ไหมครับว่า ถ้าเราเปลี่ยน IP Address บ่อยๆ เราก็ต้องไปไล่อัพเดต DNS นี่แหละครับ ซึ่งอันนี้คือความน่าปวดหัว ในหลายกรณีก็มีบริการ Dynamic DNS (DDNS) คอยมาคั่นตรงกลางให้เรา แต่ก็นั่นแหละครับ ใช่ว่าจะสมหวังไปซะทุกอย่าง เพราะต้องรอเวลานั่นแหละครับ

ทางออกที่ดีที่สุด คือล็อค IP Address ให้เป็น Static เลยครับ คราวนี้ไม่ต้องเปลี่ยนบ่อยๆ แก้ปวดหัวไปเลย

ล็อค IP Address ให้เป็น Static IP Address

ขั้นแรกก็กลับไปหน้านี้ครับ แต่คราวนี้กดปุ่ม จุดสามจุดแนวตั้ง แทน

เลือก View Network Details เลยครับ

พอกดเสร็จ ก็จะเจอหน้าจอแบบนี้ คราวนี้ให้กด External IP addresses ด้านซ้ายมือครับ

หลังจากกดตรง External IP Address ก็จะพบกับหน้าจอนี้

ให้ดูว่าในส่วนที่เขียนว่า Type ในปัจจุบันที่เป็น Ephemeral นั้น ปรากฎอย่างชัดเจน

คราวนี้ ก็แค่เลือกเปลี่ยนจาก Ephemeral เป็น Static

จะมีหน้าจอมาถามว่าเราจอง (reserve) นี้ จะให้ชื่อว่าอะไร ในกรณีผมก็ใส่ว่า instance-1 ตามชื่อเครื่องไปครับ แล้วก็กด Reserve

รอสักพัก เราก็จะได้ IP Address มา พร้อมกับปรับสถานะ Network Tier จากปกติเป็น Premium Tier (จ่ายแพงขึ้นน่ะครับ ดังนั้นต้องหามาตรการลดค่าใช้จ่ายดีๆ)

เชื่อม IP Address เข้ากับ DNS Name Record

เลขในช่อง External Address ที่ได้จากการเปลี่ยนเป็น Static IP Address คือเลขที่เราต้องไปใส่ในบันทึก DNS ที่มักจะเรียกกับว่า Name Record นั่นแหละครับ อันนี้ก็แล้วศรัทธาของแต่ละคนว่าอยากจดโดเมนอะไรกัน (ไปดำเนินการกันเองนะครับ) ซึ่งก็ต้องไปแก้กันที่ A Record ของโดเมน ที่ส่วนมากก็จะเป็น @ หรือ www ใน Name Record ครับ เช่น

Type: A, Name: patranun.com, Value: xxx.xxx.xxx.xxx
Type: A, Name: www, Value: xxx.xxx.xxx.xxx

การเปลี่ยน A Record เหล่านี้ มักจะแตกต่างกันออกไปตามผู้ให้บริการ ลองปรึกษาข้อมูลดู โดยส่วนตัว ถ้าไม่อยากจ่ายเงิน ผมก็แนะนำ .tk ครับ แจกฟรีมาตั้งแต่ผมเริ่มเล่นอินเทอร์เน็ตเลยทีเดียว

เมื่อเชื่อม IP Address เครื่องบน GCP ของเราเข้ากับ A Record ของ Domain แล้ว ก็ทดลองส่งคำสั่ง ping ดูครับ เพื่อยืนยันว่าเข้าใช้งานได้ สำหรับกรณีนี้ผมทดลองเชื่อมกับ patranun.tk เพื่อทดสอบ แล้วก็พบว่าเครื่องมีการตอบสนองก็แปลว่าใช้ได้ครับ

เฮๆๆๆๆ

จบตอนนี้ (ที่ยาวมากกว่าที่คิดมาก) ตอนหน้ามาพบกับการติดตั้งและรีดประสิทธิภาพของ AMP (Apache + MySQL/Maria DB/PHP) Stack กันครับ

ไว้เจอกันตอนหน้าครับ

Leave a Reply

Your email address will not be published. Required fields are marked *