intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Đồng bộ dữ liệu với mô hình dropbox

Chia sẻ: Abcdef_43 Abcdef_43 | Ngày: | Loại File: PDF | Số trang:16

102
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Dropbox là dịch vụ chia sẻ file trực tuyến, cho phép người dùng lưu trữ và chia sẻ dữ liệu với dung lượng miễn phí 2GB. Điểm đặc biệt của dropbox là khả năng đồng bộ dữ liệu thời gian thực, theo đó, ta chỉ định một directory cụ thể trên máy tính kết nối với dropbox client, dữ liệu sẽ được đồng bộ hóa lên dropbox server bất cứ khi nào có kết nối Internet. Bài viết này hướng dẫn bạn xây dựng một mô hình server – client tương tự dropbox, với sự kết hợp của rsync...

Chủ đề:
Lưu

Nội dung Text: Đồng bộ dữ liệu với mô hình dropbox

  1. Đồng bộ dữ liệu với mô hình dropbox Dropbox là dịch vụ chia sẻ file trực tuyến, cho phép ng ười dùng lưu trữ và chia sẻ dữ liệu với dung l ượng miễn phí 2GB. Điểm đặc biệt của dropbox l à khả năng đồng bộ dữ liệu thời gian thực, theo đó, ta chỉ định một directory cụ thể trên máy tính kết nối với dropbox client, dữ liệu sẽ đ ược đồng bộ hóa lên dropbox server bất cứ khi nào có kết nối Internet. Bài viết này hướng dẫn bạn xây dựng một mô hình server – client tương t ự dropbox, với sự kết hợp của rsync server và rsync client (lsyncd). Rsync: là một application được viết dành cho các hệ điều hành Unix và Unix likes, cho phép đồng bộ hóa dữ liệu từ một directory này sang một directory khác, hoặc giữa dữ liệu ở máy tính trạm sang một máy tính khác trong một network, hay internet với nhiều options khác nhau. (Wikipedia) Ở chế độ daemon mode, rsync lắng nghe trên port 873, chờ đợi kết nối từ rsync client thông qua remote shell như ssh hay rsh Bài viết này dựa vào daemon mode của rsync để thiết lập một rsync server. Lsyncd sử dụng rsync để đồng bộ hóa một hoặc nhiều directory với máy chủ rsync. Lsyncd có thể đồng bộ hóa dữ liệu theo thời gian thực thông qua m ột subsystem process của Unix là inotify. Inotify có ch ứ năng giám sát sự thay đổi
  2. của dữ liệu: tăng giảm dung l ượng, sửa xóa...Khi dữ liệu có bất cứ sự thay đổi nào, lsyncd sẽ dựa vào inotify event để đồng bộ hóa dữ liệu với rsync server. (Lsyncd homepage) Mục tiêu của bài viết là cung cấp một giải pháp back up trong suốt với ng ười dùng cuối, đối với những dạng dữ liệu vừa phải (không quá lớn). Sử dụng rsync là m ột cách để giảm thiểu tối đa dữ liệu truyền qua network d ùng để back up. Ta chỉ đồng bộ những thay đổi. Với cách này, ta cũng có thể backup cơ sở dữ liệu, dữ liệu của một web server đến một máy chủ ở xa, cung cấp khả năng mirroring, backup một cách kịp thời nhất. Cài đặt: Cài đặt: Rsync Server: Rsync có sẵn trên hầu hết các hệ điều hành Linux, mặc định rsync là một công cụ như ssh hoặc scp. Để cài đặt rsync server cần làm các bước sau. Distro mà
  3. tôi sử dụng là Debian Lenny, các bước cài đặt hầu như tương tự trên bất kì distro Linux nào khác: Tạo user: debian:~# adduser hungnv Sao chép file cấu hình mẫu của rsync vào thư mục /etc/ debian:~# cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/ Sửa file cấu hình để tạo shared module debian:~# cat /etc/xinetd.d/rsync service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } Các option ở trên hầu như là mặc định, trừ uid, gid và read only option. Vì ta
  4. chỉ muốn user có username hungnv đ ược phép đồng bộ file ở /home/hungnv/sync nên sử dụng gid và gid này. Tôi sử dụng xinetd (superserver) để quản lí rsync daemon. Sở dĩ xinetd đ ược gọi là superserver vì xinetd có thể hoạt động như một daemon lắng nghe trên tất cả các port của các dịch vụ liệt k ê trong cấu hình của xinetd. Cài đặt xinetd: debian:~# aptitude install xinetd Tao và sửa chữ nội dung file rsync ở /etc/xinetd.d/rsync debian:~# cat /etc/xinetd.d/rsync service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
  5. Restart xinetd: debian:~# /etc/init.d/xinetd restart Stopping internet superserver: xinetd. Starting internet superserver: xinetd. Kiểm tra sự hoạt động của rsync: debian:~# netstat -ntl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN Kiểm tra module được share: debian:~# rsync localhost:: hungnv hungnv's private stuff Chuyển sang client: Cài đặt lsyncd, trong bài viết này tôi sử dụng gentoo, ở các distro khác bạn
  6. download source code c ủa lsyncd tại link cung cấp trong bài viết. g3n2 ~ # echo "=app-admin/lsyncd-1.26" >> /etc/portage/package.keywords g3n2 ~ # emerge -av lsyncd Cấu hình: Do quá dài và chứa nhiều kí tự đặc biệt, nên bạn có thể xem ở đây http://osvn.pastebin.com/W6f3fQk1 Chú ý phần tag directory Phần source: là đường dẫn đến directory mà bạn muốn đồng bộ với server Phần target: l à địa chỉ server và module đã tạo ra trước đó. Ở Server và client: setup authentication sử dụng public key: Client: gen key và copy key lên server: hungnv@g3n2 ~ $ ssh-keygen -t rsa -b 1024 hungnv@g3n2 ~ $ cat .ssh/id_dsa.pub |ssh 192.168.1.11 "cat - >> ~/.ssh/authorized_keys" hungnv@g3n2 ~ $ ssh 192.168.1.11 chmod 700 ~/.ssh hungnv@g3n2 ~ $ ssh 192.168.1.11 chmod 600 ~/.ssh/authorized_keys
  7. Kiểm tra bằng cách ssh 192.168.1.11 mà không bị hỏi password login, ta có thể tiếp tục bước cuối cùng. Kiểm tra kết nối đến lsync server: hungnv@g3n2 ~ $ rsync 192.168.1.11:: hungnv hungnv's private stuff Kiểm tra cấu hình lsyncd: hungnv@g3n2 ~ $ lsyncd –conf /etc/lsyncd.conf.xml –debug nếu có lỗi gì xảy ra, ta trở về sửa chữa file /etc/lsync.conf.xml, kiểm tra directory và quyền trên server. Khởi động lsycd: hungnv@g3n2 ~ $ sudo lsyncd Xem quá trình đồng bộ xảy ra view plaincopy to clipboardprint?
  8. 1. Sat Mar 27 22:53:18 2010: Starting up 2. Sat Mar 27 22:53:18 2010: watching /mnt/data/sync 3. Sat Mar 27 22:53:18 2010: found new directory: Terpinus in /mnt/data/s ync -- added on tosync stack. 4. Sat Mar 27 22:53:18 2010: found new directory: pydiction- 1.2 in vimdict -- added on tosync stack. 5. Sat Mar 27 22:53:18 2010: found new directory: vimdict in /mnt/data/sy nc -- added on tosync stack. 6. Sat Mar 27 22:53:18 2010: found new directory: squid in ftp-conf -- added on tosync stack. 7. Sat Mar 27 22:53:18 2010: found new directory: namespace in alchemist -- added on tosync stack. 8. Sat Mar 27 22:53:18 2010: found new directory: switchboard in alchemis t -- added on tosync stack. 9. Sat Mar 27 22:53:18 2010: found new directory: alchemist in ftp-conf -- added on tosync stack. 10. Sat Mar 27 22:53:18 2010: found new directory: templates in jabbe rd -- added on tosync stack. 11. Sat Mar 27 22:53:18 2010: found new directory: jabberd in ftp- conf -- added on tosync stack.
  9. 12. Sat Mar 27 22:53:18 2010: found new directory: policy in targeted -- added on tosync stack. 13. Sat Mar 27 22:53:18 2010: found new directory: files in contexts -- added on tosync stack. 14. Sat Mar 27 22:53:18 2010: found new directory: users in contexts - - added on tosync stack. 15. Sat Mar 27 22:53:18 2010: found new directory: contexts in target ed -- added on tosync stack. 16. Sat Mar 27 22:53:18 2010: found new directory: modules in previo us -- added on tosync stack. 17. Sat Mar 27 22:53:18 2010: found new directory: previous in modul es -- added on tosync stack. 18. Sat Mar 27 22:53:18 2010: found new directory: modules in active -- added on tosync stack. 19. Sat Mar 27 22:53:18 2010: found new directory: active in modules -- added on tosync stack. Sat Mar 27 22:53:18 2010: Starting up Sat Mar 27 22:53:18 2010: watching /mnt/data/sync Sat Mar 27 22:53:18 2010: found new directory: Terpinus in /mnt/data/sync -- added on tosync stack.
  10. Sat Mar 27 22:53:18 2010: found new directory: pydiction -1.2 in vimdict -- added on tosync stack. Sat Mar 27 22:53:18 2010: foun d new directory: vimdict in /mnt/data/sync -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: squid in ftp-conf -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: namespace in alchemist -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: switchboard in alchemist -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: alchemist in ftp -conf -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: templates in jab berd -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: jabberd in ftp -conf -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: policy in targeted -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: files in contexts -- added on tosync stack.
  11. Sat Mar 27 22:53:18 2010: found new directory: users in contexts -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: contexts in targeted -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: modules in previous -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: previous in modules -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: modules in active -- added on tosync stack. Sat Mar 27 22:53:18 2010: found new directory: active in modules -- added on tosync stack. Đến đây hoàn tất. Tôi có viết một init script để start lsyncd nh ư một service của hệ thống, hữu ích nếu bạn muốn start lsyncd lúc khởi động view plaincopy to clipboardprint? 1. #!/bin/sh 2. # Start/stop the lsyncd daemon.
  12. 3. # 4. ### BEGIN INIT INFO 5. #hungnv[at]opensource[dot]com[dot]vn 6. 7. #License: GPL Version 2 8. #http://opensource.com.vn 9. test -f /usr/bin/lsyncd || exit 0 10. 11. . /lib/lsb/init -functions 12. 13. case "$1" in 14. start) log_daemon_msg "Starting periodic command scheduler" "l syncd" 15. start-stop-daemon --start --quiet --pidfile /var/run/lsyncd.pid - -name lsyncd --startas /usr/bin/lsyncd 16. log_end_msg $? 17. ;; 18. stop) log_daemon_msg "Stopping periodic command scheduler" "lsyncd"
  13. 19. start-stop-daemon --stop --quiet --pidfile /var/run/lsynd.pid -- name lsyncd 20. log_end_msg $? 21. ;; 22. restart) log_daemon_msg "Restarting periodic command scheduler " "lsyncd" 23. start-stop-daemon --stop --retry 5 --quiet -- pidfile /var/run/lsyncd.pid --name lsyncd 24. start-stop-daemon --start --quiet --pidfile /var/run/lsyncd.pid - -name lsyncd --startas /usr/bin/lsyncd 25. ;; 26. reload|force- reload) log_daemon_msg "Reloading configuration files for periodic co mmand scheduler" "lsyncd" 27. # lsyncd reloads automatically 28. log_end_msg 0 29. ;; 30. *) log_action_msg "Usage: /etc/init.d/lsyncd {start|stop|restart|r eload|force-reload}" 31. exit 2
  14. 32. ;; 33. esac 34. exit 0 #!/bin/sh # Start/stop the lsyncd dae mon. # ### BEGIN INIT INFO #hungnv[at]opensource[dot]com[dot]vn #License: GPL Version 2 #http://opensource.com.vn test -f /usr/bin/lsyncd || exit 0 . /lib/lsb/init -functions case "$1" in start) log_daemon_msg "Starting periodic command scheduler" "lsyn cd" start-stop-daemon --start --quiet --pidfile /var/run/lsyncd.pid --name lsyncd --startas /usr/bin/lsyncd log_end_msg $?
  15. ;; stop) log_daemon_msg "Stopping periodic command scheduler" "lsyncd" start-stop-daemon --stop --quiet --pidfile /var/run/lsynd.pid --name lsyncd log_end_msg $? ;; restart) log_daemon_msg "Restarting periodic command scheduler" "lsyncd" start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/lsyncd.pid -- name lsyncd start-stop-daemon --start --quiet --pidfile /var/run/lsyncd.pid --name lsyncd --startas /usr/bin/lsyncd ;; reload|force-reload) log_daemon_msg "Reloading configuration files for periodic command scheduler" "lsyncd" # lsyncd reloads auto matically log_end_msg 0 ;; *) log_action_msg "Usage: /etc/init.d/lsyncd {start|stop|restart|reload|force - reload}" exit 2 ;;
  16. esac exit 0 Khi quá trình syncing hoàn t ất, lsyncd sẽ chuyển sang trạng thái theo d õi (monitoring), bất cứ khi nào có sự thay đổi, lsyncd sẽ cập nhật sự thay đổi gần như tức thì. Nếu lượng dữ liệu muốn backup lớn, thì công cụ trong bài viết này không phải là công cụ mà bạn cần, có nhiều giải pháp đáp ứng nhu cầu này tốt hơn. Nên chia thời gian back up dữ liệu (lần đầu) giữa các máy client để tránh t ình trạng nghẽn mạng xảy ra. Lsync có thể hoạt động, sau đó dừng nếu có vấn đề về network, nh ưng có thể hoạt động bình thường ngay sau khi mạng hoạt động trở lại. Cách cài đặt và triển khai trong bài viết này có thể dài dòng và phức tạp, mục đích để người đọc nắm rõ cách hoạt động của các công cụ trên. Chúng ta hoàn toàn có thể chủ động tạo ra script tự động hóa quá trình cài đặt này
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2