ต้องจัดการ rsync ให้สามารถ โอนถ่ายข้อมูลระหว่างเครื่องด้วย ssh ให้ได้ก่อน (ไปดูหัวข้อการติดตั้ง rsync ใน ubuntu 16.04)ทดสอบด้วยคำสั่ง
rsync -azP /var/www/html/bchn/pic kob@192.168.247.159:/remotesync
sudo apt-get update
sudo apt-get install lsyncd
cd /usr/share/doc/lsyncd/examples
ls
output
lbash.lua lgforce.lua lpostcmd.lua lrsyncssh.lua
lecho.lua limagemagic.lua lrsync.lua
ในตัวอย่างเราดูที่
sudo nano lrsync.lua
ในงานจริงเราดูที่
sudo nano /etc/lsyncd/lsyncd.conf.lua
output
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings = {
statusFile = "/tmp/lsyncd.stat",
statusIntervall = 1,
}
sync{
default.rsync,
source="src",
target="trg",
}
เครื่องหมาย - นำหน้าในบรรทัดนั้นคือcomment
ทดสอบในเครื่อง
สร้าง folder source ต้นทาง
sudo mkdir -p /source/to/copy
สร้าง folder destination ปลายทาง
sudo mkdir /dest
จากนั้นเราจะเพิ่มไฟล์บางไฟล์ลงในไดเร็กทอรีแรกเพื่อให้เราสามารถตรวจสอบว่าการซิงค์ทำงานได้อย่างถูกต้องหรือไม่:
cd /source/to/copy
sudo touch file{1..100}
คำสั่งข้างต้นสร้างไฟล์ 100 ไฟล์ในไดเร็กทอรี "/ source / to / copy"
นอกจากนี้เราสามารถสร้างไดเร็กทอรีล็อกและไฟล์บางไฟล์สำหรับ lsyncd เพื่อใช้:
sudo mkdir /var/log/lsyncd
sudo touch /var/log/lsyncd/lsyncd.{log,status}จากนั้นเราสามารถสร้างไดเร็กทอรีการกำหนดค่า lsyncd:
sudo mkdir /etc/lsyncd
เราจะสร้างแฟ้มการกำหนดค่าภายในของไดเร็กทอรีนี้ชื่อ "lsyncd.conf.lua" โดยมี nano:
sudo nano /etc/lsyncd/lsyncd.conf.luasettings = {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
การกำหนดค่าส่วนการซิงค์
ส่วนถัดไปจะระบุว่าคุณต้องการให้ดำเนินการซิงค์อย่างไร เนื่องจากนี่คือการโอนภายในเครื่องเราจะใช้ rsync แบบปกติเพื่อดำเนินการโอน
การกำหนดค่านี้กำหนดโดยตัวเลือก "default.rsync" การกำหนดค่านี้หมายความว่า lsyncd จะรอ 20 วินาทีหรือรวบรวมเหตุการณ์การซิงค์ 1000 ครั้งแยกต่างหากจากนั้นเรียก rsync พร้อมการเปลี่ยนแปลงที่จำเป็น
ตามคู่มือ lsyncd อินสแตนซ์ rsync ที่เรียกว่าเทียบเท่ากับคำสั่ง:
rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET
ซึ่งหมายความว่า rsync ทำงานในลักษณะต่อไปนี้:
-l: คัดลอกลิงก์สัญลักษณ์
-t: เวลาในการแก้ไขสำเนา
-s: ไม่มีช่องว่าง; อักขระตัวแทนเท่านั้น
-d: โอนไดเรกทอรีโดยไม่ต้องทำใหม่
สิ่งเดียวที่เราต้องทำเพื่อใช้การเปลี่ยนแปลงเหล่านี้คือการระบุประเภทการซิงค์และไดเร็กทอรีต้นทางและต้นทาง ส่วนการซิงค์จะมีลักษณะดังนี้:
sudo nano /etc/lsyncd/lsyncd.conf.luacd /etc/lsyncd/
sudo nano lrsync.luasync {
default.rsync,
source = "/source/to/copy",
target = "/dest"
}
ถ้าคุณต้องการเพิ่มตัวเลือกให้กับ rsync เพื่อปรับเปลี่ยนลักษณะการทำงานคุณสามารถทำได้โดยการส่งตัวแปร "rsyncOpts" ไปยังอาร์เรย์ที่มีสตริงที่คั่นด้วยเครื่องหมายจุลภาคแต่ละตัวจะแสดงตัวเลือก rsync:
sync {
default.rsync,
source = "/source/to/copy",
target = "/dest",
rsyncOpts = {"rsync option1", "rsync option2", "rsync option3"}
}
ตอนนี้เรามีคอนฟิกูเรชันที่เพียงพอสำหรับทดสอบการตั้งค่าของเราแล้ว บันทึกและปิดไฟล์
การทดสอบ Local Syncing
ไปที่ไดเร็กทอรีปลายทางและตรวจสอบว่าไม่มีไฟล์ในไดเร็กทอรี "/ dest" ณ จุดนี้:
cd /dest
ls
คำสั่งสุดท้ายควรไม่มีผลลัพธ์เนื่องจากไดเร็กทอรี "/ dest" ควรว่างเปล่า
เราสามารถเริ่มบริการ lsyncd โดยการออกคำสั่งต่อไปนี้:
sudo service lsyncd start
systemctl start lsyncd
คำสั่งเดิมอีกครั้ง
ls
output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90
file10 file19 file28 file37 file46 file55 file64 file73 file82 file91
file100 file2 file29 file38 file47 file56 file65 file74 file83 file92
file11 file20 file3 file39 file48 file57 file66 file75 file84 file93
file12 file21 file30 file4 file49 file58 file67 file76 file85 file94
file13 file22 file31 file40 file5 file59 file68 file77 file86 file95
file14 file23 file32 file41 file50 file6 file69 file78 file87 file96
file15 file24 file33 file42 file51 file60 file7 file79 file88 file97
file16 file25 file34 file43 file52 file61 file70 file8 file89 file98
file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
เราจะเห็นว่าไฟล์ทั้งหมดได้รับการซิงค์ทันที
ถ้าเราเพิ่มไฟล์บางไฟล์ลงในไดเร็กทอรีต้นทางเราจะพบความล่าช้า 20 วินาทีที่เรากล่าวถึงเมื่อพูดถึง "default.rsync":
sudo mkdir /source/to/copy/hello{1..100}
เราจะไม่เห็นไฟล์ในตอนเริ่มต้น แต่หลังจากหมดเวลาแล้ว rsync จะซิงค์ไฟล์ ตรวจสอบอีกครั้งโดยพิมพ์คำสั่ง "ls" ใหม่
วิธีกำหนดค่าการซิงค์ระยะไกลด้วย lsyncd
ด้วยการเปลี่ยนแปลงไฟล์การกำหนดค่าของเราเพียงไม่กี่ขั้นตอนเราสามารถกำหนดค่าการซิงค์ระยะไกลได้
ขั้นแรกเราต้องสามารถลงชื่อเข้าใช้เครื่องสะท้อนจากเครื่องเดิมผ่านทาง ssh ที่ไม่มีรหัสผ่าน
วิธีลงชื่อเข้าใช้เครื่องระยะไกลด้วยคีย์ SSH
ไปดูวิธีการ ใช้ rsync
หากยังไม่ได้ทำดังกล่าวให้สร้างคีย์ ssh บนเครื่องของคุณด้วย lsyncd โดยทำตามคำแนะนำนี้
สร้างคู่คีย์สำหรับผู้ใช้ root เนื่องจากบริการ lsyncd จะทำงานเป็น root จากนั้นคุณสามารถคัดลอกไฟล์สำคัญไปยังเครื่องรีโมตมิเรอร์โดยใช้คำสั่งต่อไปนี้:
sudo su
ssh-copy-id remote_mirror_ip_address
ไฟล์สำคัญของคุณควรอนุญาตให้คุณล็อกอินเข้าสู่เซิร์ฟเวอร์การมิเรอร์แบบรีโมตในฐานะผู้ใช้ root
ลองใช้เดี๋ยวนี้เพื่อทดสอบว่าการทำงานและสร้างไดเรกทอรีปลายทางบนโฮสต์ระยะไกล:
ssh remote_mirror_ip_address
เราจะสร้างไดเรกทอรีที่เรียกว่า "/ remotesync" เพื่อทำหน้าที่เป็นไดเรกทอรีเป้าหมายของเรา:
mkdir /remotesync
ออกจากเซสชันระยะไกลและเซสชันรากภายในโดยการพิมพ์ "exit" สองครั้ง:
exit
exit
วิธีกำหนดค่า lsyncd ให้เป็น Mirror จากระยะไกล
เราสามารถเปิดไฟล์คอนฟิกูเรชัน lsyncd อีกครั้งด้วยคำสั่งต่อไปนี้:
sudo nano /etc/lsyncd/lsyncd.conf.lua
settings = {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsync,
source = "/source/to/copy",
target = "/dest"
}
เราจะต้องทำการเปลี่ยนแปลงภายในส่วน "sync" เท่านั้น
เราจะเปลี่ยน "default.rsync" เป็น "default.rsyncssh" เพื่อเปิดใช้งาน rsync ผ่าน ssh และเราจะแทนที่ตัวแปร "target" ด้วยตัวแปร "host" และ "targetdir"
settings = {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsyncssh,
source = "/source/to/copy",
host = "
kob@192.168.247.159",
targetdir = "/remotesync"
}
บันทึกและออก
สั่งให้ทำงานด้วย
systemctl restart lsyncd#################ตัวอย่าง ใช้งาน ###########
sudo nano /etc/lsyncd/lsyncd.conf.lua
settings = {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsyncssh,
source = "/var/www/html",
host = "web1@110.252.66.3",
targetdir = "/var/www/html"
}
################################อ้างอิงhttps://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd