对于运维人员来说,数据备份是最重要的工作之一,rsync就是一款通过网络备份重要数据的工具/软件。
rsync同样是一个在类Unix和Window系统上通过网络在系统间同步文件夹和文件的网络协议,它可以复制或者显示目录并复制文件。rsync默认监听TCP 873端口,通过远程shell如rsh和ssh复制文件。同时要求必须在远程和本地系统上都安装rsync。
rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,可以将一个客户机和远程文件服务器之间的文件同步,也可以在本地系统中将数据从一个分区备份到另一个分区上。如果rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部分。rsync可以执行完整备份或增量备份.
rsync的主要优点是:
速度:最初会在本地和远程之间拷贝所有内容。下次,只会传输发生改变的块或者字节。
安全:传输可以通过ssh协议加密数据。
低带宽:rsync可以在两端压缩和解压数据块。
虚拟机Linux环境环境:
服务器1:192.168.216.161
服务器2:192.168.216.162
Linux安装:
官网:https://rsync.samba.org/
123456789101112131415 | ##编译安装 [root@191 ~] # wget -O rsync-3.1.3.tar.gz https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz [root@191 ~] # mv rsync-3.1.3.tar.gz /usr/local/src/ [root@191 ~] # cd /usr/local/src/ [root@191 src] # tar -zxvf rsync-3.1.3.tar.gz [root@191 src] # cd rsync-3.1.3/ [root@191 rsync -3.1.3] # ./configure --prefix=/usr/local/rsync [root@191 rsync -3.1.3] # make && make install [root@191 rsync -3.1.3] # cd /usr/local/rsync/bin ##查看安装 [root@191 bin] # ./rsync -h rsync version 3.1.3 protocol version 31 Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others. Web site: |
配置rsync-server(192.168.216.161)
1.配置rsyncd.conf
12345678910111213141516171819 | [root@191 bin] # cd /usr/local/rsync [root@191 rsync ] # touch /usr/local/rsync/rsyncd.conf ##手动创建 [root@191 rsync ] # vim /usr/local/rsync/rsyncd.conf uid = root gid = root use chroot = no max connections = 1024 pid file = /var/run/rsyncd .pid log file = /var/log/rsyncd .log hosts allow = 192.168.216.162 [www] path = /data/www/ comment = test ignore errors = true read only = no list = no auth users = meng secrets file = /usr/local/rsync/rsyncd .secrets |
这里的hosts allow 我设置192.168.216.162,也就是我的客户端机器ip,auth users 这里我设置成root(客户端的用户),path 为同步文件存放目录。
2.配置rsyncd.secrets
1234 | [root@191 rsync ] # touch /usr/local/rsync/rsyncd.secrets ##手动创建 [root@191 rsync ] # vim /usr/local/rsync/rsyncd.secrets meng:123456 ##格式为用户:密码 [root@191 rsync ] # chmod 600 /usr/local/rsync/rsyncd.secrets ##注意:此文件权限必须设置:600 |
3.配置rsyncd.motd (配置欢迎语文件(可选)
123 | [root@191 rsync ] # touch /usr/local/rsync/rsyncd.motd [root@191 rsync ] # vim /usr/local/rsync/rsyncd.motd welcome use rsync service |
4.启动rsyncd
1 | [root@191 rsync ] # /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf |
5.查看rsyncd进程,命令如下:
123 | [root@191 rsync ] # ps -aux |grep rsyncd root 7050 0.0 0.0 108444 636 ? Ss 22:38 0:00 /usr/local/rsync/bin/rsync --daemon --config= /usr/local/rsync/rsyncd .conf root 7052 0.0 0.1 112728 1000 pts /0 S+ 22:38 0:00 grep --color=auto rsyncd |
6.检查是否已经成功启动:
1234 | [root@191 rsync ] # netstat -lnp|grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3001 /rsync tcp6 0 0 :::873 :::* LISTEN 3001 /rsync [root@191 rsync ] # |
7.配置rsync开机启动:
12345678910 | [root@191 rsync ] # vim /etc/rc.d/rc.local /usr/local/rsync/bin/rsync --daemon --config= /usr/local/rsync/rsyncd .conf [root@191 rsync ] # chmod +x /etc/rc.d/rc.local [root@191 rsync ] # ps -aux |grep rsyncd root 6165 0.0 0.0 108448 636 ? Ss 20:33 0:00 /usr/local/rsync/bin/rsync --daemon --config= /usr/local/rsync/rsyncd .conf root 6287 0.0 0.0 112728 972 pts /0 S+ 20:38 0:00 grep --color=auto rsyncd [root@191 rsync ] # shutdown -h now [root@191 ~] # ps -aux |grep rsyncd root 1154 0.0 0.0 108448 636 ? Ss 20:38 0:00 /usr/local/rsync/bin/rsync --daemon --config= /usr/local/rsync/rsyncd .conf root 1958 0.0 0.0 112732 972 pts /0 S+ 20:39 0:00 grep --color=auto rsyncd |
client端安装配置(192.168.216.162)
1.安装rsync(yum安装)
12345678 | [root@192 ~] # yum -y install rsync [root@192 ~] # systemctl start rsyncd.service ##启动rsync服务 [root@192 ~] # systemctl enable rsyncd.service Created symlink from /etc/systemd/system/multi-user .target.wants /rsyncd .service to /usr/lib/systemd/system/rsyncd .service. [root@192 ~] # netstat -lnp|grep 873 ##检查是否已经成功启动 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3181 /rsync tcp6 0 0 :::873 :::* LISTEN 3181 /rsync [root@192 ~] # |
首先,配置文件在:/etc/rsyncd.conf
123456789101112131415161718 | [root@192 etc] # vim /etc/rsyncd.conf uid = root # //设置运行rsync 进程的用户 gid = root use chroot = no max connections = 4 # pid file = /var/run/rsyncd.pid #//CentOS7中yum安装不需指定pid file 否则报错 lock file = /var/run/rsyncd .lock log file = /var/log/rsyncd .log # //此文件定义完成后系统会自动创建 exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes # //同步时跳过没有权限的目录 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # //传输时不压缩的文件 |
客户端建立密码文件
12 | [root@192 etc] # vi /etc/rsyncd.passwd 123456 |
注意:
1、这里的密码,与服务端设置的密码相同,就是通过这个密码连接服务端的
2、然后切记修改改密码文件的权限(密码文件权限属性要设得只有属主可读)
123456 | [root@192 etc] # chmod 600 /etc/rsyncd.passwd [root@192 ~] # systemctl restart rsyncd.service [root@192 ~] # systemctl status rsyncd.service [root@192 ~] # systemctl stop rsyncd.service [root@192 ~] # systemctl start rsyncd.service [root@192 ~] # systemctl rsyncd.service |
常用命令:
【客户端从服务端远程拉取文件】
1234567891011121314151617181920 | ##1、客户端从服务器端拉取www模块下的文件到/data/www/ [root@192 ~] # rsync -avz meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets /data/www/ 注意:root 是用户 www 是认证模块 --password- file 加载密码文件(和服务器密码相同) ##2、让客户端与服务器保持完全一致, --delete [root@192 ~] # rsync -avzP --delete meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets /data/www/ ##3、客户端从服务端远程拉取文件并显示进度 [root@192 ~] # rsync -avz --progress meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets /data/www [root@192 ~] # rsync -avzP meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets /data/www -a --参数,相当于-rlptgoD, -r --是递归 -l --是链接文件,意思是拷贝链接文件 -i --列出 rsync 服务器中的文件 -p --表示保持文件原有权限 -t --保持文件原有时间 -g --保持文件原有用户组 -o --保持文件原有属主 -D --相当于块设备文件 -z --传输时压缩 -P --传输进度 - v --传输时的进度等信息,和-P有点关系 |
【客户端推送文件到远程服务器】
123456789101112131415161718192021222324252627 | ##1、上传客户端文件至服务端 [root@localhost ~] # rsync -avz /data/www/5.txt meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets ##2、上传客户端文件至服务端的 george 目录 [root@localhost ~] # rsync -avz /data/www/ meng@192.168.216.161::www/src --password-file=/etc/rsyncd.secrets ##3、递归列出服务端 www 模块的文件 [root@localhost ~] # rsync -ir --delete meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets ##4、同步除了路径以及文件名中包含 “5” *的所有文件 [root@localhost ~] # rsync -avzP --exclude="*5*" meng@192.168.216.161::www --password-file=/etc/rsyncd.secrets /data/www ##5、客户端自动同步(每分钟自动同步一次) [root@localhost ~] # crontab -e * /1 * * * * rsync -avzP meng@192.168.216.161::www --password- file = /etc/rsyncd .secrets /data/www 客户端本地同步 ##6、将 src 目录里的所有的文件同步至 dest 目录(不包含src本身) [root@localhost ~] # rsync -avz --progress /data/www/src/ /data/www/test/ ##7、将 src 目录包括自己整个同步至 dest 目录 [root@localhost ~] # rsync -avz --progress /data/www/src /data/www/test/ ##8、即使 src 后面接有 / ,效果同上 [root@localhost www] # rsync -avR src/ test/ 局域网间同步(192.168.216.161 192.168.216.162) ##9、远程同步至本地,需输入root密码 [root@localhost www] # rsync -av 192.168.216.161:/data/www/ dest/ ##10、本地文件同步至远程 [root@localhost www] # rsync -av test/ 192.168.216.161:/data/www/ ##11、整个目录同步过去 [root@localhost www] # rsync -av test 192.168.216.161:/data/www/ ##12、从目标目录里面删除无关的文件(从客户端删除服务器192.168.216.161 /data/www/ 目录下的 src目录 ) [root@localhost www] # rsync -av --delete src/ 192.168.216.161:/data/www/ --delete |
12345678910 | 示例: 1 - 启用压缩 [root@localhost /] # rsync -zvr /home/aloft/ /backuphomedir 上面的 rsync 命令使用了-z来启用压缩,- v 是可视化,-r是递归(即对子目录以递归的模式处理)。 上面在本地的 /home/aloft/ 和 /backuphomedir 之间同步。 示例: 2 - 保留文件和文件夹的属性 [root@localhost /] # rsync -azvr /home/aloft/ /backuphomedir 上面我们使用了-a选项,它保留了所有人和所属组、时间戳、软链接、权限,并以递归模式运行。 示例: 3 - 找出文件间的不同 [root@localhost /] # rsync -avz /home/aloft/ azmath@192.168.1.4:192.168.1.4:/share/rsysnctest/ 上面的命令帮助你找出源地址和目标地址之间文件或者目录的不同。 |
增量备份:
1 | [root@localhost www] # rsync -vzrtopg --progress --delete meng@192.168.216.163::www /data/www/ --password-file=/etc/rsyncd.secrets |