天天看点

linux基础服务(一) rsync+inotify实时同步

很久没做这个了,同事说了一声才想起来,所以这里留个笔记

案例

服务器1  192.168.1.20   (服务端)

服务器2  192.168.1.21   (推送端)

#查看服务器上有没有rsync的包
#一般是有的。最小安装可能没有。手动装一下
[root@k8s-master01 ~]# rpm -qa rsync
rsync-3.1.2-4.el7.x86_64


#这里两个节点创建一下准备同步的目录
mkdir /apps/            

一. 配置服务端 (192.168.1.20)

1. vi /etc/rsyncd.conf

#添加以下配置
motd file = /etc/rsyncd.motd
transfer logging = yes
log file = /var/log/rsyncd.log
port = 873
address = 192.168.1.20
         #服务端地址,注释不可同行,不然会报错
uid = root
gid = root
use chroot = no
read only = no
max connections = 10

[common]
     #标签名称,客户端连接时使用
  comment = rsync info
  path = /apps
        #指定服务端同步目录
  ignore errors
  auth users = root
  secrets file = /etc/rsyncd.secrets
  hosts allow = 192.168.1.0/255.255.255.0
               #和服务端相同网段
  hosts deny = *
  list = false
           

2. 创建用户密码文件

echo "root:123.com" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets   

#密码文件权限必须为600,不然不认
           

3.启动rsync服务

systemctl restart rsyncd
systemctl enable rsyncd           

二. 部署推送节点 (192.168.1.21)

1. 设置密码文件

echo  "123.com"  >  /root/passwd
chmod  600  /root/passwd           

2. 启动服务

systemctl restart rsyncd
systemctl enable rsyncd
           

三. 测试推送

登陆推送端,创建测试文件,进行推送测试
#192.168.1.21
cd /apps
touch 1 2 3 4 5

#推送
rsync -avz --password-file=/root/passwd  /apps/ [email protected]::common           

参数说明

-a      #归档模式,递归传输所有文件,保持权限
-v      #详细信息
-z      #对备份的文件传输时进行压缩

--password-file=/root/passwd   #密码文件路径,客户端的文件里只需要有密码即可  

/apps/           #先后顺序,如果前面放的是本地目录,后面放的是同步地址,那么就是推送
                 #反过来,前面是地址,后面是本地目录,则是拉取

[email protected]::common   #rsync服务端地址 结尾是::+前面我们配置文件里的标签名称common           

三. 实时监听同步

#拉取软件包
wget http://rpmfind.net/linux/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm

#安装
rpm -ivh inotify-tools-3.14-9.el7.x86_64.rpm            
#!/bin/bash
inotify="inotifywait -mrq -e modify,create,move,delete /apps/ "
rsy="rsync --delete -avz --password-file=/root/passwd  /apps/  [email protected]::common"
        #这里指定服务端地址

$inotify | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -ne 0 ] ; then
        $rsy
    fi
done
           

继续阅读