ubuntu下rsync服务器端和客户端的配置

本文详细介绍如何使用rsync进行远程文件同步配置,包括服务器端和客户端的安装、配置过程,以及通过inotifywait监控文件变化实现自动化同步的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rsync同步


mall1和mall2、mall3的同步


mall2、3同步mall1上更新的内容:此时:mall2、3为服务器端,mall1为客户端


mall2、mall3上的安装配置:

===========================================================================================


apt-get install -y rsync(安装rsync)

sudo find / -name rsyncd.conf

/usr/share/doc/rsync/examples/rsyncd.conf(rsync的配置文件的默认安装路径)

sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/ (复制配置文件到/etc/目录下)

===========================================================================================

sudo vi /etc/rsyncd.conf(编辑配置文件为你需要的内容)

[global]##全局选项

uid = ubuntu#指定该模块传输文件时守护进程应该具有的uid

gid = sudo#指定该模块传输文件时守护进程应该具有的gid

use chroot = no##是否让进程离开工作目录

max connections = 10#客户端最大连接数,默认0(没限制)

pid file = /var/run/rsyncd.pid#运行进程的ID写到哪里 

lock file = /var/run/rsync.lock         

log file = /var/log/rsyncd.log#日志记录文件



[mall] # 这里是认证的模块名,在client端需要指定

path=/home/ubuntu/data/web/mall.hiigame.com# 需要做备份的目录

comment = update #备注同步项

ignore errors#可以忽略一些无关的IO错误

read only = no#no客户端可上传文件,yes只读

list = no #用于设定当客户请求可以使用的模块列表,该模块是否被列出,默认为true

host allow = 10.133.200.125#充许连接连接的主机(*为任何主机)

auth users = test # 认证的用户名,如果没有这行,则表明是匿名

uid = ubuntu

gid = sudo

secrets file = /etc/rsync.pass   # 指定认证口令文件位置


[statics]

path=/home/ubuntu/data/web/statics.hiigame.com

comment = update

ignore errors

read only = no

list = no

host allow = 10.133.200.125

auth users = test

uid = ubuntu

gid = sudo

secrets file = /etc/rsync.pass


===========================================================================================

编辑认证口令文件:文件名与配置文件中的路径一样

vi /etc/rsync.pass

test:123456789(认证用户名:认证口令)

     chmod 600 /etc/rsync.pass (修改权限,只有root用户才可执行)

(备注)注意:密码文件的权限,是由rsyncd.conf里的参数

                    strict modes =yes/no 来决定:#是否检查口令文件的权限

rsync的启动:sudo /etc/init.d/rsync (start| restart| stop)

==========================================================================================

ubuntu@VM-200-27-ubuntu:~$ ps -aux | grep rsync  (rsync进程)

Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

root      1109  0.0  0.0  11004   732 ?        S     2015   0:05 /usr/bin/rsync --no-detach --daemon --config /etc/rsyncd.conf


ubuntu@VM-200-27-ubuntu:~$ netstat -an | grep 873 (rsync端口)

tcp        0      0 10.133.200.27:873       0.0.0.0:*               LISTEN 


===========================================================================================

客户端的配置:

    apt-get intall rsync inotify-tools (安装客户端的配置)

    #sudo vim /etc/rsync.pass(与服务器端相互对应,口令文件 ,只需要有口令即可)

    123456789


编写监控脚本并加载到后台执行

vi /home/ubuntu/data/bin/rsync_mall.sh

        

#!/bin/bash

src=/home/ubuntu/data/web/mall.hiigame.com/ 

des=mall#模块标签

host1="10.133.200.27"#监控主机ip

host2="10.133.200.135"

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib,move $src | while read files

  do

    rsync -qzrtopg --exclude-from=/home/ubuntu/data/bin/rsync.list  --delete --progress --password-file=/etc/rsync.pass $src test@$host1::$des

    rsync -qzrtopg --exclude-from=/home/ubuntu/data/bin/rsync.list --delete --progress --password-file=/etc/rsync.pass $src test@$host2::$des


   done

   echo "${files} was rsynced" >>/tmp/rsync.log 2>&1



==========================================================================================



案例二

脚本路径/home/ubuntu/


vi gameserver.sh

#!/bin/bash

src=/home/ubuntu/data/nfs/

des1=game

host1="10.133.193.230"

host2="10.105.16.128"

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib,move $src | while read files

  do

    rsync -qzrtopg --delete --progress --password-file=/etc/rsync.pass $src test@$host1::$des1

    rsync -qzrtopg --delete --progress --password-file=/etc/rsync.pass $src test@$host2::$des1

   # rsync -qzrtopg --delete --progress --exclude-from=/home/wolfplus/bin/rsync.list --password-file=/etc/rsync.pass $src test@$host6::$des6

   done

   echo "${files} was rsynced" >>/tmp/rsync.log 2>&1



