Chia Sẽ Kinh Nghiệm Về IT



Tìm Kiếm Với Google
-


Gởi Ðề Tài Mới  Gửi trả lời
 
Công Cụ Xếp Bài
Tuổi 12-08-2011, 03:51 PM   #1
hoctinhoc
Guest
 
Trả Lời: n/a
Đồng bộ dữ liệu giữa các Node trong mô hình Web Cluster
Đồng bộ dữ liệu giữa các Node trong mô hình Web Cluster



I – Giới thiệu:


Ở bài trước, mình có trình bày Cấu hình Web Cluster giúp tăng tính sẵn sàng cho hệ thống Web Server của chúng ta. Tuy nhiên, nếu một Node trong hệ thống Cluster “chết”, sau một thời gian sau Node đó “sống” trở lại thì dữ liệu trên Node không còn nhất quán với các Node còn lại nữa!. Trong bài này, mình sẽ tiếp tục trình bày về đồng bộ dữ liệu giữa các Node trong mô hình Web Cluster.

Yêu cầu:
  • 2 Server làm Web Server với dịch vụ httpd (Ở đây mình dùng CentOS 5.6)
  • Đã thực hiện cấu hình Web Cluster.

Chú ý:
Bài này mình trình bày về đồng bộ dữ liệu chứa trên các thư mục của Web Server (ví dụ: hình ảnh, tệp tin âm thanh,…). Để có được mô hình đẩy đủ hơn, chúng ta có thể tiến hành thiết lập đồng bộ Cơ Sở Dữ Liêu của các Web Server này, bạn có thể tham khảo bài viết Đồng bộ dữ liệu trên 2 Database Server sử dụng MySQL Server, sử dụng kĩ thuật MySQL Replication.
II – Cài đặt gói rsync và test đồng bộ:
Trên cả 2 Node, tiến hành cài đặt các gói rsync
#yum install rsync
Tạo một user dùng để 2 Node xác thực trong quá trình đăng nhập đồng bộ dữ liệu. Ở Node1 mình tạo một user với tên là backup
#root@node1# useradd backup
#root@node1# passwd backup


Trên Node2 mình sẽ thử đồng bộ bằng tay để xem các gói rsync đã cài đặt đúng hay chưa.
root@node2# rsync –avz –e ssh backup@172.16.1.1:/var/www/html/ /var/www/html/
Trong đó:
  • backup là user đã tạo ở Node1.
  • 172.16.1.1 là IP của Node1.
  • /var/www/html/ là 2 thư mục cần đồng bộ.

Đồng bộ dữ liệu từ Node1 qua Node2 thành công!. Ta kiểm tra 2 thư mục /var/www/html/Node1Node2 thì thấy chúng có nội dung giống nhau.

III – Tạo SSH-Key và lập lịch tự động đồng bộ:

Trên Node2, tiến hành tạo Key
root@node2# mkdir /root/rsync
root@node2# ssh-keygen –t dsa –b 1024 –f /root/rsync/mirror-rsync-key

Ở đây bạn sẽ được yêu cầu nhập passphrase 2 lần. Hãy nhập passphrase trắng cả 2 lần!


Sau khi tạo Key xong, tiến hành chuyển Key này tới cho Node1. Chúng ta sẽ đưa key vào mục home của user backup được tạo ở bước trên
root@node2# scp /root/rsync/mirror-rsync-key.pub backup@172.16.1.1:/home/backup

Trở lại Node1, ta tiến hành chuyển qua thao tác trên user backup:
backup@node1# mkdir ~/.ssh
backup@node1# chmod 700 ~/.ssh
backup@node1# mv ~/mirror-rsync-key.pub ~/,ssh/
backup@node1# cd ~/.ssh
backup@node1 .ssh# touch authorized_keys
backup@node1 .ssh# chmod 600 authorized_keys
backup@node1 .ssh# cat mirror-rsync-key.pub >> authorized_keys


