阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下Rsync服务器/客户端搭建实战

233次阅读
没有评论

共计 10807 个字符,预计需要花费 28 分钟才能阅读完成。

一、需求

每晚汇总各机器的操作日志,同步到主服务器进行日志分析。

二、基础知识

rsync 分为服务器端、客户端,服务器端搭建比客户端辛苦一些(也是很简单)。

rsync 服务器是指以 deamon 方式运行 rsync 服务的服务器,需要打开 rsync deamon 和启动 xinetd 服务。默认端口 873。

rsync 客户端是发起 rsync 连接的服务器,安装 rsync 即可。

rsync 客户端发起连接后,rsync 服务器会检查 rsync 客户端提交 rsync 服务器内建的户名和密码是否正确,如果通过认证检测,则开始文件传输,传输的过程是按要求先比对文件的大小、属性、权限、MD5 值等信息,如果两端文件信息不一致,则按要求同步文件的区别块。

三、安装

大多数 Linux 操作系统都自带 rsync 服务,如果想升级可以使用 yum 等,也可以使用源码包自己安装。

wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz
tar -xzf rsync-3.1.2.tar.gz
cd rsync-3.1.2

./configure –prefix=/usr/local/rsyncd
make && make install

四、服务端配置

rsync 配置文件安装完有时候并不存在,不必惊慌,可以手动创建。创建配置文件目录及文件如下:

| – /etc/rsyncd(文件夹)

| – rsyncd.conf(rsync 服务器的配置文件)

| – rsyncd.secrets(用户密码文件,客户端使用其中的账号密码访问,需要 600 权限)

| – rsyncd.motd(自定义用户登录后显示的服务器信息,即 messageoftoday,)

mkdir /etc/rsyncd

touch /etc/rsyncd/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets
touch /etc/rsyncd/rsyncd.motd

chmod 600 /etc/rsyncd/rsyncd.secrets

/etc/rsyncd/rsyncd.conf

pid file = /var/run/rsyncd.pid #进程 pid 文件所在位置
port = 873 #指定监听端口,默认是 873,可以自己指定
address = 192.168.1.171 #服务器监听的 IP 地址,可省略

uid = root #守护进程所属的 uid,默认是 nobody,可能会碰到文件或目录权限问题,此处偷懒用的 root
gid = root #守护进程的 gid

#chroot,即改变程序执行时所参考的根目录位置,在传输文件之前,服务器守护程序在将 chroot 到文件系统中的目录中
# 这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外
# 也就是说,你在 rsync 服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容
use chroot = yes

read only = no #只读选择,只让客户端从服务器上读取文件
write only = yes #只写选择,只让客户端到服务器上写入

# 允许访问的 IP,可以指定单个 IP,也可以指定整个网段,能提高安全性。格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开;
hosts allow = 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0

max connections = 5 #客户端最多连接数

# 当用户登录时会看到这个信息。比如显示当前时间、公告等
motd file = /etc/rsyncd/rsyncd.motd

log file = /var/log/rsync.log #rsync 服务器的日志;
transfer logging = yes #记录传输文件的日志
log format = %t %a %m %f %b #日志格式
syslog facility = local3 #日志级别

# 通过该选项可以覆盖客户指定的 IP 超时时间。可以确保 rsync 服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0 表示没有超时定义,这也是默认值。对于匿名 rsync 服务器来说,一个理想的数字是 600。
timeout = 300

# 模块定义
# 主要是定义服务器哪个目录要被同步。
# 每个模块都要以[name] 形式。这个名字就是在 rsync 客户端看到的名字。
# 但是服务器真正同步的数据是通过 path 指定的。可以依次创建多个模块。
# 每个模块要指定认证用户、密码文件,但排除并不是必须的。
[logs] #模块名,以下配置都属于此模块
path = /var/log #文件目录所在位置
list = no #当查看服务器上提供了哪些目录时是否列出来,no 比较安全
ignore errors #忽略 I / O 错误

# 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系,是 rsyncd.secrets 中的用户名!
# 如果 ”auth users” 被设置,那么客户端发出对该模块的连接请求以后会被 rsync 请求 challenged 进行验证身份。
# 这里使用的 challenge/response 认证协议。
# 用户的名和密码以明文方式存放在 ”secrets file” 选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
auth users = linuxidc
secrets file = /etc/rsyncd/rsyncd.secrets #密码文件

exclude = error_log httpd.pid #忽略的文件或目录
comment this is my log #本模块注释,可选

 

  /etc/rsyncd/rsyncd.secrets 密码文件,用户名称与密码以冒号分隔,多个用户名和密码可以多行

