Linux操作篇之备份(rsync)
一、rsync支持单向的完全备份和增量备份,两者各有优劣(双向数据同步差点)。rsync同步文件前需要先登录到目标主机进行用户身份验证,身份认证的协议可以使用ssh协议和rsync协议。当使用ssh协议时,使用的是Linux的系统用户;当使用rsync协议时,使用的是非系统用户(虚拟用户)。
二、rsync特性:
更新整个目录树和文件系统
可以有选择的保留符号链接、硬链接、文件属性、权限、设备以及时间等
安装时,无任何特殊权限要求
多文件传输效率高
可以使用ssh或自定义端口进行传输。
软件名称:rsync。
三、使用ssh协议进行数据传输:
使用普通系统用户,则需要普通用户对目录有相应的权限,可以使用acl赋予其用户权限
下载格式:rsync -avz 系统用户名@服务器地址:/服务器目录/* /本地目录
-a 归档模式,递归并保留文件属性
-v 显示同步过程
-z 在进行文件传输时进行压缩
rsync2下载rsync1中的文件
上传格式:rsync -avz /本地目录 系统用户名@服务器地址:/服务器目录/*
rsync2中的文件上传到rsync1中
可以使用密钥的形式进行免密操作。
ssh-keygen -t rsa -b 2048
ssh-copy-id root@目标服务器地址
两台设备都需要操作,输入一次密码即可。再次传输时,不需输入密码。
四、使用rsync协议进行数据传输,这一项只需要在服务器端进行配置即可。
1、vi /etc/rsyncd.conf 配置主配置文件
address = 192.168.171.137 绑定服务器端地址
port 873 服务端口
log file = /var/log/rsyncd.log 日志的存放位置
pid = /var/run/rsyncd.pid 进程pid文件位置
[web] 共享名
comment = backup 描述
path = /test1 实际的文件目录
read only = no 是否允许读取
dont compress = *.gz *.bz2 *.zip 哪些文件不需要进行压缩传输
auth users = zhangsan 虚拟用户名称
secrets file = /etc/rsyncd_users.db 虚拟用户密码的存放位置及密码文件名称
2、vi /etc/rsyncd_users.db 编写用户及对应的密码
用户名:密码的形式
3、chmod 600 /etc/rsyncd_users.db 修改文件权限
4、rsync --daemon 启动服务
5、映射用户对其备份的目录有权限
setfacl -m u:nobody:rwx /test1
6、测试
下载格式:rsync -avz rsync://用户名@服务器端IP地址/共享名 /本地目录
上传格式:rsync -avz /本地目录 rsync://用户名@服务器端IP地址/共享名
扩展:--delete 可以将服务器端中没有的,但是在客户端有的文件删除。
若要想免密传输,则需要在客户端设置一环境变量。
export RSYNC_PASSWORD=虚拟用户密码
五、rsync+inotifywait+脚本实现实时备份
1、下载安装inotifywait
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
yum -y install gcc*
tar xzf inotify-tools-3.14.tar.gz
./configure && make && make install
2、编写脚本
#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1" #检测/test1目录下,新建、删除、写入动作
action="rsync -avz /test1/* root@192.168.171.138:/test2" #将/test1目录下的文件传输到另外一台设备的/test2目录下,用户是root。也可以使用普通系统用户或虚拟用户
$detection | while read directory event file #while判断是否收到监控记录
do
$action
done
需要做免密验证
六、实现双向数据传输(unsion+inotify)
需要软件包:unison-2.13.16.tar.gz ocaml-3.10.0.tar.gz inotify-tools-3.14.tar.gz
前两个软件一定要注意软件版本。我是centos7.5安装的,其他版本安装失败。
1、安装inotify-tools-3.14.tar.gz
yum -y install gcc*
tar -xzf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install
2、安装ocaml-3.10.0.tar.gz (unison依赖此软件)
tar -xzf ocaml-3.10.0.tar.gz
cd ocaml-3.10.0
./configure (** Objective Caml configuration completed successfully ** 出现这个表示成功)
make world opt
make install
3、安装unison-2.13.16.tar.gz
tar -xzf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYLE=text THREADS=true STATIC=true (因为Makefile文件已经存在,不需要./configure。)
cp unison /usr/local/bin/
unison -version
可以出现版本号,代表安装成功。同样的,另外一台也需要进行相同的安装即可。
4、编写脚本,使其可以自动检测文件变化,自动进行文件同步。
#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1"
action="/usr/local/bin/unison -bash /test1/ ssh://192.168.171.138//test2/"
$detection | while read directory event file
do
$action
done
脚本两边都是上面的代码,唯一不同点是:其中的 IP//目录 是对端的 IP//目录。
5、建立ssh互信。
ssh-keygen -t rsa -b 2048 (一直回车)
ssh-copy-id root@对端IP地址 (第一次需输入一次yes)
输入密码即可
6、测试
有时候在一端删除,另外一端还存在,这个没有影响,当下次同步的时候,会自动同步。