it_devops

MetalLB Load Balancer Pod Scheduling — คู่มือฉบับสมบูรณ์ 2026 | SiamCafe Blog

MetalLB Load Balancer Pod Scheduling — คู่มือฉบับสมบูรณ์ 2026 | SiamCafe Blog

MetalLB Load Balancer Pod Scheduling — คืออะไร / บทนำ

ในยุคที่ระบบคลาวด์เนทีฟ (Cloud Native) และบริการแบบไมโครเซอร์วิส (Microservices) กลายเป็นมาตรฐานขององค์กรเทคโนโลยีทั่วโลก การจัดการรับส่งข้อมูล (Load Balancing) ภายในคลัสเตอร์ Kubernetes จึงไม่ใช่แค่เรื่องรอง แต่คือหัวใจหลักของความเสถียรและประสิทธิภาพระบบ หนึ่งในเครื่องมือที่ได้รับความนิยมอย่างสูงในกลุ่ม DevOps และ SRE คือ MetalLB ซึ่งเป็น Load Balancer แบบ Layer 4 ที่ทำงานภายในคลัสเตอร์โดยไม่ต้องพึ่งพาผู้ให้บริการคลาวด์ภายนอก โดยเฉพาะในสภาพแวดล้อม On-Premises หรือ Hybrid Cloud ที่ต้องการควบคุม IP และการจัดสรรทรัพยากรเองอย่างเต็มที่

ประเด็นสำคัญที่หลายคนมองข้ามคือ Pod Scheduling หรือการจัดสรรงาน (workload) ให้กับโหนด (node) ภายในคลัสเตอร์ โดยเฉพาะเมื่อพูดถึง MetalLB ซึ่งต้องทำงานร่วมกับ Pod ที่เป็นตัวกลางในการกระจายการรับส่งข้อมูล ความเข้าใจในกลไกการจัดสรรนี้จึงมีผลโดยตรงต่อประสิทธิภาพ ความทนทาน และการกู้คืนระบบ (recovery) เมื่อเกิดความผิดพลาด ตัวอย่างเช่น หาก Pod ของ MetalLB ถูกส่งไปยังโหนดที่มีทรัพยากรต่ำหรือมีปัญหาเครือข่าย อาจทำให้เกิดช่วงเวลาหยุดทำงาน (downtime) หรือการตอบสนองช้าได้ทันที ดังนั้น การตั้งค่าการจัดสรร Pod อย่างชาญฉลาด จึงไม่ใช่แค่เรื่องเทคนิค แต่คือกลยุทธ์การบริหารระบบในระยะยาว

ในปี 2026 การใช้งาน MetalLB จึงไม่ใช่แค่การติดตั้งแล้วปล่อยทิ้งไว้ แต่ต้องมีการออกแบบการจัดสรร Pod ที่รองรับการขยายตัว (scalability) รองรับความผิดพลาด (fault tolerance) และสามารถกู้คืนระบบได้อย่างรวดเร็ว ซึ่งต้องอาศัยความเข้าใจในกลไกของ Kubernetes Scheduler, Affinity, Anti-Affinity, และ Resource Limits อย่างลึกซึ้ง บทความนี้จะพาคุณเข้าใจทั้งพื้นฐานและเทคนิคขั้นสูงในการจัดการ Pod Scheduling ของ MetalLB อย่างมีประสิทธิภาพ พร้อมตัวอย่างการตั้งค่าจริงที่ใช้ได้ทั้งในสภาพแวดล้อมพัฒนา (development) และผลิต (production)

เราในฐานะผู้ดูแลระบบระดับตำนานในตลาด Forex ที่ใช้ XM มาเกือบ 14 ปี รู้ดีว่าความเสถียรของระบบไม่ใช่แค่คำพูด แต่คือสิ่งที่ตัดสินผลตอบแทนในตลาดที่ต้องการความแม่นยำสูง ดังนั้น การตั้งค่า MetalLB อย่างชาญฉลาดจึงไม่ต่างจากการตั้งค่า Stop Loss ที่แม่นยำ — ต้องมีกลยุทธ์ ต้องมีการทดสอบ และต้องมีการวางแผนล่วงหน้า ไม่ว่าจะในสภาพแวดล้อมใดก็ตาม

