Thứ năm, 29/08/2013 | 00:00 GMT+7

Cách đồng bộ các thư mục cục bộ và từ xa trên VPS với lsyncd


Lsyncd là gì?

Khi quản lý một web server hoặc một ứng dụng, có nhiều tình huống yêu cầu đồng bộ hóa giữa các folder . Trong khi một số công cụ có thể giúp bạn thực hiện điều này, lsyncd là một thành phần sáng giá.

Bài viết này sẽ thảo luận về cách cấu hình lsyncd để phản chiếu các thay đổi giữa các folder trên một máy duy nhất và cách phản chiếu giữa các server từ xa.

Đối với hướng dẫn này, ta sẽ sử dụng VPS Ubuntu 12.04, nhưng bất kỳ bản phân phối hiện đại nào cũng phải hoạt động theo cách tương tự.

Cách cài đặt lsyncd

May mắn là Ubuntu bao gồm lsyncd trong repository lưu trữ mặc định của nó.

Ta có thể cài đặt lsyncd bằng các lệnh sau:

sudo apt-get update
sudo apt-get install lsyncd

Thao tác này sẽ cài đặt lsync, nhưng nó sẽ không cung cấp cho bạn cấu hình mặc định. Ta sẽ tạo một cái sau trong bài viết.

Cách tìm ví dụ cấu hình lsyncd

Mặc dù lsyncd không cung cấp file cấu hình theo mặc định, nhưng nó bao gồm một số ví dụ mà ta có thể xem xét để lấy ý tưởng.

Xem các ví dụ bằng cách kiểm tra các file trong folder "/ usr / share / doc / lsyncd /amples":

cd /usr/share/doc/lsyncd/examples
ls
lbash.lua  lgforce.lua      lpostcmd.lua  lrsyncssh.lua
lecho.lua  limagemagic.lua  lrsync.lua

Bạn có thể nhìn vào các file văn bản này để biết những gì có thể được thực hiện với cấu hình.

Ta có thể kiểm tra một trong những cấu hình cơ bản hơn bằng cách mở file "lrsync.lua":

sudo nano 
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings = {
        statusFile = "/tmp/lsyncd.stat",
        statusIntervall = 1,
}

sync{
        default.rsync,
        source="src",
        target="trg",
}

Các dòng bắt đầu bằng hai dấu gạch ngang (-) là comment . Chúng không được giải thích bởi lsyncd.

Tệp cấu hình lsync được viết bằng ngôn ngữ lập trình Lua. Bạn có thể tìm hiểu thêm về Lua tại đây.

Cài đặt môi trường

Ta sẽ đồng bộ hai folder local trong ví dụ đầu tiên của ta . Hãy tạo chúng bằng các lệnh sau:

sudo mkdir -p /source/to/copy
sudo mkdir /dest

Sau đó, ta sẽ thêm một số file vào folder đầu tiên để ta có thể kiểm tra xem đồng bộ hóa có hoạt động chính xác hay không:

cd /source/to/copy
sudo touch file{1..100}

Các lệnh trên tạo 100 file trong folder "/ source / to / copy".

Ngoài ra, ta có thể tạo folder log và một số file để lsyncd sử dụng:

sudo mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

Tiếp theo, ta có thể tạo folder cấu hình lsyncd:

sudo mkdir /etc/lsyncd

Ta sẽ tạo một file cấu hình bên trong folder này có tên "lsyncd.conf.lua", với nano:

sudo nano /etc/lsyncd/lsyncd.conf.lua

Cách đồng bộ hóa hai folder local với lsyncd

Tệp cấu hình ta đang thực hiện sẽ đồng bộ folder "/ source / to / copy" vào folder "/ dest".

Cấu hình Phần chung

Các cài đặt chung đều được cấu hình trong một phần gọi là "cài đặt". Phần của ta sẽ chứa một số cài đặt cơ bản:

settings = {
	logfile = "/var/log/lsyncd/lsyncd.log",
	statusFile = "/var/log/lsyncd/lsyncd.status"
}

Các tùy chọn này yêu cầu lsyncd sử dụng các file mà ta đã tạo trước đó.

Cấu hình Phần đồng bộ hóa

Phần tiếp theo chỉ định cách bạn muốn các hoạt động đồng bộ hóa được thực hiện. Vì đây là chuyển khoản local , ta sẽ sử dụng rsync thông thường để hoàn tất quá trình chuyển.

Cấu hình này được xác định bởi tùy chọn " default.rsync ". Cấu hình này nghĩa là lsyncd sẽ đợi 20 giây hoặc thu thập 1000 sự kiện đồng bộ hóa riêng biệt và sau đó gọi rsync với những thay đổi cần thiết.

Theo hướng dẫn sử dụng lsyncd, version rsync được gọi tương đương với lệnh:

rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET

Điều này nghĩa là rsync hoạt động theo cách sau:

  • -l : sao chép các softlink
  • -t : thời gian sửa đổi bản sao
  • -s : không phân tách khoảng trắng; chỉ ký tự đại diện
  • -d : chuyển folder mà không cần đệ quy