linuxidc:239fjdalk@893246dasaATDFBSad
zhangab:669fjbalk@8sadf$3246dasaATDFBSaf

/etc/rsyncd/rsyncd.motd 登录公告

++++++++++++++++++++++++++++++
+ John ABC  rsync  2008-2099 +
++++++++++++++++++++++++++++++

五、启动服务端

启动服务端有两种方式。

1. 直接使用 –daemon 参数

/usr/local/rsync/bin/rsync –daemon –config=/etc/rsyncd/rsyncd.conf

2.xinet 方式

1). 修改 /etc/services,加入以下内容,如果已经有可以不加,如果端口改了,需要改掉 873 端口为指定端口

rsync 873/tcp # rsync
rsync 873/udp # rsync

2). 修改 /etc/xinetd.d/rsync,主要是要打开 rsync 這個 daemon, 一旦有 rsync client 要连接時, xinetd 会把它转介給 rsyncd(port 873)。

 

service rsync
{
    disable = no
    socket_type    = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args    = –daemon –config=/etc/rsyncd/rsynd.conf
    log_on_failure  += USERID
}

 

3). 重启 xinetd

service xinetd restart

 

六、客户端配置

创建密码文件,/etc/rsyncd/rsyncd.pass,并修改为 600 权限

touch /etc/rsyncd/rsyncd.pass
chmod 600 /etc/rsyncd/rsyncd.pass

/etc/rsyncd/rsyncd.pass 其内密码需要和服务端内 /etc/rsyncd/rsyncd.pass 指定用户的密码保持一致

239fjdalk@893246dasaATDFBSad 

七、客户端向服务端传输文件,如果是 873 端口,可以把 –port 去掉

rsync -vzrtopg –delete –progress /var/log/access.log linuxidc@192.168.1.100::logs  –password-file=/etc/rsyncd/rsyncd.pass –port=873

若有需要也可以从服务端拉取文件,需要把服务器的 /etc/rsyncd/rsyncd.conf 中的 write only = yes 给去掉

# 拉取整个目录
rsync -vzrtopg –delete –progress  –password-file=/etc/rsyncd/rsyncd.pass –port=873 linuxidc@192.168.1.100::logs  /var/log

# 拉取单个文件
rsync -vzrtopg –delete –progress  –password-file=/etc/rsyncd/rsyncd.pass –port=873 linuxidc@192.168.1.100::logs/a.log  /var/log

八、附赠 /etc/init.d/rsync

#!/bin/bash

# chkconfig:  – 85 15
# description: rsync

status1=$(ps -ef | egrep “rsync –daemon.*rsyncd.conf” | grep -v ‘grep’)
pidfile=”/var/run/rsyncd.pid”
start_rsync=”rsync –daemon –config=/etc/rsyncd/rsyncd.conf”

function rsyncstart() {
    if [“${status1}X” == “X” ]; then
        rm -f $pidfile     
        ${start_rsync} 
        status2=$(ps -ef | egrep “rsync –daemon.*rsyncd.conf” | grep -v ‘grep’)
        if [“${status2}X” != “X”  ]; then
            echo “rsync service start…….OK”
        fi
    else
        echo “rsync service is running !”   
    fi
}

function rsyncstop() {
    if [“${status1}X” != “X” ]; then
        kill -9 $(cat $pidfile)
        status2=$(ps -ef | egrep “rsync –daemon.*rsyncd.conf” | grep -v ‘grep’)
        if [“${statusw2}X” == “X” ]; then
            echo “rsync service stop…….OK”
        fi
    else
        echo “rsync service is not running !”   
    fi
}

function rsyncstatus() {
    if [“${status1}X” != “X” ]; then
        echo “rsync service is running !” 
     
    else
        echo “rsync service is not running !” 
    fi
}

function rsyncrestart() {
    if [“${status1}X” == “X” ]; then
              echo “rsync service is not running…”
              rsyncstart
        else
              rsyncstop
              rsyncstart   
        fi     

case $1 in
        “start”)
              rsyncstart
                ;;
        “stop”)
              rsyncstop
                ;;
        “status”)
              rsyncstatus
              ;;
        “restart”)
              rsyncrestart
              ;;
        *)
          echo
                echo  “Usage: $0 start|stop|restart|status”
          echo
esac

 

九、附赠配置参数