การจัดสรร Pod ของ MetalLB ไม่ใช่เรื่องสุ่ม แต่เป็นกระบวนการที่ควบคุมโดย Kubernetes Scheduler ซึ่งใช้กฎและนโยบายที่ผู้ดูแลระบบตั้งไว้ โดยเฉพาะเมื่อพูดถึงบริการที่ต้องการความเสถียรสูงอย่าง Load Balancer แล้ว การตั้งค่าการจัดสรรอย่างชาญฉลาดจึงมีความสำคัญยิ่ง ตัวอย่างเช่น หากไม่มีการกำหนดนโยบาย (policy) ใด ๆ Pod ของ MetalLB อาจถูกส่งไปยังโหนดเดียวกัน ซึ่งถ้าโหนดนั้นล่ม ระบบ Load Balancer จะหยุดทำงานทันที ทำให้เกิดช่วงเวลาหยุดทำงาน (downtime) ที่ไม่สามารถยอมรับได้

แนวทางที่ดีที่สุดคือการใช้ Anti-Affinity เพื่อป้องกันไม่ให้ Pod ของ MetalLB อยู่บนโหนดเดียวกัน ซึ่งในสภาพแวดล้อม High Availability (HA) ควรตั้งค่าให้ Pod อย่างน้อย 2 ตัวอยู่บนโหนดต่างกันอย่างแน่นอน ตัวอย่างการตั้งค่าในไฟล์ `metallb-controller.yaml`:

affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution:

  • labelSelector:

matchExpressions:

  • key: app

operator: In values: ["metallb"] topologyKey: kubernetes.io/hostname

การตั้งค่านี้บังคับให้ Pod ของ MetalLB ไม่สามารถอยู่ร่วมโหนดเดียวกันได้ แม้จะมีโหนดว่างก็ตาม ช่วยลดความเสี่ยงจากการล่มของโหนดเดียวที่ส่งผลต่อระบบทั้งหมด

นอกจากนี้ ควรใช้ Node Affinity เพื่อให้ Pod ถูกส่งไปยังโหนดที่มีทรัพยากรเพียงพอ เช่น โหนดที่มี CPU และ RAM เหลือใช้งานมาก หรือโหนดที่มีเครือข่ายความเร็วสูง โดยเฉพาะในสภาพแวดล้อมที่มีโหนดต่างกันทั้งด้านฮาร์ดแวร์และเครือข่าย ตัวอย่างเช่น โหนดที่ใช้สำหรับบริการเครือข่ายควรได้รับการจัดลำดับความสำคัญสูงกว่าโหนดทั่วไป

ในสภาพแวดล้อมผลิต (production) การตั้งค่า Pod Scheduling ของ MetalLB ต้องคำนึงถึงหลายปัจจัยร่วมกัน ไม่ใช่แค่ความเสถียร แต่รวมถึงการจัดการทรัพยากร

การกู้คืนระบบ และการปรับขนาด (scaling) อย่างมีประสิทธิภาพ โดยเฉพาะเมื่อระบบต้องรองรับผู้ใช้งานหลายหมื่นคนพร้อมกันในช่วงเวลาเร่งด่วน

ในสภาพแวดล้อมผลิต (production) การตั้งค่า Pod Scheduling ของ MetalLB ต้องคำนึงถึงหลายปัจจัยร่วมกัน ไม่ใช่แค่ความเสถียร แต่รวมถึงการจัดการทรัพยากร การกู้คืนระบบ และการปรับขนาด (scaling) อย่างมีประสิทธิภาพ โดยเฉพาะเมื่อระบบต้องรองรับผู้ใช้งานหลายหมื่นคนพร้อมกันในช่วงเวลาเร่งด่วน