Điều duy nhất ta cần làm để thực hiện những thay đổi này là chỉ định kiểu đồng bộ hóa và các folder nguồn và đích. Phần đồng bộ hóa sẽ giống như sau:

sync {
	default.rsync,
	source = "/source/to/copy",
	target = "/dest"
}

Nếu bạn muốn thêm tùy chọn vào rsync để sửa đổi hành vi của nó, bạn có thể thực hiện bằng cách chuyển biến "rsyncOpts" một mảng chứa các chuỗi được phân tách bằng dấu phẩy, mỗi chuỗi đại diện cho một tùy chọn rsync:

sync {
	default.rsync,
	source = "/source/to/copy",
	target = "/dest",
	rsyncOpts = {"rsync option1", "rsync option2", "rsync option3"}
}

Bây giờ ta có đủ cấu hình để kiểm tra cài đặt của bạn . Lưu và đóng file .

Thử nghiệm đồng bộ hóa local

Hãy đi đến folder đích và xác minh không có file nào trong folder "/ dest" tại thời điểm này:

cd /dest
ls

Lệnh cuối cùng sẽ không trả về kết quả vì folder "/ dest" sẽ trống.

Ta có thể bắt đầu dịch vụ lsyncd bằng cách sử dụng lệnh sau:

sudo service lsyncd start

Kiểm tra lại folder bằng ls:

ls
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

Ta có thể thấy rằng tất cả các file được đồng bộ hóa ngay lập tức.

Nếu ta thêm một số file vào folder nguồn, ta sẽ gặp phải độ trễ 20 giây mà ta đã đề cập khi thảo luận về "default.rsync":

sudo mkdir /source/to/copy/hello{1..100}
ls

Ban đầu, ta sẽ không thấy file , nhưng sau khi hết thời gian chờ, rsync sẽ đồng bộ hóa các file . Kiểm tra lại bằng cách chạy lại lệnh "ls".

Cách cấu hình đồng bộ hóa từ xa với lsyncd

Với một vài thay đổi đối với file cấu hình của ta , ta có thể cấu hình đồng bộ hóa từ xa.

Trước tiên, ta cần có thể đăng nhập vào máy nhân bản từ máy root thông qua ssh không cần password .

Cách đăng nhập vào máy từ xa bằng phím SSH

Nếu bạn chưa làm như vậy, hãy tạo khóa ssh trên máy của bạn với lsyncd theo hướng dẫn này.

Tạo một cặp khóa cho user root của bạn, vì dịch vụ lsyncd sẽ chạy dưới dạng root. Sau đó, bạn có thể sao chép file khóa vào máy nhân bản từ xa bằng các lệnh sau:

sudo su
ssh-copy-id remote_mirror_ip_address

Tệp khóa của bạn bây giờ sẽ cho phép bạn đăng nhập vào server phản chiếu từ xa với quyền là user root .

Hãy thử ngay bây giờ để kiểm tra xem nó có hoạt động hay không và tạo folder đích trên server từ xa:

ssh remote_mirror_ip_address

Ta sẽ tạo một folder có tên "/ remotesync" để hoạt động như folder đích của ta :

mkdir /remotesync

Thoát khỏi phiên từ xa và phiên root local bằng lệnh "thoát" hai lần:

exit
exit

Cách cấu hình lsyncd để phản chiếu từ xa

Ta có thể mở lại file cấu hình lsyncd bằng lệnh sau:

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"
}

Ta sẽ chỉ cần áp dụng các thay đổi trong phần "đồng bộ hóa".

Ta sẽ thay đổi "default.rsync" thành "default.rsyncssh" để bật rsync qua ssh và ta sẽ thay thế biến "target" bằng các biến "host" và "targetdir":

settings = {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
        default.rsyncssh,
        source = "/source/to/copy",
        host = "remote_mirror_ip_address",
        targetdir = "/remotesync"
}

Lưu file và thoát.

Thử nghiệm đồng bộ hóa từ xa

Bây giờ ta có thể khởi động lại dịch vụ lsyncd bằng cách đưa ra lệnh sau:

sudo service lsyncd restart

Nếu ta truy cập vào máy nhân bản từ xa của bạn , ta sẽ có thể thấy những thay đổi trong folder "/ remotesync" từ xa:

sudo su
ssh remote_mirror_ip_address
ls /remotesync

Bạn sẽ thấy tất cả các file mà ta đã thêm vào folder "/ source / to / copy" local .

Tiến xa hơn

Dịch vụ lsyncd là một cách tốt để đồng bộ hóa các file giữa các folder hoặc hệ thống. Do các file cấu hình dựa trên Lua, nó có thể rất mạnh mẽ và linh hoạt. Tài liệu Lua (được liên kết trước đó) và tài liệu lsync là những tài nguyên tuyệt vời cho phép bạn phát triển các hoạt động đồng bộ phức tạp hơn.

Hãy xem một số ví dụ khác trong folder "/ usr / share / doc / lsyncd /amples" để có thêm ý tưởng.

Bởi Justin Ellingwood

Tags:

Các tin liên quan