เพิ่ม Interface ให้ KVM Guest สำหรับ Oracle Exadata มีขั้นตอนอย่างไร

Michikiang
Sirisoft
Published in
4 min readMar 31, 2023

เมื่อมิชิเกียงได้รับบัญชาให้เพิ่ม tagged VLAN interface สำหรับเพิ่ม IP วงใหม่ให้ Exadata

ขอกล่าวทักทายทุกท่านที่หลงเข้ามาค่ะ เราชื่อเกียง ปัจจุบันเป็น Database Administrator อยู่ที่บริษัท Sirisoft แต่ละวันของ DBA ก็มีงานต่าง ๆ กันไป maintenance บ้าง migrate บ้าง ช่วงหลัง ๆ ได้แตะ Exadata มากขึ้น และครั้งหนึ่งก็เคยลองเพิ่ม tagged VLAN interface ให้ DB Exadata ค่ะ

ตามปรกติ บน Environment ทั่วไปอย่างใน Oracle VM หากต้องการให้ database มีอีกสัก IP ก็คงลั่น nmtui แล้ว fix IP ให้เลยใช่ไหมล่ะคะ แต่สำหรับ Exadata ที่ตัวเครื่องเป็น host แบบ KVM (Kernel-based Virtual Machine) มันไม่ง่ายดายขนาดนั้นน่ะสิ! เลยอยากจะนำวิธีที่ใช้เพิ่มสำเร็จมาแบ่งปันค่ะ(☆▽☆)(☆▽☆)

อารัมภบท

KVM คืออะไร?

Kernel-based Virtual Machine (KVM) เป็นเทคโนโลยีแบบ virtualization (ระบบเสมือน) ที่ทำให้ Host machine หนึ่ง ๆ สามารถรัน VM หลาย ๆ ตัวได้ โดยจะมอง VM แต่ละตัวเป็น Guest

Kernel — ส่วนประกอบหลักอย่างหนึ่งของ OS ที่สามารถควบคุมการทำงานของระบบคอมพิวเตอร์ บริหาร resource และทำหน้าที่ติดต่อระหว่าง Hardware และ Software

โครงสร้างของ KVM Architecture จะเป็นประมาณภาพด้านล่างนี้ค่ะ

KVM Architecture

Hardware — Physical Hardware ต่าง ๆ เช่น CPU, RAM, Disk

Host Kernel — มี KVM Hypervisor ฝังอยู่ใน host OS สิ่งนี้เป็นตัวที่ทำให้ visualization ทำงานในประสิทธิภาพใกล้เคียงกับ raw hardware

KVM— (Kernel-based Virtual Machine) ตัวควบคุม computer server สามารถจัดสรร resource เพื่อแบ่ง workload ให้กับแต่ละ VM การตั้งค่าส่วนใหญ่ของบทความนี้จะดำเนินการที่นี่ค่ะ

QEMU— (Quick Emulator) คอยติดต่อกับ KVM ใน Kernel สามารถจำลองระบบ หน่วยประมวลผล ให้กับ device อื่น รวมถึงบริหารจัดการ VMs และอื่น ๆ

Guest Kernel— เป็น Guest OS ที่อาจมีมากกว่า 1 VM โดย VM เหล่านี้สามารถถูก manage ผ่านทาง Host ได้

Apps — Management Application, Software, user processes, etc.

อธิบาย Environment & เป้าหมาย

เรามี database แบบ non-cdb เวอร์ชัน 19c อยู่ชุดหนึ่ง — เป็น RAC ที่มี 2 instances

RAC — Real Application Cluster เทคโนโลยีที่ทำให้ผู้ใช้งานสามารถเข้าถึง DB แบบ single instance ได้จากหลาย server โดย DB ที่เข้าถึงจากแต่ละ server ล้วนใช้ที่เก็บข้อมูลร่วมกัน

  • Instance แรก UAT01 อยู่ที่ KVM Host ตัวแรก
  • Instance ที่สอง UAT02 อยู่ที่ KVM Host อีกตัว

เราอยากจะเพิ่ม IP อีกวงให้ KVM Guest โดยจะเพิ่มให้แค่ KVM Guest ตัวแรกที่มี UAT01 อยู่ ฉะนั้นจะไม่กล่าวถึง Instance ที่สองหรือ KVM Host อีกตัวที่ host UAT02 ต่อในบทความนี้ค่ะヾ(@⌒ー⌒@)ノヾ(@⌒ー⌒@)ノ

หลักการโดยคร่าว

  • Backup guest config file
  • สร้าง bonded interface & bridge
  • Allocate bridge
  • Restart Guest ผ่าน Host
  • เพิ่ม IP บน Guest

อ้างอิงจาก documentation ของ Oracle, layout ทั่วไปอาจเป็นประมาณนี้

Network Interface Card Layout in Oracle VM

พอทำแบบ tagged VLAN, layout จะเป็นประมาณนี้ค่ะ

Network Interface Card Layout in Oracle VM with VLAN Tagging

Requirement

  • Tagged VLAN ต้องมี DNS และ IP
  • มี KVM deploy บน Exadata ไว้อยู่ก่อนแล้ว
  • Tagged VLAN ต้องสร้างบน KVM Host เท่านั้นแล้วถึงไป map interface ใน KVM Guest (จะไม่สร้างบน guest ค่ะ)
  • มีการ allow host-based tagged VLAN อยู่ก่อนแล้วเรียบร้อย