แนวทางที่แนะนำคือการใช้ Topology Spread Constraints ร่วมกับ Anti-Affinity เพื่อกระจาย Pod อย่างสมดุลทั้งในระดับโหนด (node) และโซน (zone) โดยเฉพาะในสภาพแวดล้อมที่มีหลายโหนดหรือหลาย Availability Zone ตัวอย่างเช่น หากคลัสเตอร์มีโหนด 6 ตัว แบ่งเป็น 2 โซน ควรตั้งค่าให้ Pod ของ MetalLB กระจายอย่างน้อย 1 ตัวในแต่ละโซน เพื่อป้องกันไม่ให้การล่มของโซนใดโซนหนึ่งทำให้ระบบล่มทั้งหมด

topologySpreadConstraints:

  • maxSkew: 1

topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: metallb

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

นอกจากนี้ ควรตั้งค่า Resource Limits และ Requests อย่างเหมาะสม เช่น กำหนด CPU ไม่เกิน 2 หน่วย และ RAM ไม่เกิน 2 GB เพื่อไม่ให้ Pod ใช้ทรัพยากรจนเกินไปและกระทบต่อโหนดอื่น ๆ พร้อมตั้งค่า livenessProbe และ readinessProbe เพื่อให้ Kubernetes ตรวจจับความผิดปกติได้ทันที และกู้คืน Pod ได้โดยอัตโนมัติ

ปัจจัยค่าแนะนำ (Production)วัตถุประสงค์
Pod จำนวน2–3 ตัวรองรับ High Availability
Anti-Affinityใช้กับโหนดป้องกันการล่มพร้อมกัน
Topology Spreadตามโซนกระจายความเสี่ยง
CPU Request0.5ใช้ทรัพยากรอย่างมีประสิทธิภาพ
Memory Request512Miป้องกัน OOM

การจัดการ Pod Scheduling ของ MetalLB ไม่ใช่แค่การตั้งค่าในไฟล์ YAML แต่ต้องมีแนวทางปฏิบัติ (best practices) ที่สอดคล้องกับมาตรฐานขององค์กรและมาตรฐาน DevOps อย่างแท้จริง โดยเฉพาะในยุค 2026 ที่ความเร็วในการปรับตัว (agility) และความเสถียรของระบบเป็นสิ่งที่วัดกันได้โดยตรง

การจัดการ Pod Scheduling ของ MetalLB ไม่ใช่แค่การตั้งค่าในไฟล์ YAML แต่ต้องมีแนวทางปฏิบัติ (best practices) ที่สอดคล้องกับมาตรฐานขององค์กรและมาตรฐาน

DevOps อย่างแท้จริง โดยเฉพาะในยุค 2026 ที่ความเร็วในการปรับตัว (agility) และความเสถียรของระบบเป็นสิ่งที่วัดกันได้โดยตรง

Best Practices การจัดการ Pod Scheduling อย่างมืออาชีพ

การจัดการ Pod Scheduling ของ MetalLB ไม่ใช่แค่การตั้งค่าในไฟล์ YAML แต่ต้องมีแนวทางปฏิบัติ (best practices) ที่สอดคล้องกับมาตรฐานขององค์กรและมาตรฐาน DevOps อย่างแท้จริง โดยเฉพาะในยุค 2026 ที่ความเร็วในการปรับตัว (agility) และความเสถียรของระบบเป็นสิ่งที่วัดกันได้โดยตรง

แนวทางแรกคือ การใช้ Helm Charts แทนการตั้งค่า YAML แบบแมนนวล เพราะช่วยให้การติดตั้งและอัปเดตระบบทำได้อย่างรวดเร็วและลดข้อผิดพลาดจากมนุษย์ได้มาก ตัวอย่างเช่น การใช้ Helm ร่วมกับ `metallb/values.yaml` เพื่อกำหนดค่า Anti-Affinity, Resource Limits, และ Topology Spread ได้ทั้งหมดในที่เดียว

แม้จะตั้งค่าอย่างถูกต้อง แต่ในโลกแห่งความจริง ปัญหาเกี่ยวกับ Pod Scheduling ยังคงเกิดขึ้นได้เสมอ โดยเฉพาะในสภาพแวดล้อมที่มีความซับซ้อนสูงหรือทรัพยากรจำกัด ตัวอย่างปัญหาที่พบบ่อยมีดังนี้

แม้จะตั้งค่าอย่างถูกต้อง แต่ในโลกแห่งความจริง ปัญหาเกี่ยวกับ Pod Scheduling ยังคงเกิดขึ้นได้เสมอ

โดยเฉพาะในสภาพแวดล้อมที่มีความซับซ้อนสูงหรือทรัพยากรจำกัด ตัวอย่างปัญหาที่พบบ่อยมีดังนี้

การปฏิบัติตามแนวทางเหล่านี้ไม่ใช่แค่เพื่อความปลอดภัย แต่คือการสร้างวัฒนธรรมการดูแลระบบอย่างมืออาชีพ ที่องค์กรที่มีประสิทธิภาพในยุค 2026 จำเป็นต้องมี

ปัญหาที่พบบ่อยและแนวทางแก้ไขใน Pod Scheduling

แม้จะตั้งค่าอย่างถูกต้อง แต่ในโลกแห่งความจริง ปัญหาเกี่ยวกับ Pod Scheduling ยังคงเกิดขึ้นได้เสมอ โดยเฉพาะในสภาพแวดล้อมที่มีความซับซ้อนสูงหรือทรัพยากรจำกัด ตัวอย่างปัญหาที่พบบ่อยมีดังนี้

1. Pod ไม่สามารถส่งตัวเองไปยังโหนดใด ๆ ได้ (Pending status) สาเหตุ: โหนดที่มีทรัพยากรเพียงพอไม่มีให้ใช้ หรือมี Affinity/Anti-Affinity ตั้งไว้เกินไป จนไม่สามารถจัดสรรได้ วิธีแก้: ใช้คำสั่ง `kubectl describe pod ` เพื่อดูข้อความแจ้งเตือนว่า “Insufficient CPU/Memory” หรือ “PodDisruptionBudget” หรือ “Affinity rules conflict” จากนั้นปรับ Resource Requests หรือเปลี่ยนกลยุทธ์ Affinity

2. Pod ถูกจัดสรรไปยังโหนดที่มีเครือข่ายช้า สาเหตุ: ไม่มีการตั้งค่า Node Affinity หรือ Topology Spread ตามเครือข่าย วิธีแก้: ใช้ label บนโหนด เช่น `network=high-speed` แล้วตั้งค่า Affinity ให้ Pod ไปยังโหนดที่มี label นั้น

3. ระบบ Load Balancer ล่มเมื่อโหนดใดโหนดหนึ่งล้ม สาเหตุ: ไม่มี Anti-Affinity หรือไม่มี Pod หลายตัว วิธีแก้: ตรวจสอบว่ามี Pod อย่างน้อย 2 ตัว และมีการตั้งค่า Anti-Affinity อย่างถูกต้อง

ต่อไปนี้คือตัวอย่างการตั้งค่า Pod Scheduling ของ MetalLB ที่ใช้ได้จริงในสภาพแวดล้อมผลิต ซึ่งออกแบบมาเพื่อรองรับความทนทานสูง ความเสถียร

และการกู้คืนระบบอย่างรวดเร็ว สาเหตุ: Resource Limits ต่ำเกินไป หรือมีข้อผิดพลาดในแอปพลิเคชันภายใน Pod วิธีแก้: ตรวจสอบ log ด้วย `kubectl logs ` และเพิ่ม Resource Requests และ Limits ให้เพียงพอ

การวิเคราะห์ปัญหาเหล่านี้ด้วยเครื่องมือที่เหมาะสม เช่น `kubectl describe`, `kubectl logs`, และ Prometheus จะช่วยให้สามารถแก้ไขได้อย่างรวดเร็วและมีประสิทธิภาพ โดยเฉพาะในสภาพแวดล้อมที่ต้องการความเสถียรสูง

ตัวอย่างการตั้งค่าจริงในสภาพแวดล้อมผลิต

ต่อไปนี้คือตัวอย่างการตั้งค่า Pod Scheduling ของ MetalLB ที่ใช้ได้จริงในสภาพแวดล้อมผลิต ซึ่งออกแบบมาเพื่อรองรับความทนทานสูง ความเสถียร และการกู้คืนระบบอย่างรวดเร็ว

apiVersion: apps/v1 kind: Deployment metadata: name: metallb-controller namespace: metallb-system spec: replicas: 2 selector: matchLabels: app: metallb template: metadata: labels: app: metallb spec: serviceAccountName: metallb-controller containers:

  • name: controller

