ZFSเป็นระบบไฟล์ที่ยอดเยี่ยมและสามารถตอบสนองความต้องการในการจัดเก็บข้อมูลในตัวของฉัน
ในขณะที่ฉันชอบแนวคิดของZFS แบบคลัสเตอร์ทุกที่ที่เป็นไปได้บางครั้งมันไม่สามารถใช้งานได้จริงหรือฉันต้องการการแยกโหนดการจัดเก็บทางภูมิศาสตร์
หนึ่งในกรณีการใช้งานที่ฉันมีสำหรับการจัดเก็บแบบจำลองที่มีประสิทธิภาพสูงบนเซิร์ฟเวอร์แอปพลิเคชัน Linux ตัวอย่างเช่นฉันสนับสนุนผลิตภัณฑ์ซอฟต์แวร์เก่าที่ได้รับประโยชน์จากไดรฟ์ NVMe SSD ที่มีความหน่วงต่ำสำหรับข้อมูล โปรแกรมประยุกต์ที่มีการประยุกต์ใช้ในระดับตัวเลือกที่สามารถทำซ้ำไปยังเซิร์ฟเวอร์รองมิเรอร์ แต่ก็มักจะไม่ถูกต้องและเป็น 10 นาทีRPO
ฉันได้แก้ไขปัญหานี้ด้วยการมีเซิร์ฟเวอร์รอง (หรือเรียกใช้ ZFS บนฮาร์ดแวร์ที่คล้ายกันหรือแตกต่างกัน) ซึ่งอาจเป็นแบบโลคัลรีโมตหรือทั้งสองอย่าง ด้วยการรวมสามยูทิลิตี้ที่มีรายละเอียดด้านล่างนี้ฉันได้สร้างโซลูชันการจำลองแบบที่ให้การเรพลิเคตอย่างต่อเนื่องการเก็บสแน็ปช็อตลึกและตัวเลือกการเฟลโอเวอร์แบบยืดหยุ่น
zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
เป็นเครื่องมือที่มีประโยชน์ในการเปิดใช้งานสแน็ปช็อตระดับระบบไฟล์ ZFS เป็นระยะ ฉันมักจะทำงานกับตารางเวลาต่อไปนี้ในปริมาณการผลิต:
# /etc/cron.d/zfs-auto-snapshot
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //
Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid
โปรแกรมนี้สามารถเรียกใช้ ad-hoc snap / replication ของระบบไฟล์ ZFS ไปยังเป้าหมายรอง ฉันใช้ส่วนซิงโคidของผลิตภัณฑ์เท่านั้น
สมมติว่าserver1และserver2คำสั่งง่าย ๆ จะรันจากserver2เพื่อดึงข้อมูลจากserver1 :
#!/bin/bash
/usr/local/bin/syncoid root@server1:vol1/data vol2/data
exit $?
Monit - https://mmonit.com/monit/
Monit เป็นตัวจัดกำหนดการงานและตัวจัดการการดำเนินการที่ยืดหยุ่นอย่างยิ่งยวด โดยค่าเริ่มต้นมันทำงานในช่วงเวลา 30 วินาที แต่ฉันปรับเปลี่ยนการตั้งค่าเพื่อใช้รอบเวลา 15 วินาทีฐาน
ตัวอย่างการกำหนดค่าที่เรียกใช้สคริปต์การจำลองแบบด้านบนทุก 15 วินาที (1 รอบ)
check program storagesync with path /usr/local/bin/run_storagesync.sh
every 1 cycles
if status != 0 then alert
สิ่งนี้ง่ายต่อการอัตโนมัติและเพิ่มผ่านการจัดการการกำหนดค่า โดยการตัดการดำเนินการของสแนปชอต / การจำลองแบบใน Monit คุณจะได้รับสถานะรวมศูนย์การควบคุมงานและการแจ้งเตือน (อีเมล SNMP สคริปต์ที่กำหนดเอง)
ผลลัพธ์ก็คือฉันมีเซิร์ฟเวอร์ที่มีสแน็ปช็อตรายเดือนหลายเดือนและมีจุดย้อนกลับและการเก็บรักษามากมายภายใน: https://pastebin.com/zuNzgi0G - Plus, แบบจำลองอะตอมมิกแบบกลิ้งต่อเนื่อง 15 วินาที:
# monit status
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:37:59
last exit value 0
data collected Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:38:59
last exit value 0
data collected Wed, 05 Apr 2017 05:38:59