29 ตุลาคม, 2556

การใช้ SSH config ไฟล์ เพื่อทำให้การ ssh ง่ายขึ้น

ปกติเวลาจะ ssh ไปที่ host มักจะใช้คำสั่งประมาณนี้
$ ssh user@host.domain
หรือถ้าใช้ port ที่นอกเหนือจาก 22 ก็จะใช้คำสั่ง
$ ssh user@host.domain -p 2222
ถ้ามีสัก 10 host อาจจะไม่สนุกละ จำผิดจำถูก อาจจะใส่ port ผิด หรือพิมพ์ชื่อโฮสยาวๆ ผิดไปตัวนึง เสียเวลา

ก็เลยเป็นที่มาของบล็อกนี้ จะใช้ไฟล์ config เพื่อทำให้การ ssh ง่ายขึ้นและแม่นยำขึ้น มาดูกันว่าทำไง

ก่อนอื่นเลย ใช้ editor สร้างไฟล์ขึ้นมาไฟล์นึงที่ เช่นผมใช้ vim ก็จะสร้างด้วยคำส่ัง
vim ~/.ssh/config
อธิบายได้คือ สร้างไฟล์ config ของ ssh ไว้ที่ home ของเรา โดยเนื้อหาข้างในจะมีรูปแบบดังนี้
Host hostnickname
    User username
    Hostname hostname หรือ ip address
เช่น
Host google     Username sergey     Hostname ssh.google.com
คราวนี้ เวลาจะ ssh ก็จะใช้คำสั่งสั้นลง เป็น
$ ssh google
ยกตัวอย่างอีกสักอัน
Host google     Username sergey     Hostname ssh.google.com 
Host myhost     Username phondanai     Hostname mysuperlonghostingnameever.com     Port 2222     Compression yes
แล้วการ ssh ก็จะง่าย~ ขึ้น (หมายเหตุ Compression ไม่ต้องมีกะได้ แต่ก็ช่วยได้นะเวลาเน็ตกาก)
$ ssh myhost
ยังมี option อีกมาก แต่เท่าที่ได้ใช้ตอนนี้ก็คงมีเท่านี้ล่ะ หวังว่าจะทำให้ชีวิตง่ายขึ้นนะ

ปล. หา REF ไม่เจอ T__T

25 ตุลาคม, 2556

ว่าด้วยเรื่อง OpenVZ (ตอนที่ ๒)

ถัดจาก ตอนที่ ๑ ได้เกริ่นเริ่มว่า OpenVZ คืออะไร อยู่ตรงไหนของ Virtualization
ตอนที่ ๒ นี้จะพามารู้จักทั้งสามส่วนที่ได้ทิ้งท้ายไว้เมื่อครั้งที่แล้วให้มากขึ้น ซึ่งได้แก่

  • Virtualization และ Isolation ที่ได้พูดไปว่า สามารถมีได้หลาย Virtual Environment (ต่อไปขอเรียกสั้นๆ ว่า VE) ใน physical server เพียงเครื่องเดียว
  • Resource management ซึ่งคือส่วนที่ OpenVZ เอาไว้จัดการทรัยากรทั้งหลายให้กับแต่ละ VE
  • Checkpointing ส่วนนี้ จะเกี่ยวข้องกับการทำ Live Migration ซึ่งจะเป็นยังไง ในโพสนี้มีบอกเช่นกัน

Virtualization และ Isolation

แต่ละ VE จะมีเซ็ตของทรัพยากร เป็นของตัวเอง (isolate) ซึ่งได้มาจาก kernel ของตัวโฮส OS  ซึ่งทรัพยากรเหล่านั้นจะแยกเป็นเอกเทศน์ไม่เกี่ยวข้องกับ VE อื่นๆ แต่อย่างใด ซึ่งทรัพยากรดังกล่าวจะมีดังนี้

  • ไฟล์ -- ไม่ว่าจะเป็น ไลบรารี่ของระบบ, แอพพลิเคชัน, /proc และ /sys, หรือการ lock ไฟล์ 
  • ผู้ใช้ และ กลุ่มผู้ใช้ -- แต่ละ VE จะมี root เป็นของตัวเอง รวมไปถึง ผู้ใช้และกลุ่มผู้ใช้ด้วย
  • โครงสร้างโปรเซส -- VE จะมองเห็นเฉพาะโปรเซสของตัวเอง โดยเริ่มตั้งแต่ init เหมือนกับลินุกซ์ทั่วไป และหมายเลยโปรเซส(PID) ของ init คือหมายเลข 1 นั่นเอง
  • เน็ตเวิร์ก -- VE จะได้อุปกรณ์เน็ตเวิร์ก เสมือน ซึ่งจะทำให้ VE สามารถมีหมายเลยไอพี เป็นของตัวเอง และรวมไปถึงกฏของ netfilter (iptables) และการ routing
  • อุปกรณ์ -- บางอุปกรณ์จะเป็นอุปกรณ์เสมือน ในบางกรณี หากต้องการให้ VE สามารถเข้าถึงอุปกรณ์จริงๆ บนเครื่องโฮส ก็สามารถทำได้ เช่น NIC, serial port เป็นต้น
  • IPC ออปเจ็กต์ -- ได้แก่  shared memory, semaphores และ mesages

Resource management

