码迷,mamicode.com
首页 > 其他好文 > 详细

rsync+nfs企业实战案例

时间:2019-10-03 21:48:42      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:timeout   cap   列表   root   进入   one   connect   back   echo   

某公司里有一台NFS服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他 机器上做一个周期性定时备份。要求如下:

每天晚上00点整在NFS服务器nfs01上打包备份网站程序目录等并通过rsync命令推送到备份服务器backup上备份保存(备份思路 可以是先在本地按IP地址+日期打包,然后再利用rsync推送到备份服务器上)。


具体要求如下:

1)NFS服务器nfs01和备份服务器backup的备份目录必须都为/backup;
2)NFS服务器站点目录假定为(/var/www/html);
3)NFS服务器脚本目录假定为(/server/scripts);
4)NFS服务器站点日志目录假定为(/app/logs);
5)NFS服务器个人配置文件目录路径(/etc/rc.d/rc.local);
6)NFS服务器定时任务文件路径为(/var/spool/cron/root);
7)将以上文件或目录打包(2-6条所示)推送到备份服务器backup ;
8)NFS服务器本地仅保留7天内的备份;
9)备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱;
10)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。

 

================================================以下为答案===========================================================================

一、主机网络参数

主机名 网卡eth0 网卡eth1 用途
backup 10.0.0.41 172.16.1.41 rsync服务端
nfs01 10.0.0.31 172.16.1.31 NFS存储服务器客户端

二、开始部署backup服务器

1、Rsync服务端:

(1)检查rsync软件是否安装:

[root@backup ~]# rpm -qa rsync

rsync-3.0.6-12.el6.x86_64

(2)编写rsyncd.conf文件

########################rsync_configstart#######################################################################################################

#created by ywx 2019-03-20

#rsyncd.conf start##

#用户

uid = rsync

#组

gid = rsync

#程序安全设置

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

############################################上面的内容可以放在模块下,同理模块下的内容也可以放在全局################################

[backup]

#使用目录

path = /backup/

#有错误时忽略

ignore errors

#可读可写(true或false)(yes或no)

read only = false

#阻止远程列表(不让通过远程方式看服务端有啥)

list = false

#允许IP

hosts allow = 172.16.1.0/24

#禁止IP

hosts deny = 0.0.0.0/32

#虚拟用户(认证用户)

auth users = rsync_backup

#存放用户和密码的文件

secrets file = /etc/rsync.password

###################################################rsync_configend__end#########################################################################################

 

(3)创建rsync账户及共享目录并修改目录属主为rsync

