zoukankan      html  css  js  c++  java
  • Rsync

    一、Rsync介绍

    1、什么是Rsync

    Rsync是一款开源的,快速的,多功能的,可实现全量及增量(类似cp)也可以实现删除的功能(rm)的本地或服务器和服务器之间的远程数据同步备份的优秀工具。

    2、Rsync的特性

    (1)支持拷贝特殊文件,如链接文件、设备等

    (2)拥有排除的功能(tarfind),相当于打包命令tar

    它的复制可以排除某个文件再复制;

    (3)可以做到保持原文件或目录的权限,时间,软硬链接,属主、组等属性均不改变,相当于cp -p

    4)还可以实现增量同步,只拷贝对方没有的东西,提高效率(tar -N

    5可实现通过rcprshssh等方式来配合传输文件(rsync本身不对数据加密)

    6可以通过socket(进程监听的方式接受数据)传输文件和数据(服务端和客户端)

    7支持匿名或认证性质的加密传输。

    3、企业中的应用

    两台服务器之前进行数据同步,定时任务、数据备份(crond+rsync

    工作中rsync会把宽带占满,需要加限速参数, --bwlimit=100 dbfile

    二、Rsync的三种模式

    1、本地间类似cp命令的复制方式

    简单说就是本地间的数据同步。

     

    2、网络间两台不同IP服务器间数据传输

    简单说就是网络间的数据同步

     

    3、socket进程监听方式启动rsync sercer

    简单说就是xshell监听进程,开一个进程,接收数据。(sercer端和客户端的形式)

    某一个时间点,设定定时任务,把我们需要做备份的数据推送到备份服务器上;但是我们在推送的时候,并不需要有目标路径的(其他两种要有),直接推到监听的端口上,但是数据放哪里,备份服务器说的算。客户端只需要把数据推送到服务端的端口上。

     

    三、RSYNC实际用法

    1#第一模式#本地传输数据同步

    rsync /etc/hosts /tmp

    本地间的数据同步,(cp的用法一样);但是不会提示你是否覆盖,只把不一样的数据同步过去。

     

    1rsync的三个参数

     

    2rsync增量同步 (给你加我没有的)

    目录对目录,文件对文件

    只把对方没有的东西推送过去,优点是速度快,但是rsync要有一个比对的过程。

     

    3)完全同步 --delete (你多出来的给你删掉)

    rsync -avz --delete

    以源数据为主,把目标多余的东西删除,为了跟源文件数据同步(实现了rm的功能)

     

     

    2#第二模式#网络间两台不同IP服务器间数据传输

    1)先安装支持远程连接支持的环境包

     

    yum -y install openssh-clients     (scp)

     

    reync -avz /root/benet/ root@192.168.200.103:/tmp

    然后需要知道对方的root密码 (root是对方的用户名)

    2)增量复制(只复制,不影响对方;不同步)

    scp benet2/test 192.168.200.103:/tmp/

    默认以超级用户登陆对方机器  IP前面可以不加东西,不写就默认root

    3)把对方的文件复制回来

    scp root@192.168 200.76 :/etc/hosts .

    (4)增量复制和完全复制rsync

    reync -avz /root/benet/ root@192.168.200.103:/tmp

    reync -avz /root/benet/ root@192.168.200.103:/tmp --delete

     

    3#第三模式#传输到对方指定端口(默认22,也可以指定端口)

    远程连接配置文件 /etc/ssh/sshd config(修改端口最好是1000以上的,因为1000以下的都是被设定好的,容易起冲突,导致服务无法重新启动)

    ##一旦修改了配置文件,需要重新启动这个服务

    rsync -avzP -e ‘ssh -p 22’ /etc/ root@192.168.197.129:/tmp/

    这个命令可以指定端口,如果对方是22端口,就不用-e及后面的参数;P是不改变原文件属性

    4#第三模式过程#多组服务器之前,以socket进程监听方式启动rsync sercer

    1)首先服务端要启动一个配置文件(默认不存在)

    先创建/etc/rsyncd.conf  (配置文件)

    vim打开

    2)在里面输入内容

    uid = rsync  (程序用户)

    gid = rsync  (组用户)

    use chroot = no  (不打开安全设置)

    max connections=200 (我允许200个客户端同时向我推送数据)

    timeout = 300  (超时时间:最多300)

    pid file = /var/run/rsyncd.pid   PID文件保存的路径)(##每个进程都有PID文件,启动以后默认生产一个含有PID号的文件,脚本看本地有没有PID这个文件,如果服务启动就会生成这个文件,如果服务关闭,pid文件就会删除。(如果这个文件这个服务就是启动,如果不存在,这个服务就是没启动))   kill `cat pid文件的路径`  (方便的杀)

     

    lock file = /var/run/rsyncd.lock  (如果多个进程同时打开同一个目录或文件,要有先后顺序;进程锁)

    log file = /var/log/rsyncd.log (日志文件)

    [backup]   (模块,下面的配置只对这个模块生效;上面的是全局配置。)

    path = /backup/  (客户端向我推送的数据,我默认放在这个目录下)

    ignore errors  (错误时候忽略)

    read only = false (只读关闭,变成读写模式)

    list = false  (客户端能不能以列表的方式看服务端目录里都有什么,不行)

    hosts allow = 192.168.154.0/24  (允许哪些IP地址过来;直接开个网段)

    host deny = 0.0.0.0/24 (不允许哪些IP地址连接,本机所有IP地址)40代表本机任意IP地址)如果是 0.0.0.0/32 全没有,加上前面的host deny 所有都不拒绝

    auth users = rsync_backup (配置文件里创建一个虚拟账号:rsync_backup)

    secrets file = /etc/rsync.password  (密码设置的位置)

     

    (3)复制版本

    uid = rsync

    gid = rsync

    use chroot = no

    max connections=200

    timeout = 300

    pid file = /var/run/rsyncd.pid

    lock file = /var/run/rsyncd.lock

    log file = /var/log/rsyncd.log

    [backup]

    path = /backup/

    ignore errors

    read only = false

    list = false

    hosts allow = 192.168.154.0/24

    host deny = 0.0.0.0

    auth users = rsync_backup

    secrets file = /etc/rsync.password

    四、服务端设置过程

    1)客户端要告诉server端,我要推送给配置文件的哪个模块;

    服务端会按照那个模块的配置的路径去放数据,比如backup模块;推送到这个模块,就存放在那个模块设置的存储位置path = /backup

    2)服务端要对客户端有一个验证模块下的用户名和密码

    (为了安全,不能什么客户端都能连接得进来!!)必须要指定服务端设置的账号和密码才能让客户端连接进来。(rsync_backup   /etc/rsync.password)模块里设置的这个虚拟账号和虚拟密码。

    3sercer做了一个映射;

    rsync在做事时候是以程序用户的身份在做事,验证过来的用户,只有rsync服务承认这个用户。

    rsync服务一直在监听socket(某个端口),一旦有某个用户连接,rsync进行虚拟账号验证,就启动一个子进程,然后做了一个映射,用户输入的虚拟账号映射成了LINUXrsync系统账号,后续的子进程做事,是以rsync设定的程序用户在做事,但是在客户端请求登陆过来的时候,是以虚拟账号验证的;这种好处是:就算虚拟账号被公开,也登陆不了Linux系统,这是一个安全措施。

    这个虚拟账号只有socket进程知道,你连过来以后socket进程给你转换成了系统的程序用户登陆账号。

    4)备份服务器创建一个程序用户

    useradd -M -s /sbin/nologin rsync

    5)让rsync能用往/backup目录里写东西

    chown rsync.rsync /backup  更改属主

    (6)启动rsync服务

    rsync --daemon (启动守护进程)

    netstat -antup | grep rsync 看后台是否启动

    7)创建rsync虚拟账号和密码

    因为配置文件里写的密码指向一个路径,所以我们要创建这个文件

    vim /etc/rsync.password

    里面写:

    rsync_backup:123456  (账号:密码 )

    7)将账号密码文件权限设置为600(否则会失败)

    chmod 600 /etc/rsync.password

    600代表只能root账号看和写,其他人不能看

    8)加入开机启动

    echo “rsync --daemon” >> /etc/rc.local

    五、客户端设置

    1、创建一个密码文件(只需要密码文件)

    echo “123456” > /etc/rsync.password

    chmod 600 /etc/rsync.password

    2、手动模拟推送

    rsync -avz /root/www rsync_backup@192.168.200.84::backup

    直接写虚拟账号,后面两个冒号接模块名,不需要路径

    3、一次性推送(脚本用)不需要输入密码

    rsync -avz /root/www rsync_backup@192.168.200.84::backup --password-file=/etc/rsync.password

    后面直接跟自己这边的密码文件,就不用输入密码了。

    客户端只写密码

    六、要点

    服务端:

    1/etc/rsyncd.conf

    2/etc/rsync.password

    3、密码文件权限600

    4、创建/backup数据目录

    5、数据目录属主程序用户

    6、常见程序用户

    7、启动rsync --daemon

    8、端口873

    客户端:

    创建一个密码文件(只写密码就行)

    文件权限600

    双方必须要关闭防火墙和se  LINUX

    service iptables stop   防火墙关闭

    selenforce 0     seLinux关闭

    企业应用要点

    在传送大量小文件时候,容易造成当机;解决方法是先打包

    传送大文件失败时候(可能网络问题)可以用续传参数,或者把服务端的隐藏文件删除(因为它提前占用大小)

  • 相关阅读:
    Spring学习(一):理解IoC容器
    Spring学习(零):我们为什么要学习Spring
    git push提交报错,提示文件过大,且去掉大文件也报同样的错误
    There was a problem with the instance info replicator
    Eureka配置instanceId显示IP
    Cannot execute request on any known server或DiscoveryClient_UNKNOWN/DESKTOP-MQ8D0C9:8761
    Hexo优化 | 创建sitemap站点地图并向Google提交
    matlab与python读取tiff文件
    Visual studio中编译和使用libpng和zlib
    关于softmax、argmax、softargmax
  • 原文地址:https://www.cnblogs.com/kakajiang/p/10009730.html
Copyright © 2011-2022 走看看