文章目录
前言
一:理论
1.1:什么是rsync?有什么作用
- rsync,全称为:Remote Sync(远程同步),是一款开源的快速增量备份工具,可以在不同主机之间镜像同步整个目录树
- 还支持本地复制,增量备份、保持连接和权限,或者与其他SSH,rsync主机同步
- 采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用
1.2:rsync源服务器的关系
二:实验
2.1:rsync命令集锦
-
1、启动rsync服务:
rsync --daemon
-
2、关闭rsync服务:
kill $(cat /var/run/rsyncd.pid)
-
3、同步本地文件系统数据:rsync [选项] 原始位置 目标位置
例如: rsync /etc/fstab /opt '//同步本机的fstab文件到opt目录' rsync -rl /boot/grub /opt '//同步本机的grub目录到opt目录' '//如果想要在/opt目录下也创建一个boot目录,那么命令需要为:rsync -R rl /boot/grub /opt ' 常用选项: -a:归档模式,递归并保留对象属性,等同于 -rlptgoD -r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项 -l 保留软链接 -p 保持文件权限 -v:显示同步过程的详细(verbose)信息 -z:在传输文件时进行压缩(compress) -H:保留硬连接文件 -A:保留ACL属性信息 --delete:删除"目标"中"源"没有的文件 --checksum:根据对象的校验和来决定是否跳过文件 --progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等 路径的格式可以是本地路径,也可以是使用user@host:path或user@host::path的远程路径,如果主机和path路径之间使用单个冒号隔开,表示使用的是远程shell通信方式,而使用双冒号隔开的则表示的是连接rsync daemon
-
4、下行同步的两种方式(使用客户端将rsync服务器下的wwwroot共享模块下的内容同步到本地的/opt目录下(共享模块下的真实共享路径需要对other用户具有 ‘r’ 权限))
-
(1):命令格式
用户名@主机地址::共享模块名
例如:
[root@rsyncClient ~]# rsync -avz [email protected]::wwwroot /opt
-
(2):命令格式:
rsync://用户名@主机地址/共享模块名
例如:
[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root
-
-
5、rsync通过ssh的方式同步
- 命令与平常的scp命令类似
- 例如:将本地/opt/abc.txt上传到目标服务器/opt目录:
rsync -avz /opt/abc.txt [email protected]:/opt
- 例如:将目标服务器/opt/qwe.txt文件下载到本地/opt目录下:
rsync -avz [email protected]:/opt/qwe.txt /opt
2.2:实验环境
-
VMware软件
-
主机名 IP地址 安装服务 系统版本 master 192.168.233.131 rsync,httpd centos7.4 slave 192.168.233.133 rsync,inotify-tools centos7.4
-
2.3:实验拓扑图
2.4:实验过程
2.4.1:开局优化
-
1、修改IP地址,操作相同,仅展示master的操作
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static '//改为static' DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=0f49a612-24ff-4410-8185-c13a60922cdc DEVICE=ens33 ONBOOT=yes IPADDR=192.168.233.131 '//添加下面三个IP地址' NETMASK=255.255.255.0 GATEWAY=192.168.233.2 DNS1=8.8.8.8 [root@localhost ~]# systemctl restart network '//另一台IP地址修改为192.168.233.133'
-
2、关闭防火墙与核心防护功能,两台主机都要做
[root@localhost ~]# systemctl stop firewalld '//关闭防火墙' [root@localhost ~]# systemctl disable firewalld '//禁止防火墙开机自启' Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@localhost ~]# setenforce 0 '//关闭核心防护' [root@localhost ~]# vi /etc/sysconfig/selinux '//禁止核心防护开启自启' SELINUX=disabled
-
3、修改主机名与主机映射文件,两台都做
[root@localhost ~]# hostnamectl set-hostname slave [root@localhost ~]# su [root@slave ~]# vi /etc/hosts 192.168.233.133 slave 192.168.233.131 master [root@slave ~]# ping master '//master主机操作相同,不在赘述'
-
配置本地yum源,两台都做
[root@slave ~]# cd /etc/yum.repos.d/ [root@slave yum.repos.d]# mkdir bak [root@slave yum.repos.d]# mv * bak '//备份原有yum文件' mv: 无法将目录"bak" 移动至自身的子目录"bak/bak" 下 [root@slave yum.repos.d]# vi local.repo '//创建本地yum文件' [mnt] name=mnt baseurl=file:///mnt gpgcheck=0 enbaled=1 [root@slave yum.repos.d]# mount /dev/sr0 /mnt '//手动挂载光盘' mount: /dev/sr0 写保护,将以只读方式挂载 [root@slave yum.repos.d]# vi /etc/fstab '//设置自动挂载' /dev/sr0 /mnt iso9660 defaults 0 0 [root@slave yum.repos.d]# yum clean all '//清理缓存' [root@slave yum.repos.d]# yum makecache '//创建缓存'
2.4.2:配置rsync源服务器
-
安装httpd与rsync服务
[root@master yum.repos.d]# yum install httpd rsync -y
-
修改rsync配置文件
[root@master yum.repos.d]# vi /etc/rsyncd.conf uid = nobody gid = nobody use chroot = yes '//禁锢在源目录' address = 192.168.233.131 '//监听地址' port 873 '//监听端口号' log file = /var/log/rsyncd.log '//日志文件位置' pid file = /var/run/rsyncd.pid '//存放进程ID的文件位置' hosts allow = 192.168.233.133 '//允许访问的客户机地址' [wwwroot] '//共享模块名称' path = /var/www/html '//源目录的实际路径' comment = Document Root of www.51xit.top read only =yes '//是否只读' dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z '//同步时不在压缩的文件类型' auth users = lisi '//授权账户' secrets file = /etc/rsyncd_users.db '//存放账户信息的数据文件'
-
创建于用户密码文件
[root@master yum.repos.d]# vi /etc/rsyncd_users.db '//创建存放账户信息的数据文件' lisi:lisi123 '//采用“用户名:密码”的记录格式,每行一个用户记录独立的账号数据,不依赖于系统账号' [root@master yum.repos.d]# chmod 600 /etc/rsyncd_users.db '//给数据文件设置权限' [root@master yum.repos.d]# ll -ld /var/www/html/ '//查看下源目录的文件权限' drwxr-xr-x. 2 root root 6 8月 4 2017 /var/www/html/
-
启动rsync服务
[root@master yum.repos.d]# rsync --daemon '//启动rsync服务,如果要停止这个服务请使用kill $(cat /var/run/rsyncd.pid)' [root@master yum.repos.d]# netstat -ntap |grep rsync tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 4371/rsync
-
在 /var/www/html目录中,新建文件
[root@master yum.repos.d]# cd /var/www/html/ [root@master html]# ls [root@master html]# touch 111.html [root@master html]# touch 222.html [root@master html]# ls 111.html 222.html '//创建完成后,我们稍后到客户机上操作,进行验证'
2.2.3:客户端配置,本地同步与下行同步
-
安装rsync服务
[root@slave yum.repos.d]# yum install -y rsync
-
本地文件系统上实现同步,
命令格式:rsync [选项] 原始位置 目标位置 [root@slave yum.repos.d]# cd /opt [root@slave opt]# ls rh [root@slave opt]# rsync /etc/fstab /opt '//将本机的/etc/fstab文件同步到本机/opt下' [root@slave opt]# ls fstab rh [root@slave opt]# rsync -rl /boot/grub /opt '//将本机的/boot/grub目录同步到本机/opt下' [root@slave opt]# ls fstab grub rh
-
下行同步的两种方式,密码是lisi123
[root@slave opt]# mkdir myweb '//方法一' [root@slave opt]# rsync -avzH --delete [email protected]::wwwroot /opt/myweb Password: receiving incremental file list ./ 111.html 222.html sent 98 bytes received 207 bytes 87.14 bytes/sec total size is 0 speedup is 0.00 [root@slave opt]# ls /opt/myweb/ 111.html 222.html '//方法二' [root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root Password: receiving incremental file list ./ 111.html 222.html sent 98 bytes received 207 bytes 87.14 bytes/sec total size is 0 speedup is 0.00
2.2.4:rsync源的免密交互处理
-
rsync源的免密交互处理
[root@slave opt]# vi /etc/server.pass '//创建密码文件' lisi123 [root@slave opt]# chmod 600 /etc/server.pass '//给密码文件权限' [root@slave opt]# rm -rf myweb/* '//先删除/opt/myweb目录下的内容用来测试 [root@slave opt]# ls myweb/ [root@slave opt]# rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb '//指定刚刚创建的密码文件,发现已经不需要输入密码了' [root@slave opt]# ls myweb/ 111.html 222.html
-
可以创建周期性任务进行同步源服务器
[root@slave opt]# crontab -e 30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/ '//每天晚上10点半对服务器网站目录更新一次' [root@slave opt]# systemctl restart crond [root@slave opt]# systemctl enable crond
2.2.5:rsync实时同步
-
源端配置
[root@master html]# vi /etc/rsyncd.conf read only = no '//改为no' [root@master html]# kill `cat /var/run/rsyncd.pid` '//关闭rsync服务' [root@master html]# netstat -ntap |grep rsync [root@master html]# rsync --daemon '//开启rsync服务' [root@master html]# netstat -ntap |grep rsync tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 88302/rsync [root@master html]# chmod 777 /var/www/html
-
客户端配置
[root@slave opt]# cat /proc/sys/fs/inotify/max_queued_events '//监控队列大小' 16384 [root@slave opt]# cat /proc/sys/fs/inotify/max_user_instances '//最多监控实例数' 128 [root@slave opt]# cat /proc/sys/fs/inotify/max_user_watches '//每个实例最多监控文件数' 8192 [root@slave opt]# vi /etc/sysctl.conf [root@slave opt]# sysctl -p fs.inotify.max_queued_events = 32768 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576
-
上传
-
客户端安装inotify-tools辅助工具
[root@slave opt]# tar zxf inotify-tools-3.14.tar.gz [root@slave opt]# cd inotify-tools-3.14/ [root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y [root@slave inotify-tools-3.14]# ./configure [root@slave inotify-tools-3.14]# make && make install
-
重新打开一个终端
[root@slave ~]# inotifywait -mrq -e modify,create,move,delete /opt/myweb '//运行持续监控监控' inotifywait:用于持续监控,实时输出结果 inotifywatch:用于短期监控,任务完成后再出结果
-
源服务器编辑脚本并启动
[root@slave inotify-tools-3.14]# vim /opt/inotify.sh [root@slave inotify-tools-3.14]# chmod 777 /opt/myweb/ [root@slave inotify-tools-3.14]# chmod +x /opt/inotify.sh [root@slave inotify-tools-3.14]# cd .. [root@slave opt]# ./inotify.sh '//执行脚本进行监控'
-
重新打开终端,测试rsync上传同步
[root@slave myweb]# touch 111.html '//客户机创建文件,删除文件也可以同步成功' [root@master html]# ll '//服务端查看' 总用量 0 -rw-r--r--. 1 root root 0 3月 24 09:22 111.html '//同步成功' '//查看刚刚运行的脚本监控' rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9] '//发现会有这个报错,但是文件是正常传过去的,这里的这个报错我没有解决掉,如果有朋友解决了可以私信我或者评论告诉我,多谢!'