Rsync 备份服务搭建

一. 前言

#01 为什么需要文件自动同步功能?
我们平时上传代码,可以通过 ftp、sftp 等将文件上传至服务器,耗时耗力,而且很容易出错。如果服务器数量少还好,一但服务器数量增加,压力可想而知。
这里使用 rsync+sersync 进行文件自动同步

二. rsync 和 sersync

  • rsync 文件传输
  • sersync 实时同步
  • 定义
#01 rsync 介绍
rsync 是 linux 下同步文件的一个高效算法,用于同步更新两处计算机的文件和目录,并适当利用查找文件中的不同块以减少数据传输。rsync 的主要特点就是增量传输,只对变更的部分进行传输。 #02 sersync 介绍
sersync 利用 inotify 与 rsync 对服务器进行实时同步,其中 inotify 用于监控文件系统事件,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。

2.1 rsync 基本语法

##安装
yum -y install rsync
systemctl start rsyncd.service #启动rsync服务
systemctl enable rsyncd.service #将rsync服务 加入开机自启 #01 基本使用语法
rsync 远程复制传输
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-H, --hard-links 保留硬链结
--delete 删除那些DST中SRC没有的文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
-P 等同于 --partial
--force 强制删除目录,即使不为空
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--progress 在传输时现实传输过程
--password-file=filename 免交互式传输文件 经常用的参数:
rsync -avzP --delete --progress

2.2 本地文件传输

#和cp用法一样

#01 复制目录
[root@master01 rsync]# rsync -r /etc ./
[root@master01 rsync]# rsync -r /etc/ ./ 解释下:
/etc 不加 / 代表复制目录
/etc/ 加 / 代表复制目录下所有内容 #02 复制文件
[root@kq_mysql ~]# rsync test.txt /tmp/

2.3 ssh 远程文件传输

#01 基于ssh 文件传输
[root@master01 rsync]# rsync -avzP master01.txt 10.0.0.101:/opt/ 解释下:复制 master01.tx 文件到 10.0.0.101服务器 /opt/目录下 #02 复制目录到远程主机
[root@master01 rsync]# rsync -avzP dir01 10.0.0.101:/opt/
root@10.0.0.101's password:
sending incremental file list
dir01/
dir01/test.txt
4 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/2) sent 128 bytes received 39 bytes 19.65 bytes/sec
total size is 4 speedup is 0.0 #03 复制远程主机到本地
[root@master01 rsync]# rsync -avzP 10.0.0.101:/opt/dir01 ./
[root@master01 rsync]# ll
总用量 0
drwxr-xr-x 2 root root 22 7月 25 22:11 dir01

2.4 基于服务 远程主机文件传输

#01 从服务器同步文件到本地
[root@localhost ~]# rsync -avzP tank@10.0.0.101::test /home/test #02 从服务器同步文件到本地
[root@localhost ~]# rsync -avz /home/test tank@10.0.0.101::test #从本地同步文件到服务器 #03 免交互式同步文件
[root@node01 rsync]# rsync -avzPH --progress --delete /data/rsync/ bookuser@10.0.0.100::book --password-file=/etc/passwd.txt 解释下:
-avzHP
--progress
--delete
bookuser@ rsync用户名
192.168.5.9 要传输到主机名称
book 传输到那?对应的位置 模块名称

三. 部署 rsync

3.1 项目要求

  • 服务器 master01的/data/book/ 目录,实时同步 node01的 /data/rsync/目录
  • node01:/data/rsync --->> Macter01:/data/book/
服务器 ip 安装服务 角色
Master01 10.0.0.100 Rsync (修改配置文件 指定模块名称) 服务端
Node01 10.0.0.101 Rsync Sersync 客户端

3.2 环境准备

#01 关闭防火墙 selinux
vi /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出 #02 开放端口 (先不执行)
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="A服务器IP" port protocol="tcp" port="873" accept" #开放端口
systemctl restart firewalld #重启防火墙
firewall-cmd --list-all #查看规则是否生效

3.3 搭建服务端 rsync

#01 安装 rsync (master01)
yum -y install rsync
systemctl start rsyncd.service #启动rsync服务
systemctl enable rsyncd.service #将rsync服务 加入开机自启 #02 检查服务
ps -ef | grep rsync #03 修改配置文件(master01)
1)修改配置文件
[root@aliyun ~]# grep -E -v '^$|^#' /etc/rsyncd.conf
log file = /var/log/rsyncd.log
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
uid = root
gid = root
use chroot = no
max connections = 1200
timeout = 600 [book]
path = /data/book/
comment = book
port=873
read only = no
list = no
auth users = bookuser 2) 配置文件详解
vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
#pid file = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
max connections = 1200 #最大连接数
timeout = 600 #设置超时时间 [book] #自定义名称
path = /data/book/ #rsync服务端数据目录路径
comment = book #模块名称与[book]自定义名称相同
port=873 #默认端口
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
auth users = bookuser #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 10.0.0.0/24 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.0.1 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开 #04 创建用户认证文件 并设置密码
echo "bookuser:123456" >/etc/rsync.pass
cat /etc/rsync.pass
bookuser:123456 #05 由于是密码 需要设置权限
chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
chmod 600 /etc/rsync.pass #设置文件所有者读取、写入权限 #06 重启服务
systemctl restart rsyncd #07 创建密码文件
[root@master01 rsync]# echo '123456' >/etc/passwd.txt
[root@master01 rsync]# chmod 600 /etc/passwd.txt

3.3 搭建客户端 rsync

#01 安装rsync (node01)
yum -y install rsync
systemctl start rsyncd.service #启动rsync服务
systemctl enable rsyncd.service #将rsync服务 加入开机自启 #02 创建密码文件
vi /etc/passwd.txt #编辑文件,添加以下内容
123456 #密码 ,B服务器里设置的密码
:wq! #保存退出 chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可 #03 客户端运行测试
[root@node01 rsync]# rsync -avzPH --progress --delete /data/rsync/ bookuser@10.0.0.100::book --password-file=/etc/passwd.txt

四.部署 sersync

  • d:启用守护进程模式
  • -r:在监控前,将监控目录与远程主机用rsync命令推送一遍
  • -o:指定配置文件,默认使用confxml.xml文件
  • 客户端执行

4.1 环境准备

#01 修改 inotify 默认参数(inotify 默认内核参数值太小)
vi /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出

4.2 安装服务

#01 下载链接
cd /opt/
wget http://101.132.24.74/download/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz #02 解压到指定位置
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压
mv GNU-Linux-x86 /usr/local/sersync #移动目录到/usr/local/sersync #03 备份配置文件
cd /usr/local/sersync #进入sersync安装目录
cp confxml.xml confxml.xml-back #备份原文件

4.3 修改配置文件

#01 配置文件
[root@node01 sersync]# cat confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify> <sersync>
<localpath watch="/data/rsync">
<remote ip="10.0.0.100" name="book"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="bookuser" passwordfile="/etc/passwd.txt"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
  • 参数解释
<localpath watch="/data/rsync">  				#源服务器同步目录
<remote ip="10.0.0.100" name="book"/> #目标服务器ip,每行一个 #目标服务器rsync同步目录模块名称
<auth start="true" users="bookuser" passwordfile="/etc/passwd.txt"/>
start="true" #设置为true,每隔600分钟执行一次全盘同步
users="bookuser": #目标服务器rsync同步用户名
passwordfile="/etc/passwd.txt": #目标服务器rsync同步用户的密码在源服务器的存放路径
failLog path="/tmp/rsync_fail_log.sh" #脚本运行失败日志记录

4.4 运行测试

#01 运行测试
[root@node01 sersync]# /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
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/local/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is bookuser
passwordfile is /etc/passwd.txt
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/rsync && rsync -artuz -R --delete ./ bookuser@10.0.0.100::book --password-file=/etc/passwd.txt >/dev/null 2>&1
run the sersync:
watch path is: /data/rsync #02 检查目录 发现同步成功
1)源目录
[root@kq_mysql rsync]# ll
总用量 4
drwxr-xr-x 3 root root 16 7月 25 12:30 01
-rw-r--r-- 1 root root 2 7月 25 14:07 eee.txt 2)同步到目录
[root@centos_4c8g book]# ll
总用量 4
drwxr-xr-x 3 root root 16 7月 25 12:30 01
-rw-r--r-- 1 root root 2 7月 25 14:07 eee.txt ## 此客户端 10.0.0.101 node01 目录 /data/rsync 自动向 服务端 msater01 10.0.0.100 book模块自动同步
10.0.0.101 node01 -->>输入--->> msater01 10.0.0.100 book #命令参数解释: /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
-d:启用守护进程模式
-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
-o:指定配置文件,默认使用confxml.xml文件

4.5 重启服务

#01 如果修改了配置文件 则需要重启服务
1)关闭进程
killall sersync2 #杀掉全部近程 2)启动服务
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml

4.6 开机自启

#01 方式一
vi /etc/rc.d/rc.local #编辑,在最后添加一行
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #设置开机自动运行脚本 :wq! #保存退出 #02 方式2
vim /etc/init.d/sercync.sh
#!/bin/bash
# description: zhangyuzhou
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #03 授权并加入系统服务中
chmod +x sersync.sh
chkconfig --add sersync.sh
chkconfig sersync.sh #开机自启动 解释下:
chkconfig 命令用于检查,设置系统的各种服务
--add 添加到系统服务 ###删除系统服务 如果不想使用了 可执行该文件
chkconfig --del sersync.sh

Rsync 备份服务搭建的更多相关文章

  1. rsync 备份服务搭建(完成)

    rsync服务守护进程 服务器端配置过程: 1. 检查rsync是否安装: rpm -qa rsync 2.添加rsync服务的用户,管理本地目录 useradd-s /sbin/nologin -M ...

  2. day27 综合架构 rsync备份服务

    sync软件使用方法: rsync命令 1v4 a 本地备份数据 cp [root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll ...

  3. 3、Rsync备份服务实战

    1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync官方地址:传送门http:// ...

  4. Rsync备份服务实战

    目录 Rsync备份服务实战 一.Rsync 二.rsync的应用场景 1.Rync的数据同步模式 2.rsync的三种模式 三.rsync配置服务端客户端 四.rsync实战 实战一 报错解决方法: ...

  5. Rsync备份服务部署

    1 Rsync服务器架构规划 在搭建服务之前需要做以下规划设计,其中包括:主机规划表.主机IP地址规划表.主机架构图.主机hosts解析以及linux主机基础优化等 1.1 主机规划表 服务器说明 数 ...

  6. 二.Rsync备份服务

    自己动手部署一遍 期中架构-第二章-备份服务笔记====================================================================== 01. 课 ...

  7. rsync实时备份备份服务搭建和使用指南

    一.Rsync企业工作场景说明: 1.利用定时任务+rsync方式实现数据同步 对于网站内部技术人员创建的数据,可以采取定时任务的方式 2.利用实时任务+rsync方式实现数据同步 对于网站外部访问用 ...

  8. Rsync备份服务

    一.Rsync 原理图 二.Rsync 原理描述 2.1:什么是Rsync Rsync是备份的一款软件,它可以实现全量备份.增量备份,也可以在不改变内容.属性的情况下进行同步备份,端口默认是873 2 ...

  9. Linux Rsync备份服务介绍及部署守护进程模式

    rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份工具 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输 ...

  10. Linux中rsync备份服务部署

    rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份工具 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输 ...

随机推荐

  1. blazor maui hybrid app显示本地图片

    啊... ... 一通操作下来感觉就是两个字 折磨 跨平台有跨平台的好处 但框架本身支持的有限 很多东西做起来很曲折 哎 这里总结一下笔者为了折腾本地图片显示的尝试 为什么要做本地图片展示呢 如果是做 ...

  2. STL源码剖析 | priority_queue优先队列底层模拟实现

    今天博主继续带来STL源码剖析专栏的第四篇博客了! 今天带来优先队列priority_queue的模拟实现!话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕 ...

  3. XmlDocument 解决 Clone、CloneNode、ImportNode 等节点克隆后的标签自闭合问题

    前言: 这两天在对 Taurus.Mvc 做 html 加载性能优化时,发现存在这个问题. 具体优化的是 CYQ.Data 组件的 XHtmlAction 相关类. 问题过程: 之前 XmlDocum ...

  4. ch583/ch582/ch573/ch571 central(主机)程序

    本程序是在CH582m上运行的, 一.主从连接 主机这里可以根据从机的MAC地址进行连接.static uint8_t PeerAddrDef[B_ADDR_LEN] = {0x02, 0x02, 0 ...

  5. 内存泄漏定位工具之 mtrace(一)

    1 前言 mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存泄露问题.它的实现源码在glibc源码的malloc目录下,其基本设计原理为设 ...

  6. 火山引擎ByteHouse:如何为OLAP设计高性能向量检索能力?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力"异军 ...

  7. ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记

    任务20:Consent Controller Get请求逻辑实现 接着上一节的思路,实现一下 ConsentController 根据流程图在构造函数注入 IClientStore,IResourc ...

  8. NC19325 游戏

    题目链接 题目 题目描述 BLUESKY007,fengxunling和dreagonm三个人发现了一个像素游戏,这款神奇的游戏每次会生成一个nxm的网格,其中每一个格子都被随机染色为R,G,B三种颜 ...

  9. NC50614 取石子游戏 1

    题目链接 题目 题目描述 有一种有趣的游戏,玩法如下: 玩家:2人: 道具:N颗石子: 规则: 游戏双方轮流取石子:每人每次取走若干颗石子(最少取1颗,最多取K颗):石子取光,则游戏结束:最后取石子的 ...

  10. SSD 接口简介——M.2/U.2

    一,M.2 - the Next Generation Form Factor (NGFF) 从名字上可以看出M.2在最初主要关于新一代尺寸的规格,它定义了以下几种尺寸,类似于内存条的样子. M.2 ...