ZFS: แจกจ่าย zvol บนดิสก์ทั้งหมดใน zpool หรือไม่


12

มีวิธีใดบ้างที่ ZFS จะได้รับพร้อมท์ให้แจกจ่ายระบบไฟล์ที่กำหนดเหนือดิสก์ทั้งหมดใน zpool หรือไม่

ฉันกำลังคิดถึงสถานการณ์ที่ฉันมีปริมาณ ZFS คงที่ซึ่งส่งออกเป็น LUN ผ่าน FC zpool ปัจจุบันมีขนาดเล็กเพียงดิสก์มิรเรอร์ 1TB สองตัวและ zvol นั้นรวม 750GB ถ้าฉันจะขยายขนาดของสวนสัตว์ให้ใหญ่ขึ้นทันทีพูดว่าดิสก์ขนาด 12 1TB ฉันเชื่อว่า zvol จะยังคงเป็น 'ที่ตั้ง' ในสองแกนแรกเท่านั้น

เมื่อระบุว่าแกนหมุนมากขึ้น = IOPS มากขึ้นฉันจะใช้วิธีใดในการ 'แจกจ่ายซ้ำ' zvol บนแกนหมุนทั้ง 12 ลูกเพื่อใช้ประโยชน์จากพวกเขา?

คำตอบ:


8

คุณจะต้องเขียนข้อมูลของคุณไปยัง zpool ที่ขยายเพิ่มอีกครั้งเพื่อปรับสมดุล มิฉะนั้นเมื่อเวลาผ่านไปการเขียนของคุณจะถูกกระจายไปทั่วพูลทั้งหมด


ฉันไม่คิดว่าจะมีวิธีที่ง่ายและรวดเร็วในการทำเช่นนั้น ... ?
Growse

7
zfs send | zfs recv
the-wabbit

ฉันจะไปทดสอบว่า - ไม่อยากจะเชื่อว่าจะทำอะไรง่าย ๆ :)
Growse

3
รายงานกลับมาฉันไม่เคยทำแบบนี้มาก่อนและฉันก็อยากรู้อยากเห็นเช่นกัน
StrangeWill

3

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


4
จากประสบการณ์ของฉันสิ่งนี้ไม่เป็นความจริง แม้ว่าจะไม่มี 'การแบ่งพาร์ติชันแบบถาวร' แต่ ZFS จะไม่ย้ายข้อมูลไปตามความต้องการของตัวเองโดยปราศจากการร้องขอ IO ของไคลเอ็นต์ หากคุณสร้างสถานการณ์ที่ฉันอธิบายให้เพิ่มดิสก์เพิ่มเติมจากนั้นทำ IO หนัก ๆ บน LUN ดั้งเดิมคุณจะเห็นเฉพาะกิจกรรมในสองดิสก์แรกในอาร์เรย์เพราะนั่นคือที่ที่ข้อมูลอยู่ ewwhite ชี้ให้เห็นว่าเมื่อเวลาผ่านไปจะมีความสมดุล แต่ฉันอยากรู้ว่ามีวิธีที่เร็วกว่าในการทำเช่นนี้
Growse

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

0

นี่คือ "ความต่อเนื่อง" ของคำตอบของ ewwhite:

คุณจะต้องเขียนข้อมูลของคุณไปยัง zpool ที่ขยายเพิ่มอีกครั้งเพื่อปรับสมดุล

ฉันเขียนสคริปต์ PHP ( มีอยู่บน github ) เพื่อทำสิ่งนี้บน Ubuntu 14.04 ของฉันโดยอัตโนมัติ

มีเพียงแค่ต้องการติดตั้งเครื่องมือ PHP CLI ด้วยsudo apt-get install php5-cliและเรียกใช้สคริปต์ผ่านเส้นทางไปยังข้อมูลกลุ่มของคุณเป็นอาร์กิวเมนต์แรก เช่น

php main.php /path/to/my/files

เป็นการดีที่คุณควรเรียกใช้สคริปต์สองครั้งในข้อมูลทั้งหมดในกลุ่ม การเรียกใช้ครั้งแรกจะทำให้เกิดความสมดุลในการใช้งานไดรฟ์ แต่ไฟล์แต่ละไฟล์จะได้รับการจัดสรรมากเกินไปไปยังไดรฟ์ที่ถูกเพิ่มล่าสุด การรันครั้งที่สองจะทำให้แน่ใจว่าแต่ละไฟล์จะ "กระจาย" อย่างเป็นธรรมในไดรฟ์ ฉันพูดอย่างยุติธรรมแทนที่จะให้เท่า ๆ กันเพราะมันจะกระจายเท่า ๆ กันถ้าคุณไม่ได้ผสมความจุของไดรฟ์เพราะฉันกับการจู่โจม 10 คู่ที่มีขนาดต่างกัน (กระจก 4tb + 3TB กระจก + 3TB กระจก)

