เอามาจาก ThaiLinuxCafe: ทำ mirror ด้วย rsync อย่างง่าย
ต้องการ syncronize ไดเรคทอรี่ /var/www ของเครื่อง server1.example.com
มายังไดเรคทอรี่ /var/www ของเครื่อง mirror.example.com
ซึ่งมีข้อดีกว่าการคัดลอกธรรมดาด้วย cp หรือ scp ตรงที่
ถ้าเราลบไฟล์ใน server1 ไฟล์ใน mirror จะถูกลบตามไปด้วย
ทำให้ทั้งสองเครื่องมีความสดใหม่เหมือนกัน
# aptitude install rsync
# vi /etc/default/rsync
RSYNC_ENABLE=true
# dpkg-reconfigure rsync
server1:# useradd -m -s /bin/bash someuser
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
ต่อไปเป็นการทำให้ rsync ไม่ต้องถามรหัสผ่าน โดยการใช้ public key
mirror:# ssh-keygen -t dsa -b 1024
Enter file in which to save the key (/root/.ssh/id_dsa): <<<--- [Enter]
Enter passphrase (empty for no passphrase): <<<---[Enter]
Enter same passphrase again: <<<---[Enter]
คัดลอก key ไปยัง server1
mirror:# scp ~/.ssh/id_dsa.pub someuser@server1.example.com:/home/someuser/
Password: <<<--- ใส่ค่ารหัสผ่านของ someuser ( บน server1 )
ssh ไปยัง server1
mirror:# ssh server1.example.com -l someuser
Are you sure you want to continue connecting (yes/no)? <<<--- yes
Password: <<<--- ใส่ค่ารหัสผ่านของ someuser
ทำให้ key ที่สร้างไว้ ถูกใช้จาก rsync
someuser@server1:~$ mkdir ~/.ssh
someuser@server1:~$ chmod 700 ~/.ssh
someuser@server1:~$ mv id_dsa.pub ~/.ssh
someuser@server1:~$ cd ~/.ssh
someuser@server1:~/.ssh$ touch authorized_keys
someuser@server1:~/.ssh$ chmod 600 authorized_keys
someuser@server1:~/.ssh$ cat id_dsa.pub >> authorized_keys
someuser@server1:~/.ssh$ exit
ลบ known_hosts เก่าทิ้งก่อน
mirror:# rm .ssh/known_hosts
ทดสอบครั้งแรก
mirror:# rsync -avz --delete -e "ssh -i /root/.ssh/id_dsa" \
someuser@server1.example.com:/var/www/ /var/www/
Are you sure you want to continue connecting (yes/no)? <<<--- yes
เรียบร้อย ครั้งต่อไปเขาจะไม่ถามอีกแล้ว
เวลาจะใช้งาน ก็ใช้คำสั่งเดิม
mirror:# rsync -avz --delete -e "ssh -i /root/.ssh/id_dsa" \
someuser@server1.example.com:/var/www/ /var/www/
หรือ ถ้าใช้ชื่อเหมือนกัน ในที่นี้ someuser เป็น root เหมือนกันทั้งสองฝั่ง ย่อได้เป็น
mirror:# rsync -avz --delete --rsh=ssh root@server1.example.com:/var/www/ /var/www/
จบแล้วครับ
ต่อไปเป็นการให้ทำงานอัตโนมัติผ่าน cron
# crontab -e
... 0 0 * * * /usr/bin/rsync -azq --delete -e "ssh -i /root/.ssh/id_dsa" someuser@server1.example.com:/var/www/ /var/www/ ...
( พิมพ์ต่อกันเป็นบรรทัดเดียวกันนะครับ - ให้ทำการ sync ตอนเที่ยงคืน ทุกวัน )
จบแล้วครับ