ขั้นตอนการตั้งค่า Virtual IP (VIP) ด้วย Pacemaker โดยทำงานร่วมกับ service radius (ubuntu22.04) ผ่าน command
ขั้นตอนการตั้งค่า Virtual IP (VIP) ด้วย Pacemaker โดยทำงานร่วมกับ service radius
ตั้งค่าhosts เพื่อให้ รู้จัง hostname กับทั้ง 2 server
Step 1: Initial System Setup
- Set Hostnames:
- On radius1:
โค้ด sudo hostnamectl set-hostname radius1
-
- On radius2:
โค้ด sudo hostnamectl set-hostname radius2
- 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
- Install Required Packages on Both Nodes: (ทั้งสองnode)
โค้ด
sudo apt update
sudo apt install pacemaker corosync pcs -y
- Set Password for hacluster User on Both Nodes: (ทั้งสองnode)
โค้ด
sudo passwd hacluster
Use the same password for hacluster on both nodes.
- 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
- 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
- Create the Cluster on radius1:
โค้ด
sudo pcs cluster setup mycluster radius1 radius2
- Start the Cluster on Both Nodes:
โค้ด
sudo pcs cluster start –all
- Enable Cluster to Start on Boot:
โค้ด
sudo pcs cluster enable –all
Step 5: Set Cluster Properties
- 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
- 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
- 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 และความแตกต่าง
- ignore:
- คำอธิบาย: ละเว้นข้อผิดพลาดที่เกิดขึ้น ไม่ดำเนินการใด ๆ กับทรัพยากรแม้การดำเนินการจะล้มเหลว
- การใช้งาน: ใช้เมื่อไม่ต้องการให้ข้อผิดพลาดเล็ก ๆ ส่งผลกระทบต่อการทำงานของคลัสเตอร์
- restart:
- คำอธิบาย: ทำการรีสตาร์ททรัพยากรที่ล้มเหลวบนโหนดเดิม ถ้าทรัพยากรยังล้มเหลวหลังจากรีสตาร์ทตามจำนวนครั้งที่กำหนดไว้ มันจะพิจารณาทางเลือกอื่น (เช่น migrate)
- การใช้งาน: ใช้เมื่อการรีสตาร์ทสามารถแก้ปัญหาข้อผิดพลาดได้
- fence:
- คำอธิบาย: ทำการกักขัง (fence) โหนดที่ทรัพยากรทำงานอยู่ คลัสเตอร์จะทำให้โหนดนั้นไม่สามารถเข้าถึงทรัพยากรได้ ซึ่งปกติใช้กับระบบที่มี shared storage เพื่อป้องกันการ access ซ้ำกัน
- การใช้งาน: ใช้เมื่อทรัพยากรที่ล้มเหลวอาจส่งผลต่อข้อมูลที่สำคัญและต้องการความปลอดภัย
- standby:
- คำอธิบาย: เปลี่ยนสถานะโหนดที่ทรัพยากรล้มเหลวให้เป็นสถานะ standby และย้ายทรัพยากรทั้งหมดไปยังโหนดอื่น
- การใช้งาน: ใช้เมื่อเชื่อว่าโหนดนั้นมีปัญหาและต้องการให้โหนดอื่นเข้ามาทำงานแทน
- block:
- คำอธิบาย: หยุดการดำเนินการทั้งหมดของทรัพยากรนี้ และป้องกันไม่ให้ Pacemaker ทำการดำเนินการใด ๆ กับทรัพยากรนี้อีกต่อไป
- การใช้งาน: ใช้ในสถานการณ์ที่ต้องการหยุดทรัพยากรโดยสมบูรณ์เนื่องจากปัญหาร้ายแรง
- nothing:
- คำอธิบาย: เหมือนกับ ignore คือไม่ทำการใด ๆ แต่ตัวเลือกนี้ไม่แนะนำให้ใช้
- การใช้งาน: เมื่อไม่ต้องการให้ข้อผิดพลาดกระทบการทำงาน
การใช้งาน on-fail
- ตัวเลือก on-fail ควรเลือกใช้ให้สอดคล้องกับสถานการณ์และความสำคัญของทรัพยากร ตัวอย่างเช่น หากเป็นบริการที่สามารถรีสตาร์ทเพื่อแก้ปัญหาได้ ควรใช้ restart หรือถ้าเชื่อว่าการย้ายไปโหนดอื่นจะช่วยแก้ปัญหาได้ ควรใช้ migrate เป็นต้น
Step 8: Set Resource Constraints
- Ensure Virtual IP and RADIUS Service Run on the Same Node:
โค้ด
sudo pcs constraint colocation add VirtualIP with RADIUS_Service INFINITY
- 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 เพื่อควบคุมพฤติกรรมของทรัพยากร
ขั้นตอนการแก้ไข
- ตั้งค่า resource-stickiness: เพื่อให้ทรัพยากรต้องการอยู่กับโหนดปัจจุบันเมื่อโหนดนั้นกลับมาใช้งานได้:
bash
คัดลอกโค้ด
pcs resource meta RADIUS_Service resource-stickiness=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 ส่วน