ทำ 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/rsyncRSYNC_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
ทำให้ rsync ไม่ต้องถามรหัสผ่าน
ต่อไปเป็นการทำให้ rsync ไม่ต้องถามรหัสผ่าน โดยการใช้ public key
- ทำที่ mirror.example.com
- สร้าง 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/
จบแล้วครับ
(ตรงนี้ถ้าเขียนเป็น Book ได้ ผมว่าจะดูสวยงามกว่าทำเป็นคอมเมนต์น่ะครับ)
(update: แก้ dsa เป็น 1024บิต - แก้แล้ว)
rsync อัตโนมัติผ่าน cron
ต่อไปเป็นการให้ rsync ทำงานอัตโนมัติผ่าน cron
- ทำที่เครื่อง mirror.example.com
- แก้ไข crontab
# 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 ตอนเที่ยงคืน ทุกวัน )
จบแล้วครับ









Recent comments
3 days 11 hours ago
4 days 3 hours ago
1 week 6 days ago
3 weeks 22 hours ago
4 weeks 6 hours ago
4 weeks 1 day ago
4 weeks 2 days ago
4 weeks 2 days ago
4 weeks 3 days ago
4 weeks 5 days ago