放在后台执行

./gameserver.sh &




====================================================================================


inotify之inotifywait命令常用参数详解



[root@inotify-master inotify-tools-3.14]# cd /usr/local/inotify-3.14/

[root@inotify-master inotify-3.14]# ./bin/inotifywait --help

-r|--recursive   Watch directories recursively. #递归查询目录

-q|--quiet      Print less (only print events). #打印监控事件的信息

-m|--monitor   Keep listening for events forever.  Without this option, inotifywait will exit after one  event is received.        #始终保持事件监听状态

--excludei <pattern>  Like --exclude but case insensitive.    #排除文件或目录时,不区分大小写。

--timefmt <fmt> strftime-compatible format string for use with %T in --format string. #指定时间输出的格式

--format <fmt>  Print using a specified printf-like format string; read the man page for more details.

#打印使用指定的输出类似格式字符串

-e|--event <event1> [ -e|--event <event2> ... ] Listen for specific event(s).  If omitted, all events are  listened for.   #通过此参数可以指定需要监控的事件,如下所示:

Events:

access           file or directory contents were read       #文件或目录被读取。

modify           file or directory contents were written    #文件或目录内容被修改。

attrib            file or directory attributes changed      #文件或目录属性被改变。

close            file or directory closed, regardless of read/write mode    #文件或目录封闭,无论读/写模式。

open            file or directory opened                    #文件或目录被打开。

moved_to        file or directory moved to watched directory    #文件或目录被移动至另外一个目录。

move            file or directory moved to or from watched directory    #文件或目录被移动另一个目录或从另一个目录移动至当前目录。

create           file or directory created within watched directory     #文件或目录被创建在当前目录

delete           file or directory deleted within watched directory     #文件或目录被删除

unmount         file system containing file or directory unmounted  #文件系统被卸载


                                                     


本文转自 蔡小赵 51CTO博客,原文链接:http://blog.51cto.com/zhaopeiyan/1731459

 




