ผู้เขียน หัวข้อ: lsyncd เพื่อการ สำรองข้อมูลระยะไกล จาก web server หลัก ไปยัง web server สำรอง  (อ่าน 7110 ครั้ง)

ออฟไลน์ ผู้ดูแลระบบ

  • Administrator
  • Jr. Member
  • *****
  • กระทู้: 64
  • +0/-0
    • ดูรายละเอียด
ต้องจัดการ 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.lua

settings = {
   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.lua
cd /etc/lsyncd/
sudo nano lrsync.lua


sync {
   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



« แก้ไขครั้งสุดท้าย: กันยายน 23, 2021, 11:32:28 am โดย ผู้ดูแลระบบ »

ออฟไลน์ ผู้ดูแลระบบ

  • Administrator
  • Jr. Member
  • *****
  • กระทู้: 64
  • +0/-0
    • ดูรายละเอียด
จากการใช้งานระยะหนึ่งพบว่าเกิดปัญหาไม่สามารถ copy ข้อมูลจากเครื่่องต้นทางไปยังปลายทางได้
จึงใช้คำสั่งนี้เข้าไปดู logfile ของ lsyncd

sudo nano /var/log/lsyncd/lsyncd.log

พบว่าใน logfile เกิด error ใน /proc/sys/fs/inotify/max_user_watches
จึงเข้าไปดูปรากฏว่ามีการ limit ไว้ที่ 8921 จึงแก้เป็น 100000 แล้วทำการ restart lsyncd ใหม่ก็ใช้งานได้ปกติ

คำสั่งสำหรับเข้าไปแก้
cd /proc/sys/fs/inotify
ตามด้วย
sudo nano max_user_watches
แก้และบันทึก

สุดท้าย
systemctl restart lsyncd
จบ



« แก้ไขครั้งสุดท้าย: มีนาคม 07, 2018, 10:02:27 pm โดย ผู้ดูแลระบบ »