การซิงโครไนซ์ไฟล์หลายล้านไฟล์ระหว่างเซิร์ฟเวอร์ Linux สองเครื่อง


10

ฉันมีเซิร์ฟเวอร์ซึ่งการส่งออกไดเรกทอรีที่มี ~ 7 ล้านไฟล์ (ภาพส่วนใหญ่) จากดิสก์ท้องถิ่นให้กับลูกค้าผ่านทางเครือข่ายNFS

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

การวิจัยแสดงให้เห็นว่าการใช้lsyncdหรือโซลูชั่นinotify - based อื่น ๆสำหรับเรื่องนี้ แต่เมื่อกำหนดจำนวนไฟล์ที่สร้างนาฬิกาinotify นั้นจะไม่มีที่สิ้นสุด สิ่งเดียวกันสำหรับrsync

วิธีแก้ปัญหาที่เป็นไปได้อื่น ๆ น่าจะเป็นdrdbหรือระบบไฟล์คลัสเตอร์เช่นcephหรือglusterfsแต่ฉันไม่มีประสบการณ์กับพวกนั้นและไม่รู้ว่าอันไหนจะเหมาะสมกว่าและรับมือกับไฟล์จำนวนมากและยังให้ประสิทธิภาพที่เหมาะสม

โปรดทราบว่ากิจกรรมส่วนใหญ่จะอ่านโดยมีการเขียนเกิดขึ้นเพียงเล็กน้อย


2
DRDB ทำงานได้ดีและติดตั้งและเข้าใจได้ง่ายในการตั้งค่าคลัสเตอร์ 2 เครื่อง อย่างไรก็ตามมันจะไม่ขยายในอนาคตอันใกล้ อาจมีวิธีการอื่นในวิชานี้ด้วย highscalability.com/blog/2012/6/20/…
Rui F Ribeiro

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

คุณสามารถทนต่อความล่าช้าได้เท่าไหร่ หากคุณสามารถทนไม่กี่นาที (หรือมากกว่า) การใช้btrfsหรือzfsอาจเป็นตัวเลือกรวมกับงาน cron เพื่อสร้าง snapsnots และzfs sendหรือbtrfs sendพวกเขาไปยังเซิร์ฟเวอร์สำรอง เร็วกว่าและภาระงานที่เบากว่ามาก (สำหรับทั้งเครื่องส่งและเครื่องรับ) กว่า rsync เพราะ snapshot + send ไม่จำเป็นต้องเปรียบเทียบเวลาประทับของไฟล์หรือ checksums
cas

BTW ด้วยcephคุณจะได้รับตัวเลือกในการใช้เป็นที่เก็บวัตถุ (เช่น am3's s3 หรือ openstacks รวดเร็ว) แทนที่จะเป็นระบบไฟล์ ในความเป็นจริง fs ของ ceph นั้นจริง ๆ แล้ววางอยู่ด้านบนของที่เก็บวัตถุ
cas

@Thomas: rsync -ausing daemon (แหล่งที่มา) ใช้เวลา 200 นาทีจึงจะเสร็จสมบูรณ์ซึ่งมากกว่าที่ยอมรับได้ @cas: btrfs sendอาจจะคุ้มค่ายิงฉันจะดูมัน ฉันไม่สามารถย้ายไปที่ที่เก็บวัตถุได้เนื่องจากฉันไม่ใช่นักพัฒนาของแอพที่ใช้ไฟล์
user60039

คำตอบ:


1

ฉันอยากจะแนะนำการจำลองแบบซึ่งเป็นผู้ไม่เชื่อเรื่องข้อมูลเช่น drbd ไฟล์จำนวนมากกำลังก่อให้เกิดสิ่งใดก็ตามที่ทำงานในระดับที่สูงกว่า "การจัดเก็บข้อมูลบล็อก" เพื่อใช้เวลาในการเดินบนต้นไม้น้อยมาก - เมื่อคุณพบว่าใช้ rsync หรือสร้างนาฬิกาที่ไม่ระบุชื่อ

เวอร์ชั่นสั้นของการสนับสนุนเรื่องราวส่วนตัวของฉัน: ฉันไม่ได้ใช้ Ceph แต่ฉันค่อนข้างแน่ใจว่านี่ไม่ใช่เป้าหมายทางการตลาดที่สำคัญของพวกเขาตามความคล้ายคลึงกับ Gluster อย่างไรก็ตามฉันได้พยายามใช้โซลูชันประเภทนี้กับ Gluster มาหลายปีแล้ว มันใช้งานได้แล้วส่วนใหญ่แล้วแม้ว่าจะมีการอัปเดตเวอร์ชันหลักหลายครั้ง แต่ฉันก็ไม่มีปัญหา หากเป้าหมายของคุณซ้ำซ้อนมากกว่าประสิทธิภาพ Gluster อาจไม่ใช่ทางออกที่ดี โดยเฉพาะอย่างยิ่งถ้ารูปแบบการใช้งานของคุณมีการเรียก stat () จำนวนมาก Gluster จะทำงานได้ไม่ดีนักในการจำลองแบบ นี่เป็นเพราะการเรียก stat ไปยังไดรฟ์ข้อมูลที่จำลองแบบไปที่โหนดที่จำลองแบบแล้วทั้งหมด (จริง ๆ แล้วคือ "Bricks" แต่คุณอาจจะมีเพียงหนึ่งอิฐต่อโฮสต์) หากคุณมีแบบจำลอง 2 ทางตัวอย่างเช่น แต่ละ stat () จากไคลเอนต์รอการตอบสนองจากอิฐทั้งสองเพื่อให้แน่ใจว่ามันกำลังใช้ข้อมูลปัจจุบัน จากนั้นคุณยังมีค่าใช้จ่าย FUSE และไม่มีการแคชหากคุณใช้ระบบไฟล์ gluster ดั้งเดิมสำหรับการทำซ้ำ (แทนที่จะใช้ Gluster เป็นแบ็กเอนด์ที่มี NFS เป็นโปรโตคอลและ automounter สำหรับการสำรองข้อมูลซึ่งยังคงดูดไว้สำหรับ stat () เหตุผล) . Gluster ทำได้ดีมากกับไฟล์ขนาดใหญ่ที่คุณสามารถกระจายข้อมูลไปยังเซิร์ฟเวอร์หลาย ๆ เครื่องได้ การสตริปและการกระจายข้อมูลใช้งานได้ดีเนื่องจากเป็นสิ่งที่มีอยู่จริง และการเรพลิเคทชนิด RAID10 ที่ใหม่กว่าจะทำงานได้ดีกว่าไดรฟ์ข้อมูลที่จำลองแบบแบบตรงรุ่นเก่ากว่า แต่ขึ้นอยู่กับสิ่งที่ฉันคาดเดาว่าเป็นรูปแบบการใช้งานของคุณฉันจะแนะนำกับมัน จากนั้นคุณยังมีค่าใช้จ่าย FUSE และไม่มีการแคชหากคุณใช้ระบบไฟล์ gluster ดั้งเดิมสำหรับการทำซ้ำ (แทนที่จะใช้ Gluster เป็นแบ็กเอนด์ที่มี NFS เป็นโปรโตคอลและ automounter สำหรับการสำรองข้อมูลซึ่งยังคงดูดไว้สำหรับ stat () เหตุผล) . Gluster ทำได้ดีมากกับไฟล์ขนาดใหญ่ที่คุณสามารถกระจายข้อมูลไปยังเซิร์ฟเวอร์หลาย ๆ เครื่องได้ การสตริปและการกระจายข้อมูลใช้งานได้ดีเนื่องจากเป็นสิ่งที่มีอยู่จริง และการเรพลิเคทชนิด RAID10 ที่ใหม่กว่าจะทำงานได้ดีกว่าไดรฟ์ข้อมูลที่จำลองแบบแบบตรงรุ่นเก่ากว่า แต่ขึ้นอยู่กับสิ่งที่ฉันคาดเดาว่าเป็นรูปแบบการใช้งานของคุณฉันจะแนะนำกับมัน จากนั้นคุณยังมีค่าใช้จ่าย FUSE และไม่มีการแคชหากคุณใช้ระบบไฟล์ gluster ดั้งเดิมสำหรับการทำซ้ำ (แทนที่จะใช้ Gluster เป็นแบ็กเอนด์ที่มี NFS เป็นโปรโตคอลและ automounter สำหรับการสำรองข้อมูลซึ่งยังคงดูดไว้สำหรับ stat () เหตุผล) . Gluster ทำได้ดีมากกับไฟล์ขนาดใหญ่ที่คุณสามารถกระจายข้อมูลไปยังเซิร์ฟเวอร์หลาย ๆ เครื่องได้ การสตริปและการกระจายข้อมูลใช้งานได้ดีเนื่องจากเป็นสิ่งที่มีอยู่จริง และการเรพลิเคทชนิด RAID10 ที่ใหม่กว่าจะทำงานได้ดีกว่าไดรฟ์ข้อมูลที่จำลองแบบแบบตรงรุ่นเก่ากว่า แต่ขึ้นอยู่กับสิ่งที่ฉันคาดเดาว่าเป็นรูปแบบการใช้งานของคุณฉันจะแนะนำกับมัน ซึ่งยังคงดูดสำหรับเหตุผล stat () Gluster ทำได้ดีมากกับไฟล์ขนาดใหญ่ที่คุณสามารถกระจายข้อมูลไปยังเซิร์ฟเวอร์หลาย ๆ เครื่องได้ การสตริปและการกระจายข้อมูลใช้งานได้ดีเนื่องจากเป็นสิ่งที่มีอยู่จริง และการเรพลิเคทชนิด RAID10 ที่ใหม่กว่าจะทำงานได้ดีกว่าไดรฟ์ข้อมูลที่จำลองแบบตรงแบบเก่า แต่ขึ้นอยู่กับสิ่งที่ฉันคาดเดาว่าเป็นรูปแบบการใช้งานของคุณฉันจะแนะนำกับมัน ซึ่งยังคงดูดสำหรับเหตุผล stat () Gluster ทำได้ดีมากกับไฟล์ขนาดใหญ่ที่คุณสามารถกระจายข้อมูลไปยังเซิร์ฟเวอร์หลาย ๆ เครื่องได้ การสตริปและการกระจายข้อมูลใช้งานได้ดีเนื่องจากเป็นสิ่งที่มีอยู่จริง และการเรพลิเคทชนิด RAID10 ที่ใหม่กว่าจะทำงานได้ดีกว่าไดรฟ์ข้อมูลที่จำลองแบบตรงแบบเก่า แต่ขึ้นอยู่กับสิ่งที่ฉันคาดเดาว่าเป็นรูปแบบการใช้งานของคุณฉันจะแนะนำกับมัน

จำไว้ว่าคุณอาจต้องหาวิธีที่จะมีการเลือกตั้งระดับสูงระหว่างเครื่องจักรหรือใช้การล็อคแบบกระจาย โซลูชันอุปกรณ์บล็อกแบบแบ่งใช้ต้องการระบบไฟล์ซึ่งเป็น multi-master aware (เช่น GFS) หรือต้องการให้โหนดเดียวเท่านั้นที่เมานต์ระบบไฟล์อ่าน - เขียน ระบบไฟล์โดยทั่วไปไม่ชอบเมื่อมีการเปลี่ยนแปลงข้อมูลที่ระดับอุปกรณ์บล็อกที่อยู่ด้านล่าง นั่นหมายความว่าลูกค้าของคุณจะต้องสามารถบอกได้ว่าใครเป็นนายและขอเขียนตรงนั้น นั่นอาจกลายเป็นเรื่องใหญ่ที่น่ารำคาญ หาก GFS และโครงสร้างพื้นฐานที่สนับสนุนทั้งหมดเป็นตัวเลือก drbd ในโหมด multi-master (พวกเขาเรียกมันว่า "dual primary") สามารถทำงานได้ดี https://www.drbd.org/en/doc/users-guide-83/s-dual-primary-modeสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้น

ไม่ว่าคุณจะไปด้วยทิศทางใดคุณจะพบว่านี่เป็นความเจ็บปวดที่ต้องทำแบบเรียลไทม์โดยไม่ต้องให้เงินกับ บริษัท SAN


ฉันอยู่ในช่วงเริ่มต้นของการย้ายจากคำสั่ง rsync ใน cron ไปยังระบบไฟล์แบบกระจาย หาก Gluster รัน stat () บนอิฐทั้งหมดฉันอาจต้องพิจารณาใหม่เป็นวิธีแก้ปัญหา
Jesusaur

1
นั่นเป็นเพียงกรณีในระบบไฟล์ที่ทำซ้ำ มันทำงานstat()บนอิฐทั้งหมดที่มีแบบจำลองของบล็อกที่คุณกำลังดูอยู่ ตัวอย่างเช่นหากคุณมีแบบจำลองสไทรพ์ 2x2 สิ่งstatนั้นจะรันบนอิฐสองก้อนด้วยบล็อกที่จำลองแบบแล้ว แต่จะไม่ปรากฏในอีกสองก้อน ในแอปพลิเคชันของฉันที่มีไฟล์ขนาดเล็กจำนวนมาก (ตามคำสั่งของไฟล์หนึ่งล้านไฟล์ภายใต้ข้อมูล 4K แต่ละไฟล์) ทั้ง NFS และ FUSE ไม่ได้ให้ประสิทธิภาพที่ดีกับไดรฟ์ข้อมูลที่จำลองแบบ และการระบุตำแหน่งทางภูมิศาสตร์ไปยังเครื่อง 20 เครื่องนั้นไม่น่าเชื่อถือมากในหลาย ๆ การกำหนดค่า
dannysauer

1
ระยะของคุณอาจแตกต่างกันไป แต่ฉันย้ายจาก Gluster ไปทุกหนทุกแห่ง (ซึ่งฉันใช้เพื่อการจำลองแบบโดยเฉพาะไม่ใช่สิ่งที่ยอดเยี่ยมอื่น ๆ ที่ Gluster ทำได้จริง) เพื่อ rsync บนระบบไฟล์ดั้งเดิม :) ฉันกำลังดูที่จะย้ายไปที่ lsyncd ( github.com/axkibe/lsyncd ) ตอนนี้แทนที่จะเป็น cron ดังนั้นฉันสามารถเข้าใกล้แบบเรียลไทม์ได้โดยไม่ต้องมีค่าใช้จ่าย Gluster
dannysauer

0

ฉันเปลี่ยนจาก rsync เป็น ceph ด้วยความช่วยเหลือของการตั้งค่า Proxmox VE

ตอนนี้ฉันจัดการ 14TB ในหนึ่งคลัสเตอร์ด้วยการจำลองแบบสด เป็นเวลาเกือบ 4 ปี

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