การซิงโครไนซ์ไฟล์แบบเรียลไทม์


22

มีเครื่องมือใดที่สามารถซิงค์ไฟล์ระหว่างเซิร์ฟเวอร์ลินุกซ์ตั้งแต่สองเครื่องขึ้นไปทันทีหลังจากเขียนไฟล์ในดิสก์หรือไม่ rsyncคำสั่งไม่เหมาะกับฉันเกี่ยวกับเรื่องนี้เพราะถ้าผมตั้งrsyncใน cron, เวลาต่ำสุดที่ฉันสามารถตั้งค่าเป็น 1 นาที แต่ฉันต้องการมันบนพื้นฐานแบบ real-time


2
คุณต้องการการซิงโครไนซ์จากเซิร์ฟเวอร์การอ่าน - เขียนหนึ่งเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์อ่านอย่างเดียวหนึ่งตัวหรือมากกว่าหรือคุณต้องการการซิงโครไนซ์แบบสองทาง หากคุณต้องการสอง / n-way คุณจะแก้ไขข้อขัดแย้งได้อย่างไร
Gilles 'ดังนั้นหยุดความชั่วร้าย'

คำตอบ:


18

ยังไม่ได้ใช้มัน แต่อ่านเมื่อเร็ว ๆ นี้ มีภูตที่เรียกว่าlsyncdซึ่งฉันเข้าใจว่าสิ่งที่คุณต้องการ

อ่านเพิ่มเติมเกี่ยวกับที่นี่


2
IMHO นี่ควรเป็นคำตอบที่ยอมรับได้ lsyncdการใช้inotifyงาน & ควรเร็วที่สุดในระดับ fs เพิ่มเติมได้ที่github.com/axkibe/lsyncd จากหน้านั้น: Lsyncd จะเฝ้าดูอินเตอร์เฟสการมอนิเตอร์เหตุการณ์ทรีของไดเรกทอรีในเครื่อง (inotify หรือ fsevents) จะรวมและรวมเหตุการณ์เป็นเวลาสองสามวินาทีจากนั้นจะวางกระบวนการหนึ่ง (หรือมากกว่า) กระบวนการ (es) เพื่อซิงโครไนซ์การเปลี่ยนแปลง โดยค่าเริ่มต้นนี่คือ rsync Lsyncd จึงเป็นโซลูชันมิเรอร์ไลฟ์ที่มีน้ำหนักเบาซึ่งค่อนข้างง่ายต่อการติดตั้งโดยไม่ต้องใช้ระบบไฟล์ใหม่หรืออุปกรณ์บล็อกและไม่ขัดขวางประสิทธิภาพของระบบไฟล์ในท้องถิ่น
SACHIN GARG

5

inotify เครื่องมือ

จัดทำอินเตอร์เฟสเพื่อinotifyประกอบด้วย:

inotifywait

คำสั่งนี้จะบล็อกเพียงเพื่อ inotify เหตุการณ์ทำให้มันเหมาะสำหรับใช้ในเชลล์สคริปต์ มันสามารถรับชมไฟล์และไดเรกทอรีชุดใดก็ได้และสามารถดูแผนผังไดเรกทอรีทั้งหมดซ้ำ ๆ

inotifywatch

คำสั่งนี้รวบรวมสถิติการใช้งานระบบไฟล์และจำนวนผลลัพธ์ของเหตุการณ์ inotify แต่ละเหตุการณ์


4

การซิงโครไนซ์ไฟล์เรียลไทม์ระหว่างเซิร์ฟเวอร์หลายเครื่องในโหมดมัลติมาสเตอร์

มีเครื่องมือที่ดีที่เรียกว่าlsyncdการซิงค์ไฟล์ระหว่างเซิร์ฟเวอร์หลายเครื่องตามเวลาจริง ที่นี่ฉันได้ลองกับเซิร์ฟเวอร์สองเครื่อง

โฮสต์: Server1 และ Server2

ระบบปฏิบัติการที่ใช้: CentOS 7

ติดตั้งแพ็คเกจด้านล่างทั้งบนเซิร์ฟเวอร์

# yum install -y epel-release
# yum -y install lua lua-devel pkgconfig gcc asciidoc lsyncd

สร้าง ssh-key ทั้งในเซิร์ฟเวอร์และเพิ่มไปยังauthorized_keysไฟล์ [เพิ่มกุญแจสาธารณะของ server1 ไปยังเซิร์ฟเวอร์ 2 authorized_keysและกุญแจสาธารณะของ server2 ไปยังauthorized_keysไฟล์ของเซิร์ฟเวอร์ 1]

การกำหนดค่าเซิร์ฟเวอร์ 1

เปิด/etc/lsyncd.confและแสดงความคิดเห็นการกำหนดค่าเริ่มต้นโดยใช้--ที่จุดเริ่มต้นของบรรทัดและเพิ่มการกำหนดค่าด้านล่างลงในไฟล์

settings {
  logfile = "/var/log/lsyncd/lsyncd.log",
  delay = 1
}
sync {
  default.rsync,
  source="/home/test/public_html/",
  target="server2:/home/test/public_html/",
  rsync = {
    compress = true,
    acls = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
  }
}

เปลี่ยน IP เป้าหมายในtargetพารามิเตอร์

คุณสามารถเปลี่ยนdelayพารามิเตอร์ได้ตามความต้องการของคุณ ที่นี่มันถูกตั้งค่า 1 วินาที

ตอนนี้สร้างไดเรกทอรีบันทึก

# mkdir -p /var/log/lsyncd

เปิดใช้งานlsyncdบริการเพื่อเริ่มโดยอัตโนมัติ

# systemctl enable lsyncd.service

เริ่มบริการ

# systemctl start lsyncd.service

การกำหนดค่าเซิร์ฟเวอร์ 2

ทำตามการกำหนดค่าเดียวกับ Server1 และเปลี่ยนtargetIP

ขณะนี้มีการตั้งค่าการซิงโครไนซ์

คุณสามารถตรวจสอบกิจกรรมจาก tailf /var/log/lsyncd/lsyncd.log

ขอบคุณ MelBurslan สำหรับคำแนะนำของเขา


พารามิเตอร์การหน่วงเวลาภายใต้ฟังก์ชันการตั้งค่าไม่ถูกต้อง ใช้ตัวแปรmaxDelaysแทน ฉันใช้เครื่องมือนี้แล้ว มันทรงพลังจริงๆ
Hasanuzzaman Sattar

3

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


2

คุณจะต้องหาวิธีนี้ด้วยวิธีแก้ปัญหาประเภทระบบไฟล์แบบคลัสเตอร์การซิงค์อย่างง่ายระหว่างสองเครื่องจะไม่ทำให้คุณตอบสนองตามเวลาจริง


จริงๆแล้วเซิร์ฟเวอร์เหล่านั้นอยู่ที่ AWS ดังนั้นเราไม่สามารถรับสภาพแวดล้อมแบบคลัสเตอร์ได้! ไม่มีทางอื่นอีกแล้วเหรอ?
Sourav

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