Cách sao lưu và đồng bộ dữ liệu VPS/Server bằng RSYNC thông qua SSH

Trong một số trường hợp các bạn muốn đồng bộ dữ liệu giữa các VPS/Server nhằm mục đích sao lưu dự phòng (backup), di chuyển dữ liệu qua VPS mới, hoặc cho một số mục đích nào đó thì rsync sẽ giúp bạn thực hiện điều này rất thuận tiện và nhanh chóng thông qua SSH.

Trong bài này,  mình sẽ hướng dẫn bạn đồng bộ dữ liệu từ thư mục “/home/domain.com/public_html” tại VPS 1 (source) lên thư mục “/home/” tại VPS 2 (destination) có địa chỉ IP là 1.2.3.4

Tại VPS 1 nếu chưa có rsync các bạn cài đặt bằng lệnh sau

yum install -y rsync

Sau đó bạn tạo khoá xác thực SSH (SSH authentication keys) bằng lệnh sau :

ssh-keygen -t dsa

Khi tới bước “Enter file in which to save the key (/root/.ssh/id_dsa):” thì bạn nhập “/root/.ssh/id_dsa_VPS1” (nơi chứa thông tin của keys)

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_dsa_VPS1

Khi tới bước “Enter passphrase (empty for no passphrase):” & “Enter same passphrase again:” thì bạn không cần nhập gì cả, chỉ việc nhấn phím “ENTER”

Your identification has been saved in /root/.ssh/id_dsa_VPS1.
Your public key has been saved in /root/.ssh/id_dsa_VPS1.pub.
The key fingerprint is:
d6:af:3d:2b:28:d1:36:cc:0c:ef:73:db:45:44:d8:51 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|             oooE|
|            ...  |
|              .  |
|      .  .   .   |
|       BS .   .  |
|      ..O  . .   |
|       + o  . .  |
|      . + o+..   |
|       . ooo+o   |
+-----------------+

Sau đó bạn copy key SSH vừa được tạo (/root/.ssh/id_dsa_VPS1.pub) lên VPS 2 bằng lệnh như dưới đây. (Phần -P PORT dành cho bạn nào không sử dụng cổng mặc định 22)

scp -P PORT /root/.ssh/id_dsa_VPS1.pub [email protected]:/root/

Bạn phải nhập mật khẩu của VPS 2 vào để tiếp tục.

The authenticity of host '[1.2.3.4]:PORT ([1.2.3.4]:PORT)' can't be established.
RSA key fingerprint is ee:c1:d7:2a:95:ea:98:af:ed:61:f2:02:25:90:2f:b5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[1.2.3.4]:PORT' (RSA) to the list of known hosts.
[email protected]'s password: 
id_dsa_VPS1.pub                                                                  100%  402     0.4KB/s   00:00

Tại VPS 2, bạn đăng nhập vào và chạy cách lệnh như sau:

mkdir -p /root/.ssh/
touch -f /root/.ssh/authorized_keys
cat /root/id_dsa_VPS1.pub >> /root/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys

Tại VPS 1 các bạn chạy lệnh như sau:

rsync -aurzW --delete --force -e "ssh -i /root/.ssh/id_dsa_VPS1 -p PORT" /home/domain.com/public_html [email protected]:/home/

Đây là lệnh đồng bộ dữ liệu 1 chiều từ thư mục “/home/domain.com/public_html” tại VPS 1 lên thư mục “/home/” tại VPS 2 theo nguyên tắc sau :

  • Nếu thư mục/tập tin nào có trên VPS 1 mà không có trên VPS 2 thì sẽ tự động tạo trên VPS 2
  • Nếu thư mục/tập tin nào có trên VPS 2 mà không có trên VPS 1 thì sẽ tự động xoá trên VPS 2

Cuối cùng chúng ta tạo một cron job để VPS 1 tự chạy mỗi phút. (Các tạo cron job các bạn search trên mạng, dưới đây là câu lệnh của cron job)

1 * * * * rsync -aurzW --delete --force -e "ssh -i /root/.ssh/id_dsa_VPS1 -p PORT" /home/domain.com/public_html [email protected]:/home/ >/dev/null 2>&1

Vậy là xong, chúng ta đã cấu hình tự động đồng bộ dữ liệu từ VPS 1 lên VPS 2 mỗi phút với rsync + Crontab + SSH.