rsync 远程同步服务部署

iptables -F

systemctl stop firewalld

setenforce 0

配置 rsync 备份源

yum -y install rsync

rpm -q rsync

rsync-3.1.2-4.el7.x86_64

1、建立/etc/rsyncd.conf配置文件

vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = yes

address = 192.168.200.123

port = 873

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

hosts allow = 192.168.200.0/24

[wwwroot]

    path = /var/www/html

    comment = Document Root os www.crushlinux.com

    read only = yes

    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

    auth users = backuper

    secrets file = /etc/rsyncd_users.db

注释:

uid = nobody                                                                     #用户名

gid = nobody                                                                     #组名

use chroot = yes                                                               #禁锢在源目录

address = 192.168.200.123                                             #监听地址

port = 873                                                                         #监听端口

log file = /var/log/rsyncd.log                                              #日志文件位置

pid file = /var/run/rsyncd.pid                                              #存放进程ID文件位置

hosts allow = 192.168.200.0/24                                        #允许访问的客户端进程

[wwwroot]                                                                          #共享模块名称

    path = /var/www/html                                                    #源目录的实际路径

    comment = Document Root os www.crushlinux.com   #描述信息

    read only = yes                                                             #是否为只读

    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z             #同步时不再压缩的文件类型

    auth users = backuper                                                  #备份授权用户

    secrets file = /etc/rsyncd_users.db                               #存放账户信息的数据文件

  基于安全性考虑,对于 rsync 的备份源最好仅允许以只读的方式做下行同步。另外,同步可以采用匿名的方式,只要将其中的 "auth users" 和 "secrets file" 配置记录去掉就可以了。

2、为备份账户创建数据文件

vim /etc/rsyncd_users.db

backuper:pwd123

  以冒号分割,密码信息在文件中以明文方式存放

  备份用户 backuper 也需要对 /var/www/html 有相应的读取权限,实际上只要 other 组具有读取权限,则备份用户 backuper 和运行 nobody 用户也就有读取权限了。

chmod 755  /var/www/html/

3、启动rsync服务进程

rsync --daemon

启动服务运行命令为"rsync --daemon",以独立监听服务的方式运行,若关闭 rsync 服务可采用kill进程方式

kill $(cat /var/run/rsyncd.pid)

服务脚本

vim /etc/init.d/rsyncd

#!/bin/bash
#chkconfig:2345 80 20
#description:rsync server

start () {
netstat -lnpt | grep -q :873
[ $? -ne 0 ] && rsync --daemon
}

stop () {
netstat -lnpt | grep -q :873
[ $? -eq 0 ] && kill $(cat /var/run/rsyncd.pid) && rm -rf /var/run/rsyncd.pid
}

status () {
netstat -lnpt | grep -q :873
[ $? -eq 0 ] && echo "Rsync Daemon is running."
}

case $1 in
start)
    start
;;
stop)
    stop
;;
restart|reload)
    $0 stop
    $0 start
;;

status)
    status
;;
*)
    echo "用法:$0{start|stop|restart|reload|status}"
esac

chmod +x /etc/init.d/rsyncd

chkconfig --add rsyncd

systemctl start rsyncd

使用 rsync 备份工具 192.168.200.124

 有了同步源服务器之后,就可以使用rsync工具来执行远程同步。接下来的操作都是在客户机(发起端)执行

    本地备份:备份源和发起端可以是一台机器

rsync /et/fstab /opt/

rsync -rl /etc/fstab /boot/grub/ /opt/

rsync的命令格式及备份选项:

命令格式:rsync[选项]... 原始位置 目标位置

-r:递归模式,包含目录及子目录中所有文件

-l:对于符号链接文件依然复制为符号链接文件

-p:保留文件的权限标记

-t:保留文件的时间标记

-g:保留文件的属组标记(仅超级用户使用)

-o:保留文件的属主标记(仅超级用户使用)

-D:保留设备文件及其他特殊文件

