企业级数据实时备份(附通用脚本) rsync+sersync

目录

一    Rsync

       1.1 rsync介绍

   1.2 rsync 参数详解

    1.3.  rysnc案例

二  Rsync+ sersync架构实战

 2.1 创建rsync配置文件

 2.2 创建密码 和启动服务

 2.3 实例演示

 2.4 实时备份

三  Rsync 脚本企业实战

3.1 通用脚本

3.2 定时任务 


一    Rsync

       1.1 rsync介绍

Rsync功能类似于scp,但是优于scp,还具有本地不同分区目录之间全量 及增量备份

        1.2 rsync 参数详解

(1) -a:–archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等。
(2) -r:–recursive 复制所有下面的资料,递归处理。
(3) -p:–perms 保留档案权限,文件原有属性。
(4) -t:–times 保留时间点,文件原有时间。
(5) -g:–group 保留原有属组。
(6) -o:–owner 保留档案所有者(root only)。
(7) -D:–devices 保留device资讯(root only)。
(8) -l:–links 复制所有的连接,拷贝连接文件。
(9) -z:–compress 压缩模式,当资料在传送到目的端进行档案压缩。
(10) -H:–hard-links 保留硬链接文件。
(11) -A:–acls 保留ACL属性文件,需要配合–perms。
(12) -P:-P参数和 --partial --progress 相同,只是为了把参数简单化,表示传进度。
(13) --version:输出rsync版本。
(14) -v:–verbose 复杂的输出信息。
(15) -u:–update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。
(16) --port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。
(17) --delete:删除那些目标位置有的文件而备份源没有的文件。
(18) --password-file=FILE :从 指定密码文件中获取密码。
(19) --bwlimit=KBPS:限制 I/O 带宽。
(20) --filter “-filename”:需要过滤的文件。
(21) --exclude=filname:需要过滤的文件。
(22) --progress:显示备份过程。

推送: rsync  【OPTION...】 SRC... [DEST]

拉取: rsync  【OPTION...】 [USER@HOST:SRC...]  [DEST]

SRC: 源文件或者是目录
DEST: 目录的目录或者是文件

        1.3.  rysnc案例

[root@master ~]# rsync -avz /root/cluster/ 192.168.220.129:/root/cluster
##将家目录下的cluster目录发送到129主机下的家目录cluster目录
##若发送端没有cluster目录则会被创建

二  Rsync+ sersync架构实战

   sersync可以记录下被监听目录发生的变化(包括增加,删除,修改等)具体某一个文件或者某一个目录的名字,然后使用rysnc同步的时候,只同步发生变化的文件或者目录

   2.1 创建rsync配置文件

##step1: 一般系统默认安装rsync 直接编辑配置文件即可
## 最好不要写注释 我写注释一直报错
[root@master data]# cat /etc/rsyncd.conf
uid = rsync       ## 需要存在用户,也可以用root       
gid = rsync       ## 在实际环境中,我使用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     
fake super = yes 

[backup]
path = /data   
ignore errors            
read only = false       
list = false          
auth users = rsync_backup      
secrets file = /etc/rsync.password 

2.2 创建密码 和启动服务

##服务端
[root@master data]#  useradd  -s /sbin/nologin -M rsync
[root@master ~]# echo "rsync_backup:yingji" > /etc/rsync.password
[root@master ~]# chmod 600 /etc/rsync.password
[root@master ~]# rsync --daemon ##开启服务
[root@master ~]# netstat -ntlp | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3055/rsync          
tcp6       0      0 :::873              ls    :::*                    LISTEN      3055/rsync     
[root@master data]# scp /etc/rsyncd.conf @node1:/etc


##客户端
[root@node1 ~]# echo "yingji" > /etc/rsync.password
[root@node1 ~]# chmod 600 /etc/rsync.password
[root@master ~]# netstat -ntlp | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3055/rsync          
tcp6       0      0 :::873              ls    :::*                    LISTEN      3055/rsync 

 2.3 实例演示

##客户端操作

[root@node1 data]# touch {1..10}.log
[root@node1 data]# ll 
总用量 0
-rw-r--r-- 1 root root 0 4月  12 12:55 10.log
-rw-r--r-- 1 root root 0 4月  12 12:55 1.log
-rw-r--r-- 1 root root 0 4月  12 12:55 2.log
-rw-r--r-- 1 root root 0 4月  12 12:55 3.log
-rw-r--r-- 1 root root 0 4月  12 12:55 4.log
-rw-r--r-- 1 root root 0 4月  12 12:55 5.log
[root@node1 data]# rsync -avzP  /data/ [email protected]::backup/ --password-file=/etc/rsync.password

##服务端查看
[root@master data]# ll
总用量 0
-rw-r--r-- 1 rsync rsync 0 4月  12 12:55 10.log
-rw-r--r-- 1 rsync rsync 0 4月  12 12:55 1.log
-rw-r--r-- 1 rsync rsync 0 4月  12 12:55 2.log
-rw-r--r-- 1 rsync rsync 0 4月  12 12:55 3.log
##虚拟机测试 10G文件约在2min分钟内 

2.4 实时备份

         下载rersync安装包,解压后添加指令,修改xml配置文件,运行既可以实时同步文件

我这边未做介绍,我实际测试中,发现确实可以实时备份的,但是有一点,如果源文

件被修改,则同步端也立马修改,确实做到了实时。

*********************************************************************************************

       我根据我们公司的实际情况选择方案,公司备份路径繁多,平均每人有20+以上的不同路径,使用resync需要挂载后台较多,使用较为繁琐。同时最重要的是对于文件的备份

如果源端被删除,那么立即同步则十分危险,我觉得不太适合我们公司的现在环境

*************************************************************************************************

所以还是采用手动方式去备份文件,但是为了提高工作效率,则使用shell脚本来完成作业

三  Rsync 脚本企业实战

3.1 通用脚本

#!/bin/bash
date=$(date +%Y-%m-%d)
sync_dirs() {
    local dirs=("$@")
    local destination="${dirs[-1]}"
    unset 'dirs[${#dirs[@]}-1]'
    for dir in "${dirs[@]}"; do
        if [ -d "$dir" ]; then
           if ! rsync -avpz "$dir" [email protected]::backup/"$destination" --password-file=/etc/rsync.password &> logs/rsync.log; then
               echo "Sync of $dir failed" >> logs/error.log
           fi
        fi
    done
}

sync_dirs "/public/test/pipeline/chip-seq" \
"test_$date"

sync_dirs "/public/test1/inputrc" \
"test1_$data"
##将chip-seq文件同步给10.145主机,发送到目录为/test_data

##将inputrc文件同步给10.145主机,发送到目录为/test1_data

##rsync 将输出日志发送到rsync.log中

##rsync 将未完成的路径输出到error.log中

3.2 定时任务 

crontab -e
* 23 1 * * /bin/bash  rsync_bak.sh

##每一个月备运行一次脚本

你可能感兴趣的:(shell编程,linux,服务器,linux,运维)