วันนี้น้องตั้ม แห่ง http://www.ohozaa.com มาคุยเรื่อง Backup Server
ที่มีจำนวน file ประมาณ 150GB ว่าจะใช้วิธีไหนดี เท่าที่ผมใช้ และคิดว่าเหมาะสม
ที่สุด ก็คือ rsync เพราะมีความรวดเร็ว และไม่ต้องเอา file เก่า ๆ มาทั้งหมด เอาแต่
file ที่มีการเปลี่ยนแปลงมา ดังนั้น ยิ่งเรา sync กันบ่อยเท่าไร file ครั้งต่อไป ก็ยิ่ง
จะมีข้อมูลที่ต้อง sync น้อยลง และใช้เวลาน้อยลง แต่เวลาที่เหมาะสม ก็คือเวลา
ที่ server ทำงานเบาที่สุด มี idle มากที่สุด วันละครั้งก็เพียงพอ ..
ผมเคยเขียนบทความเรื่อง rsync ไว้ครั้งหนึ่งแล้ว แต่เขียนเป็น English เพื่อที่จะได้
ให้คนอื่น ๆ ทั่วโลก อ่านได้เข้าใจ เวลา search จะได้เจอ ข้อมูลที่ต้องการ แต่วันนี้
จะขอเขียนแบบ version ไทย ๆ อ่านง่าย ๆ เป็น step ที่เข้าใจง่าย ๆ ไปประยุกต์ใช้
กับงานของตัวเองกันให้เหมาะสม อย่าลืมนะครับ การ backup เป็นสิ่งที่ละเลยไม่ได้ ..
ในที่นี้ผมจะขอยกตัวอย่า่งการทำ rsync กันระหว่างเครื่องที่เป็น FreeBSD และ Debian
นะครับ สามารถไปประยุกต์ใช้ ระหว่าง OS Unix ตัวอื่นได้เหมือนกัน .. เริ่มกันเลยครับ
ฝั่ง Server
Step 1: Install rsync
freebsd-1# cd /usr/ports/net/rsync
freebsd-1# make install clean
Step 2: Config rsyncd.conf
freebsd-1# vi /usr/local/etc/rsyncd.conf
ใส่ข้อมูลไปดังนี้ครับ
[www]
comment = web server backup
path = /home/ton # ตรงนี้เป็น path ของ server ที่เราต้องการ backup
auth users = ton # user ที่ใช้ในการ Authen
uid = ton
gid = ton
secrets file = /usr/local/etc/rsyncd.secrets # ที่เก็บ file สำหรับเก็บ user-passwd
read only = no
Step 3: Create rsyncd.secrets
freebsd-1# vi /usr/local/etc/rsyncd.secrets
ใส่
ton:123456
freebsd-1# chmod 600 /usr/local/etc/rsyncd.secrets
Step 4: Edit rc.conf
freebsd-1# vi /etc/rc.conf
ใส่
rsyncd_enable=”YES”
Step 5: Start Rsync daemon
freebsd-1# /usr/local/etc/rc.d/rsyncd start
Step 6: Rsync daemon ลองดูว่ามี daemon ประมาณนี้หรือยัง
freebsd-1# sockstat | grep rsync
root rsync 60398 3 dgram -> /var/run/logpriv
root rsync 60398 4 tcp6 *:873 *:*
root rsync 60398 5 tcp4 *:873 *:*
ถ้ามีก็เป็นอันเรียบร้อยแล้วครับสำหรับฝั่ง Server ของเรา
ฝั่ง Client
Step 1: Install rsync
debian-client# apt-get install rsync
Step 2: Test rsync
debian-client# rsync -avz -e ssh ton@server1.example.com:/home/ton/ /home/ton/
Step 3: Create The Keys On mirror.example.com
debian-client# mkdir /root/rsync
debian-client# ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
<– Enter
Enter same passphrase again:
Your identification has been saved in /root/rsync/mirror-rsync-key.
Your public key has been saved in /root/rsync/mirror-rsync-key.pub.
The key fingerprint is:
6c:34:c9:29:cf:16:a3:c8:72:c0:28:b3:c6:61:75:a2 root@www
<– Enter
Step 4: Copy our public key to server1.example.com:
debian-client# scp /root/rsync/mirror-rsync-key.pub ton@server1.example.com:/home/ton/
กลับมาดูที่ฝั่ง Server อีกครั้งครับ
Step 7: Create authorized_keys
(Login as ton!)
freebsd-1# mkdir ~/.ssh
freebsd-1# chmod 700 ~/.ssh
freebsd-1# mv ~/mirror-rsync-key.pub ~/.ssh/
freebsd-1# cd ~/.ssh
freebsd-1# touch authorized_keys
freebsd-1# chmod 600 authorized_keys
freebsd-1# cat mirror-rsync-key.pub >> authorized_keys
Step 8: Connect from mirror.example.com only
(Still as ton!)
freebsd-1# vi /home/someuser/.ssh/authorized_keys
ใส่ เข้าไปก่อนข้อความใน file เดิม
command=”/home/ton/rsync/checkrsync”,from=”mirror.example.com”,no-port-forwardin
g,no-X11-forwarding,no-pty
ตอนนี้ก็เป็นอันเสร็จแล้วครับสำหรับฝั่ง Server เราจะสามารถใช้ rsync ผ่าน sshd ได้
โดยไม่ต้องใส่ user – password ทำให้สะดวกขึ้นเวลาทำ auto backup
มาดูที่ฝั่ง Client กันอีกครั้งครับ
Step 5: Test rsync
debian-client# rsync -avz –delete -e “ssh -i /root/rsync/mirror-rsync-key”
ton@server1.example.com:/home/ton/ /home/ton/
Step 6: Create crond job
debian-client# crontab -e
ใส่
*/5 * * * * /usr/bin/rsync -azq –delete -e “ssh -i /root/rsync/mirror-rsync-key”
ton@server1.example.com:/home/ton/ /home/ton/
ก็เสร็จแล้วครับสำหรับการทำ rsync ระหว่าง FreeBSD กับ debian