Tiến hành mở file authorized_keys lên
backup@node1 .ssh# vi authorized_keys
Thêm vào trước nội dung có sẵn của file authorized_keys nội dung sau:
command="/home/backup/rsync/checkrsync",from="172.16.1.2",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss
Chú ý: Có khoảng trắng giữa đoạn mới thêm với đoạn nội dung có sẵn của file authorized_keys nhé .

Để đảm bảo hệ thống được an toàn khi thực các lệnh bởi user backup. Chúng ta nên cấm tất các các câu lệnh ngoại trừ rsync trên user này.
backup@node1# ~/rsync
backup@node1# vi ~/rsync/checkrsync

Tạo thêm nội dung dưới đây cho file checkrsync
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\'*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac


Sau đó lưu file checkrsync lại và chmod nó ở 700
#chmod 700 ~/rsync/checkrsync

Bây giờ, trên Node2 ta sẽ kiểm tra lại sự đồng bộ dữ liệu đăng nhập bởi user backup có sử dụng SSH-Key
root@node2# rsync -avz --delete --exclude=**/stats --exclude=**/error -e "ssh -i /root/rsync/mirror-rsync-key" backup@172.16.1.1:/var/www/html/ /var/www/html/
Trong đó:
  • delete: Khi file được xóa trên Node1 thì nó cũng sẽ được xóa trên Node2
  • exclude: Loại ra các thư mục không muốn đồng bộ. Ví dụ ở trên mình loại ra các thư mục như /stats và /error

Nếu có kết quả đồng bộ đại loại như hình trên thì bạn đã cấu hình thành công!. Bây giờ ta sẽ tiến hành lập lịch để Node2 tự động đồng bộ dữ liệu giống như Node1.
root@node2# crontab –e
Thêm vào nội dung như bên dưới rồi tiến hành lưu lại:
*/1 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error -e "ssh -i /root/rsync/mirror-rsync-key" backup@172.16.1.1:/var/www/html/ /var/www/html/

Ở đoạn lệnh trên mình đã lập lịch Node2 cứ một phút thì nó lại tiến hành đồng bộ dữ liệu với Node1. Chúng ta tiến hành kiểm tra đơn giản như sau.
Trên Node1, tạo một file kiemtra.txt: root@node1# touch /var/www/html/kiemtra.txt

Trên Node2, ta tiến hành kiểm tra lại thư mục /var/www/html/ thì thấy file kiemtra.txt đã xuất hiện

IV – Đồng bộ dữ liệu qua lại giữa 2 Node:
Ở các bước cấu hình trên, mình đã thiết lập được quá trình đồng bộ dữ liệu từ Node1 tới Node2. Kiểu thiết lập này nhằm mục đích backup lại dữ liệu ở Node chính. Tuy nhiên, nếu Node1 bị chết, Node2 thay thế để đáp ứng nhu cầu Web cho Client và khi Node1 được phục hồi thì dữ liệu của chúng ta sẽ không còn nhất quán nữa! (dữ liệu không thể đồng bộ từ Node2 tới Node1). Để khắc phục điều này, chúng ta sẽ tiến hành tương tự như trên, nhưng ngược lại đối với 2 Node! Node1 sẽ đồng bộ dữ liệu trên Node2!
Mô hình Backup: Node1 -----> Node2
Mô hình đồng bộ trên 2 Node: Node1 <---------> Node2




Theo: khanh.com.vn





  Trả lời ngay kèm theo trích dẫn này
Gửi trả lời



Quyền Hạn Của Bạn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Hình Cảm xúc đang Mở
[IMG] đang Mở
Mã HTML đang Tắt




Bây giờ là 03:50 PM. Giờ GMT +7



Diễn đàn tin học QuantriNet
quantrinet.com | quantrimang.co.cc
Founded by Trương Văn Phương | Developed by QuantriNet's members.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.