ขั้นตอนการตั้งค่า Virtual IP (VIP) ด้วย Pacemaker โดยทำงานร่วมกับ service radius (ubuntu22.04) ผ่าน command

ขั้นตอนการตั้งค่า Virtual IP (VIP) ด้วย Pacemaker โดยทำงานร่วมกับ service radius

ตั้งค่าhosts เพื่อให้ รู้จัง hostname กับทั้ง 2 server

Step 1: Initial System Setup

  1. Set Hostnames:
    • On radius1:

โค้ด sudo hostnamectl set-hostname radius1

    • On radius2:

โค้ด sudo hostnamectl set-hostname radius2

  1. Edit the /etc/hosts File:
    • On both nodes (radius1 and radius2), open the /etc/hosts file:

โค้ด sudo nano /etc/hosts

    • Add the IP addresses and hostnames of both nodes:

192.168.1.101  radius1

192.168.1.102  radius2

Replace the IPs with the correct addresses for your environment.

ดู hostname ของภายในไฟล์ hosts อย่าให้ซ้ำกันด้วย

 

ติดตั้ง Pacemaker, Corosync, and Pcs

Step 2: Install Pacemaker, Corosync, and Pcs

  1. Install Required Packages on Both Nodes: (ทั้งสองnode)

โค้ด

sudo apt update

sudo apt install pacemaker corosync pcs -y

  1. Set Password for hacluster User on Both Nodes: (ทั้งสองnode)

โค้ด

sudo passwd hacluster

Use the same password for hacluster on both nodes.

  1. Enable and Start pcsd Service:
    • On both nodes: (ทั้งสองnode)

โค้ด

sudo systemctl enable pcsd

sudo systemctl start pcsd

 

login เพื่อเชื่อมต่อทั้ง 2 Node

Step 3: Authentication Between Nodes

  1. Authenticate the Nodes:
    • Run this command on radius1 to authenticate with both nodes: (ทำแต่เครื่องหลัก)

โค้ด

sudo pcs host auth radius1 radius2 -u hacluster -p <password>

Replace <password> with the password set for the hacluster user.

 

ตั้งค่า Cluster  โดยตอนที่ฉันสั่งให้ pcs cluster setup mycluster radius1 radius2 ส่วนใหญ่จะเจอปัญหาว่า

Error: radius2: The host seems to be in a cluster already as cluster configuration files have been found on the host. If the host is not part of a cluster, run ‘pcs cluster destroy’ on host ‘radius2’ to remove those configuration files, use –force to override

Error: radius1: The host seems to be in a cluster already as cluster configuration files have been found on the host. If the host is not part of a cluster, run ‘pcs cluster destroy’ on host ‘radius1’ to remove those configuration files, use –force to override

ฉันเลยต้อง สั่ง

โค้ส

pcs cluster destroy ทั้ง 2 เครื่อง

systemctl stop corosync pacemaker  ทั้ง 2 เครื่อง

ก่อนจึงจะ run ต่อไปนี้ต่อได้

 

Step 4: Setup the Cluster

  1. Create the Cluster on radius1:

โค้ด

sudo pcs cluster setup mycluster radius1 radius2

  1. Start the Cluster on Both Nodes:

โค้ด

sudo pcs cluster start –all

  1. Enable Cluster to Start on Boot:

โค้ด

sudo pcs cluster enable –all

 

Step 5: Set Cluster Properties

  1. Set Quorum Policy:

โค้ด

sudo pcs property set no-quorum-policy=ignore

การตั้งค่า no-quorum-policy=ignore ในการกำหนดค่า Pacemaker cluster เป็นขั้นตอนที่สำคัญซึ่งกำหนดการทำงานของคลัสเตอร์เมื่อเกิดการสูญเสีย Quorum

อธิบาย Quorum

  • Quorum เป็นกลไกที่ใช้ในระบบจัดการคลัสเตอร์เพื่อป้องกันสถานการณ์ “split-brain” ซึ่งเกิดขึ้นเมื่อโหนดในคลัสเตอร์ไม่สามารถสื่อสารกันได้ และแต่ละฝ่ายคิดว่าตัวเองเป็นคลัสเตอร์หลัก ทำให้เกิดความไม่สอดคล้องของข้อมูลและอาจเกิดการเสียหายของข้อมูลได้
  • คลัสเตอร์จะถือว่ามี Quorum เมื่อมีโหนดมากกว่าครึ่งหนึ่งที่สามารถทำงานและสื่อสารกันได้

