天天看点

银河麒麟服务器自动同步2021-05-18目的主机操作源主机操作

所有用到的包和文档记录      https://download.csdn.net/download/qq_38147601/18829586

两台kylin402,可以实现一到多,暂时没测,现128往129同步[p1] 

系统Kylin-4.0.2-server-sp1-Community-20170412-x86_64

cpu类型x86 (经测试arm64只需要更换包,dpkg去安装deb的包)

主要软件  inotify-tools-3.14.tar

源主机ip  192.168.220.128

目的主机 192.168.220.129

目的主机操作

1编辑配置文件

vim /etc/rsyncd.conf   (内容多放引用了,都在下面)[p2] 

vim /etc/rsync.pas

银河麒麟服务器自动同步2021-05-18目的主机操作源主机操作

chmod 600 /etc/rsync.pas

mkdir /data

mkdir /data/file

2关防火墙(源好像可以不关,这里关了省得麻烦)

ufw disable

3开rsync守护进程

rsync --daemon

源主机操作

mkdir /data

1安装inotify

cd /root/

mkdir inotify

mv inotify-tools-3.14.tar.gz inotify

cd inotify/

tar -zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14/

./configure --prefix=/usr

make

make install (经测试此包在arrch64服务器上不可用)

     --aarch64服务器 用kylin官网的deb包

dpkg –i *.deb

2关防火墙(源好像可以不关,这里关了省得麻烦)

ufw disable

3inotify脚本

vim inotify_init.sh[p3]    (内容多放外面了)

chmod +x /root/inotify_init.sh

4密码文件

vim rsynv.pwd

银河麒麟服务器自动同步2021-05-18目的主机操作源主机操作

chmod 600 /root/rsync.pwd

4启动和试

./inotify_init.sh  (启动之后去/data/里面随便新建个东西测试,这里有时会出问题,出现末尾when异常和[[异常,尝试:set ff=unix或者bash启动)

银河麒麟服务器自动同步2021-05-18目的主机操作源主机操作

5晚上定时全备份一下,因为这个全是增量,久了会出问题

vim /etc/crontab

1 2 * * * rsync -avz --password-file=/root/rsync.pwd /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

增备

rsync -aqzrtopg --delete [email protected]192.168.220.129::bbsatt /home/oa_daba_backup --password-file=/root/rsync.pwd

crontab定时执行增备,这样对服务器压力会小一点

vim /etc/crontab

添加内容[p4] ,定时10秒一次增备

Service cron restart

如果需要可以暂时开启cron日志

Vim /etc/rsyslog.d/50-default.conf

   把#cron.* 前面的注释#去掉

重启rsyslog服务: service rsyslog restart

 [p1]经测试如果数据量变动较大,是常用系统,会对服务器造成巨大伤害,不建议在业务量大的系统上使用。

 [p2]uid = root

gid = root

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[bbsatt]

path = /data/file/

ignore errors

read only = no

list = false

hosts allow = 192.168.220.128

auth users = root

secrets file = /etc/rsync.pas

 [p3]#!/bin/bash

src=/data/                           # 需要同步的源路径

des=bbsatt                             # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。

rsync_passwd_file=/root/rsync.pwd            # rsync验证的密码文件

#ip1=192.168.220.128                 # 目标服务器1

ip2=192.168.220.129                 # 目标服务器2

user=root                            # rsync --daemon定义的验证用户名

cd ${src}                              # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果

/usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file         # 把监控到有发生更改的"文件路径列表"循环

do

        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT

        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE

        echo "-------------------------------$(date)------------------------------------"

        echo $file

        #增加、修改、写入完成、移动进事件

        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。

        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]         # 判断事件类型

        then

                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'

#                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&         # INO_FILE变量代表路径哦  -c校验文件内容

                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}

                 #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性

        fi

        #删除、移动出事件

        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]

        then

                echo 'DELETE or MOVED_FROM'

#                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&

                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}

                #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。

        fi

        #修改属性事件 指 touch chgrp chmod chown等操作

        if [[ $INO_EVENT =~ 'ATTRIB' ]]

        then

                echo 'ATTRIB'

                if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。

                then

#                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&           

                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}

                fi

        fi

done

 [p4]1 2 * * * root rsync -avz --password-file=/root/rsync.pwd /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

#增备

* * * * * root rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

* * * * * root sleep 10; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

* * * * * root sleep 20; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

* * * * * root sleep 30; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

* * * * * root sleep 40; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd

* * * * * root sleep 50; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd