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关闭

    企业应用要点

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

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

  • 相关阅读:
    English,The Da Vinci Code, Chapter 23
    python,meatobject
    English,The Da Vinci Code, Chapter 22
    English,The Da Vinci Code, Chapter 21
    English,The Da Vinci Code, Chapter 20
    English,The Da Vinci Code, Chapter 19
    python,xml,ELement Tree
    English,The Da Vinci Code, Chapter 18
    English,The Da Vinci Code, Chapter 17
    English,The Da Vinci Code, Chapter 16
  • 原文地址:https://www.cnblogs.com/kakajiang/p/10009730.html
Copyright © 2011-2022 走看看