ทำ Mirror ด้วย rsync แบบง่าย

เอามาจาก ThaiLinuxCafe: ทำ mirror ด้วย rsync อย่างง่าย

ต้องการ syncronize ไดเรกทอรี /var/www ของเครื่อง server1.example.com มายังไดเรกทอรี /var/www ของเครื่อง mirror.example.com ซึ่งมีข้อดีกว่าการคัดลอกธรรมดาด้วย cp หรือ scp ตรงที่ ถ้าเราลบไฟล์ใน server1 ไฟล์ใน mirror จะถูกลบตามไปด้วย ทำให้ทั้งสองเครื่องมีความสดใหม่เหมือนกัน

ทำที่ทั้งสองเครื่อง server1.example.com และ mirror.example.com
ติดตั้งและปรับแต่ง rsync
# aptitude install rsync
# vi /etc/default/rsync
RSYNC_ENABLE=true
# dpkg-reconfigure rsync
ทำที่เครื่อง server1.example.com
เพิ่มผู้ใช้ชื่อ someuser
server1:# useradd -m -s /bin/bash someuser

( -m คือให้คัดลอกรูปแบบจากไดเรคทอรี่ /etc/skel/
-s คือให้ใช้เชลล์คือ /bin/bash )

ทำที่เครื่อง mirror.example.com
ทำการคัดลอก
mirror:# rsync -avz -e ssh someuser@server1.example.com:/var/www/ /var/www/
<<<--- ใส่ค่า password ของ someuser

rsync จะคัดลอกไฟล์ทั้งหมดใน /var/www ที่ someuser มีสิทธิในการอ่านทั้งหมดมาที่ /var/www ของเครื่อง mirror

หมายเหตุ

ตรวจสอบเนื้อที่การใช้ไฟล์ด้วยคำสั่ง

# cd /var/www
# du -c | grep total

ทดสอบกับ debian etch

Comments

คิดว่าการกำหนด RSYNC_ENABLE=true อาจไม่จำเป็นครับ ถ้าเราไม่ได้ต้องการรับ rsync ผ่านทางอื่นที่ไม่ใช่ ssh (เช่น anonymous rsync)

แล้วก็ rsync รุ่นใหม่ ๆ จะใช้ ssh โดยปริยายอยู่แล้ว จะใส่ -e ssh หรือไม่ก็ได้

ก็เลยอาจจะเหลือแค่นี้:

  1. add user รอไว้
  2. ติดตั้ง rsync ที่ทั้งสองเครื่อง
    # aptitude install rsync
    
  3. sync
    mirror:# rsync -avz someuser@server1.example.com:/var/www/ /var/www/
    

ขอบคุณครับ :)

สงสัยจะมีบั๊กเกี่ยวกับโมดูลหรือธีมนะครับ ทำให้แท็ก <strong> ปิดไม่หมด

โพสต์นี้ผมเลยปิดแท็กให้ครับ ถ้าแก้แล้วฝากลบให้ด้วยครับ

อยากตั้งให้มัน sync แบบไม่ถาม password อ่ะครับ ต้องทำยังไงบ้างครับ ?

อยากตั้งให้มัน sync แบบไม่ถาม password อ่ะครับ ต้องทำยังไงบ้างครับ ?

ใช้ความสามารถจาก ssh ครับ ดูเรื่อง ssh แบบไม่ต้องถามรหัสผ่าน
สรุปคำสั่งที่ใช้ที่เครื่องลูกข่าย (ใช้ครั้งแรกครั้งเดียว) คือ

$ ssh-keygen -t dsa
$ ssh-copy-id -i ~/.ssh/id_dsa.pub root@server1
$ ssh root@server1

พอส่วน ssh เรียบร้อยแล้ว ครั้งต่อไป ไม่ว่าเราจะใช้คำสั่ง ssh หรือ rsync เขาจะไม่ถามรหัสผ่านอีกแล้วครับ

ตัวอย่างคำสั่ง rsync
สมมุติจะ sync ไฟล์จาก server1:/SOURCE มายังเครื่องเราที่ /DESTINATION โดยใช้โหมด archive (-a คือถ้าไฟล์ไม่เปลี่ยนแปลงจะไม่คัดลอกซ้ำ) quiet (-q ไม่แจ้งผล) และลบไฟล์ที่ปลายทางด้วยถ้าไฟล์ต้นทางถูกลบไปแล้ว (--delete) คำสั่งคือ

$ rsync -aq --delete -e ssh root@server1:/SOURCE /DESTINATION
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้