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