rsync服务+sersync服务
1、rsync服务介绍
什么是rsync?
rsync=Remote Sync远程同步,它是比较高效的,一定要结合shell一并结合
rsync的官方网站:https://rsync.samba.org
查看rsync的版本
[root@node0 ~]
rsync version 3.1.2 protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
scp命令也是基于ssh服务传输文件
- 语法:scp +文件路径 +root@ip地址:/目录路径
- 如果要传送目录需要加上-r的参数
[root@node0 ~]
The authenticity of host '192.168.75.131 (192.168.75.131)' can't be established.
ECDSA key fingerprint is SHA256:sDTQpWlWc74piDzFUAvC7+zE78wT3+3A/PuuAC9LiNs.
ECDSA key fingerprint is MD5:d1:88:0b:d7:65:9d:a5:c1:7b:9c:b9:37:2a:3b:a1:b8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.75.131' (ECDSA) to the list of known hosts.
root@192.168.75.131's password:
anaconda-ks.cfg 100% 1666 150.8KB/s 00:00
[root@Node1 ~]
-rw------- 1 root root 1666 2月 17 23:25 /tmp/anaconda-ks.cfg
[root@node0 ~]
rsync和sync命令到底有什么区别?
- scp命令是没有办法备份大量数据的,仅仅类似于windows的复制
- rsync是可以统计差异文件的,边统计也是边比较
rsync的特性和优点
- rsync可以保存整个目录树和文件系统
- 可以准确地保存原来文件的权限、时间、软硬链接等等
- 无需特殊权限就能够安装
- 如果第一次使用rsync,系统会复制所有的内容,但是下一次执行只修正改过的违建
- 可以压缩传输,可以减少资源的损耗
- 可以使用scp、ssh等加密方式来传输文件也可以通过sock套接字来连接诶
- 支持匿名传输
常见的备份分类
常见的备份方式有三种
- 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地,相当于复制
- 差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)
- 增量备份:备份上次备份以后有变化的数据.(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)
rsync的运行模式和端口
- rsync使用的是C/S架构–>就是客户端/服务器模式–>点到点的传输可以直接使用rsync
- 端口号:873
rsync的几个名词掌握
- 发起端:负责发起rsync同步操作的服务器就是发起端
- 备份源:负责相应来自客户机rsync同步操作的服务器叫作备份源,需要备份的服务器
- 服务器端:运行rsync服务的服务器
- 客户端:就是存放备份数据的服务器
rsync的同步方式
- 推push:一台主机负责把数据传送给其他主机,服务器的开销很大,比较适合后端服务器少的情况
- 目的主机配置为rsync服务器,源主机周期性的使用rsync命令把要同步的目录推过去(需要备份的机器是客户端,存储备份的机器是服务端)
- 拉pull:所有的主机定时去找一台主机拉数据;有可能会导致数据缓慢
- 源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来(需要备份的机器是服务端,存储备份的机器是客户端)
自己的理解就是谁需要rsync的时候第一个跟的是谁,来决定推与拉
- 比如说rsync+选项+本地文件+对方ip—>这种就是推
- 然后rsync+选项+对方ip+本地路径–>就是同步拉去数据;
还有一个知识点就是:rsync是有xinetd来管理的
监听的端口是873端口;
如果使用rsync来同步的时候是先通过xinetd监听873端口,然后通知rsync服务来响应,然后就两者通信
2、rsync的实验搭建
首先是规划:
- 192.168.75.134–>是源主机
- 192.168.75.135–>是目标主机
上面简介所得知:rsync服务是有xinetd是来管理的–>因此yun安装的时候需要把xinetd这个软件也安装起来
[root@Node4 ~]
[root@Node4 ~]
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@Node4 ~]
Disabled
[root@Node4 yum.repos.d]
[root@Node4 ~]
[root@Node4 ~]
tcp LISTEN 0 5 *:873 *:* users:(("rsync",pid=8809,fd=4))
tcp LISTEN 0 5 :::873 :::* users:(("rsync",pid=8809,fd=5))
[root@Node4 ~]
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 8809/rsync
tcp6 0 0 :::873 :::* LISTEN 8809/rsync
3、rsync的命令讲解
作用:rsync的命令其实和scp命令非常相似
语法:
- rsync + 选项+ 本地路径+ root@192.168.75.135:/data/
- rsync + 选项+ root@192.168.75.135:/data/+本地路径
选项:
- -a:权限保存模式,相当于-rlptgoD 参数,存档,递归,保持属性等
- -r:复制目录下所有的资料,递归处理
- -p:保存权限、文件原有属性
- -t:保存时间属性
- -g:文件原来的所属组
- -o:文件原来的所有者
- -D:保留
- -v:显示详情
- -l:保留链接属性
- -z:压缩,传输的过程中压缩
- -H:保留硬链接的属性文件
- -A:保存acl属性,需要配合–perms的参数
- -u:仅仅更新,跳过目标文件
- –port:指定rsync的端口,不指定默认的是873
- –delete:通常用于同步源和目标的文件的,就是保证相同,删除不同的文件
- –password-file=:指定file中得到密码
讲了那么多的选项:其实用的最多就是-avz选项
4、rsync的实验案例
案例一:使用rsync备份数据
要求就是把75.134的/data/www/html的数据同步到75.135:/data/web_bak的目录
[root@Node4 ~]
[root@Node4 ~]
[root@Node4 ~]
1.txt 2.txt 3.txt 4.txt 5.txt
[root@Node4 ~]
[root@Node4 ~]
更改用户 rabbit01 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@Node4 ~]
[root@Node4 ~]
[root@Node4 ~]
getfacl: Removing leading '/' from absolute path names
user::rwx
user:rabbit01:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:rabbit01:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@Node5 ~]
[root@Node5 ~]
The authenticity of host '192.168.75.134 (192.168.75.134)' can't be established.
ECDSA key fingerprint is SHA256:sDTQpWlWc74piDzFUAvC7+zE78wT3+3A/PuuAC9LiNs.
ECDSA key fingerprint is MD5:d1:88:0b:d7:65:9d:a5:c1:7b:9c:b9:37:2a:3b:a1:b8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.75.134' (ECDSA) to the list of known hosts.
rabbit01@192.168.75.134's password:
receiving incremental file list
html/
html/1.txt
html/2.txt
html/3.txt
html/4.txt
html/5.txt
sent 123 bytes received 322 bytes 30.69 bytes/sec
total size is 0 speedup is 0.00
[root@Node5 ~]
1.txt 2.txt 3.txt 4.txt 5.txt
案例二:使用系统配置文件来备份数据,创建备份账户,最后一deamon方式运行
rsyncd.conf的配置文件在哪儿?
[root@Node5 ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
使用配置文件定义目录输出
[root@Node4 ~]
uid = root
gid = root
address = 0.0.0.0
port = 873
hosts allow = 192.168.75.0/24
use chroot = yes
max connections = 5
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
[wwwroot]
path = /data/web_back/
comment = used for web_data root
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd
[root@Node4 ~]
[root@Node4 ~]
rsyncuser:password123
[root@Node4 ~]
[root@Node4 ~]
[root@Node4 ~]
[root@Node4 ~]
[root@Node4 ~]
[root@Node4 ~]
tcp 0 0 192.168.75.134:873 0.0.0.0:* LISTEN 7409/rsync
[root@Node5 ~]
这里是备份路径
Password:
sending incremental file list
deleting 5.txt
deleting 4.txt
deleting 3.txt
deleting 2.txt
deleting 1.txt
./
html/
html/1.txt
html/2.txt
html/3.txt
html/4.txt
html/5.txt
sent 357 bytes received 167 bytes 24.37 bytes/sec
total size is 0 speedup is 0.00
[root@Node5 ~]
password123
[root@Node5 ~]
[root@Node5 ~]
这里是备份路径
sending incremental file list
sent 163 bytes received 13 bytes 16.76 bytes/sec
total size is 0 speedup is 0.00
案例三:使用脚本来进行定时备份
其实就是把他写进一个脚本上,并且加入定时任务
[root@Node5 ~]
rsync -avz --delete /data/web_bak/ rsyncuser@192.168.75.134::wwwroot --password-file=/data/rsync.passwd
[root@Node5 ~]
[root@Node5 ~]
[root@Node5 ~]
这里是备份路径
sending incremental file list
deleting html/5.txt
deleting html/4.txt
deleting html/3.txt
deleting html/2.txt
deleting html/1.txt
deleting html/
./
sent 47 bytes received 98 bytes 13.81 bytes/sec
total size is 0 speedup is 0.00
[root@Node5 ~]
no crontab for root - using an empty one
* * 1 * * bash /root/autobackup.sh
5、rsync的配置文件参数讲解
简单讲述一下rsync的配置文件
配置文件有两个部分–>分别是全局参数、模块参数
- 全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数生效
- 模块参数:定义需要通过rsync输出的目录定义的参数
查看一下rsync的配置文件
[root@Node4 ~]
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
常见的rsync的全局参数
port
uid
gid
max connections
lock file
motd file
log file
pid file
hosts allow =
常见的模块参数
[ 共享模块名字 ]
....然后接的就是具体的参数....
comment
Path
read only
exclude
exclude from
include
include from
auth users
secrets file
hosts allow
单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,
整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0
hosts deny
list
timeout
6、rsync+sersync实现数据实时同步
6.1)规划:
- sersync服务器(数据源、源机器):192.168.75.135
- rsync服务器(备份机器,目标机器):192.168.75.134
问题:为何要使用rsync+sersync架构?
- sersync是基于inotify开发的,类似于inotify-tools的工具
- sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录
问题:rsync+inotify-tools和rsync+sersync架构的区别?
对于rsync+inotify-tools来说
- inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
- rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低
但是rsync+sersync来说
- sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
- rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。
6.2)rsync+sersync的同步过程讲解
第一:在同步服务器上开启了sersync服务,sersync负责监控配置路径中的文件系统事件的变化
第二:调用rsync命令把更新的文件同步到目标服务器
第三:需要在主服务器配置sersync,在同步目标服务器配置rsync server;
同步的过程和原理
- 用户实时的往sersync服务器上写入更新文件数据;
- 此时需要在同步主服务器上配置sersync服务;
- 在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据;通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器
实验过程
75.134服务器部署sersync服务
[root@Node5 src]
sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@Node5 src]
[root@Node5 src]
[root@Node5 src]
[root@Node5 sersync]
[root@Node5 sersync]
[root@Node5 sersync]
23 <sersync>
24 <localpath watch="/data/web_bak">
25 <remote ip="192.168.75.134" name="wwwroot"/>
26 <!--<remote ip="192.168.75.135" name="wwwroot"/>-->
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
........
28 <rsync>
29 <commonParams params="-artuz"/>
30 <auth start="ture" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>
31 <userDefinedPort start="false" port="874"/><!-- port=874 -->
32 <timeout start="false" time="100"/><!-- timeout=100 -->
33 <ssh start="false"/>
........
[root@Node5 ~]
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /usr/src/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data/web_back && rsync -artuz -R --delete ./ 192.168.75.135::wwwroot >/dev/null 2>&1
run the sersync:
watch path is: /data/web_back
测试:
[root@Node5 web_bak]
[root@Node5 ~]
使用脚本检测sersync服务
[root@Node5 ~]
sersync="/usr/src/sersync/sersync2"
confxml="/usr/src/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];
then
$sersync -d -r -o $confxml &
else
exit 0;
fi
如果想要多实例检测
- 可以配置多个confxml.xml文件
- 根据不同的需求同步对应的实例文件
问题报错
1、如果客户端连接的时候出现如下报错
[root@Node5 ~]
这里是备份路径
Password:
@ERROR: auth failed on module wwwroot
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
[root@Node4 ~]
......
2022/03/02 21:39:01 [7577] connect from UNKNOWN (192.168.75.135)
2022/03/02 21:39:24 [7577] auth failed on module wwwroot from UNKNOWN (192.168.75.135) for rsyncuser: no secrets file
|