<think>首先,用户的问题是:“我想了解如何使用rsync实现服务器到客户端的上行同步请问rsync上行同步配置方法服务器到客户端”。根据指令,我需要参考提供的引用内容来回答。引用内容摘要:-[^1]:讨论了rsync的基本概念、特性、同步方式备份过程,包括下行同步的配置。-[^2]:强调了rsync作为快速增量备份工具,用于数据备份,包括完全增量备份。-[^3]:涉及rsync配置更改,如关闭只读模式以便上行同步,以及权限设置。-[^4]:详细解析了rsync配置文件(/etc/rsyncd.conf),包括uid、gid、端口、权限等选项。-[^5]:描述了rsync上行同步的触发式脚本配置,包括本机检测目录变化并上传到服务器。关键点:用户问的是上行同步,其中“服务器到客户端的上行同步”。在引用[^3][^5]中,明确提到了上行同步。引用[^1]区分了下行同步(服务器同步到客户端上行同步(客户端上传到服务器)。上行同步通常指从客户端推送到服务器。用户问“服务器到客户端的上行同步”,这可能是个误解。通常:-下行同步(Downstream):从服务器同步到客户端客户端拉取)。-上行同步(Upstream):从客户端同步到服务器(客户端推送)。在引用[^3]中,它提到了“上行下行同步”,并具体说“上行同步需要可以写”,意思是上传文件需要服务器可写。引用[^5]讨论的是“上行同步”,即本机(客户端)到服务器。用户说“服务器到客户端的上行同步”,这听起来像从服务器到客户端的同步,但上行同步通常不是这样。我需要澄清:在上下文中,上行同步可能是指客户端上传到服务器。参考引用[^5]:“触发式上行同步”,描述为本机检测变动上传到服务器。在我的回答中,我应该纠正或澄清术语:-“上行同步”通常指客户端推送数据到服务器。-用户可能意指客户端上传数据到服务器。用户问题:"如何使用rsync实现服务器到客户端的上行同步"。结合引用,我理解为“客户端到服务器的上行同步”。回答结构:-必须使用系统级指令:行内数学表达式用$...$,独立公式用$$...$$(可能不适用这里),LaTeX语法正确。-使用中文回答。-生成相关问题。-引用的段落末尾添加引用标识[^数字]。回答思路:1.**解释上行同步**:澄清什么是上行同步。2.**配置方法**:基于引用,覆盖配置步骤。-参考[^3]:修改rsync配置文件(/etc/rsyncd.conf),如设置readonly=no。-参考[^4]:配置文件细节,如uid,gid,permissions,authusers.-参考[^5]:配置实时同步,使用inotify工具脚本。3.**详细步骤**:列出清晰的步骤。-服务器端配置。-客户端配置。-实时同步设置(可选)。4.**添加引用**:在相关部分添加[^数字]。5.**生成相关问题**:在末尾添加§§相关问题§§部分。步骤大纲:1.**介绍上行同步**:-解释上行同步的概念。-基于引用[^3][^5],上行同步允许客户端上传数据到服务器。2.**配置步骤**:-**服务器端配置**:-安装rsync:服务器上安装rsync。-编辑配置文件/etc/rsyncd.conf:确保readonly=no,以允许写入。-设置权限认证:基于[^4],配置uid,gid,authusers,secretsfile。-启动rsync守护进程:参考[^3],杀死进程并重新启动。-**客户端配置**:-使用rsync命令同步文件到服务器。-对于实时同步:配置inotify工具脚本(参考[^5])。3.**实时同步设置**:-使用inotify机制监控目录变化。-编写脚本触发rsync同步。4.**验证效果**:检查是否同步成功。添加引用:-例如,提到关闭只读时加[^3]。-提到认证配置文件时加[^4]。-提到实时同步时加[^5]。生成相关问题:-基于主题,如如何优化rsync同步?如何设置认证安全?等。最终回答结构:-清晰开头解释。-详细步骤分点。-必要时使用代码块。-结尾添加相关问题。</think> ### 使用rsync实现上行同步(服务器到客户端)的配置方法 在rsync中,“上行同步”通常指从**客户端推送到服务器**的数据同步过程。用户问题中提到“服务器到客户端的上行同步”,这可能是一个术语混淆:在rsync上下文中,上行同步(Upstream Sync)标准含义是**客户端主动上传数据到服务器**(即从客户端到服务器)。下行同步(Downstream Sync)则是服务器推送数据到客户端。基于您的描述提供的引用[^3][^5],我将解释如何配置客户端到服务器的上行同步,并覆盖完整步骤。 #### 1. **上行同步基本概念** - rsync上行同步允许**客户端(发送端)将文件推送到服务器(接收端)**,支持增量备份,有效减少带宽占用。 - 关键点: - **客户端**:发起同步请求的机器(如本地服务器或PC)。 - **服务器**:接收文件的远程机器(通常称为“同步源服务器”)。 - 上行同步需要**服务器端允许写入权限**(read only = no),以便客户端能上传数据[^3]。 - 优势:高效处理增量文件同步,适用于数据备份实时同步场景[^2]。 - **适用场景**:例如,客户端定期上传日志文件到服务器备份或服务器共享目录[^5]。 #### 2. **配置步骤:服务器端设置** 服务器是接收数据的源,配置需确保rsync守护进程(daemon)运行,并开放写入权限。以下是详细步骤(基于引用[^3][^4])。 1. **安装rsync守护进程** 在服务器上安装rsync(如果未安装): ```bash sudo apt install rsync # Debian/Ubuntu系统 sudo yum install rsync # CentOS/RHEL系统 ``` 2. **编辑rsync配置文件(/etc/rsyncd.conf)** 修改配置文件以启用上行同步: - 设置 `read only = no` 允许客户端写入。 - 添加用户认证信息保证安全。 - 示例配置(引用[^4][^3]): ```bash # /etc/rsyncd.conf 文件内容 uid = rsync # 运行进程的用户,应与服务器目录权限一致 gid = rsync # 运行进程的用户组 address = 192.168.116.60 # 服务器IP地址,替换为您的IP port = 873 # rsync默认端口 log file = /var/log/rsyncd.log # 日志文件 pid file = /var/run/rsyncd.pid # PID文件 [uploads] # 共享模块名称 path = /var/www/html # 服务器接收数据的目录 comment = Upload Directory # 模块描述 read only = no # 允许上行同步(写权限) auth users = rsyncuser # 认证用户名 secrets file = /etc/rsyncd_users.db # 存放用户密码的文件路径 hosts allow = 192.168.0.0/24 # 允许访问的客户端IP段 list = false # 禁止列出模块信息 ignore errors # 忽略错误 ``` - **重要设置**: - `read only = no` 是上行同步的核心,否则客户端无法上传[^3]。 - `auth users` `secrets file` 提供基本认证。 - `hosts allow` 限制访问IP,提升安全性。 3. **创建认证文件设置目录权限** - 生成密码文件 `/etc/rsyncd_users.db`: ```bash echo "rsyncuser:your_password" | sudo tee /etc/rsyncd_users.db sudo chmod 600 /etc/rsyncd_users.db # 确保权限安全 ``` - 创建数据目录并设置权限: ```bash sudo mkdir -p /var/www/html sudo chown rsync:rsync /var/www/html sudo chmod 777 /var/www/html # 简化测试用,生产环境应限制更严格 ``` 4. **启动或重启rsync守护进程** - 停止旧进程并启动新服务: ```bash sudo kill `cat /var/run/rsyncd.pid` 2>/dev/null # 安全停止 sudo rsync --daemon --config=/etc/rsyncd.conf # 启动守护进程 sudo systemctl start rsync # 或使用systemd管理 ``` - 验证进程是否运行: ```bash sudo netstat -natp | grep rsync ``` #### 3. **配置步骤:客户端设置** 客户端是发起推送的机器,只需安装rsync工具,并使用命令或脚本发起同步。 1. **安装rsync** 在客户端安装rsync(类似服务器端)。 2. **简单手动同步测试** 使用 `rsync` 命令推送文件到服务器: ```bash rsync -avz --delete /path/to/source/ rsyncuser@192.168.116.60::uploads/ ``` - **命令参数解释**: - `-a`: 归档模式,保留文件属性。 - `-v`: 详细输出。 - `-z`: 压缩传输减少带宽。 - `--delete`: 删除服务器上源端已删除的文件。 - `rsyncuser@192.168.116.60::uploads/`: `uploads`是服务器配置的模块名。 - 首次运行时,提示输入密码(从 `/etc/rsyncd_users.db` 中定义的密码)。 3. **配置实时同步(可选,推荐)** 手动同步是定期方式,但对于实时上传,可以使用 `inotify` 监控目录变化并触发同步(引用[^5])。 - **安装inotify-tools**(在客户端): ```bash sudo apt install inotify-tools # Debian/Ubuntu sudo yum install inotify-tools # CentOS/RHEL ``` - **调整内核参数**(优化inotify): ```bash echo "fs.inotify.max_user_watches = 100000" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 应用修改 ``` - **编写触发式同步脚本**(例如 `/opt/inotify.sh`): ```bash #!/bin/bash # 监控客户端目录,发生变化时触发rsync上传 MON_DIR="/opt/source/" # 客户端待上传目录 DEST="rsyncuser@192.168.116.60::uploads/" inotifywait -mrq -e modify,create,delete,move --format '%w%f' "$MON_DIR" | while read FILE do rsync -az --delete "$MON_DIR" "$DEST" echo "同步完成 at $(date)" >> /var/log/inotify.log # 可选日志 done ``` - 脚本说明: - `inotifywait` 监控目录变化事件(如创建、修改、删除)。 - 检测到变化后,运行rsync命令上传文件。 - 基于引用[^5]的示例,确保日志记录方便调试。 - **设置脚本运行**: ```bash chmod +x /opt/inotify.sh nohup /opt/inotify.sh & # 后台运行 ``` #### 4. **验证效果** - **服务器端**: - 检查上传目录 `/var/www/html`:文件应与客户端源目录内容一致。 - 查看rsync日志 `/var/log/rsyncd.log`:出现同步记录表示成功[^3]。 - **客户端**: - 修改 `/opt/source/` 目录(例如添加或删除文件)。 - 运行测试命令:`rsync -avz --dry-run /opt/source/ rsyncuser@192.168.116.60::uploads/`(无--dry-run参数以实际运行)。 - 查看脚本日志:`tail -f /var/log/inotify.log`。 - 故障排除: - 权限错误:检查服务器端目录权限 `uid/gid` 设置。 - 认证失败:确保 `/etc/rsyncd_users.db` 密码正确且客户端命令使用相同用户名。 #### 5. **安全与优化建议** - **安全**:始终使用 `--password-file` 参数避免明文密码(如 `rsync -avz --password-file=/path/to/passfile source/ dest/`),并限制 `hosts allow`[^4]。 - **性能**:增量同步自动处理变化文件;大文件删除参考引用[^1],可先清空目录。 - **生产环境**:定期同步可用cron job定时运行脚本;实时同步用 `inotify` 确保低延迟[^5]。 此配置基于rsync的可靠性与增量备份特性,适用于企业级数据备份。 [^1]: rsync同步方式与备份过程覆盖了上行下行的概念,包括权限管理。 [^2]: rsync作为高效工具,支持本地远程数据同步。 [^3]: rsync配置文件中read only = no是上行同步的关键。 [^4]: rsync配置文件详细解析,包括权限、认证安全设置。 [^5]: 实时上行同步通过inotify机制触发,提升了同步效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值