เริ่ม implement กันเลย

  1. Backup guest configuration file เก็บไว้เผื่อกรณีต้อง rollback action
Backing up a guest configuration file

2. สร้าง Tagged bonded interface และ bridge

#creation
vm_maker --add-bonded-bridge <BOND_NAME> --first-slave <ethX> --second-slave <ethY> --vlan <VLANID>
Result of bonded interface and bridge creation

Note: สามารถดูว่า interface ไหนเป็นของ bonded ไหนได้จากการ cat ไฟล์ อันเป็นผลมาจากคำสั่งนี้ค่ะ ls -lhrt /etc/sysconfig/network-scripts

Example of interface configuration details

3. หลังสร้างแล้ว ใช้คำสั่ง ip addr show จะเห็น bonded interface และ bridge ดังภาพล่าง

Part of the IP outputs indicating that the interface & bridge were created

4. Allocate สิ่งที่สร้างไปเมื่อครู่กับ KVM Guest

#allocation
vm_maker --allocate-bridge <BOND_NAME> --vlan <VLANID> --domain [GUEST_NAME]
Output after allocation

Note: สามารถดู bridge configuration ได้ด้วยคำสั่ง brctl show ค่ะ

Result of brctl show

5. นำบรรทัดนี้ไปเพิ่มในไฟล์ /etc/udev/rules.d/70-persistent-net.rules ของ KVM Guest

Lines to be added to a file in KVM Guest

ณ KVM Guest

ตัวอย่างการเพิ่มไฟล์จะเป็นดังภาพล่างนี้ค่ะ

Editing a file in KVM Guest

6. [optional] หากที่ KVM Guest มี database อยู่ก็ควรปิดให้เรียบร้อยก่อนนะคะ จะได้ไม่มี transaction ค้างอยู่จนต้องถูก abort ออกไป ┗|`O′|┛┗|`O′|┛

ของเราเป็น RAC มี 2 instances จึงจะใช้คำสั่งนี้ในการปิดค่ะ

#stop db services on both sites
srvctl stop database -d DB_NAME

#check cluster status
crsctl stat res -t

ณ KVM Host

7. รีสตาร์ท KVM Guest ผ่าน KVM Host

vm_maker --stop-domain [GUEST_NAME]
vm_maker --start-domain [GUEST_NAME]

ณ KVM Guest

8. เพิ่ม IP ใหม่ให้ Guest ได้โดยรัน command นี้ค่ะ

/opt/oracle.cellos/ipconf.pl -nocodes

จะมี prompt nameserver, timezone และ NTP Server ขึ้นมา หากไม่ต้องการแก้ไขอะไรก็เคาะ enter เพื่อใช้ค่า default ที่มันแนะนำได้เลยค่ะ

Adding IP at KVM Guest

จากนั้นมีแสดงข้อมูล interface ทั้งหมดที่มีตั้งค่าไว้อยู่แล้วบนเครื่อง

จากภาพจะเห็นว่ามี IP วง SCAN, Management, Backup และ Replication เป็น Net Type ต่าง ๆ config เอาไว้แล้ว ในที่นี้เราจะใช้ beth90 ซึ่งยังไม่ได้ config เพื่อเพิ่มให้เป็น interface อีกตัวของเครื่องนี้ค่ะ

จากนั้นก็เพิ่ม IP ที่ได้รับมา (allow FWแล้ว), เพิ่ม GW, และเลือก type ของ network interface ค่ะ

เนื่องจากเรามีวง SCAN และ Management ไว้อยู่แล้ว ไม่สามารถตั้งซ้ำได้อีก เลยเลือก type เป็น Other ค่ะ

เราไม่ต้องการตั้งชื่อ hostname ใหม่จึงใส่ none เข้าไปใน prompt ถัดมา

Adding IP at KVM Guest (Con.)

สำหรับ default GW เราใช้ bondeth0 ค่ะ หลังจาก enter มันจะ repeat pattern คล้าย ๆ ช่วงแรกที่ให้เราดูอีกรอบ ต่างตรงที่รอบนี้ beth90 ได้ถูกตั้งค่าให้เป็น IP ใหม่ตามข้อมูลที่เราป้อนไปข้างต้นแล้วนั่นเอง

Adding IP at KVM Guest (Con.)

9. [optional] สืบเนื่องมาจากข้อ 6 หากที่ KVM Guest มี database อยู่ก็ควรเปิดกลับคืนมาค่ะ เราใช้คำสั่งนี้ในการเปิด ლ(╹◡╹ლ)ლ(╹◡╹ლ)

#start db services on both sites
srvctl start database -d DB_NAME

#check cluster status
crsctl stat res -t

จบกันไปแล้วสำหรับการเพิ่ม Tagged VLAN Interface ค่ะ ถึงงานแบบนี้จะไม่ค่อยเหมือน task ของ DBA เท่าไหร่ แต่ถ้าเรียนรู้ได้ก็จะทำให้การทำงานของเราคืบหน้าได้ไม่น้อยเลย

โอกาสหน้าหากมีอะไรสนุก ๆ จะแวะมาแบ่งปันอีกนะคะ! หากสนใจงาน DBA ไม่ว่าจะเป็น services หรือมาร่วมงานกับเราก็ติดต่อมาได้ตามช่องทางด้านล่างนี้เลยนะคะ ขอให้ทุกท่านโชคดีค่ะ (*^▽^*)(*^▽^*)

Webpage | Facebook | Line | LinkedIn

DBA Job Description

--

--