全局参数
在文件中 [module] 之前的所有参数���是全局参数,当然也可以在全局参数部分定义模块参数,这时候该参数的值就是所有模块的默认值。

port
指定后台程序使用的端口号,默认为 873。

motd file
“motd file” 参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有 motd 文件的。

log file
“log file” 指定 rsync 的日志文件,而不将日志发送给 syslog。比如可指定为“/var/log/rsyncd.log”。

pid file
指定 rsync 的 pid 文件,通常指定为“/var/run/rsyncd.pid”。

syslog facility
指定 rsync 发送日志消息给 syslog 时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6 和 local7。默认值是 daemon。

模块参数
主要是定义服务器哪个目录要被同步。其格式必须为“[module]”形式,这个名字就是在 rsync 客户端看到的名字,其实有点象 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。我们可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

comment
给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

path
指定该模块的供备份的目录树路径,该参数是必须指定的。

use chroot
如 果 ”use chroot” 指定为 true,那么 rsync 在传输文件以前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺 点是需要以 roots 权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下 chroot 值为 true。

uid
该选项指定当该模块传输文件时守护进程应该具有的 uid,配合 gid 选项使用可以确定哪些可以访问怎么样的文件权限,默认值是 ”nobody”。

gid
该选项指定当该模块传输文件时守护进程应该具有的 gid。默认值为 ”nobody”。

max connections
指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是 0,也就是没有限制。

list
该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。默认值是 true。

read only
该选项设定是否允许客户上载文件。如果为 true 那么任何上载请求都会失败,如果为 false 并且服务器目录读写权限允许那么上载是允许的。默认值为 true。

exclude
用来指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式,一个 模块只能指定一个 exclude 选项。但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过 exclude 列表,如果希望确保特定的文件不能 被访问,那就最好结合 uid/gid 选项一起使用。

exclude from
指定一个包含 exclude 模式的定义的文件名,服务器从该文件中读取 exclude 列表定义。

include
用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用 –include 来指定模式,结合 include 和 exclude 可以定义复杂的 exclude/include 规则。

include from
指定一个包含 include 模式的定义的文件名,服务器从该文件中读取 include 列表定义。

auth users
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果 ”auth users” 被设置,那么客户端发出对该模块的连接请求以后会被 rsync 请求 challenged 进行验证身份这里使用的 challenge/response 认证协议。用户的名和密码以明文方式存放在 ”secrets file” 选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file
该选项指定一个包含定义用户名: 密码对的文件。只有在 ”auth users” 被定义时,该文件才有作用。文件每行包含一个 username:passwd 对。一般来说密码最好不要超过 8 个字符。没有默认的 secures file 名,需要限式指定一个(例如:/etc/rsyncd.passwd)。注意:该文件的权限一定要是 600,否则客户端将不能连接服务器。

strict modes
该选项指定是否监测密码文件的权限,如果该选项值为 true 那么密码文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为 true。

hosts allow
该选项指定哪些 IP 的客户允许连接该模块。客户模式定义可以是以下形式:
 单个 IP 地址,例如:192.167.0.1
整个网段,例如:192.168.0.0/24,也可以是 192.168.0.0/255.255.255.0
多个 IP 或网段需要用空格隔开,“*”则表示所有,默认是允许所有主机连接。

hosts deny
指定不允许连接 rsync 服务器的机器,可以使用 hosts allow 的定义方式来进行定义。默认是没有 hosts deny 定义。

ignore errors
指定 rsyncd 在判断是否运行传输时的删除操作时忽略 server 上的 IO 错误,一般来说 rsync 在出现 IO 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 IO 错误导致的严重问题。

ignore nonreadable
指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。

lock file
指定支持 max connections 参数的锁文件,默认值是 /var/run/rsyncd.lock。

transfer logging
使 rsync 服务器使用 ftp 格式的文件来记录下载和上载操作在自己单独的日志中。

log format
通过该选项用户在使用 transfer logging 可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示:

%h 远程主机名
%a 远程 IP 地址
%l 文件长度字符数
%p 该次 rsync 会话的进程 id
%o 操作类型:”send” 或 ”recv”
%f 文件名
%P 模块路径
%m 模块名
%t 当前时间
%u 认证的用户名(匿名时是 null)
%b 实际传输的字节数
%c 当发送文件时,该字段记录该文件的校验码

默认 log 格式为:”%o %h [%a] %m (%u) %f %l”,一般来说, 在每行的头上会添加 ”%t [%p] “。在源代码中同时发布有一个叫 rsyncstats 的 perl 脚本程序来统计这种格式的日志文件。

