Nếu như đã dùng scp để sao chép dữ liệu trên linux các bạn cũng nhận thấy rằng scp có nhiều hạn chế, bản thân nó chỉ có nhiệm vụ copy file được chỉ định thôi. Hôm nay mình sẽ giới thiệu RSYNC (Remote Sync) một công cụ mạnh mẽ để copy file và đồng bộ dữ liệu giữa linux với linux.
1. Các tính năng nổi bật của rsync
- Sao chép cả symbolic link, user, group, permission giúp bảo toàn dữ liệu.
- rsync nhanh hơn SCP, nó dùng thuật toán thông minh chỉ sao lưu những dữ liệu thay đổi.
- rsync nén dữ liệu trên server trước khi gửi đi.
- Tự 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ủ linux từ xa.
- rsync kết hợp SSH bảo mật dữ liệu truyền trên internet.
2. Cài đặt rsync
Bên trên là một số tính năng quan trọng của rsync, để bắt đầu chúng ta phải cài rsync cho máy chủ của mình trước, nếu chưa có chạy lệnh.
Red Hat/CentOS
yum install rsync
Debian/Ubuntu
apt-get install rsysnc
3. Cách sử dụng rsync
Cú pháp chung của rsync
#rsync option source destination
Trong đó:
Source: thư mục chứa dữ liệu gốc muốn đồng bộ, nơi truyền dữ liệu.
destination: nơi sẽ chứa dữ liệu đồng bộ đến, nơi nhận dữ liệu.
option: các tham số để tùy biến rsync khi đồng bộ dữ liệu.
-a
: option này sẽ bảo toàn user, group, permission,symbolic link của dữ liệu-v
: show trạng thái truyền tải file ra màn hình để 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 những dữ liệu không muốn truyền đi, nếu bạn 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.
Để hiểu rõ hơn ở ví dụ bên dưới mình sẽ thực hiện backup website giữa hai VPS qua môi trường internet để các bạn dễ hình dung.
4. Đồng bộ dữ liệu từ Remote VPS về Local VPS
Ở đây Remote VPS là source sẽ đống bộ sang Local VPS là destination.
[root@srv1 /]# rsync -azvhPe ssh --delete --exclude 'wp-content/cache/' /var/www/www.thuysys.com/public_html root@45.32.250.248:/var/www/www.thuysys.com/backup/
Ý nghĩa các option mình đã giải thích bên trên các bạn đọc và tham chiếu để rõ hơn, mình diễn giải câu lệnh trên như sau:
- Với lệnh trên thì dữ liệu sẽ được bảo toàn các thông tin user, permission (-a), được nén trước khi truyền đi (-z)
- Tiếp theo là (-vh) show quá trình truyền file lên màn hình với định dạng dễ nhìn hơn.
- VPS đích (nhận dữ liệu)
root@45.32.250.248,
có địa chỉ IP 45.32.250.248 và user để login vào VPS này là root. - Rsync sẽ kết hợp với ssh (-e) để mã hóa dữ liệu truyền đến VPS 45.32.250.248 cho an toàn.
- Dữ liệu có source là
/var/www/thuysys.com/public_html
có destination là/var/www/thuysys.com/backup/
. - Sẽ xóa dữ liệu ở destination
/var/www/www.thuysys.com/backup/
nếu như dữ liệu đó không còn tồn tại trong source/var/www/thuysys.com/public_html
, tham số (–delete) - Trong quá trình đồng bộ sẽ bỏ qua toàn bộ dữ liệu trong folder
wp-content/cache
, tham số (–exclude). - Chú ý cái đường dẫn này,
/var/www/thuysys.com/public_html
nghĩa là copy nguyên cả folder public_html đặt vào folder backup trên destination, nếu là/var/www/thuysys.com/public_html/
khác nhau ở dấu “/
” thì chỉ copy file, folder còn không copy folder public_html. - Cuối cùng là (-P) để đảm bảo dữ liệu sẽ được gửi lại nếu mạng có bị gián đoạn.
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à thêm bớt các option cho phù hợp mục đích là được.
Chú ý, ví dụ trên chúng ta đã thực hiện rsync kết hợp với SSH mã hóa dữ liệu truyền đi. Nếu như VPS của bạn sử dụng SSH Key bạn cần tạo SSH Key không dùng passphrase để không phải phải nhập password mỗi khi chạy lệnh.
Tham khảo: cách tạo SSH Key.
Trên đây là các option cần thiết nhất để đồng bộ dữ liệu giữa 2 máy chủ với nhau. Rsync còn một số options nữa cũng có thể dùng trong một số trường hợp nhất định như:
--remove-source-files
: xóa dữ liệu source sau khi đồng bộ thành công.--max-size
: giới hạn dung lượng file được đồng bộ.
Rsync có thể backup đồng bộ được rất nhiều thứ như database, webserver, file config cấu hình … Bài kế tiếp mình sẽ hướng dẫn các bạn backup website bằng rsync và tạo cronjob để tự động quá trình đồng bộ dữ liệu trên server.
Bạn nào còn tài khoản openshift v2 bán hoặc share cho mình với nhé.
FB: https://fb.me/huyannet
Cái này không đồng bộ được 2 chiều nhỉ. Bạn có thể làm bài hướng dẫn đồng bộ 2 chiều không?
Không được bạn ạ, với dữ liệu có tần suất thay đổi nhiều thì không thể đồng bộ 2 chiều được. Dữ liệu ít thay đổi bạn có thể dùng rsync để đồng bộ ngược lại với option
--delete
Em không chuyên về cái này cho lắm, nếu em muốn truyền từ 1 vps thông thường -> 1 vps sử dụng openshirt redhat thì phải làm thế nào anh nhỉ, nó đăng nhập sử dụng ssh key.
Theo mình biết OpenShift là một dạng hosting muốn truyền dữ liệu bạn dùng winscp với ssh key, cũng chưa thử rsync từ vps sang openshift để mình thử xem sao
Rsync trên OpenShift ok bạn nhé, bạn làm theo các bước sau:
– Đăng nhập VPS của bạn rồi tạo ssh key, không cần đặt passphrase bạn nhé.
– Login vào website openshift để add pubclic key đc tạo trên VPS của bạn. Xem cách tạo ssh key trên VPS
– Nhập lệnh :
Lệnh trên sẽ đồng bộ file vps.txt lên folder app-deployments trên OpenShift
Chúc bạn thành công
Hình như cái này chỉ đồng bộ File trên web thôi anh nhỉ, có cách nào để nó tự động backup database và file nén vào 1 thư mục và đẩy sang vps # sau mỗi ngày không anh ?
🙂 mình cũng chưa có thời gian tìm hiểu cái này, bạn search google thêm.
He 🙂 cảm ơn anh cuối cùng cũng có rồi 🙂 tưởng a quên r cơ.