image: metallb/controller:v0.14.2 ports:

  • containerPort: 8080

name: metrics resources: requests: cpu: "0.5" memory: "512Mi" limits: cpu: "1" memory: "1Gi" livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 10 periodSeconds: 5 readinessProbe: httpGet: path: /readyz port: 8080 initialDelaySeconds: 5 periodSeconds: 5 affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution:

  • labelSelector:

matchExpressions:

  • key: app

operator: In values: ["metallb"] topologyKey: kubernetes.io/hostname topologySpreadConstraints:

  • maxSkew: 1

topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: metallb

ไฟล์คอนฟิกนี้ใช้ Pod 2 ตัว ตั้งค่า Anti-Affinity บนโหนด และกระจาย Pod ตามโซน โดยใช้ Topology Spread Constraints เพื่อป้องกันการรวมตัวในโซนเดียว พร้อมตั้งค่า Resource Requests และ Limits อย่างเหมาะสม เพื่อป้องกันการใช้ทรัพยากรเกิน และมี Probe ทั้ง Liveness และ Readiness เพื่อตรวจสอบสถานะการทำงานอย่างต่อเนื่อง

ตัวอย่างเพิ่มเติมในสภาพแวดล้อมที่มีโหนดต่างกัน เช่น โหนดสำหรับเครือข่ายความเร็วสูง (high-speed network) ควรตั้ง label ว่า `network=high-speed` แล้วใช้ Node Affinity ดังนี้:

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:

  • matchExpressions:
  • key: network

operator: In values: ["high-speed"]

การตั้งค่านี้จะบังคับให้ Pod ของ MetalLB ถูกส่งไปยังโหนดที่มีเครือข่ายความเร็วสูงเท่านั้น ช่วยลด latency และเพิ่มประสิทธิภาพในการรับส่งข้อมูล

คำถามที่พบบ่อย

Q: การตั้งค่า Anti-Affinity จำเป็นสำหรับ MetalLB หรือไม่?

A: จำเป็นอย่างยิ่ง โดยเฉพาะในสภาพแวดล้อมผลิต (production) ที่ต้องการความทนทานสูง หากไม่มีการตั้งค่า Anti-Affinity Pod ของ MetalLB อาจถูกจัดสรรไปยังโหนดเดียวกันได้ ซึ่งถ้าโหนดนั้นล่ม ระบบ Load Balancer จะหยุดทำงานทันที ทำให้เกิดช่วงเวลาหยุดทำงาน (downtime) ที่ไม่สามารถยอมรับได้ ด้วยเหตุนี้ การตั้งค่า `podAntiAffinity` จึงเป็นหนึ่งใน best practice ขั้นพื้นฐานที่ทุกผู้ดูแลระบบควรปฏิบัติตาม เพื่อป้องกันความเสี่ยงจากการล้มเหลวของโหนดเดียว การตั้งค่านี้ช่วยกระจาย Pod อย่างสมดุลและเพิ่มโอกาสในการกู้คืนระบบ (recovery) ได้อย่างรวดเร็ว แม้จะมีโหนดล้มไปแล้วก็ตาม ซึ่งในยุค 2026 การวางแผนล่วงหน้าเพื่อป้องกันความเสี่ยงจึงไม่ใช่เรื่องเลือก แต่คือสิ่งที่ต้องทำอย่างเคร่งครัด ทั้งในด้านเทคนิคและกระบวนการ ยิ่งระบบมีความซับซ้อนมากเท่าไร การตั้งค่า Anti-Affinity ก็ยิ่งมีความสำคัญมากขึ้นเท่านั้น เพราะความล้มเหลวของโหนดเดียวอาจส่งผลต่อผู้ใช้งานหลายพันคนได้ทันที ดังนั้น การใช้กลยุทธ์การกระจาย Pod อย่างชาญฉลาดจึงเป็นหัวใจสำคัญของระบบที่มีความเสถียรในระยะยาว

Q: ควรใช้ Pod จำนวนเท่าไรในสภาพแวดล้อมผลิต?

