码迷,mamicode.com
首页 > 系统相关 > 详细

linux——rsync简介

时间:2018-08-17 10:14:24      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:emctl   工具   rsa   数据   rsync服务   开关   增量   roc   工作   

rsync简介
rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具 Remote sync 可以远程同步,支持本地复制,或者与其他SSH,rsync主机同步


rsync

-a 归档模式
-v 详细输出
-q 静默输出
-r 对子目录递归模式处理
-p 保持原有的权限属性
-z 在传输时压缩
--delete 在源服务器上做删除操作也会在目标服务器上同步

-c 打开效验开关
-R 使用相对路径
-b 创建备份


rsync命令
//Rsync的三种命令格式

rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST

//对应以上三种命令格式,rsync有三种不同的工作模式:
1.拷贝本地文件
[root@localhost ~]# rsync -a nfs.sh a.sh

2.使用远程shell程序(rsh,ssh)来实现将本地机器的内容拷贝到远程机器
[root@localhost ~]# rsync -avz nfs.sh root@192.168.56.138:/root/b.sh
[root@localhost ~]# ssh root@192.168.56.138 ‘ls -l /root‘

3.使用一个远程shell程序(如rsh,ssh)来实现将远程机器的内容拷贝到本地机器
[root@localhost ~]# rsync -avz root@192.168.56.138:/etc/yum.repos.d /root/


环境说明
A机——源服务器——IP192.168.56.11——应用(rsync,inotify-tools,脚本 )——centos7系统
B机——目标服务器——IP192.168.56.138——应用(rsync)——centos7系统

使用ssh,传输密钥给B机,方便免密码登陆

