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 [email protected]::wwwroot /root

rsync -avz rsync://[email protected]/wwwroot /root

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

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

export RSYNC_PASSWORD=pwd123

rsync -avzH --delete [email protected]::wwwroot /myweb

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

vim /etc/server.pass

pwd123

chmod 600 /etc/server.pass

rsync -avzH --delete --password-file=/etc/server.pass rsync://[email protected]/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/ [email protected]::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 [email protected]:/var/www/html/ /opt/

 下行同步 ssh 备份源

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

mkdir -p /wwwroot

rsync -avzH --delete [email protected]:/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 [email protected]:/var/www/html/ /wwwroot

上行同步 ssh 备份源

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

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

 cd /root

 rsync -rlvz --delete anaconda-ks.cfg [email protected]:/var/www/html

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

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

创建密钥对:

ssh-keygen -t rsa

复制密钥对:

ssh-copy-id [email protected]

ssh-copy-id [email protected]

连接测试

ssh [email protected]

ssh [email protected]

rsync -avzH --delete [email protected]:/var/www/html/ /wwwroot

猜你喜欢

转载自www.cnblogs.com/2567xl/p/11819367.html