no-quorum-policy=ignore

  • การตั้งค่า no-quorum-policy=ignore หมายถึง คุณสั่งให้คลัสเตอร์ทำงานและให้บริการต่อไปแม้ว่าจะสูญเสีย Quorum (เช่น เมื่อไม่มีโหนดที่สื่อสารได้เพียงพอที่จะตอบสนองความต้องการของ Quorum)
  • การตั้งค่านี้มักใช้กับคลัสเตอร์ที่มีเพียงสองโหนด (two-node cluster) เพราะหากใช้กฎของ Quorum อย่างเคร่งครัด จะทำให้คลัสเตอร์ทั้งระบบไม่สามารถทำงานได้เมื่อมีโหนดหนึ่งล้มเหลวหรือการสื่อสารขัดข้องระหว่างโหนด

เหตุผลที่ขั้นตอนนี้สำคัญ

  • ในคลัสเตอร์ขนาดเล็ก โดยเฉพาะคลัสเตอร์ที่มีสองโหนด การสูญเสีย Quorum จะทำให้คลัสเตอร์ทั้งระบบหยุดทำงานได้ เนื่องจากการสูญเสียโหนดหนึ่งหมายถึงการสูญเสีย Quorum
  • การตั้งค่า no-quorum-policy=ignore ช่วยให้โหนดที่เหลือยังสามารถจัดการบริการและทำงานต่อไปได้ ซึ่งเพิ่มความพร้อมใช้งานและป้องกันการหยุดชะงักของบริการเมื่อโหนดหนึ่งล้มเหลว

อย่างไรก็ตาม ควรใช้การตั้งค่านี้อย่างระมัดระวังในคลัสเตอร์ที่มีมากกว่าสองโหนด เพราะอาจทำให้เกิดสถานการณ์ split-brain ในคลัสเตอร์ที่ใหญ่ขึ้นได้

 

 

Step 6: Add Virtual IP Resource

  1. Create a Virtual IP Resource:

โค้ด

sudo pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.1.202 cidr_netmask=24 op monitor interval=30s

 

Step 7: Add RADIUS Service Resource

  1. Create RADIUS Service Resource:

โค้ด

sudo pcs resource create RADIUS_Service systemd:freeradius.service op monitor interval=30s on-fail=restart

ตัวเลือก on-fail ใช้ในการกำหนดการทำงานของ Pacemaker เมื่อการดำเนินการของทรัพยากร (resource operation) ล้มเหลว โดยสามารถกำหนดการจัดการในรูปแบบต่าง ๆ ได้ ซึ่งมีหลายตัวเลือก ดังนี้:

ตัวเลือก on-fail และความแตกต่าง

  1. ignore:
    • คำอธิบาย: ละเว้นข้อผิดพลาดที่เกิดขึ้น ไม่ดำเนินการใด ๆ กับทรัพยากรแม้การดำเนินการจะล้มเหลว
    • การใช้งาน: ใช้เมื่อไม่ต้องการให้ข้อผิดพลาดเล็ก ๆ ส่งผลกระทบต่อการทำงานของคลัสเตอร์
  2. restart:
    • คำอธิบาย: ทำการรีสตาร์ททรัพยากรที่ล้มเหลวบนโหนดเดิม ถ้าทรัพยากรยังล้มเหลวหลังจากรีสตาร์ทตามจำนวนครั้งที่กำหนดไว้ มันจะพิจารณาทางเลือกอื่น (เช่น migrate)
    • การใช้งาน: ใช้เมื่อการรีสตาร์ทสามารถแก้ปัญหาข้อผิดพลาดได้
  3. fence:
    • คำอธิบาย: ทำการกักขัง (fence) โหนดที่ทรัพยากรทำงานอยู่ คลัสเตอร์จะทำให้โหนดนั้นไม่สามารถเข้าถึงทรัพยากรได้ ซึ่งปกติใช้กับระบบที่มี shared storage เพื่อป้องกันการ access ซ้ำกัน
    • การใช้งาน: ใช้เมื่อทรัพยากรที่ล้มเหลวอาจส่งผลต่อข้อมูลที่สำคัญและต้องการความปลอดภัย
  4. standby:
    • คำอธิบาย: เปลี่ยนสถานะโหนดที่ทรัพยากรล้มเหลวให้เป็นสถานะ standby และย้ายทรัพยากรทั้งหมดไปยังโหนดอื่น
    • การใช้งาน: ใช้เมื่อเชื่อว่าโหนดนั้นมีปัญหาและต้องการให้โหนดอื่นเข้ามาทำงานแทน
  5. block:
    • คำอธิบาย: หยุดการดำเนินการทั้งหมดของทรัพยากรนี้ และป้องกันไม่ให้ Pacemaker ทำการดำเนินการใด ๆ กับทรัพยากรนี้อีกต่อไป
    • การใช้งาน: ใช้ในสถานการณ์ที่ต้องการหยุดทรัพยากรโดยสมบูรณ์เนื่องจากปัญหาร้ายแรง
  6. nothing:
    • คำอธิบาย: เหมือนกับ ignore คือไม่ทำการใด ๆ แต่ตัวเลือกนี้ไม่แนะนำให้ใช้
    • การใช้งาน: เมื่อไม่ต้องการให้ข้อผิดพลาดกระทบการทำงาน

