首页 > 其他 > 详细

rsync同步

时间:2020-12-25 09:23:02      阅读:46      评论:0      收藏:0      [点我收藏+]
rsync 同步(可以是一个网络服务 port socket)
rsync 是一个客户端使用命令

第一种工作模式:local
    rsync -avz /etc/hosts /tmp/         == cp
    rsync -avz --delete /null/ /tmp/    ===rm
第二种工作模式:remote shell
    push: (推送本地内容到其他主机上)
    rsync -avzP -e ‘ssh -p 22‘ /tmp/ root@192.168.254.150:/tmp/
    pull:(获取其他主机的内容)
    rsync -avzP -e ‘ssh -p 22‘ root@192.168.254.150:/tmp/  /tmp/

    关键语法说明:
    1)-avz相当于-vzrttopgD1,表示同步时文件和目录属性不变。
    2)-P显示同步的过程,可以用--progress 替换
    3)-e  ‘ssh-p 22’ ,表示通过ssh的通道传输数据,-p 22 可省略
    4) wuyuda@192.168.254.150:/opt  远程的主机系统用户,地址,路径
    5) /tmp 本地路径

rsync 服务端:

1)rsync在backup-server中 /etc/rsyncd.conf的配置
    uid=rsync
    gid=rsync
    use chroot=no
    max connection=2000
    timeout=600
    pid file=/var/run/rsyncd.pid
    lock file=/var/run/rsync.lock
    log file=/var/log/rsyncd.log
    ignore errors
    read only=false
    list=false
    hosts allow=192.168.254.0/24    #(backup服务端IP全称/24  或   *)
    host deny=0.0.0.0/32
    auth users=rsync_backup
    secrets file=/etc/rsync.password
    fake super = yes
    ################################
    [backup]
    comment=backup server by wyd
    path=/backup/

2)启动rsync

rsync --daemon  启动rsync
cat /var/run/rsyncd.pid   查看rsync的pid号
ps -ef|grep rsync|grep -v grep    查看rsync的pid号
netstat -lntup|grep rsync   查看rsync的端口号 
ss -lntup|grep rsync   查看rsync的端口号  

3)创建rsync用户,及共享目录/backup

    useradd rsync -s /sbin/nologin -M   添加虚拟用户rsync 并且不创建家目录
    id rsync  查看用户id
    mkdir /backup   
    chown -R rsync /backup/   将/backup/目录的属主权限递归赋予给rsync
    ls -ld /backup/    查看该目录的情况

4)创建密码文件

    echo "rsync_backup:wyd" > /etc/rsync.password
    cat /etc/rsync.password
    ll /etc/rsync.password 
    chmod 600 /etc/rsync.password    更改该目录的权限,不可读
     ll /etc/rsync.password 

5)加入开机自启动:

echo "rsync --daemon"   >> /etc/rc.local
cat /etc/rc.local

lsof(list open files)是一个列出当前系统打开文件的工具
lsof -i :873   列出谁在使用873端口

rsync客户端:(先要关闭backup-server服务端的防火墙)

1)创建密码文件:

    echo "wyd" > /etc/rsync.password
    chmod 600 /etc/rsync.password

    ls -l /etc/rsync.password
    cat /etc/rsync.password

2)rsync操作

push 和 pull都是客户端的操作:
     Push: rsync [OPTION...] SRC... [USER@]HOST:DEST  (将文件从客户端
     推向服务端备份)  
    rsync -avz /tmp/ rsync_backup@backup-server::backup/ --password
    -file=/etc/rsync.password

    Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]  (将文件从服务端
    碑文目录拉回客户端)
    rsync -avz rsync_backup@backup-server::backup/ /tmp/ --password
    -file=/etc/rsync.password

backup-server服务端,同步安全优化:

pkill rsync
lsof -i :873
rsync --daemon --address=192.168.254.154
netstat -lntup|grep rsync

杀进程:

    killall rsync
    pkill rsync 
    kill -9 rsync

    kill rsync之后需要rm -f /var/run/rsyncd.pid  再 rsync --daemon
    kill -USR2 `cat /var/run/rsyncd.pid`     这条命令同上
    kill -HUP `cat /var/run/rsyncd.pid`   直接rsync --daemon

rsync优点:

1:增量同步备份,支持socket(daemon),集中备份

rsync缺点:

1.大量小文件同时同时同步的时候,比对时间较长,有的时候,rsync进程停止.
解决: a.打包同步. b.drbd(文件系统同步复制block)
2.同步大文件,10G这样的大文件有时也会问题,中断.未完整同步前,是隐藏文件.

无差异同步:

push(推):本地有,远端就有,本地没有,删除远端独有的内容
rsync -avz --delete /tmp/ rsync://rsync_backup@192.168.254.154/backup
--password-file=/etc/rsync.password
pull(拉) 远端有本地就有,远端没有,删除本地独有文件
rsync -avz --delete rsync://rsync_backup@192.168.254.154/backup /tmp/ 
--password-file=/etc/rsync.password

推:备份远端数据   拉:备份本地数据   (建议--delete参数尽量不用)

同步的时候排除文件:
客户端排除参数,    上面的命令加: --exclude={a,b,c}
服务端排除参数,在/etc/rsync.conf里加exclude=a b c test/liming.txt
tar 命令的排除参数同rsync

定时备份任务:
在客户端lamp01执行:

创建脚本目录:mkdir /server/scripts -p
cd /server/scripts && vim bak.sh

#!/bin/sh
path=/backup
dir="`ifconfig ens33|awk -F ‘[  ]‘+ ‘NR==2{print $3}‘`_$(date +%F)"     

mkdir $path/$dir -p &&/bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F) &&/bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F) &&rsync -az $path/ rsync_backup@backup-server::backup/ --password-
file=/etc/rsync.password
#将本地文件推向备份服务器备份

/bin/sh /server/scripts/bak.sh  (执行脚本)

在客户端lnmp02执行:

在lnmp02中创建目录                                mkdir -p /server/scripts
将lamp01中的监本文件复制到lnmp02中 scp /server/scripts/bak.sh root@lnmp02:/tmp
查看lnmp02客户端/tmp目录是否有bak.sh  ll /tmp
在lnmp02中将bak.sh 复制到脚本目录下     cp -p /tmp/bak.sh /server/scripts/
在lnmp02中测试                                      /bin/sh /server/scripts/bak.sh

rsync同步

原文:https://blog.51cto.com/14956085/2571733

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!