天天看點

銀河麒麟伺服器自動同步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