rsync & inotify-tools

server IP

rsync_server:192.168.195.44 master.lab.example.com
rsync_client:192.168.195.45 node.lab.example.com

[root@master&node ~]# vi /etc/hosts

192.168.195.44 master.lab.example.com master
192.168.195.45 node.lab.example.com node

[root@master&node]# systemctl stop firewalld
[root@master&node]# systemctl disable firewalld

[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id root@node
[root@master ~]# ssh-copy-id root@master

[root@master ~]# mkdir -p /app/rsync_server
[root@node ~]# mkdir /app/rsync_client -p

[client]:

[root@node ~]# yum -y install rsync xinetd
[root@node ~]# vi /etc/xinetd.d/rsync

service rsync
{
                disable = no            #修改爲no
                flags           = IPv6
                socket_type     = stream
                wait            = no
                user            = root
                server          = /usr/bin/rsync
                server_args     = --daemon
                log_on_failure  += USERID
}

[root@node ~]# vi /etc/rsyncd.conf

logfile = /var/log/rsyncd.log    #日誌文件位置,啓動rsync後自動產生這個文件,無需提前創建
pidfile = /var/run/rsyncd.pid    #pid文件的存放位置
lockfile = /var/run/rsync.lock   #支持max connections參數的鎖文件
secretsfile = /etc/rsync.pass    #用戶認證配置文件,裏面保存用戶名稱和密碼,後面會創建這個文件
motdfile = /etc/rsyncd.Motd    #rsync啓動時歡迎信息頁面文件位置(文件內容自定義)
[app_rsync_client]   #自定義名稱
path = /app/rsync_client/    #rsync服務端數據目錄路徑
comment = app_rsync_client    #模塊名稱與[app_rsync_client]自定義名稱相同
uid = root    #設置rsync運行權限爲root
gid = root    #設置rsync運行權限爲root
port =873
use chroot = no    #默認爲true,修改爲no,增加對目錄文件軟連接的備份
read only = no    設置rsync服務端文件爲讀寫權限
list = no    #不顯示rsync服務端資源列表
mac connections = 200
timeout = 600
auth users = rsync    #執行數據同步的用戶名,可以設置多個,用英文狀態下逗號隔開
hosts allow = 192.168.195.45   #允許進行數據同步的客戶端IP地址,可以設置多個,用英文狀態下逗號隔開
hosts deny = 192.168.195.46,192.168.195.47    #禁止數據同步的客戶端IP地址,可以設置多個

[root@node ~]# vi /etc/rsync.pass

rsync:redhat

[root@node rsync_client]# systemctl start rsyncd
[root@node rsync_client]# systemctl enable rsyncd
[root@node ~]# systemctl start xinetd
[root@node ~]# systemctl enable xinetd

[server]:

[root@master ~]# yum install -y rsync xinetd
[root@master ~]# vi /etc/xinetd.d/rsync

service rsync
{
                disable = no    #修改爲no
                flags           = IPv6
                socket_type     = stream
                wait            = no
                user            = root
                server          = /usr/bin/rsync
                server_args     = --daemon
                log_on_failure  += USERID
}

[root@master ~]# vi /etc/passwd.txt ---set rsync's password

redhat

[root@master ~]# chmod 600 /etc/passwd.txt

[root@master&node rsync_client]# systemctl restart rsyncd xinetd
[root@master&node rsync_client]# systemctl enable rsyncd xinetd

[root@master app]# rsync -avH --port=873 --progress --delete /app/rsync_server/ [email protected]::app_rsync_client --password-file=/etc/passwd.txt

[root@master app]# ll /proc/sys/fs/inotify ---view 3 max_* file suppost inotify

[root@master inotify-tools-3.14]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.backup
[root@master yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@master yum.repos.d]# yum clean all
[root@master yum.repos.d]# yum makecache
[root@master yum.repos.d]# yum install -y inotify-tools

sysctl -a|egrep -i "max_queued_events|max_user_watches|max_user_instances"

default volue is very min need modify

[root@master yum.repos.d]# vi /etc/sysctl.conf

fs.inotify.max_queued_events = 99999999
fs.inotify.max_user_watches = 99999999
fs.inotify.max_user_instances = 65535

[root@master yum.repos.d]# sysctl -p

[root@master yum.repos.d]# cat /proc/sys/fs/inotify/{max_user_instances,max_user_watches,max_queued_events}

[root@master yum.repos.d]# mkdir /usr/local/inotify
[root@master yum.repos.d]# vi /usr/local/inotify/rsync.sh

#!/bin/bash
src_dir="/app/rsync_server/"
dst_dir="app_rsync_client"
exclude_dir="/usr/local/inotify/exclude.list"
rsync_user="rsync"
rsync_passwd="/etc/passwd.txt"
dst_ip="192.168.195.45"
rsync_command(){
                                    rsync -avH --port=873 --progress --delete --exclude-from=$exclude_dir $src_dir $rsync_user@$dst_ip::$dst_dir --password-file=$rsync_passwd
}
for ip in $dst_ip;do
         rsync_command
done
        /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $src_dir \
| while read file;do
     for ip in $dst_ip;do
             rsync_command
             echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
     done
 done 

註釋:
src_dir="/app/rsync_server/" #源服務器同步目錄
dst_dir="app_rsync_client" #目標服務器rsync同步目錄模塊名稱
exclude_dir="/usr/local/inotify/exclude.list" #不需要同步的目錄,如果有多個,每一行寫一個目錄,使用相對於同步模塊的路徑;
例如:不需要同步/app/rsync_server/"目錄下的a目錄和b目錄下面的b1目錄,exclude.list文件可以這樣寫
a/
b/b1/

rsync_user="rsync" #目標服務器rsync同步用戶名
rsync_passwd="/etc/passwd.txt" #目標服務器rsync同步用戶的密碼在源服務器的存放路徑
dst_ip="192.168.195.45" #目標服務器ip,多個ip用空格分開

[root@master yum.repos.d]# chmod +x /usr/local/inotify/rsync.sh
[root@master yum.repos.d]# touch /usr/local/inotify/exclude.list
[root@master yum.repos.d]# vi /etc/rc.d/rc.local
nohup /bin/sh /usr/local/inotify/rsync.sh &

[root@master rsync_server]# sh /usr/local/inotify/rsync.sh

[root@master app]# cd rsync_server/
[root@master rsync_server]# touch test{1..9}

[root@node rsync_client]# pwd
/app/rsync_client

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章