[root@localhost ~]# ssh-keygen -t rsa //密钥生成
[root@localhost ~]# ls .ssh/
id_rsa id_rsa.pub
[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.138 //A机将生成的公钥交给B机
[root@localhost ~]# ssh root@192.168.56.138 //尝试登陆,发现无需密码
[root@localhost ~]# exit //退出B机

rsync+inotify
需求:把源服务器上/etc目录实时同步到目标服务器的/tmp/下

安装环境 A B 先关闭防火墙

[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
AB机安装rsync


[root@localhost ~]# yum -y install rsync A机
[root@localhost ~]# yum -y install rsync B机
B机设置rsyncd.conf配置文件

[root@localhost ~]# touch /etc/rsync.pass
[root@localhost ~]# cat >> /etc/rsyncd.conf <<EOF

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
[etc_from_client]
path = /tmp/
comment = sync etc from client
uid = root
gid = root
port = 873
ignore errors
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = admin
hosts allow = 192.168.56.11
hosts deny = 192.168.1.1
EOF
//创建用户认证文件,设置文件权限, 启动rsync服务并设置开机自启动

[root@localhost ~]# echo ‘admin:123456‘ > /etc/rsync.pass

[root@localhost ~]# chmod 600 /etc/rsync
[root@localhost ~]# ll /etc/rsync

-rw-------. 1 root root 841 8月 14 01:14 /etc/rsyncd.conf
-rw-------. 1 root root 13 8月 14 01:18 /etc/rsync.pass


[root@localhost ~]# systemctl start rsyncd
[root@localhost ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@localhost ~]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 :873 :
LISTEN 0 5 :::873 :::


A机

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -ri ‘s/^(SELINUX=)./\1disabled/g‘ /etc/sysconfig/selinux
//配置yum源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@localhost yum.repos.d]# sed -i ‘s/\$releasever/7/g‘ /etc/yum.repos.d/CentOS7-Base-163.repo
[root@localhost yum.repos.d]# sed -i ‘s/^enabled=.
/enabled=1/g‘ /etc/yum.repos.d/CentOS7-Base-163.repo
[root@localhost yum.repos.d]# yum -y install epel-release
[root@localhost ~]# yum -y update --skip-broken


//安装rsync服务端软件,只需要安装,不要启动,不需配置
[root@localhost ~]# yum -y install rsync
[root@localhost ~]# echo ‘123456‘ > /etc/rsync.pass
[root@localhost ~]# cat /etc/rsync.pass
123456

//设置文件权限,只设置文件所有者具有读取,写入权限即可
[root@localhost ~]# chmod 600 /etc/rsync.pass
[root@localhost ~]# ll /etc/rsync.pass
-rw-------. 1 root root 7 8月 13 17:51 /etc/rsync.pass

[root@localhost ~]# ls //创建测试目录
anaconda-ks.cfg

[root@localhost ~]# mkdir -pv /root/etc/test
mkdir: 已创建目录 "/root/etc"
mkdir: 已创建目录 "/root/etc/test"


[root@localhost ~]# rsync -avH --port 873 --progress --delete /root/etc/ admin@192.168.56.138::etc_from_client --password-file=/etc/rsync.pass

sending incremental file list
deleting systemd-private-5434e220d18940898b6d9672af036026-vmtoolsd.service-MRNEKi/tmp/vmware-root/
deleting systemd-private-5434e220d18940898b6d9672af036026-vmtoolsd.service-MRNEKi/tmp/
deleting systemd-private-5434e220d18940898b6d9672af036026-vmtoolsd.service-MRNEKi/
deleting systemd-private-5434e220d18940898b6d9672af036026-vgauthd.service-EHAGL9/tmp/
deleting systemd-private-5434e220d18940898b6d9672af036026-vgauthd.service-EHAGL9/
deleting systemd-private-5434e220d18940898b6d9672af036026-cups.service-cQXF9F/tmp/
deleting systemd-private-5434e220d18940898b6d9672af036026-cups.service-cQXF9F/
deleting .font-unix/
deleting .esd-1000/
deleting .XIM-unix/
deleting .X11-unix/
deleting .Test-unix/
deleting .ICE-unix/
./
test/

sent 75 bytes received 670 bytes 1,490.00 bytes/sec
total size is 0 speedup is 0.00


B机

[root@localhost ~]# ls /tmp
test
[root@localhost ~]# ll /proc/sys/fs/inotify/ 查看服务器是否支持inotify,有三max则支持
总用量 0
-rw-r--r--. 1 root root 0 8月 14 02:04 max_queued_events
-rw-r--r--. 1 root root 0 8月 14 02:04 max_user_instances
-rw-r--r--. 1 root root 0 8月 14 02:04 max_user_watches


//安装inotify-tools
[root@localhost ~]# yum -y install make gcc gcc-c++
[root@localhost ~]# yum -y install inotify-tools


A机


//写同步脚本,最重要的一步,让脚本自动去检测我们制定的目录下 \
//文件发生的变化,然后执行rsunc的命令把它同步到服务器端
[root@localhost ~]# mkdir /scripts
[root@localhost ~]# touch /scripts/inotify.sh
[root@localhost ~]# chmod 755 /scripts/inotify.sh
[root@localhost ~]# ll /scripts/inotify.sh
-rwxr-xr-x. 1 root root 0 8月 13 18:15 /scripts/inotify.sh


[root@localhost ~]# vim /scripts/inotify.sh
host=192.168.56.138
src=/etc
des=etc_from_client
password=/etc/rsync.pass
user=admin
inotifywait=/usr/bin/inotifywait

$inotifywait -mrq --timefmt ‘%Y%m%d %H:%M‘ --format ‘%T %w%f%e‘ -e modify,delete,create,attrib $src \
| while read files;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done


//检查脚本
[root@localhost bin]# bash -x /scripts/inotify.sh

//启动脚本
[root@localhost ~]# nohup bash /scripts/inotify.sh &
[1] 58297

[root@localhost bin]# ps -ef|grep inotify
root 74599 1 0 17:01 pts/0 00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /etc
root 74621 2316 0 17:03 pts/0 00:00:00 bash /scripts/inotify.sh
root 74622 74621 0 17:03 pts/0 00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /etc
root 74623 74621 0 17:03 pts/0 00:00:00 bash /scripts/inotify.sh
root 74625 2316 0 17:03 pts/0 00:00:00 grep --color=auto inotify


//在源服务器上生成一个新文件
[root@localhost ~]# mkdir -p /etc/httpd24
[root@localhost ~]# ls /etc/httpd24
[root@localhost ~]# echo ‘hello world‘ > /etc/httpd24/test


//查看inotify生成的日志
[root@localhost ~]# tail /tmp/rsync.log
20180816 17:05 /etc/httpd24CREATE,ISDIR was rsynced //创建,ISDIR是同步的
20180816 17:05 /etc/httpd24/testCREATE was rsynced //同步创建
20180816 17:05 /etc/httpd24/testMODIFY was rsynced //同步修改


设置开机自启动

[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 473 4月 11 15:36 /etc/rc.d/rc.local

[root@localhost ~]# echo ‘nohup /bin/bash /scripts/inotify.sh‘ >> /etc/rc.d/rc.local
[root@localhost ~]# tail /etc/rc.d/rc.local
to run scripts during boot instead of using this file.

In contrast to previous versions due to parallel execution during boot
this script will NOT be run after all other services.

Please note that you must run ‘chmod +x /etc/rc.d/rc.local‘ to ensure
that this script will be executed during boot.
touch /var/lock/subsys/local
nohup /bin/bash /scripts/inotify.sh


到目标服务器上查看是否把新生成的文件自动传上去了:

[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ls
etc test

[root@localhost tmp]# ls etc/httpd24/
test
//以将源服务器的/etc目录整个同步到了目标服务器,新增的test文件也自动同步了

linux——rsync简介

标签:emctl   工具   rsa   数据   rsync服务   开关   增量   roc   工作   

原文地址:http://blog.51cto.com/13859004/2160968

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