[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup

(4)启动Rsync服务并设置为开机启动

启动rsync服务
[root@backup ~]# rsync --daemon
[root@backup ~]# netstat -lntup | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1264/rsync
tcp 0 0 :::873 :::* LISTEN 1264/rs
开机启动在/etc/rc.loacl下添加
rsync --daemon

(5)创建rsync虚拟账户名和密码,并赋予密码文件600权限

[root@backup ~]# echo "rsync_backup:ywxking" > /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:ywxking
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 21 Mar 20 10:40 /etc/rsync.password

三、在NFS上部署Rsync客户端

(1)检查rsync软件是否安装:

[root@nfs01 ~]# rpm -qa rsync

rsync-3.0.6-12.el6.x86_64

 

(2)只需要创建密码文件(只包含密码即可),并赋予密码文件600权限

[root@nfs01 ~]# echo "ywxking" > /etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password

(3)创建共享目录backup

[root@nfs01 ~]# mkdir /backup

(4)在客户端进行推送测试

[root@nfs01 backup]# touch ywx{1..10}
[root@nfs01 backup]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx1
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx10
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx2
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx3
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx4
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx5
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx6
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx7
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx8
-rw-r--r-- 1 root root 0 Mar 20 22:12 ywx9

[root@nfs01 backup]# rsync -avzP /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
ywx1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=9/11)
ywx10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=8/11)
ywx2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=7/11)
ywx3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=6/11)
ywx4
0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=5/11)
ywx5
0 100% 0.00kB/s 0:00:00 (xfer#6, to-check=4/11)
ywx6
0 100% 0.00kB/s 0:00:00 (xfer#7, to-check=3/11)
ywx7
0 100% 0.00kB/s 0:00:00 (xfer#8, to-check=2/11)
ywx8
0 100% 0.00kB/s 0:00:00 (xfer#9, to-check=1/11)
ywx9
0 100% 0.00kB/s 0:00:00 (xfer#10, to-check=0/11)

sent 462 bytes received 201 bytes 1326.00 bytes/sec
total size is 0 speedup is 0.00

(5)nfs01服务器打包脚本nfsbak.sh

vim /server/scripts/nfsbak.sh

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
######自定义变量
Path=/backup
backup_Server=172.16.1.41
IP=`/sbin/ifconfig eth1|awk -F"[ :]+" ‘NR==2{print $4}‘`
Dir=${IP}_$(date +%F_%w)

######如果需要备份的文件和目录存在,则复制到/backup下面相对的目录中
mkdir -p $Path/$Dir
[ -f /var/spool/cron/root ] && cp -rp /var/spool/cron/root $Path/$Dir/
[ -f /etc/rc.d/rc.local ] && cp -rp /etc/rc.d/rc.local $Path/$Dir/
[ -d /server/scripts ] && cp -rp /server/scripts $Path/$Dir/
[ -d /var/html/www ] && cp -rp /var/html/www $Path/$Dir/
[ -d /app/logs ] && cp -rp /app/logs $Path/$Dir/
[ -f /etc/sysconfig/iptables ] && cp -rp /etc/sysconfig/iptables $Path/$Dir/

#######进入/backup目录并打包相应的目录文件
cd $Path

tar -zcf $Path/${Dir}.tar.gz $Dir


#######打包完成后,删除源目录
rm -rf $Path/$Dir


#######创建md5sum验证信息,方便backup服务器检验数据是否完成
/usr/bin/md5sum $Path/${Dir}.tar.gz > $Path/md5sum_${IP}.txt


#######推送打包的文件及md5sum校验值到备份服务器
rsync -avz $Path/ rsync_backup@${backupServer}::backup --password-file=/etc/rsync.password
#######找出超过7天的备份并删除
find $Path/ -name "${IP}*" -type f -mtime +7 | xargs rm -rf

(6)nfs备份的定时任务

00 00 * * * /bin/sh /server/scripts/nfsbak.sh

 

四、备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱;

因为nfs服务器备份过来的文件都有md5sum,因此文件备份是否正常,只需要md5sum的值一样

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#####找出1天内的备份文件的md5sum校验和
md5=$(/bin/find /backup/ -type f -mtime -1 -name "md5sum_*.txt")

for i in $md5
do
md5sum -c $md5 >/dev/null 2>&1
md5jg=$(echo $?)
if [ ${md5jg} -eq 0 ];then
mail -s "$(date +%F)This is backup OK" 441520481@qq.com
else
mail -s "$(date +%F)This is backup Worry" 441520481@qq.com
done


五、备份服务器上每周六的数据都保留,其他备份仅保留180天备份

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
find /backup ! -name "*_6.tar.gz" ! -name "md5sum*_6.txt" -mtime +180 -type f | xargs rm -rf

六、backup服务器的定时任务

##################################定时任务脚本######################################################
vim /server/scripts/backup.sh

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
md5=$(/bin/find /backup/ -type f -mtime -1 -name "md5sum_*.txt")

for i in $md5
do
md5sum -c $md5 > /dev/null 2>&1
md5jg=$(echo $?)
if [ ${md5jg} -eq 0 ];then
mail -s "$(date +%F) This is backup Ok!!!" 441520481@qq.com
else
mail -s "$(date +%F) This is backup Worry!!!" 441520481@qq.com
done

find /backup ! -name "*_6.tar.gz" ! -name "md5sum*_6.txt" -mtime +180 -type f | xargs rm -rf
#####################################################################################################
##############################定时任务#########################################################
00 00 * * * /bin/sh /server/scripts/backup.sh


 

七、ansible一键部署rsync

1、主机网络参数:
主机 网卡 ip地址 用途
m01 eth1 172.16.1.61 管理主机
backup01 eth1 172.16.1.41 backup服务器
nfs01 eth1 172.16.1.31 nfs服务器

2、在m01管理主机上的准备工作:
(1)编写ssh分发脚本,让m01可以免交互式登录backup和nfs服务器
#!/bin/bash
#ssh connect
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
rm -rf /root/.ssh/id_dsa
#####创建免交互密钥
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
yum install -y sshpass
#####免交互推送m01的密钥
for ip in 41 31
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
done

(2)安装ansible
服务端:
yum install -y ansible
客户端:(可选)
yum install -y libselinux-python

(3)编写rsync剧本:rsync.yaml
============================================rsync.yaml__start==============================================================
#command play-book

- hosts: rsync_server
tasks:
- name: step01:install rsync
yum: name=rsync state=installed
- name: step02:edit rsync conf file
copy: src=/etc/ansible/conf/rsync_conf/rsyncd.conf dest=/etc/
- name: step03:create rsync user
user: name=rsync state=present createhome=no shell=/sbin/nologin
- name: step04:create auth file
copy: src=/etc/ansible/conf/rsync_conf/rsync.password dest=/etc/ mode=600
- name: step05:create backup directory
file: dest=/backup state=directory owner=rsync group=rsync
- name: step06:start rsync server
shell: rsync --daemon creates=/var/run/rsyncd.pid

- hosts: rsync_client
tasks:
- name: step01:create auth file
copy: src=/etc/ansible/conf/rsync_conf/rsync_client.password dest=/etc/rsync.password mode=600

============================================rsync.yaml__end==============================================================

 

(4)测试剧本

[root@ywx rsync_conf]# ansible-playbook -C /server/scripts/rsync_install.yaml

PLAY [rsync_server] ***************************************

TASK [Gathering Facts] ************************************
ok: [172.16.1.41]

TASK [step01:install rsync] ***********************************
ok: [172.16.1.41]

TASK [step02:edit rsync conf file] ********************************
ok: [172.16.1.41]

TASK [step03:create rsync user] ***********************************
ok: [172.16.1.41]

TASK [step04:create auth file] ************************************
ok: [172.16.1.41]

TASK [step05:create backup directory] *********************************
ok: [172.16.1.41]

TASK [step06:start rsync server] **********************************
skipping: [172.16.1.41]

PLAY [rsync_client] ***************************************

TASK [Gathering Facts] ************************************
ok: [172.16.1.7]
ok: [172.16.1.31]

TASK [step01:create auth file] ************************************
changed: [172.16.1.7]
ok: [172.16.1.31]

PLAY RECAP ****************************************
172.16.1.31 : ok=2 changed=0 unreachable=0 failed=0
172.16.1.41 : ok=6 changed=0 unreachable=0 failed=0
172.16.1.7 : ok=2 changed=1 unreachable=0 failed=0

 

3、一键部署:

[root@ywx rsync_conf]# ansible-playbook /server/scripts/rsync_install.yaml

 

八、rsync开机自启动脚本(网上查找的)

制作服务启动脚本/etc/init.d/rsyncd
#!/bin/bash
#author:Mr.chen
# chkconfig:35 13 91
# description:This is Rsync service management shell script
# Source function library
. /etc/rc.d/init.d/functions

start(){
rsync --daemon
if [ $? -eq 0 -a `ps -ef|grep -v grep|grep rsync|wc -l` -gt 0 ];then
action "Starting Rsync:" /bin/true
sleep 1
else
action "Starting Rsync:" /bin/false
sleep 1
fi
}

stop(){
pkill rsync;sleep 1;pkill rsync
if [ `ps -ef|grep -v grep|grep "rsync --daemon"|wc -l` -lt 1 ];then
action "Stopping Rsync: " /bin/true
sleep 1
else
action "Stopping Rsync:" /bin/true
sleep 1
fi
}

case "$1" in
start)
start;
;;
stop)
stop;
;;
restart|reload)
stop;
start;
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
;;
esac
6)启动脚本放到/etc/init.d目录下,增加x执行权限并添加开机启动
[root@backup ~]# chmod +x /etc/init.d/rsyncd
[root@backup ~]# /etc/init.d/rsyncd stop
已终止
[root@backup ~]# /etc/init.d/rsyncd start
Starting Rsync: [确定]
[root@backup ~]# chkconfig rsyncd on
[root@backup ~]# chkconfig --list | grep rsync
rsyncd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

 

rsync+nfs企业实战案例

标签:timeout   cap   列表   root   进入   one   connect   back   echo   

原文地址:https://www.cnblogs.com/yaokaka/p/11620766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!