轉自html
天天晚上12點整備份全網全部機器的系統配置文件和web服務器上的程序文件至備份服務器上
1)全部服務器的備份目錄必須都爲/backup。 2)要備份的系統配置文件包括但不限於: a.定時任務服務的配置文件(/var/spool/cron/root)(適合web和nfs服務器)。 b.開機自啓動的配置文件(/etc/rc.local)(適合web和nfs服務器)。 c.平常腳本的目錄 (/server/scripts)(適合web和nfs服務器)。 d.防火牆iptables的配置文件(/etc/sysconfig/iptables)(適合web和nfs服務器) e.其它一些須要備份的目錄 3)Web服務器站點目錄假定爲(/var/html/www)。 4)Web服務器A訪問日誌路徑假定爲(/app/logs) 5)Web服務器保留打包後的7天的備份數據便可(本地留存不能多於7天,由於太多硬盤會滿) 6)備份服務器上,保留每週一的全部數據副本,其它要保留6個月的數據副本。 7)備份服務器上要按照備份數據服務器的內網IP爲目錄保存備份,備份的文件按照時間名字保存。 8)須要確保備份的數據儘可能完整正確,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果信息發給系統管理員郵箱中
管理服務器 IP:192.168.81.161 主機名:m01 centos7 存儲服務器 IP:192.168.81.162 主機名:nfs01 centos7 WEB服務器 IP:192.168.81.163 主機名:nfs01 centos7 備份服務器 IP:192.168.81.165 主機名:nfs01 centos7
#前期準備 [root@m01:/etc/ansible]# tree . ├── rsync_client │ ├── backup_sys.sh │ ├── backup_web.sh │ └── rsync.password └── rsync_server ├── backup_server.sh ├── rsyncd.conf └── rsync.password #角色目錄規劃 [root@m01:/etc/ansible/roles]# tree . ├── rsync │ ├── files │ ├── handlers │ ├── tasks │ ├── templates │ └── vars ├── rsync_client │ ├── files │ ├── handlers │ ├── tasks │ ├── templates │ └── vars └── rsync_server ├── files ├── handlers ├── tasks ├── templates └── vars
[root@m01: ~]# vim /etc/ansible/rsync_server/rsyncd.conf uid = rsync gid = rsync port = 873 fake super = yes use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 192.168.81.0/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password [backup] comment = "backup dir by michaleni" path = /backup/
[root@m01:/etc/ansible/rsync_server]# echo "rsync_backup:123456" >rsync.password [root@m01:/etc/ansible/rsync_server]# chmod 600 rsync.password
[root@m01:/etc/ansible/rsync_server]# vim backup_server.sh #!/bin/bash # #rsync_server script #write by michaelni 2018-06-06 # del 180 day ago data find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null # check backup data find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt # send check mail mail -s "check backup info for $(date +%F -d -"1day") data" 906288036@qq.com </tmp/check.txt ## 4.2 rsync客戶端準備工做 ## 4.21 準備客戶端密碼認證文件 ```bash [root@m01:/etc/ansible/rsync_client]# echo "123456" >rsync.password [root@m01:/etc/ansible/rsync_client]# chmod 600 rsync.password
1)用來備份系統文件的腳本web
[root@m01: ~]# vim /etc/ansible/rsync_client/backup_sys.sh #!/bin/bash # #backup_sys script #write by michaelni 2018-06-06 Backup_dir="/backup" IP_info=$(hostname -I) ## hostname -I查看內網網址,此處也能夠使用awk進行過濾,也能夠寫成IP_info=`hostname -I` # creat backup dir mkdir -p $Backup_dir/$IP_info # tar backup data cd / tar zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -"1day").tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables #del 7 day ago data find $Backup_dir -type f -name +7|xargs rm 2>/dev/null ##有可能會出現不存在七天以前的文件,此時刪除會報錯,因此將報錯重定向爲空 #creat finger file find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/finger.txt ##查找一天內的文件排除指紋文件(不對指紋文件進行校驗)生成MD5校驗值並重定向到校驗值文件中 #backup push data info rsync -az $Backup_dir/ rsync_backup@192.168.81.165::backup --password-file=/etc/rsync.password
2)用來備份服務應用數據的腳本shell
[root@m01: ~]# vim /etc/ansible/rsync_client/backup_web.sh #!/bin/bash # #bacup_web_data script #write by michaelni 2018-06-06 Backup_dir="/backup" IP_info=$(hostname -I) # creat backup dir mkdir -p $Backup_dir/$IP_info # tar backup data cd / tar zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -"1day").tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables tar zchf $Backup_dir/$IP_info/www_backup_$(date +%F_week%w -d -"1day").tar.gz ./var/html/www tar zchf /$Backup_dir/$IP_info/www_log_backup_$(date +%F_week%w -d -"1day").tar.gz ./app/logs #del 7 day ago data find $Backup_dir -type f -name +7|xargs rm 2>/dev/null #creat finger file find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/finger.txt #backup push data info rsync -az $Backup_dir/ rsync_backup@192.168.81.165::backup --password-file=/etc/rsync.password
[rsync_server] 192.168.81.165 [rsync_client] 192.168.81.162 192.168.81.163 [rsync:children] rsync_server rsync_client
[root@m01:~]# cd /etc/ansible/roles/ [root@m01:/etc/ansible/roles]# mkdir -p {rsync,rsync_server,rsync_client}/{tasks,vars,files,handlers,templates}
[root@m01:/etc/ansible/roles]# vim rsync/tasks/main.yml - name: 01-install rsync yum: name=rsync state=installed
1)編寫tasks目錄下的main.ymlvim
[root@m01:/etc/ansible/roles]# vim rsync_server/tasks/main.yml - name: 01-push conf file & password file & bash file template: src={{ item.src }} dest={{ item.dest }} mode={{ item.mode }} loop: - { src: 'rsyncd.conf', dest: '/etc/', mode: '644' } - { src: '{{ passfile }}', dest: '/etc/', mode: '600' } - { src: '{{ scripts }}', dest: '/server/scripts/', mode: '755' } notify: restart rsyncd # ignore_errors: yes - name: 02-create user user: name=rsync create_home=no shell=/sbin/nologin - name: 03-create rsync dir file: path={{ backupdir }} state=directory owner=rsync group=rsync - name: 04-start rsync server service: name=rsyncd state=restarted enabled=yes - name: 05-check server port shell: netstat -lntup | grep {{ Port_info }} register: get_server_port - name: 06-display port info debug: msg={{ get_server_port.stdout_lines }} - name: 07-set crontab cron: minute=5 hour=0 name='rsync backup' job='/bin/bash /server/scripts/backup_server.sh &>/dev/null'
2)編寫vars目錄下的main.ymlcentos
[root@m01: roles]# vim rsync_server/vars/main.yml backupdir: /backup Port_info: 873 passfile: rsync.password scripts: backup_server.sh
3)準備files目錄下的相關文件(包括配置文件,密碼認證,腳本文件等)bash
[root@m01 roles]# cp -a /etc/ansible/rsync_server/* rsync_server/files/ [root@m01 roles]# ll ./rsync_server/files/ total 12 -rwxr-xr-x 1 root root 463 Apr 4 00:22 backup_server.sh -rw-r--r-- 1 root root 530 Apr 3 23:35 rsyncd.conf -rw------- 1 root root 23 Apr 4 00:17 rsync.password
4)編寫templates目錄下的相關文件服務器
[root@m01 roles]# cp -a /etc/ansible/roles/rsync_server/files/* ./rsync_server/templates/ [root@m01 roles]# vim ./rsync_server/templates/rsyncd.conf uid = rsync gid = rsync port = {{ Port_info }} fake super = yes use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 192.168.81.0/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/{{ passfile }} [backup] comment = "backup dir by michaelni" path = {{ backupdir }} read_only = false
5)編寫handlers目錄下的main.ymlapp
[root@m01:roles]# vim rsync_server/handlers/main.yml - name: restart rsyncd service: name=rsyncd state=restarted ## 5.23 rsync_client部分 ```bash 1)編寫tasks目錄下的main.yml [root@m01: roles]# vim /etc/ansible/roles/rsync_client/tasks/main.yml - name: 01-create scripts dir file: path=/server/scripts/ state=directory - name: 02-push passfile & scriptfile template: src={{ item.src }} dest={{ item.dest }} mode={{ item.mode }} with_items: - { src: '{{ passfile }}', dest: '/etc/', mode: '600' } - { src: '{{ scripts }}', dest: '/server/scripts/', mode: '755' } #tags: t1 - name: 03-test rsync shell: rsync -az /etc/hosts rsync_backup@192.168.81.165::backup --port={{ Port_info }} --password-file=/etc/{{ passfile }} - name: 04-set crontab cron: minute=0 hour=0 name='rsync backup' job='/bin/bash /server/scripts/{{ scripts }} &>/dev/null'
2)編寫vars目錄下的main.ymloop
[root@m01: roles]# vim /etc/ansible/roles/rsync_client/vars/main.yml passfile: rsync.password scripts: backup_sys.sh #scripts: backup_web.sh Port_info: 873
3)將客戶端須要的文件準備好放到files目錄下測試
[root@m01:/etc/ansible/roles]# cp -a ../rsync_client/* /etc/ansible/roles/rsync_client/files/
4)編寫templates目錄下文件
[root@m01:/etc/ansible/roles]# cp rsync_client/files/* rsync_client/templates/ [root@m01 templates]# vim backup_sys.sh .......略........ rsync -az $Backup_dir/ rsync_backup@192.168.81.165::backup --port= {{ Port_info }} --password-file=/etc/ {{ passfile }} [root@m01 templates]# vim backup_web.sh .......略........ rsync -az $Backup_dir/ rsync_backup@192.168.81.165::backup --port= {{ Port_info }} --password-file=/etc/ {{ passfile }}
5.24 編寫raync主劇本文件
[root@m01 roles]# vim /etc/ansible/roles/site_rsync.yml - hosts: rsync roles: - rsync - hosts: rsync_server roles: - rsync_server - hosts: rsync_client roles: - rsync_client
5.25 測試
測試:將端口號改成999,看看配置文件和腳本里的端口是否更改,可否正常備份數據
[root@m01 roles]# vim rsync_server/vars/main.yml [root@m01 roles]# vim rsync_client/vars/main.yml passfile: rsync.password scripts: backup.sh Port_info: 888