ฉันได้สร้างการตั้งค่าที่เก็บ ZFS แบบ "ครบวงจร" จำนวนหนึ่ง ในตอนแรกได้รับแรงบันดาลใจจากการโพสต์ที่ยอดเยี่ยมที่Ubiquitous Talkโซลูชันของฉันใช้แนวทางที่แตกต่างกันเล็กน้อยในการออกแบบฮาร์ดแวร์ แต่ให้ผลลัพธ์ของการจัดเก็บ ZFS เสมือนจริงที่ถูกห่อหุ้ม
เพื่อตอบคำถามของคุณ:
การพิจารณาว่านี่เป็นวิธีการที่ชาญฉลาดหรือไม่ขึ้นอยู่กับเป้าหมายของคุณ คุณพยายามทำอะไรให้สำเร็จ หากคุณมีเทคโนโลยี (ZFS) และกำลังค้นหาแอปพลิเคชันอยู่แสดงว่าเป็นความคิดที่ไม่ดี คุณควรใช้ฮาร์ดแวร์ควบคุม RAID ที่เหมาะสมและใช้งาน VM บนพาร์ติชั่น VMFS ในเครื่อง มันเป็นเส้นทางของการต่อต้านน้อยที่สุด อย่างไรก็ตามหากคุณมีเหตุผลเฉพาะที่ต้องการใช้ ZFS (การจำลองแบบการบีบอัดความปลอดภัยของข้อมูลความสะดวกในการพกพา ฯลฯ ) นี่อาจเป็นไปได้แน่นอนถ้าคุณเต็มใจที่จะพยายาม
ประสิทธิภาพขึ้นอยู่กับการออกแบบของคุณอย่างหนักโดยไม่คำนึงว่าคุณกำลังวิ่งบนโลหะเปลือยหรือเสมือนจริง การใช้PCI-passthrough (หรือ AMD IOMMU ในกรณีของคุณ) เป็นสิ่งจำเป็นเนื่องจากคุณจะต้องให้ ZFS VM ของคุณเข้าถึงโดยตรงไปยังคอนโทรลเลอร์และดิสก์หน่วยเก็บข้อมูล SAS ตราบใดที่ VM ของคุณได้รับการจัดสรรทรัพยากร RAM และ CPU ในปริมาณที่เหมาะสมประสิทธิภาพจะใกล้เคียงกับคุณ แน่นอนการออกแบบสระว่ายน้ำของคุณมีความสำคัญ โปรดพิจารณามิเรอร์กับ RAID Z2 ZFS ตาชั่งทั่ว vdevs และไม่ใช่จำนวนของดิสก์
แพลตฟอร์มของฉันคือVMWare ESXi 5และระบบปฏิบัติการ ZFS มีความสามารถที่ต้องการของฉันคือNexentaStor Community Edition
นี้เป็นของฉันบ้านเซิร์ฟเวอร์ เป็นHP ProLiant DL370 G6 ที่ใช้ ESXi จากการ์ด SD ภายใน ดิสก์ 72GB ที่มิร์เรอร์สองตัวที่อยู่ตรงกลางเชื่อมโยงกับตัวควบคุม Smart Array P410 RAID ภายในและสร้างปริมาณ VMFS ไดรฟ์ข้อมูลนั้นเก็บ NexentaStor VM จำไว้ว่าเครื่องเสมือน ZFS จำเป็นต้องอาศัยอยู่ที่ไหนสักแห่งบนที่เก็บข้อมูลที่เสถียร
มีคอนโทรลเลอร์ LSI 9211-8i SASเชื่อมต่อกับโครงใส่ไดรฟ์ซึ่งมีดิสก์ 1TB SATA หกตัวทางด้านขวา มันถูกส่งผ่านไปยังเครื่องเสมือน NexentaStor ทำให้ Nexenta สามารถดูดิสก์เป็นการตั้งค่า RAID 1 + 0 ดิสก์มีไดรฟ์WD10EARS สีเขียว Western Digital el-cheapo ชิดกันอย่างเหมาะสมกับzpool
ไบนารีที่ปรับเปลี่ยน
ฉันไม่ได้ใช้อุปกรณ์ ZIL หรือแคช L2ARC ใด ๆ ในการติดตั้งนี้
VM มี RAM ขนาด 6GB และจัดสรร 2 vCPU ใน ESXi หากคุณใช้ PCI-passthrough การสำรองหน่วยความจำสำหรับจำนวนเต็มของ RAM ที่กำหนดของ VM จะถูกสร้างขึ้น
ฉันให้ NexentaStor VM สองอินเตอร์เฟสเครือข่าย หนึ่งคือการจัดการปริมาณข้อมูล อีกส่วนหนึ่งเป็นส่วนหนึ่งของ vSwitch แยกต่างหากและมีอินเตอร์เฟส vmkernel (ไม่มีอัปลิงค์ภายนอก) สิ่งนี้ยอมให้ VM จัดเตรียมที่เก็บข้อมูล NFS โดย ESXi ผ่านเครือข่ายส่วนตัว คุณสามารถเพิ่มอินเทอร์เฟซอัปลิงค์เพื่อให้การเข้าถึงโฮสต์ภายนอก
ติดตั้ง VMs ใหม่ของคุณบนที่เก็บข้อมูลที่ส่งออก ZFS อย่าลืมตั้งค่าพารามิเตอร์ "การเริ่มต้น / ปิดเครื่องเสมือน" ใน ESXi คุณต้องการให้ VM หน่วยความจำบูตก่อนระบบ guest และปิดระบบล่าสุด
นี่คือผลลัพธ์bonnie ++และiozoneของการรันโดยตรงบน NexentaStor VM การบีบอัด ZFS ปิดสำหรับการทดสอบที่จะแสดงหมายเลข relatable มากขึ้น แต่ในทางปฏิบัติ ZFS การบีบอัดเริ่มต้น (ไม่ gzip) ควรเสมอถูกเปิดใช้งาน
# bonnie++ -u root -n 64:100000:16:64
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
saint 12G 156 98 206597 26 135609 24 410 97 367498 21 1478 17
Latency 280ms 3177ms 1019ms 163ms 180ms 225ms
Version 1.96 ------Sequential Create------ --------Random Create--------
saint -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
64:100000:16/64 6585 60 58754 100 32272 79 9827 58 38709 100 27189 80
Latency 1032ms 469us 1080us 101ms 375us 16108us
# iozone -t1 -i0 -i1 -i2 -r1m -s12g
Iozone: Performance Test of File I/O
Run began: Wed Jun 13 22:36:14 2012
Record Size 1024 KB
File size set to 12582912 KB
Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s12g
Output is in Kbytes/sec
Time Resolution = 0.000001 seconds.
Throughput test with 1 process
Each process writes a 12582912 Kbyte file in 1024 Kbyte records
Children see throughput for 1 initial writers = 234459.41 KB/sec
Children see throughput for 1 rewriters = 235029.34 KB/sec
Children see throughput for 1 readers = 359297.38 KB/sec
Children see throughput for 1 re-readers = 359821.19 KB/sec
Children see throughput for 1 random readers = 57756.71 KB/sec
Children see throughput for 1 random writers = 232716.19 KB/sec
นี่คือกราฟ NexentaStor DTrace ที่แสดง IOPS ของ VM ของหน่วยเก็บและอัตราการถ่ายโอนระหว่างการทดสอบการทำงาน 4000 IOPS และ 400+ เมกะไบต์ / วินาทีนั้นค่อนข้างสมเหตุสมผลสำหรับดิสก์ระดับล่าง (ขนาดบล็อกใหญ่)
บันทึกอื่น ๆ
- คุณจะต้องทดสอบ SSD ของคุณเพื่อดูว่าสามารถนำเสนอโดยตรงกับ VM หรือ DirectPath เลือกตัวควบคุมเมนบอร์ดทั้งหมด
- คุณมีพลังงาน CPU ไม่มากนักดังนั้น จำกัด หน่วยเก็บข้อมูลไว้ที่ 2 vCPU
- อย่าใช้ RAIDZ1 / Z2 / Z3 เว้นแต่ว่าคุณต้องการพื้นที่ดิสก์จริงๆ
- อย่าใช้การซ้ำซ้อน การบีบอัดนั้นฟรีและมีประโยชน์มากสำหรับ VMs การทำซ้ำจะต้องใช้ RAM + L2ARC มากขึ้นเพื่อให้มีประสิทธิภาพ
- เริ่มต้นโดยไม่มี SSD และเพิ่มถ้าจำเป็น ปริมาณงานบางอย่างที่ไม่ได้ตี ZIL หรือ L2ARC
- NexentaStor เป็นแพ็คเกจที่สมบูรณ์ มีประโยชน์ในการมี GUI การจัดการที่แข็งแกร่งอย่างไรก็ตามฉันเคยได้ยินความสำเร็จกับNapp-Itเช่นกัน