เหตุผลในการใช้งานสคริปต์

  • ฉันต้องแก้ไขปัญหา "ในสถานที่" เช่นฉันไม่สามารถเขียนข้อมูลออกไปยังระบบอื่นลบได้ที่นี่และเขียนข้อมูลทั้งหมดกลับมาอีกครั้ง
  • ฉันเติมเต็มพูลของฉันเกิน 50% ดังนั้นฉันจึงไม่สามารถคัดลอกทั้งระบบไฟล์พร้อมกันก่อนที่จะลบต้นฉบับ
  • หากมีไฟล์บางไฟล์ที่ต้องทำงานได้ดีแล้วก็สามารถเรียกใช้สคริปต์ได้สองครั้งเหนือไฟล์เหล่านั้น อย่างไรก็ตามการรันครั้งที่สองจะมีผลก็ต่อเมื่อการรันครั้งแรกได้รับการจัดการเพื่อให้เกิดความสมดุลในการใช้งานไดรฟ์
  • ฉันมีข้อมูลจำนวนมากและต้องการเห็นการบ่งชี้ความคืบหน้า

ฉันจะบอกได้อย่างไรว่าถึงแม้การใช้งานไดรฟ์จะทำได้หรือไม่

ใช้เครื่องมือ iostat ในช่วงเวลาหนึ่ง (เช่นiostat -m 5) และตรวจสอบการเขียน หากพวกเขาเหมือนกันคุณก็จะประสบความสำเร็จได้ พวกเขาไม่ได้สมบูรณ์แบบแม้กระทั่งในภาพหน้าจอด้านล่างเพราะฉันใช้งานคู่ของ 4TBs กับไดรฟ์ 3TB 2 คู่ใน RAID 10 ดังนั้นทั้งสองของ 4 จะถูกเขียนเพิ่มขึ้นเล็กน้อย ป้อนคำอธิบายรูปภาพที่นี่

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

สคริปต์ไม่ได้สมบูรณ์แบบเพียงวิธีแก้ปัญหาเท่านั้น แต่มันทำงานได้ดีสำหรับฉันในขณะนี้จนกระทั่ง ZFS วันหนึ่งใช้คุณลักษณะการปรับสมดุลเช่น BTRFS มี (นิ้วไขว้)


โอ้ ... ว้าว ...
ewwhite

0

นี่เป็นบิตของการแฮ็ก แต่เมื่อคุณหยุดเครื่องโดยใช้ zvol คุณสามารถ zfs ส่งระบบไฟล์ไปยังไฟล์โลคัลบน localhost ที่ชื่อ bar.zvol แล้วคุณจะได้รับระบบไฟล์กลับมาอีกครั้ง ที่ควรปรับสมดุลข้อมูลสำหรับคุณ

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

ทางออกที่ดีที่สุดที่ฉันพบคือการทำซ้ำครึ่งหนึ่งของข้อมูลของคุณบนพูลที่ขยายแล้วลบข้อมูลที่ทำซ้ำเดิม


3
คุณสามารถทำอย่างละเอียด?
ewwhite

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

ใช่คุณถูก. ฉันกำลังมองไปรอบ ๆ และค้นคว้าในหัวข้อเดียวกัน สิ่งที่ฉันรู้คือไม่จำเป็นต้องใช้ zfs redistributing data บน vdevs แต่ถ้าคุณยังต้องการทำซ้ำข้อมูลใด ๆ และการลบต้นฉบับจะช่วยเร่งความเร็ว zfs ที่จะทำเมื่อเวลาผ่านไป
reco

1
การแจกจ่ายข้อมูลผ่าน vdevs เป็นคำขอที่ถูกต้องตามกฎหมาย ฉันเกรงว่าคุณจะยังขาดคำถามคือเกี่ยวกับ zvols ไม่ใช่ระบบไฟล์ คุณไม่สามารถทำซ้ำหรือลบข้อมูลในไดรฟ์ข้อมูลที่ไม่สมเหตุสมผล
jlliagre

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