การจัดการทรัพยากร ถือเป็นเรื่องที่สำคัญที่สุดของ Virtualization ประเภท OS-Level เพราะทรัพยากรที่มีอยู่จำกัดได้ถูกแชร์โดย kernel เดียว ผ่านไปยัง VE หลายๆ ตัว ซึ่งทรัพยากรเหล่านี้ ต้องมีการจัดการที่ดี เพื่อที่จะทำให้ VE ที่รันอยู่ไปมีผลกระทบกับ VE ตัวอื่นๆ ที่รันอยู่ในโฮสเดียวกัน
OpenVZ มีการจัดการทรัพยการอยู่สามส่วน
  • จัดการโควต้าดิสก์แบบสองชั้น -- ชั้นแรก ที่ OpenVZ server สามารถจำกัดโควต้าของขนาดดิสก์และจำนวนของ inode, ชั้นที่สอง ที่ VE สามารถใช้ การจำกัดโควต้าโดยใช้เครื่องมือ UNIX quota ปกติ โดยสามาถจำกัดได้ทั้งแบบรายผู้ใช้ หรือแบบกลุ่มผู้ใช้
  • "Fair" CPU scheduler -- OpenVZ CPU scheduler ก็มีสองระดับเช่นกัน คือ ระดับแรก จะมองดูว่า VE ไหนที่จำเป็นต้องใช้พลังของ CPU รวมถึงมีการเซ็ตระดับความสำคัญไว้ ส่วนอีกระดับคือ ภายใน VE จะใช้ standard Linux scheduler ในการดูว่า โปรเซส ไหนที่จำเป็นต้องใช้พลังของ CPU โดยใช้ ระดับความคำคัญของโปรเซส
  • User Beancounters -- คือเซ็ตของ การนับ, การจำกัด และ การันตี ซึ่งจะมีอยู่ 20 พารามิเตอร์ซึ่งจะนำมาควบคุมการทำงานของ VE ผลที่ได้คือ จะไม่มี VE ไหน ใช้ทรัพยากรเกินกว่าที่ได้กำหนดไว้ ซึ่งอาจไปกระทบกับ VE อื่นได้ ซึ่งค่าส่วนใหญ่จะเกี่ยวกับหน่วยความจำ, IPC, network buffer เป็นต้น

Checkpointing และ live migration

การทำ checkpoint นำไปสู่การอนุญาติให้ทำ live migration หรือการย้าย VE จาก physical server นึง ไปยังอีก server นึงได้ โดยที่ไม่ต้องดาวน์ VE กระบวนการคือ VE จะถูก "แช่แข็ง" และสถานะทั้งหลายจะถูกเซฟลงดิสก์ โดยไฟล์นี้ล่ะจะถูกส่งต่อไปยัง server อีกเครื่อง จากนั้น VE ก็จะถูก ละลายน้ำแข็ง​ (เรียกว่า restore กะได้) กระบวนการทั้งหมดเกิดขึ้นภายในไม่กี่วินาที ซึ่งมองจากมุมผู้ใช้แล้ว จะไม่เหมือนเป็นการดาวน์ VE แต่จะเหมือนเป็นการดีเลย์ระหว่ากระบวนการซะมากกว่า 

หมดแล้วสำหรับครั้งนี้ ครั้งหน้าก็น่าจะยังคงเป็น OpenVZ อยู่ พอดีใช้บ่อย เลยมีอะไรมาเขียนนี่แหละ

22 ตุลาคม, 2556

ว่าด้วยเรื่อง OpenVZ (ตอนที่ ๑)


OpenVZ นั้น เป็นซอฟต์แวร์สำหรับทำ Operating system-level Virtualization บน Linux

Virtualization ประเภทนี้นอกจาก OpenVZ ก็จะมี FreeBSD Jail, Solaris Zones/Containers, Linux-VServer หรือที่ดังๆ เลยตอนนี้ก็ LXC (LinuX Containers) เป็นต้น Virtualization ประเภทนี้จะใช้ Kernel ตัวเดียวกันกับที่ Host รันอยู่ หรืออีกนัยนึงคือ ไม่สามารถสร้าง vm ที่ใช้ OS อื่นนอกเหนือจากที่ Kernel ของเครื่อง Host รองรับ (งงหนักกว่าเดิมไหมเนี่ย - -a )

เวลาพูดถึง OpenVZ มักจะต้องพูดถึงอีกคำนึงคือ Virtual Environment (VE) และพ่วงมาด้วยคำต่างๆ ที่พูดถึงสิ่งเดียวกัน เช่น VPS, container, partition
VE นั้นจะมีสภาพแวดล้อมเป็นของตัวเอง กล่าวคือ มี process init, filesystem, user (รวมถึง root), มี NIC และ IP address, routing tables, firewall rules(netfilter/iptables) เป็นของตัวเอง แต่โดยพ้ืนฐานก็จะไม่พ้นตัว Kernel ของ Host

Kernel ของ OpenVZ จะเป็น Kernel ที่ปรับแต่งมาสำหรับงาน Virtualization โดยมีฟังก์ชันต่างๆ เช่น

  • การทำ Virtualization และ isolation คือสามารถมีได้หลาย vm โดยใช้ kernel เพียงตัวเดียว
  • มีการจัดการทรัพยากรณ์ เช่น การจำกัด CPU, RAM, และพื้นที่ฮาร์ดดิสก์
  • การทำ Checkpoint จะเป็นการ แช่แข็ง(Freeze) สถานะของโปรเซส เพื่อบันทึกสถานะของดิสก์ไฟล์ในขณะนั้น
ครั้งหน้า(ไม่รู้เมื่อไหร่) จะมาเล่าต่อละกัน ไม่ได้เขียนนาน เริ่มเขียนไม่ถูกแระ <(")