-a:归档模式,递归并保留对象属性,等同于 -rlptgoD

-v:显示同步过程的详细(verbose)信息

-z:在传输文件时进行压缩(compress)

-H:保留硬链接文件

-A:保留ACL属性信息

--delete:删除目标位置有而原始位置没有的文件

--checksum:根据对象的校验和来决定是否跳过文件

备份源的表示方法:

    在执行远程同步任务时,rsync命令需要指定备份源服务器中的资源位置。rsync同步源的资源表示方式有两种:

        用户名@主机地址::共享模块名称

        rsync://用户名@主机地址/共享模块名称

rsync -avz backuper@192.168.200.123::wwwroot /root

rsync -avz rsync://backuper@192.168.200.123/wwwroot /root

rsync备份源的无交互验证方式

1、通过export RSYNC_PASSWORD变量保存密码,rsync命令执行时可以自动读取该变量的值,在需要时发送给rsync服务器来进行验证  

export RSYNC_PASSWORD=pwd123

rsync -avzH --delete backuper@192.168.200.123::wwwroot /myweb

2、通过 --password-file选项指定存储密码的文件

vim /etc/server.pass

pwd123

chmod 600 /etc/server.pass

rsync -avzH --delete --password-file=/etc/server.pass rsync://backuper@192.168.200.123/wwwroot /myweb

相对于SSH源的免交互措施来说,使用变量存放密码显得不够安全,因此可在脚本中使用,并将脚本的权限严格控制,避免密码泄露。

配置rsync+inotify实时同步

  Linux从2.6.13版内核开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改内容及属性等。利用这个机制,可以实现文件异动警告,增量备份,针对目录或文件的变化及时做出相应。

  将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待模式,避免了按固定周期备份时存在的延迟性,周期过密等问题

  正因为inotify通知机制由Linux内核提供,因此inotify主要做本机监控,在触发式备份应用中更适合上行同步

1、调整inotify内核参数

在Linux内核中,默认的inotify机制提供了三个调控参数:

cat /proc/sys/fs/inotify/max_queued_events         //表示监控事件队列(16384)

cat /proc/sys/fs/inotify/max_user_instance           //最多监控实例数(128)

cat /proc/sys/fs/inotify/max_user_watches           //每个实例最多监控文件数(8192)

当要监控的目录,文件数量较多或者变化频繁时,建议加大这三个参数的值

vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instance = 1024

fs.inotify.max_user_watches = 1048576

sysctl -p

安装 inotify-tools

inotify-tools 主要提供inotifywait,inotifywatch等工具,用来监控,汇总改动情况

官方站点:http://inotify-tools.sourceforge.net

tar xf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure && make && make install

  以监控网站目录 /var/www/html 为例,执行inotifywait命令后,在另外一个终端中改动 /var/www/html 目录下的内容

mkdir -p /var/www/html

inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html/

-e    指定要监控的事件

-m   表示持续监控

-r     表示递归整个目录

-q    简化输出信息 

编写触发式同步脚本 

   inotifywait 输出的监控结果中,每行记录中包括目录,事件,文件。据此可以识别变动情况。为了简单,只要检测到变动时执行rsync上行同步操作即可

 注意:当更新较频繁时,避免并发执行rsync备份,若rsync进程已经存在则忽略本次同步,或者根据rsync进程数量(取决于实际任务)来决定是否同步。

 vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = yes

address = 192.168.200.123

port = 873

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

hosts allow = 192.168.200.0/24

[wwwroot]

    path = /var/www/html

    comment = Document Root os www.crushlinux.com

    read only = no

    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

    auth users = backuper

    secrets file = /etc/rsyncd_users.db

 kill $(cat /var/run/rsyncd.conf)

rsync --daemon

chown nobody:nobody /var/www/html/

vim /opt/inotify_rsync.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"

RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.200.123::wwwroot"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE

do

    if [ $(pgrep rsync | wc -l) -le 0 ]

      then

        $RSYNC_CMD  

    fi

done

echo "/bin/bash /opt/inotify_rsync.sh" >> /etc/rc.local

脚本用来测试本机 /var/www/html 目录的变动,一旦有更新立刻触发 rsync 同步操作,上传至服务器192.168.200.123的 /var/www/html 目录下。

触发式上行同步的验证操作如下:

1、在本机运行 inotify_rsync.sh 脚本

 bash /opt/inotify_rsync.sh

2、在本机的 /var/www/html 目录下,执行创建,删除,修改等操作

mkdir /var/www/html/aa

mv /var/www/html/aa /var/www/html/aaa

touch /var/www/html/abc.txt

3、查看服务器中的 /var/www/html 目录中的变化

ls /var/www/html/

aaa abc.txt bb

配置 SSH 备份源

 优点:远程连接安全,增强备份的保密性,容易实现

 下载:在下行同步中,备份源负责提供文档的原始位置,发起端应对文件具有读取权限

 上传:在上行同步中,备份源负责提供文档的目标位置,发起端应对文件具有写入权限

 配置过程

 a、确认备份源文件夹位置

 b、准备备份操作用户

 案例

 192.168.200.123机器的网站目录 /var/www/html 作为备份源

用户down做下行(下载)备份

 用户up做上行(上传)备份

 192.168.200.123:

yum -y install httpd rsync 

useradd up

echo "123456" | password --stdin up

useradd down

echo "123456" | password --stdin down

vim /etc/ssh/sshd_config

122 UseDNS no          //关闭UseDNS加速SSH登录

systemctl restart sshd

  调整 /var/www/html 目录权限,使down用户有读取权限,up用户有写入权限,建议将目录的属主修改为备份用户,另外需要为 web 服务的运行用户指定额外的权限

chown -R up:up /var/www/html/

setfacl -R -m user:apache:rwx /var/www/html/

getfacl /var/www/html/

acl访问控制机制参数详解

 setfacl         设置acl权限 

 getfacl         查看acl权限

    -R            递归   

    -m            制定权限

    -x             个别删除 

    -b             全部删除

注意:下面两行不需要执行,作为了解

 setfacl -R -b /var/www/html                                      表示删除所有ACL属性

 setfacl -R -x user:apache /var/www/html/                 只删除某一项ACL属性

 凡是以后在 /var/www/html/upload/ 新建立的文档,apache用于都具有 rwx 权限

setfacl -m default:user:apache:rwx /var/www/html/ 

getfacl /var/www/html/ | grep default

 SSH备份源表示方式:

用户名@主机地址:目标路径

访问SSH备份源,下载到本地 /opt/ 目录

rsync -avz down@192.168.200.123:/var/www/html/ /opt/

 下行同步 ssh 备份源

将服务器A的 /var/www/html 文件夹与B本地 /wwwroot 文件夹同步(保持文件权限属性,软硬链接,ACL属性,删除 /wwwroot 中多余文件,传输过程进行加密)

mkdir -p /wwwroot

rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot 

 对于同一项远程同步任务,再次执行时,自动做增量更新,同名的文件将不再重复复制

192.168.200.123:

cd /var/www/html/

for i in {1..10};do touch $i.txt;done

192.168.200.124:

rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot

上行同步 ssh 备份源

  将客户机中的anaconda-ks.cfg文件上传到备份源服务器的 /var/www/html 目录下,由于用户是up并非

root 用户,因此 -g -o 等选项无法使用

 cd /root

 rsync -rlvz --delete anaconda-ks.cfg up@192.168.200.123:/var/www/html

 ssh备份源的无交互验证,由于脚本根据 crond 时间来执行,用户没办法按时根据提示输入密码

192.168.200.124 主机上创建密钥对,将公钥文件发给192.168.200.123服务器中的备份用户,实现无交互登录

创建密钥对:

ssh-keygen -t rsa

复制密钥对:

ssh-copy-id up@192.168.200.123

ssh-copy-id down@192.168.200.123

连接测试

ssh down@192.168.200.123