A: สำหรับสภาพแวดล้อมผลิต (production) ควรตั้งค่า Pod อย่างน้อย 2 ตัว แต่แนะนำให้ใช้ 2–3 ตัว เพื่อรองรับความทนทานสูง (High Availability) โดยเฉพาะเมื่อใช้ร่วมกับ Topology Spread Constraints และ Anti-Affinity หากมีเพียง Pod เดียว ระบบ Load Balancer จะมีจุดล้มเหลวเดียว (single point of failure) ซึ่งเป็นความเสี่ยงที่ยอมรับไม่ได้ในระบบที่ต้องการความต่อเนื่องสูง ตัวอย่างเช่น ในระบบเทรด Forex ที่ต้องรับข้อมูลจากตลาดตลอด 24 ชั่วโมง การหยุดทำงานเพียงไม่กี่วินาทีอาจส่งผลต่อการตัดสินใจในการซื้อขายได้ทันที ดังนั้น การมี Pod หลายตัวจึงไม่ใช่แค่เรื่องเทคนิค แต่คือการประกันความเสี่ยงทางธุรกิจ การตั้งค่า replicas อย่างเหมาะสมยังช่วยให้ระบบสามารถกู้คืนได้โดยอัตโนมัติเมื่อ Pod ใด Pod หนึ่งล้ม โดย Kubernetes จะสร้าง Pod ใหม่ทันที ซึ่งช่วยลดช่วงเวลาหยุดทำงาน (downtime) ให้เหลือน้อยที่สุด

Q: การใช้ Resource Limits ต่ำเกินไปส่งผลอย่างไร?

A: การตั้งค่า Resource Limits ต่ำเกินไปอาจทำให้ Pod ของ MetalLB ถูก Kubernetes หยุดทำงาน (OOM Killer) หรือถูกปิดโดยอัตโนมัติเมื่อใช้หน่วยความจำหรือ CPU เกินขีดจำกัด ซึ่งจะส่งผลให้ระบบ Load Balancer หยุดทำงานชั่วคราว หรือไม่สามารถจัดการคำขอได้อย่างมีประสิทธิภาพ ตัวอย่างเช่น หากกำหนด Memory Limit เป็น 256Mi แต่ในช่วงเวลาที่มีผู้ใช้งานจำนวนมาก Pod อาจใช้หน่วยความจำเกิน 512Mi จนถูกตัดทิ้ง ทำให้เกิดช่วงเวลาหยุดทำงาน (downtime) ทันที ดังนั้น การตั้งค่า Resource Requests และ Limits อย่างเหมาะสมจึงเป็นสิ่งจำเป็น โดยควรคำนวณจากปริมาณการใช้งานจริงในสภาพแวดล้อมที่มีผู้ใช้งานสูงสุด และตั้งค่าให้มี margin อย่างน้อย 20–30% เพื่อรองรับการใช้งานช่วงเร่งด่วน พร้อมตั้งค่า livenessProbe เพื่อให้ระบบตรวจจับความผิดปกติได้ทันทีและกู้คืนได้อย่างอัตโนมัติ

แนะนำเพิ่มเติม

🎯 เปิดบัญชี XM Forex → สมัคร

📱 แอป iCafeFX → ดาวน์โหลด

📊 สัญญาณฟรี → รับสัญญาณ

📚 คู่มือเทรด → SiamCafeBook

🤝 สมัคร Partner XM → pipaffiliates.com/c?c=72816&l=th&p=6

คู่มือ Forex ที่เกี่ยวข้อง

อ
XM Legend · เทรดเดอร์ & ผู้สอน Forex 13 ปี

ผู้ก่อตั้ง SiamCafe ตั้งแต่ปี 1997 · เทรดเดอร์สาย Forex มากกว่า 13 ปี ได้รับการยกย่องเป็น XM Legend · แบ่งปันความรู้ Forex, ไอที, AI และการเทรด จากประสบการณ์จริงในตลาดจริง

แหล่งอ้างอิง

  • SiamCafe.net - ชุมชนไอทีไทยตั้งแต่ปี 1997
  • iCafeFX.com - ศูนย์วิเคราะห์ Forex และทองคำ