วิธีดำเนินการสำรองข้อมูลส่วนเพิ่ม / ต่อเนื่องของพูล zfs?


25

zfs pool สามารถสำรองอย่างต่อเนื่อง / เพิ่มขึ้นนอกสถานที่ได้อย่างไร

ฉันรู้จักsend/receiveover ssh เป็นวิธีหนึ่ง แต่เกี่ยวข้องกับการจัดการ snapshot ด้วยตนเอง

มีเครื่องมือบางอย่างที่ฉันพบ แต่ส่วนใหญ่ไม่ได้รับการสนับสนุนอีกต่อไป

เครื่องมือหนึ่งที่มีแนวโน้มคือhttps://github.com/jimsalterjrs/sanoidแต่ฉันกังวลว่าเครื่องมือที่ไม่เป็นที่รู้จักกันอย่างแพร่หลายอาจทำอันตรายได้มากกว่าและดีในแง่ที่มันอาจเสียหาย / ลบข้อมูล

การสำรองข้อมูล zfs อย่างต่อเนื่อง / เพิ่มจะดำเนินการอย่างไร?


2
ฉันจะตอบกลับในภายหลังเล็กน้อย แต่ฉันมีโซลูชันที่ดำเนินการจำลองแบบนี้ทุก ๆ 15 วินาทีจากเซิร์ฟเวอร์ ZFS หลักไปเป็นรอง
ewwhite

คำตอบ:


33

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

4
ขอบคุณสำหรับการโพสต์คำตอบของคุณเป็นปรากฏการณ์และสิ่งที่ฉันกำลังมองหา (จากความล่าช้าในการตรวจสอบกระบวนการ) อ่านgithub.com/ewwhite/zfs-ha/wikiและฉันรู้สึกประทับใจมาก ขอขอบคุณอีกครั้ง :)
เกร็ก

6

คุณมีสองวิธีที่แตกต่างกันซึ่งคุณสามารถทำได้:

  1. แบบดั้งเดิมวิธีระบบแฟ้มไม่เชื่อเรื่องพระเจ้าที่มี / ได้ถูกใช้มานานหลายทศวรรษที่ผ่านมาด้วยเครื่องมือเช่นหรือrsync Baculaที่นั่นคุณได้ทดสอบและ (หวังว่า) ซอฟต์แวร์ขนาดใหญ่ที่เสถียรซึ่งสามารถปรับแต่งสำหรับการปรับใช้ขนาดใหญ่และสามารถใช้ได้แม้ว่าคุณจะเปลี่ยนจาก ZFS
  2. หนึ่งในเครื่องมือที่ send/recvZFS นี่อาจเป็นโซลูชันของคุณเองสคริปต์หรือสคริปต์เพิ่มเติมจากเครื่องมือต่าง ๆ บน Github et al. หรือมากกว่าเครื่องมือที่มีคุณสมบัติเช่น Sanoid หรือZnapZend (ส่ง / recv พร้อมการสนับสนุน mbuffer และแผนการเก็บรักษา) ในกรณีนี้คุณมักจะไม่พบโซลูชัน "enterprisey" ขนาดใหญ่ (ในแง่ลบ) ใด ๆ แต่เป็นเครื่องมือที่ทำงานเพียงอย่างเดียวและสามารถใช้ร่วมกับเครื่องมืออื่น ๆ เพื่อรองรับการตั้งค่าเฉพาะของคุณ

โดยทั่วไปแล้วฉันจะเชื่อถือเครื่องมือที่มีซอร์สโค้ดให้เท่านั้นและฉันจะทำให้มันง่ายที่สุดเท่าที่จะทำได้ หากใช้send/recvคุณไม่ต้องจัดการอะไรมากคุณเพียงแค่ลบ snapshot n-1ทางด้านโลคอลเมื่อทำการส่งและสร้าง snapshot nทางด้านระยะไกลก็ทำได้สำเร็จ

คุณสามารถแยกการขนส่งของคุณในแบบที่คุณต้องการมันอาจเป็น async ได้ (ไม่ต้องรับสแนปชอตทันที) ถ้าคุณแค่เก็บกฎเหล็กที่คุณสามารถส่งความแตกต่างระหว่างสแน็ปช็อตปัจจุบัน / ใหม่และโลคอลก่อน และสแน็ปช็อตก่อนหน้านี้ในเครื่องเป็นสแน็ปช็อตก่อนหน้านี้ล่าสุดบนฝั่งระยะไกล (จนกว่าการสำรองข้อมูลจะเสร็จสิ้น

ตอนนี้ฉันคิดแล้วคุณอาจเข้ารหัสในเครื่องสถานะและจากนั้นให้แน่ใจว่าไม่มีกรณีที่ไม่คาดฝันสามารถผ่าน


ฉันไม่เห็นว่าrsyncโซลูชันที่ใช้จะขยายการจำลองระบบไฟล์ระดับองค์กรขนาดใหญ่อย่างต่อเนื่องได้อย่างไร การเปลี่ยนแปลงอาจเกิดขึ้นเร็วกว่าที่rsyncจะค้นพบพวกเขา
Andrew Henle

2
@ AndrewHenle ฉันจะไม่สนับสนุนเรื่องนี้เหมือนกันฉันแค่อยากจะนำเสนอเพราะคำถามไม่ได้ระบุขอบเขต / ขนาดของข้อมูลหรือกรอบเวลา ดังนั้นในกรณีของการกระทำที่ไม่บ่อยนักมันอาจเป็นไปได้ถ้ามันควรจะเป็นระบบไม่เชื่อเรื่องพระเจ้า แน่นอนว่าคุณจะสูญเสียเดลตาระดับบล็อกที่ดี ...
user121391

@ user121391 เห็นด้วยกับคุณอย่างสมบูรณ์เกี่ยวกับ opensource เป็นหนทางที่จะไป ขอบคุณสำหรับการตอบกลับอย่างละเอียด
เกร็ก

@Dave เช่นเดียวกับที่ฉันพิมพ์ ...
ewwhite

1
ขอแนะนำ znapzend
Trent Lloyd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.