timeout
通过该选项可以覆盖客户指定的 IP 超时时间。通过该选项可以确保 rsync 服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0 表示没有超时定义,这也是默认值。对于匿名 rsync 服务器来说,一个理想的数字是 600。

refuse options
通过该选项可以定义一些不允许客户对该模块使用的命令参数列表。这里必须使用命令全名,而不能是简称。但发生拒绝某个命令的情况时服务器将报告错误信息然后退出。如果要防止使用压缩,应该是:”dont compress = *”。

dont compress
用来指定那些不进行压缩处理再传输的文件,默认值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

十、附赠 rsync 命令

 

    -v, –verbose 详细模式输出
    -q, –quiet 精简输出模式
    -c, –checksum 打开校验开关,强制对文件传输进行校验
    -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD
    -r, –recursive 对子目录以递归模式处理
    -R, –relative 使用相对路径信息
    -b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用 –suffix 选项来指定不同的备份文件前缀。
    –backup-dir 将备份文件(如~filename) 存放在在目录下。
    -suffix=SUFFIX 定义备份文件前缀
    -u, –update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
    -l, –links 保留软链结
    -L, –copy-links 想对待常规文件一样处理软链结
    –copy-unsafe-links 仅仅拷贝指向 SRC 路径目录树以外的链结
    –safe-links 忽略指向 SRC 路径目录树以外的链结
    -H, –hard-links 保留硬链结
    -p, –perms 保持文件权限
    -o, –owner 保持文件属主信息
    -g, –group 保持文件属组信息
    -D, –devices 保持设备文件信息
    -t, –times 保持文件时间信息
    -S, –sparse 对稀疏文件进行特殊处理以节省 DST 的空间
    -n, –dry-run 现实哪些文件将被传输
    -W, –whole-file 拷贝文件,不进行增量检测
    -x, –one-file-system 不要跨越文件系统边界
    -B, –block-size=SIZE 检验算法使用的块尺寸,默认是 700 字节
    -e, –rsh=COMMAND 指定使用 rsh、ssh 方式进行数据同步
    –rsync-path=PATH 指定远程服务器上的 rsync 命令所在路径信息
    -C, –cvs-exclude 使用和 CVS 一样的方法自动忽略文件,用来排除那些不希望传输的文件
    –existing 仅仅更新那些已经存在于 DST 的文件,而不备份那些新创建的文件
    –delete 删除那些 DST 中 SRC 没有的文件
    –delete-excluded 同样删除接收端那些被该选项指定排除的文件
    –delete-after 传输结束以后再删除
    –ignore-errors 及时出现 IO 错误也进行删除
    –max-delete=NUM 最多删除 NUM 个文件
    –partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
    –force 强制删除目录,即使不为空
    –numeric-ids 不将数字的用户和组 ID 匹配为用户名和组名
    –timeout=TIME IP 超时时间,单位为秒
    -I, –ignore-times 不跳过那些有同样的时间和长度的文件
    –size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
    –modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为 0
    -T –temp-dir=DIR 在 DIR 中创建临时文件
    –compare-dest=DIR 同样比较 DIR 中的文件来决定是否需要备份
    -P 等同于 –partial
    –progress 显示备份过程
    -z, –compress 对备份的文件在传输时进行压缩处理
    –exclude=PATTERN 指定排除不需要传输的文件模式
    –include=PATTERN 指定不排除而需要传输的文件模式
    –exclude-from=FILE 排除 FILE 中指定模式的文件
    –include-from=FILE 不排除 FILE 指定模式匹配的文件
    –version 打印版本信息
    –address 绑定到特定的地址
    –config=FILE 指定其他的配置文件,不使用默认的 rsyncd.conf 文件
    –port=PORT 指定其他的 rsync 服务端口
    –blocking-io 对远程 shell 使用阻塞 IO
    -stats 给出某些文件的传输状态
    –progress 在传输时现实传输过程
    –log-format=formAT 指定日志文件格式
    –password-file=FILE 从 FILE 中得到密码
    –bwlimit=KBPS 限制 I / O 带宽,KBytes per second
    -h, –help 显示帮助信息

RSync 实现文件备份同步详解   http://www.linuxidc.com/Linux/2014-09/106967.htm

利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm

利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm

inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm

rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm

CentOS 6.5 下 Rsync 远程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm

Linux 文件夹对比并提取的差分文件技巧 -rsync 的妙用 http://www.linuxidc.com/Linux/2016-02/128307.htm

Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138768.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10807字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中