Tuesday, March 25, 2014

Mirror website อย่างง่ายด้วย RSync

อธิบายหลักการทำงานเบื้องต้นจ้า (คร่าวจากอ้างอิงและความเข้าใจของผู้เขียน)
rsync คือ โปรแกรมไว้สำหรับ remote file backup and synchronization ตัวหนึ่งซึ่งนิยมใช้กันแพร่หลายบนระบบปฏิบัติการ UNIX, LINUX ลักษณะการทำงานคล้าย cp , scp แต่ที่เจ๋งกว่าคือ สนับสนุนการ backup แบบ incremental และแบบ full ตัวอย่างเช่น เราต้องการทำ duplicate file server1 ไปที่ server2 เมื่อมีการลบหรือเพิ่มไฟล์บน server1 เมื่อใช้ rsync ตัวโปรแกรมจำ จะการลบหรือเพิ่มไฟล์นั้นๆ บน server2 ไปด้วย หรือในกรณีที่ไฟล์เดิมบน server1 มีการแก้ไข เมื่อใช้ rsync ในการ backup มันก็จะแก้ไขไฟล์นั้นบน server2 ให้ด้วย ต่างกับ cp และ scp ที่เราต้องตรวจสอบเองว่า มีอะไรที่ต่างกันมั่ง หรือไฟล์ใหนมีการแก้ไขมั่งบน server1 และ server2 (ซึ่งมันก็เขียนสคริปตรวจสอบได้อยู่เหมือนกันแต่จะยุ่งยากไปไย)
ตัวอย่างที่ 1 master และ mirror = linux  debian 6 (squeeze) เหมือนกัน
master => linux = master.server.com, path = /var/www/
mirror => linux = mirror.server.com, path = /var/www/
  • ก่อนอื่นเลยเราต้องตรวจสอบก่อนว่ามี rsync บนเครื่อง master และ mirror หรือยังด้วยคำสั่ง (Linux ใหม่ๆ ส่วนมากจะติดตั้งแล้วเรียบร้อย)
$ dpkg --get-selections | grep rsync
  • ถ้า package ถูกติดตั้งแล้วจะแสดง output ประมาณเนี๋ย ซึ่ง Debain 6 เรามันมีมาตั้งแต่ตอนติดตั้งระบบแล้วหว่า
--->>> rsync.................install
  • ในกรณีเครื่อง master.server.com หรือ mirror.server.com ยังไม่มี package ให้เราติดตั้งและปรับแต่ง rsync ดังนี้
# aptitude install rsync หรือ # apt-get install rsync
# vi /etc/default/rsync

RSYNC_ENABLE=true
การใช้งานคำสั่งฝั่ง master.server.com (linux)
# rsync -avz -e ssh /var/www/ usermirror@mirror.server.com:/var/www/
  • a คือ คัดลอกไฟล์ที่มีการเปลี่ยนแปลง หรือ ไฟล์ที่มีการเพิ่มเข้ามาบน master เท่านั้น
  • v คือ increase verbosity แสดงรายละเอียดการเพิ่ม
  • z คือ compress file data during transfer
  • e คือ specify the remote shell to use

กรณีนี้รันคำสั่งที่ฝั่ง mirror.server.com (linux)
# rsync -avz -e ssh usermaster@master.server.com:/var/www/ /var/www/
-------------------------------------------------------------------------------------------------------

ตัวอย่างที่ 2 master เป็น linux  debian 6 (squeeze) และ mirror เป็น server 2003 r2
master = linux = master.server.com, Path = /home/user/public_html/
mirror = windows = mirror.server.com, Patch = D:\www\
  • ตรวจสอบ rsync ฝั่ง master ให้เรียบร้อยก่อนว่าติดตั้งหรือยัง ดังตัวอย่างที่ 1
การใช้งานคำสั่งฝั่ง master.server.com (linux)
  • ประยุกค์ตามตัวอย่างที่ 1 ก็จะได้ประมาณนี้
rsync -avz --delete --progress /home/user/public_html/ usermirror@mirror.server.com:/cygdrive/d/www/
กรณีนี้รันคำสั่งที่ฝั่ง mirror.server.com (windows)
  • windows มันไม่มี rsync client มาให้นิ เราจึงต้องติดตั้ง cwRsync client free edition (ไม่แน่ใจว่ามันฟรีมานานหรือยัง แต่ ณ ขณะเขียนมันยังมีฟรี และ แบบเสียเงินให้เลือกอยู่) เพื่อจะใช้คำสั่ง rsync ได้บน windows 
  • ติดตั้งเสร็จแล้วอย่าลืมตั้ง system path rsync ให้ระบบเห็นให้เรียบร้อย
  • คำสั่งในการใช้งานประมาณนี้
rsync -avz --delete --progress usermaster@master.server.com:/home/user/public_html/ /cygdrive/d/www/
  • --delete คือ ให้ลบไฟล์ฝั่ง mirror ในกรณี มันไม่มีบน master ประมาณข้อมูลเหมือนกันแป๊ะ
  • --progress คือ แสดงการประมวลผลบน console ให้เราเห็นด้วย
  • rsync จะคัดลอกไฟล์ทั้งหมดใน master ณ พาธ /home/user/public_html/ ที่ user มีสิทธิในการอ่านทั้งหมดมาที่ mirror ณ พาธ d:\www\ 
-------------------------------------------------------------------------------------------------------
กรณีตั้ง rsync by pass password authen ด้วย public key authen อ้างอิงจากตัวอย่างที่ 2
rsync -avz --delete --progress -e "ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -i d:/private_key/id_dsa" user@master.server.com:/home/user/public_html/ /cygdrive/d/www/

  • คำสั่งตัวอย่างนี้ อ้างอิงโดยที่ public key และ private key ถูกสร้าง บน linux debian 6
  • แต่เราสามารถสร้าง public และ private key บน windows ได้เหมือนกัน เช่น สร้างด้วย puttygen.exe เป็นต้น

Ref
  • https://www.itefix.no/i2/cwrsync
  • http://www.thaitux.info/book/export/html/94
  • http://spalinux.com/2012/12/copy-files-between-host-using-rsync

No comments:

Post a Comment

Popular Posts