ssh up@192.168.200.123

rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot

Sersync+Rsync 实现数据文件实时同步 

 rsync+inotify-tools与rsync+sersync架构的区别

 1、rsync+inotify-tools

inotify 只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

rsync 在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录树进行遍历查找变更文件,然后触发全部数据进行同步,当数据量很大时,整个目录同步非常耗时,因此效率很低。

2、rsync+sersync

sersync 可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;

rsync 在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync 在遍历查找对比文件时,速度很快),因此效率很高

同步过程:

1、在源数据服务器上开启 sersync 服务,sersync 负责监控配置路径中的文件系统事件变化;

2、调用 rsync 命令把更新的文件同步到目标服务器;

3、需要在源数据服务器配置 sersync ,在同步目标服务器配置 rsync server

同步原理:

1、用户实时的往 sersync 服务器上写入更新文件数据;

2、此时需要在源数据服务器上配置 sersync 服务;

3、在另一台服务器开启 rsync 守护进程服务,以同步拉取来自 sersync 服务器上的数据;

通过 rsync 的守护进程服务后可以发现,实际上 sersync 就是监控本地的数据写入或更新事件;然后,在调用 rsync 客户端的命令,将写入或更新事件对应的文件通过 rsync 推送到目标服务器

CentOS 7 192.168.200.111 (Rsync server)

CentOS 7 192.168.200.112 (Sersync server)

先安装Rsync

yum -y install rsync httpd

vim /etc/rsyncd.conf

uid = root

gid = root

use chroot = yes

max connections = 100    #最大连接数

timeout = 600                   #超时时间

ignore errors                    #忽略错误

list = false                        #不显示服务端资源列表

address = 192.168.200.111

port = 873

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

hosts allow = 192.168.200.0/24

[wwwroot]

    path = /var/www/html

    comment = Document Root os www.crushlinux.com

    read only = no

    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

    auth users = backuper

    secrets file = /etc/rsyncd_users.db

基于安全性考虑,对于 rsync 的备份源最好仅允许以只读的方式做下行同步。另外,同步可以采用匿名的放式,只要将其中的"auth users "和"secrets file" 配置记录去掉就可以了

为备份账户创建数据文件

vim /etc/rsyncd_users.db

backuper:pwd123

  以冒号分割,密码信息在文件中以明文方式存放

  备份用户 backuper 也需要对 /var/www/html 有相应的读取权限,实际上只要 other 组具有读取权限,则备份用户 backuper 和运行 nobody 用户也就有读取权限了。

chmod 755  /var/www/html/

启动rsync服务进程

rsync --daemon

启动服务运行命令为"rsync --daemon",以独立监听服务的方式运行,若关闭 rsync 服务可采用kill进程方式

在数据源端创建密码文件,然后在 rsync 命令中使用 rsync --password-file 指定该文件

echo "pwd123" > /etc/server.pass

chmod 600 /etc/server.pass

rsync -az --delete --password-file = /etc/server.pass /etc/hosts

测试这步一定要成功发,不然进行不了下一步

部署 Sersync 服务

下载 sersync:

goodle code 地址:https://code.qooqle.com/archive/p/sersync/downloads

Git Hub 镜像地址:https://github.com/orangle/sersync

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/

cd /usr/local/

mv GNU-Linux-x86/ sersync

cd sersync/

cp confxml.xml confxml.xml.$(date +%F)

vim confxml.xml          #修改24、25行

<sersync>

    <localpath watch="/var/www/html">      # 本地同步目录

    <remote ip="192.168.200.111" name="wwwroot" />      # rsync 模块名

#  修改31行

<rsync>

    <commonParams params="-artuz" />

    <auth start="true" users="backuper" passwordfile="/etc/server.pass" />

开启 sersync 守护进程 同步数据

yum -y install httpd

./sersync2 -d -r -o /usr/local/sersync/confxml.xml

原文地址:https://www.cnblogs.com/2567xl/p/11819367.html