zoukankan      html  css  js  c++  java
  • rsync学习笔记

    一、rsync介绍

    1)rsync是什么?
    rsync(remote synchronize),一款开源的远程数据备份的优秀工具

    2)与SCP的比较:
    SCP无法备份大量数据,类似Windows的复制
    rsync:边复制,边统计,边比较

    3)第一次同步时,rsync会复制全部内容,但在下一次只传输修过的文件

    4)数据同步的两种方式:

    push(推):rsync服务器主动推送数据给其他主机。服务器开销大,适合后端服务器少的情况
    pull(拉):客户端主动向rsync服务器拉取数据

    5)监听端口:873

    [root@qll251 ~]# grep rsync /etc/services
    rsync           873/tcp                         # rsync
    rsync           873/udp                         # rsync
    [root@qll251 ~]#
    

    6)Xinetd管理rsync工作
    qinlulu

    xinetd(extended internet daemon),新一代的网络守护进程服务程序,又叫超级Internet服务器。用来管理多种轻量级Internet服务,比如:TFTP、rsync、Telnet等

    二、rsync安装

    #  本次实验以CentOS7.7为例
    [root@qll251 ~]# cat /etc/redhat-release
    CentOS Linux release 7.7.1908 (Core)
    [root@qll251 ~]#
    

    1)需要使用rsync传输数据的主机都需要安装rsync软件

    [root@qll251 ~]# yum -y install xinetd rsync
    

    qinlulu2)以守护进程方式启动rsync;查看rsync进程所使用的端口

    [root@qll251 ~]# netstat -antup |grep rsync #由于此时未启动rsync,因此不会有任何回显
    [root@qll251 ~]# rsync --daemon  #守护进程是指在后台运行不受终端控制的进程。
    [root@qll251 ~]# netstat -antup |grep rsync
    tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      4176/rsync
    tcp6       0      0 :::873                  :::*                    LISTEN      4176/rsync
    [root@qll251 ~]#
    

    三、使用rsync进行数据传输

    两种传输方式:
    1,使用系统用户传输
    2,无需建立系统用户的传输(通过配置文件指定用户)

    下面我们详细讨论下这两种方式

    3.1 rsync使用系统用户同步数据

    1)使用rsync的主机都需要创建用户,用于rsync数据同步

    [root@qll251 ~]# useradd rsync_user
    [root@qll251 ~]# echo 123 | passwd --stdin rsync_user
    更改用户 rsync_user 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    [root@qll251 ~]#
    

    2)rsync服务器创建共享目录,比如/rsync,并创建测试文件test.txt;并利用setfacl设置权限

    [root@qll251 ~]# mkdir /rsync
    [root@qll251 ~]# touch /rsync/test.txt
    [root@qll251 ~]# ls /rsync/
    test.txt
    [root@qll251 ~]# setfacl -R -m user:rsync_user:rwx /rsync 
    			   ###将/rsync/* 赋予rsync_user可读可写可执行的权限
    [root@qll251 rsync]#
    

    执行getfatcl /rsync,如图所示
    在这里插入图片描述

    3)客户端获取rsync服务器共享目录的两种方式

    客户端 前提条件:
    1.安装rsync软件
    2.创建rsync_user用户
    3.创建待存放的目录,并设置相应权限(允许rsync_user用户可读写)

    [root@qll251 ~]# yum -y install xinetd rsync
    [root@qll252 ~]# useradd rsync_user
    [root@qll252 ~]# echo 123 | passwd --stdin rsync_user
    更改用户 rsync_user 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    [root@qll252 /]# mkdir /shares  
    [root@qll252 /]# chown -R rsync_user:rsync_user /shares
    [root@qll252 /]#
    

    3.1 rsync服务器端向客户端推数据

    ## 语法: rsync -avz 共享路径 客户端用户@客户端IP:/目标路径
    [root@qll251 ~]# rsync -avz /rsync/ rsync_user@192.168.1.252:/shares
    ##想明白为什么rsync客户端也需要创建rsync_user用户了吗?因为服务器通过该用户去访问客户端呀
    

    在这里插入图片描述

    上图所示,已完成数据的同步。我们在qll252主机上ls验证。

    [root@qll252 ~]# ll /shares/
    总用量 0
    -rw-rwxr--. 1 rsync_user rsync_user 0 2月   5 12:10 test.txt
    [root@qll252 ~]#
    

    3.2 客户端向服务器端拉取数据(pull)

    ## 语法: rsync -avz 服务器端用户名@服务器端IP:/共享路径 /本地路径
    [root@qll252 ~]# rsync -avz rsync_user@192.168.1.251:/rsync /shares
    

    qinlulu

    ## qll252客户端验证数据同步情况
    [root@qll252 ~]# ls /shares/
    rsync
    [root@qll252 ~]# ls /shares/rsync/
    test.txt
    [root@qll252 ~]#
    

    以上便是采用系统用户方式同步rsync数据,接下来我们讨论不使用系统用户,如何完成rsync的数据同步?

    3.2 非系统用户同步数据

    1.使用系统配置文件/etc/rsyncd.conf来同步数据;
    2.在配置文件中创建rsync账号 [auth users = rsyncuser]
    3.将rsync以daemon方式运行

    1)编辑rsync配置文件:/etc/rsyncd.conf

    ## vim /etc/rsyncd.conf          //若文件不存在,需要自己创建
    uid = root        #运行进程的身份
    gid = root       #运行进程的组
    address =192.168.1.252   #监听IP
    port =873          #监听端口
    hosts allow =192.168.1.0/24   #允许客户端的IP地址,可以是网段,或者用*表示所有 
    use chroot = yes     #若rsync被黑客入侵,则锁定家目录,黑客无法再rsync运行的家目录之外创建文件
    max connections =5        #最大连接数
    pid file =/var/run/rsyncd.pid       #进程PID,自动生成
    lock file =/var/run/rsync.lock      #指max connectios参数的锁文件
    log file =/var/log/rsyncd.log       #日志文件位置
    motd file =/etc/rsyncd.motd #客户端登陆之后弹出的消息,需要创建
    [image01]             #共享模块名称,可自定义
    path =/mysql-bak   #本地服务器的路径
    comment = used for mysql-data    #描述
    read only = false     #设置服务端文件读写权限
    list = yes            #是否允许查看模块信息
    auth users = rsyncuser   #备份的用户,和系统用户无关
    secrets file =/etc/rsync.passwd     #存放用户的密码文件,格式是  用户名:密码
    

    2)启动服务

    [root@qll252 ~]# systemctl start xinetd && systemctl enable xinetd #启动并设置xinetd进程开机自启
    [root@qll252 ~]# systemctl start rsyncd && systemctl enable rsync 
    [root@qll252 ~]# rsync --daemon --config=/etc/rsyncd.conf #以守护进程方式运行rsync,且加载配置文件
    [root@qll252 ~]# netstat -antup | grep rsync
    tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1312/rsync
    tcp6       0      0 :::873                  :::*                    LISTEN      1312/rsync
    [root@qll252 ~]#
    

    3)创建我们的共享目录,及测试文件

    [root@qll252 ~]# mkdir /mysql-bak
    [root@qll252 ~]# touch /mysql-bak/test{1..5}.txt
    [root@qll252 ~]# ls /mysql-bak/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt
    [root@qll252 ~]#
    

    4)客户端向服务器端拉取数据(pull)

    若提示:No route to hsot (113),则说明防火墙未关闭,我们关闭即可。
    在这里插入图片描述

    [root@qll252 ~]# systemctl stop  firewalld && systemctl disable firewalld
    

    再次执行,rsync同步命令:

    在这里插入图片描述

    还是报错,这次我们看下服务日志:tailf /var/log/rsyncd.log。看下图
    在这里插入图片描述
    好了,通过日志我们得知:客户端向服务器验证用户时,没有这个密码文件(未创建/etc/rsync.passwd)

    ## 根据日志提示,我们创建密码文件即可,格式 用户名:密码,且文本权限必须为600
    [root@qll252 ~]# echo "rsyncuser:123123" >> /etc/rsync.passwd
    [root@qll252 ~]# chmod 600 /etc/rsync.passwd
    

    开始进行备份

    [root@qll251 ~]# rsync -avz rsyncuser@192.168.1.252::image01 /tmp
    

    在这里插入图片描述

    我们也可以在执行命令时,提前定义好密码:

    # 本地创建密码文本,并设置600权限
    echo "123123" > /etc/rsync.mypasswd && chmod 600  /etc/rsync.mypasswd
    ## 执行命令时,加上 --password-file=/etc/rsync.mypasswd 即可
    ###完整命令如下:
    rsync -avz rsync -avz rsyncuser@192.168.1.252::image01 /tmp --password-file=/etc/rsync.mypasswd
    

    以上便是两种rsync同步方式,生产环境中多用于重要数据的定时备份。
    我们可以通过写一个简单的shell脚本来完成这个定时任务。

    ## 新建一个定时备份脚本
    vim /root/bak.sh
    #!/bin/bash
    rsync -avz rsync -avz rsyncuser@192.168.1.252::image01 /tmp --password-file=/etc/rsync.mypasswd
    

    chmod 755 /root/bak/sh
    echo " 0 2 * * * sh /root/bak.sh " #设置每天凌晨两点执行该脚本

    更多IT技术,请微信搜索公众号秦露露或者扫描下方二维码关注

    在这里插入图片描述

    十年磨一剑
  • 相关阅读:
    css3基础篇二
    css3基础篇一
    react基础篇六
    react基础篇五
    react基础篇四
    react基础篇三
    react基础篇二
    react基础篇一
    矩阵
    POJ 3071 Football
  • 原文地址:https://www.cnblogs.com/qinlulu/p/12270260.html
Copyright © 2011-2022 走看看