การใช้งาน on-fail

  • ตัวเลือก on-fail ควรเลือกใช้ให้สอดคล้องกับสถานการณ์และความสำคัญของทรัพยากร ตัวอย่างเช่น หากเป็นบริการที่สามารถรีสตาร์ทเพื่อแก้ปัญหาได้ ควรใช้ restart หรือถ้าเชื่อว่าการย้ายไปโหนดอื่นจะช่วยแก้ปัญหาได้ ควรใช้ migrate เป็นต้น

 

Step 8: Set Resource Constraints

  1. Ensure Virtual IP and RADIUS Service Run on the Same Node:

โค้ด

sudo pcs constraint colocation add VirtualIP with RADIUS_Service INFINITY

  1. Set the Order of Resource Startup:

โค้ด

sudo pcs constraint order start RADIUS_Service then start VirtualIP

 

จากนั้น

ปิดการใช้งาน STONITH (ในกรณีที่คุณไม่ต้องการใช้งาน STONITH):

โค้ด

sudo pcs property set stonith-enabled=false

และ

ตรวจสอบและลองเริ่ม VirtualIP ใหม่: หลังจากปิดการใช้งาน STONITH แล้ว ให้ตรวจสอบสถานะของคลัสเตอร์และลองเริ่ม VirtualIP ใหม่:

โค้ด

sudo pcs status

sudo pcs resource enable VirtualIP

 

จากนั้นใส่เงื่อนไขเพิ่มเติม

sudo pcs resource meta RADIUS_Service migration-threshold=1

คำสั่ง priority-failback ได้ถูกลบออกไปจากเวอร์ชันใหม่ ๆ ของ Pacemaker แล้ว ปัจจุบันสามารถใช้วิธีการปรับแต่งคุณสมบัติของทรัพยากร (resource) เพื่อให้มันทำการย้ายกลับไปยังโหนดที่ต้องการด้วยการใช้ resource-stickiness และการกำหนด location constraint เพื่อควบคุมพฤติกรรมของทรัพยากร

ขั้นตอนการแก้ไข

  1. ตั้งค่า resource-stickiness: เพื่อให้ทรัพยากรต้องการอยู่กับโหนดปัจจุบันเมื่อโหนดนั้นกลับมาใช้งานได้:

bash

คัดลอกโค้ด

pcs resource meta RADIUS_Service resource-stickiness=1

  1. ตั้งค่า location constraint สำหรับโหนดที่ต้องการ: เพื่อระบุว่าทรัพยากรควรจะอยู่ที่โหนดใดเป็นหลัก (ให้คะแนนสูงกับโหนดที่ต้องการ) เช่น:

bash

คัดลอกโค้ด

pcs constraint location RADIUS_Service prefers radius1=100

pcs constraint location RADIUS_Service prefers radius2=50

 

ทดสอบ โดยทดสอบ 2 ส่วนดังนี้

1. Down service radius

2down server

โดยทดสอบ authen ทั้ง 2 ส่วน

 

 

 

 

 

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *