ค้นหาเว็บไซต์

วิธีกำหนดค่าและรักษาความพร้อมใช้งานสูง/การทำคลัสเตอร์ใน Linux


ความพร้อมใช้งานสูง (HA) หมายถึงคุณภาพของระบบในการทำงานอย่างต่อเนื่องโดยไม่มีความล้มเหลวเป็นระยะเวลานาน โซลูชัน HA สามารถนำไปใช้ได้โดยใช้ฮาร์ดแวร์และ/หรือซอฟต์แวร์ และหนึ่งในโซลูชันทั่วไปในการใช้ HA ก็คือการรวมกลุ่ม

ในการคำนวณ คลัสเตอร์ประกอบด้วยคอมพิวเตอร์ตั้งแต่สองเครื่องขึ้นไป (โดยทั่วไปเรียกว่า โหนด หรือ สมาชิก) ที่ทำงานร่วมกันเพื่อดำเนินงาน ในการตั้งค่าดังกล่าว จะมีเพียงโหนดเดียวเท่านั้นที่ให้บริการโดยมีโหนดรองเข้ามาแทนที่หากล้มเหลว

คลัสเตอร์แบ่งออกเป็นสี่ประเภทหลัก:

  • พื้นที่จัดเก็บ: ให้อิมเมจระบบไฟล์ที่สอดคล้องกันทั่วทั้งเซิร์ฟเวอร์ในคลัสเตอร์ ช่วยให้เซิร์ฟเวอร์สามารถอ่านและเขียนไปยังระบบไฟล์ที่ใช้ร่วมกันระบบเดียวได้พร้อมกัน
  • ความพร้อมใช้งานสูง: กำจัดจุดล้มเหลวจุดเดียวและโดยการล้มเหลวผ่านบริการจากโหนดคลัสเตอร์หนึ่งไปยังอีกโหนดหนึ่งในกรณีที่โหนดไม่ทำงาน
  • การปรับสมดุลโหลด: ส่งคำขอบริการเครือข่ายไปยังโหนดคลัสเตอร์หลายโหนดเพื่อสร้างสมดุลการโหลดคำขอระหว่างโหนดคลัสเตอร์
  • ประสิทธิภาพสูง: ดำเนินการประมวลผลแบบขนานหรือพร้อมกัน ซึ่งช่วยปรับปรุงประสิทธิภาพของแอปพลิเคชัน

โซลูชันที่ใช้กันอย่างแพร่หลายอีกวิธีหนึ่งในการจัดเตรียม HA คือการจำลองแบบ (โดยเฉพาะการจำลองข้อมูล) การจำลองแบบเป็นกระบวนการที่สามารถเก็บฐานข้อมูล (รอง) หนึ่งฐานข้อมูลขึ้นไปให้ซิงค์กับฐานข้อมูลหลัก (หรือฐานข้อมูลหลัก) เดียวได้

ในการตั้งค่าคลัสเตอร์ เราจำเป็นต้องมีเซิร์ฟเวอร์อย่างน้อยสองเครื่อง เพื่อวัตถุประสงค์ของคู่มือนี้ เราจะใช้เซิร์ฟเวอร์ Linux สองตัว:

  • โหนด 1: 192.168.10.10
  • โหนด2: 192.168.10.11

ในบทความนี้ เราจะสาธิตพื้นฐานของวิธีการปรับใช้ กำหนดค่า และรักษาความพร้อมใช้งาน/การทำคลัสเตอร์ใน Ubuntu 16.04/18.04 และ CentOS 7 ในระดับสูง เราจะสาธิตวิธีการเพิ่มบริการ Nginx HTTP ให้กับคลัสเตอร์

การกำหนดการตั้งค่า DNS ภายในเครื่องในแต่ละเซิร์ฟเวอร์

เพื่อให้เซิร์ฟเวอร์ทั้งสองสื่อสารกัน เราจำเป็นต้องกำหนดการตั้งค่า DNS ภายในที่เหมาะสมในไฟล์ /etc/hosts บนเซิร์ฟเวอร์ทั้งสอง

เปิดและแก้ไขไฟล์โดยใช้โปรแกรมแก้ไขบรรทัดคำสั่งที่คุณชื่นชอบ

sudo vim /etc/hosts  

เพิ่มรายการต่อไปนี้ด้วยที่อยู่ IP ที่แท้จริงของเซิร์ฟเวอร์ของคุณ

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

บันทึกการเปลี่ยนแปลงและปิดไฟล์

การติดตั้งเว็บเซิร์ฟเวอร์ Nginx

ตอนนี้ติดตั้งเว็บเซิร์ฟเวอร์ Nginx โดยใช้คำสั่งต่อไปนี้

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

เมื่อการติดตั้งเสร็จสมบูรณ์ ให้เริ่มบริการ Nginx ในตอนนี้และเปิดใช้งานให้เริ่มอัตโนมัติในเวลาบูต จากนั้นตรวจสอบว่าบริการทำงานอยู่หรือไม่โดยใช้คำสั่ง systemctl
บน Ubuntu บริการควรเริ่มต้นโดยอัตโนมัติทันทีหลังจากการกำหนดค่าล่วงหน้าของแพ็คเกจเสร็จสมบูรณ์ คุณก็สามารถเปิดใช้งานได้

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

หลังจากเริ่มบริการ Nginx เราจำเป็นต้องสร้างหน้าเว็บที่กำหนดเองเพื่อระบุและทดสอบการดำเนินการบนเซิร์ฟเวอร์ทั้งสอง เราจะแก้ไขเนื้อหาของหน้าดัชนี Nginx เริ่มต้นตามที่แสดง

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

การติดตั้งและกำหนดค่า Corosync และ Pacemaker

ต่อไป เราต้องติดตั้ง เครื่องกระตุ้นหัวใจ, Corosync และ ชิ้น บนแต่ละโหนดดังต่อไปนี้

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

เมื่อการติดตั้งเสร็จสมบูรณ์ ตรวจสอบให้แน่ใจว่า pcs daemon ทำงานบนเซิร์ฟเวอร์ทั้งสองเครื่อง

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

การสร้างคลัสเตอร์

ในระหว่างการติดตั้ง ผู้ใช้ระบบที่เรียกว่า “hacluster ” จะถูกสร้างขึ้น ดังนั้นเราจึงจำเป็นต้องตั้งค่าการรับรองความถูกต้องที่จำเป็นสำหรับ ชิ้น เริ่มต้นด้วยการสร้างรหัสผ่านใหม่สำหรับผู้ใช้ “hacluster ” เราจำเป็นต้องใช้รหัสผ่านเดียวกันบนเซิร์ฟเวอร์ทั้งหมด:

sudo passwd hacluster

จากนั้น บนเซิร์ฟเวอร์ตัวใดตัวหนึ่ง (Node1) ให้รันคำสั่งต่อไปนี้เพื่อตั้งค่าการรับรองความถูกต้องที่จำเป็นสำหรับ ชิ้น

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

ตอนนี้สร้างคลัสเตอร์และเติมโหนดบางส่วน (ชื่อคลัสเตอร์ต้องมีความยาวไม่เกิน 15 อักขระ ในตัวอย่างนี้ เราใช้ examplecluster) บนเซิร์ฟเวอร์ Node1

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

ตอนนี้เปิดใช้งานคลัสเตอร์ขณะบู๊ตและเริ่มบริการ

sudo pcs cluster enable --all
sudo pcs cluster start --all

ตรวจสอบว่าบริการคลัสเตอร์เปิดใช้งานและทำงานอยู่หรือไม่โดยใช้คำสั่งต่อไปนี้

sudo pcs status
OR
sudo crm_mon -1

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

การกำหนดค่าตัวเลือกคลัสเตอร์

ตัวเลือกแรกคือการปิดการใช้งาน STONITH (หรือ ยิงโหนดอื่นในหัว) ซึ่งเป็นการใช้ฟันดาบบน เครื่องกระตุ้นหัวใจ

ส่วนประกอบนี้ช่วยปกป้องข้อมูลของคุณจากการเสียหายจากการเข้าถึงพร้อมกัน เพื่อวัตถุประสงค์ของคู่มือนี้ เราจะปิดการใช้งานเนื่องจากเราไม่ได้กำหนดค่าอุปกรณ์ใดๆ

หากต้องการปิด STONITH ให้รันคำสั่งต่อไปนี้:

sudo pcs property set stonith-enabled=false

ถัดไป ให้ละเว้นนโยบาย องค์ประชุม ด้วยการเรียกใช้คำสั่งต่อไปนี้:

sudo pcs property set no-quorum-policy=ignore

หลังจากตั้งค่าตัวเลือกข้างต้นแล้ว ให้รันคำสั่งต่อไปนี้เพื่อดูรายการคุณสมบัติและตรวจสอบให้แน่ใจว่าตัวเลือกข้างต้น stonith และ นโยบายองค์ประชุม ถูกปิดใช้งาน

sudo pcs property list

การเพิ่มทรัพยากร/บริการคลัสเตอร์

ในส่วนนี้ เราจะดูวิธีเพิ่มทรัพยากรคลัสเตอร์ เราจะกำหนดค่า IP แบบลอยซึ่งเป็นที่อยู่ IP ที่สามารถย้ายได้ทันทีจากเซิร์ฟเวอร์หนึ่งไปยังอีกเครื่องหนึ่งภายในเครือข่ายหรือศูนย์ข้อมูลเดียวกัน กล่าวโดยสรุป IP แบบลอยเป็นคำศัพท์ทางเทคนิคทั่วไป ซึ่งใช้สำหรับ IP ที่ไม่ได้ผูกไว้กับอินเทอร์เฟซเดียวอย่างเคร่งครัด

ในกรณีนี้ จะใช้เพื่อรองรับการเฟลโอเวอร์ในคลัสเตอร์ที่มีความพร้อมใช้งานสูง โปรดทราบว่า IP แบบลอยไม่ได้มีไว้สำหรับสถานการณ์เฟลโอเวอร์เท่านั้น แต่ยังมีกรณีการใช้งานอื่นๆ อีกสองสามกรณี เราจำเป็นต้องกำหนดค่าคลัสเตอร์ในลักษณะที่เฉพาะสมาชิกที่ใช้งานอยู่ของคลัสเตอร์เท่านั้นที่ "เป็นเจ้าของ" หรือตอบสนองต่อ IP แบบลอยตัวในเวลาใดก็ตาม

เราจะเพิ่มทรัพยากรคลัสเตอร์สองรายการ: ทรัพยากรที่อยู่ IP แบบลอยที่เรียกว่า “floating_ip ” และทรัพยากรสำหรับเว็บเซิร์ฟเวอร์ Nginx ที่เรียกว่า “http_server

ขั้นแรกให้เริ่มต้นด้วยการเพิ่ม float_ip ดังนี้ ในตัวอย่างนี้ ที่อยู่ IP แบบลอยของเราคือ 192.168.10.20

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

ที่ไหน :

  • floating_ip: คือชื่อของบริการ
  • “ocf:heartbeat:IPaddr2 ”: บอก Pacemaker ว่าควรใช้สคริปต์ใด, IPaddr2 ในกรณีนี้, เนมสเปซใดอยู่ใน (เครื่องกระตุ้นหัวใจ) และมาตรฐานใดที่สอดคล้องกับ ocf
  • op ช่วงเวลามอนิเตอร์=60s ”: สั่งให้ Pacemaker ตรวจสอบความสมบูรณ์ของบริการนี้ทุก ๆ หนึ่งนาทีโดยการเรียกการดำเนินการมอนิเตอร์ของตัวแทน

จากนั้นเพิ่มทรัพยากรที่สอง ชื่อ http_server ในที่นี้ ตัวแทนทรัพยากรของบริการคือ ocf:heartbeat:nginx

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

เมื่อคุณเพิ่มบริการคลัสเตอร์แล้ว ให้ออกคำสั่งต่อไปนี้เพื่อตรวจสอบสถานะของทรัพยากร

sudo pcs status resources

เมื่อดูที่ผลลัพธ์ของคำสั่ง ทรัพยากรที่เพิ่มทั้งสองรายการ: “floating_ip ” และ “http_server ” ได้รับการแสดงรายการแล้ว บริการ Floating_ip ปิดอยู่เนื่องจากโหนดหลักกำลังทำงานอยู่

หากคุณเปิดใช้งานไฟร์วอลล์บนระบบของคุณ คุณจะต้องอนุญาตการรับส่งข้อมูลทั้งหมดไปยัง Nginx และบริการที่มีความพร้อมใช้งานสูงทั้งหมดผ่านไฟร์วอลล์เพื่อการสื่อสารที่เหมาะสมระหว่างโหนด:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

การทดสอบความพร้อมใช้งานสูง/การทำคลัสเตอร์

ขั้นตอนสุดท้ายที่สำคัญคือการทดสอบว่าการตั้งค่าความพร้อมใช้งานสูงของเราใช้งานได้หรือไม่ เปิดเว็บเบราว์เซอร์และนำทางไปยังที่อยู่ 192.168.10.20 คุณจะเห็นหน้า Nginx เริ่มต้นจาก node2.example.com ดังที่แสดงในภาพหน้าจอ

หากต้องการจำลองความล้มเหลว ให้รันคำสั่งต่อไปนี้เพื่อหยุดคลัสเตอร์บน node2.example.com

sudo pcs cluster stop http_server

จากนั้นโหลดหน้าเว็บซ้ำที่ 192.168.10.20 ขณะนี้คุณควรเข้าถึงหน้าเว็บ Nginx เริ่มต้นจาก node1.example.com

หรือคุณสามารถจำลองข้อผิดพลาดโดยบอกให้บริการหยุดโดยตรง โดยไม่ต้องหยุดคลัสเตอร์บนโหนดใดๆ โดยใช้คำสั่งต่อไปนี้บนโหนดใดโหนดหนึ่ง:

 
sudo crm_resource --resource http_server --force-stop 

จากนั้น คุณต้องรัน crm_mon ในโหมดโต้ตอบ (ค่าเริ่มต้น) ภายในช่วงเวลาการตรวจสอบ 2 นาที คุณควรจะเห็นการแจ้งเตือนของคลัสเตอร์ว่า http_server ล้มเหลวและย้าย ไปยังโหนดอื่น

เพื่อให้บริการคลัสเตอร์ของคุณทำงานอย่างมีประสิทธิภาพ คุณอาจต้องกำหนดข้อจำกัดบางประการ คุณสามารถดูหน้าคู่มือ pcs (man pcs) เพื่อดูรายการคำสั่งการใช้งานทั้งหมด

หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Corosync และ Pacemaker โปรดดูที่: https://clusterlabs.org/

สรุป

ในคู่มือนี้ เราได้แสดงพื้นฐานของวิธีการปรับใช้ กำหนดค่า และรักษาความพร้อมใช้งาน/การทำคลัสเตอร์/การจำลองแบบใน Ubuntu 16.04/18.04 และ CentOS 7 ในระดับสูง เราได้สาธิตวิธีเพิ่มบริการ Nginx HTTP ให้กับคลัสเตอร์ หากคุณมีความคิดที่จะแบ่งปันหรือมีคำถาม โปรดใช้แบบฟอร์มคำติชมด้านล่าง