1. 程式人生 > >rsync+crond企業實戰案例

rsync+crond企業實戰案例

type com -c awk 拉取 res 必須 sync 硬盤

【DB 數據同步,帶寬占滿,導致用戶無法上網
rsync scp ftp 限速功能。主要提一下rsync –bwlimit(限速)】
下面進入正題:

企業案例rsync+crond定時備份
某公司裏有一臺web服務器,裏面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性的定時備份。要求如下:
每天晚上00點整在web服務器A上打包備份網站程序目錄並通過rsync命令推送到服務器B上備份保留(備份思路可以是先在本地按日期打包,然後再利用rsync推到備份服務器上)

具體要求如下
1) web服務器A和備份服務器B的備份目錄必須都為/backup
2) web服務器站點目錄假定為(/var/www/html)

3) web服務器本地僅保留7天內的備份
4) 備份服務器上檢查備份結果是否正常,並將每天的備份結果發給管理員信箱。
5) 備份服務器上每周六的數據都保留,其他備份僅保留180天備份。

  1. 需要備份的文件或目錄有(原則上,只要是運維人員寫入或更改的數據,都需要備份):
    /var/spool/cron/root 、/etc/rc.local、/etc/sysconfig/iptables、/var/www/html、/app/logs
  2. 為了規範化,每臺服務器進行本地備份時都備份到/backup目錄下。
  3. 每臺web服務器進行本地備份時,都備份到/backup下以本機IP地址命名的目錄中。
  4. 打的tarball文件名中需要包含執行當天的日期
  5. 統一存儲備份數據的服務器通過rsync daemon方式提過存儲備份數據的目錄/backup
  6. 由於web服務器本地的存儲空間有限,需要將超過7天的備份數據刪除
  7. 為了方便的知道每次備份是否成功,我們需要如下操作:
    在每臺web服務器上檢查備份是否成功
    在存儲備份數據的服務器上檢查備份數據是否推送成功,並發送郵件至管理員郵箱
  8. 由於備份服務器空間有限,需要刪除超過180天的備份數據,但每周六的備份數據需要永久保留。

具體實施:

  1. 在rsync服務器上,配置rsync服務,實現推送。
    a. 安裝rsync服務,yum -y install rsync
    b. 添加rsync服務的用戶,管理本地目錄 useradd -s /sbin/nologin -M rsync id rsync
    c. 生成rsyncd.conf配置文件。具體配置項
    uid = rsync
    gid = rsync
    use chroot =no
    max connections=200
    timeout = 300
    pid file = /var/run/rsync.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore error
    read only = false
    list = false
    hosts allow =192.168.1.0/24
    hosts deny = 0.0.0.0/32
    auth users =rsync_backup
    secerts file =/etc/rsync.passwd
    [backup]
    comment =
    path = /backup
    d. 創建備份目錄,mkdir /backup ,並設置目錄屬主屬組 chown -R rsync:rsync /backup
    e. 創建虛擬用戶密碼文件 echo “rsync_backup:123456” >/etc/rsync.passwd
    設置文件權限 chmod 600 /etc/rsync.passwd
    f. 啟動rsync服務並檢查 rsync --daemon
    ps -elf | grep rsync | grep -v grep
    netstat -lnpt | grep rsync
  2. 在客戶端nfs服務器上,實現打包、推送、刪除,定時推送。
    a. 安裝rsync服務 yum -y install rsync
    b. 創建密碼文件 echo “123456” >/etc/rsync.passwd
    授予相應權限 chmod 600 /etc/rsync.passwd
    c. 推送 (測試)
    rsync -avz /tmp [email protected]::backup –password-file=/etc/rsync.passwd
    d. 拉取 (測試)
    rsync -avz rsync[email protected]::backup /tmp --password-file=/etc/rsync.passwd
    e. 創建shell腳本實現打包,推送,刪除
    vim /server/scripts/bak.sh
    #!/bin/bash
    IP=$(ifconfig eth1 | awk -F “[ :]+” ‘NR==2 {print $4}’ 【過濾web服務器ip地址】
    Path=/backup
    if [ $(date +%w) -eq 0 ]
    then
    Time=”week
    $(date +%F%w -d “-1day”)”
    else
    Time=$(date +%F -d “-1day”)
    fi
    mkdir -Path/$IP/ -p
    cd / &&\
    tar zcfh $Path/$IP/backup
    $Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
    md5sum $Path/$IP/backup$Time.tat.gz >$Path/$IP/flag$Time.log &&\
    rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.passwd &&\
    find /backup/ -type f -mtime +7 ! -name “week_6” |xargs rm -f 【查找/backup目錄下七天前的不包含周六的文件並刪除】
    f. 將上述腳本放入crond中每天24點執行
    echo “00 00
    /bin/sh /server/scripts/bak.sh >/dev/null 2>&1” >/var/spool/crond/root
    crontab -l 【查看】
  3. 在rsync備份服務器上做檢查,發郵件給管理員。
    配置腳本 vim /server/scripts/bak.sh
    #!/bin/bash
    Path=/backup
    if [ $(date +%w) -eq 0 ]
    then
    Time=”week$(date +%F%w -d “-1day”)”
    else
    Time=$(date +%F -d “-1day”)
    fi
    LANG=en
    find $Path -type f -name ”${Time}.log|xargs md5sum -c >> $Path/${Time}_result.log 2>&1
    【找出當天推送的文件並校驗它的md5值,判斷文件是否有問題】
    mail -s “$Time bak result” [email protected]<$Path/${Time}_result.log
    find $Path -type f -mtime +180 ! -name “week_6*” |xargs rm -f
    【找出備份目錄下180天前,不包含周六的文件並刪除】

將腳本放入crontab中定時執行
echo “00 05 */bin/sh /server/scripts/bak.sh >/dev/null 2>&1” >>/var/spool/crond/root
crond -l 【查看】

發送郵件補充:發送 smtp 25
接受 pop3 110

配置mail使用外部SMTP發郵件

a. 通過修改配置文件可以使用外部SMTP服務器,可以達到不使用sendmail/posfix等內部郵件服務而用外部的smtp服務器發送郵件。
修改/etc/mail.rc最後一行加入
set [email protected] smtp=smtp.163.com smtp-auth-user=zhangsan
smtp-auth-password=123456 smtp-auth=login
【from是發送的郵件地址
smtp 是發生的外部smtp服務器的地址
smtp-auth-user是外部smtp服務器認證的用戶名
smtp-auth-password是外部smtp服務器認證的密碼
b. 模擬檢查備份文件 執行備份服務器的腳本,查看郵件能否發送。
先在客戶端模擬推送從4月25到30號的數據到備份服務器
seq 25 30|awk ‘{print “date -s 201804”$0“&&/bin/sh /server/scripts/bak.sh”}‘|bash
再在備份服務器執行腳本 sh /server/scritps/check_and_del.sh
mailq 查看郵件隊列 最後在配置的郵箱[email protected]中查看郵件是否發送。

rsync+crond企業實戰案例