Hướng dẫn sử dụng RSYNC dữ liệu trên Linux

Tác giả server360, T.Một 10, 2018, 02:34:38 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Hướng dẫn sử dụng RSYNC dữ liệu trên Linux


Chúng ta sẽ tiến hành tìm hiểu thêm một lệnh copy file mới, đó là RSYNC, ở bài trước chúng ta đã biết được SCP cũng có tác dụng tương ứng, nhưng ở RSYNC nó còn thêm các tính năng cao hơn:

  • Sao chép cả user, group, permission(quyền) giúp chúng ta bảo toàn dữ liệu.
  • RSYNC kết hợp SSH bảo mật dữ liệu.
  • RSYNC nén dữ liệu trên server trước khi gửi đi.
  • Tự động xóa dữ liệu nếu dữ liệu đó không tồn tại trên source giúp đồng bộ dữ liệu giữa hai máy chủ.
  • RSYNC nhanh hơn SCP.

1. Cài đặt RSYNC

Việc cài đặt cũng đơn giản, nếu chưa có chúng ta chạy lệnh.

Red Hat/CentOS

Mã nguồn [Chọn]
$ yum install rsync
Debian/Ubuntu

Mã nguồn [Chọn]
$ apt-get install rsysnc
2. Cách sử dụng RSYNC

Cú pháp của RSYNC:

Mã nguồn [Chọn]
$ rsync option source destination
Trong đó:

source: đường dẫn thư mục chứa dữ liệu gốc muốn đồng bộ, nơi truyền dữ liệu.

destination: đường dẫn nơi chứa dữ liệu đồng bộ đến, nơi nhận dữ liệu.

option: các tham số  tùy chọn.

  • -a: option này sẽ bảo toàn user, group, permission của dữ liệu truyền đi
  • -v: show trạng thái truyền tải file ra màn hình command line  để bạn theo dõi.
  • -h: kết hợp với -v để định dạng dữ liệu show ra dễ nhìn hơn.
  • -z: nén dữ liệu trước khi truyền đi giúp tăng tốc quá trình đồng bộ file.
  • -e: sử dụng giao thức SSH để mã hóa dữ liệu.
  • -P: Option này dùng khi đường truyền không ổn định, nó sẽ gửi tiếp các file chưa được gửi đi khi có kết nối trở lại.
  • --delete: xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.
  • --exclude: loại trừ ra dữ liệu không muốn truyền đi, nếu cần loại ra nhiều file hoặc folder ở nhiều đường dẫn khác nhau thì mỗi cái bạn phải thêm –-exclude tương ứng( cũng có thể sử dụng –exclude-from chỉ đến một file liệt kê các file, thư mục không truyền đi).

Còn có rất nhiều option khác, các bạn có thể tham khảo thêm ở đây

3. Môi trường sử dụng

Server 1: IP 192.168.0.1 (user: test, pass: 123456) đây là server chứa dữ liệu cần copy(có dữ liệu sẳn trên server này) nằm ở thư mục /var/www/html/web/staging

Server 2: IP 192.168.0.2 (user: test, pass: 123456) đây là server nhận dữ liệu copy từ server 1 chúng ta sẽ copy vào thư mục /var/www/html/web/production

Đầu tiên SSH vào server 1 bằng user và pass của bạn(cái này bạn tự quản lý không ai biết đâu @@, ví dụ user: test, pass: 123456),  và sau đó thực hiện lệnh rsync để copy toàn bộ file và thư mục trong /var/www/html/web/staging của server 1 vào /var/www/html/web/production của server 2

Mã nguồn [Chọn]
$ rsync -azvhPe ssh  –delete –exclude 'public/image/' /var/www/html/web/staging/* [email protected]:/var/www/html/web/production/
Ý nghĩa các option câu lệnh trên như sau:

  • (-a): dữ liệu sẽ được bảo toàn các thông tin user, permission, được nén trước khi truyền đi (-z)
  • (-vh) hiển thị quá trình truyền file lên màn hình cmd với định dạng dễ nhìn.
  • Server 2 [email protected], với địa chỉ IP 192.168.0.2 và user để login vào là test.
  • ssh (-e) để mã hóa dữ liệu truyền đi.
  • Dữ liệu có source là /var/www/html/web/staging/ có destination là /var/www/html/web/production/
  • Tham số (–delete), sẽ xóa dữ liệu ở destination /var/www/html/web/production/ nếu như dữ liệu đó không tồn tại trong source /var/www/html/web/staging/
  • Tham số (–exclude) Trong quá trình đồng bộ sẽ bỏ qua toàn bộ dữ liệu trong folder public/image/.
  • /var/www/html/web/staging/* nghĩa là copy các file và thư mục có trong staging vào folder/var/www/html/web/production/ trên destination
  • Và nếu là /var/www/html/web/staging khác nhau ở dấu "/*" thì ngoài copy file, folder còn copy cả  folder staging vào /var/www/html/web/production/ trên destination.
  • Cuối cùng là (-P) để dữ liệu sẽ được gửi lại nếu mạng có bị gián đoạn.

Với lệnh trên chúng ta sẽ bỏ qua thư mục public/image/, đó chỉ là một thư mục thôi, bây giờ muốn bỏ một file nào đó trong thư mục, còn các file khác thì vẫn copy? option –exclude-from  sẽ giải quyết vấn đề này.

Mã nguồn [Chọn]
$ rsync -azvhPe 'ssh -i /home/test/filessh/server2.pem'  –delete –exclude-from='/home/test/filessh/excluded.txt'  /var/www/html/web/staging/* [email protected]:/var/www/html/web/production/
Và trong lệnh trên mình đã kết hợp luôn cả chứng thực ssh Key khi truyền dữ liệu, việc tạo SSH key các bạn tự tìm hiểu thêm, nếu có thời gian mình sẽ làm một bài riêng.

Nội dung file excluded.txt định dạng như sau:

Mã nguồn [Chọn]
application/config/*
application/cache/*
application/hooks/*
application/index.html
index.php

Chú ý là tập tin excluded.txt nó sẽ tính thư mục /var/www/html/web/staging/ ở source là thư mục gốc.

Muốn sử dụng rsync đồng bộ dữ liệu theo chiều ngược lại từ destination về source bạn chỉ việc đảo lại source và destination và chỉnh sửa các option cho phù hợp là được.

Rsync được rất nhiều quản trị sử dụng để đồng bộ rất nhiều thứ như database, webserver, file cấu hình ... việc này có thể sử dụng bằng crontab quy định thời gian để tự động, chúng ta sẽ tìm hiểu ở bài khác.