博客地址:http://www.moonxy.com

一、前言

rsync 命令是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,可以理解为 remote sync(远程同步)。rsync 使用所谓的 "rsync算法" 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。rsync 不仅可以远程同步数据(类似于 scp),还可以本地同步数据(类似于 cp),但不同于 cp 或 scp 的一点是,rsync 不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有当源数据或目标数据出现不一致时,才会把不相同的部分覆盖。rsync 是一个功能非常强大的工具,其命令也有很多功能特色选项。如果没有安装 rsync 命令,可以使用 "yum install -y rsync" 安装。

二、rsync 的命令格式

rsync [OPTION]... SRC DEST

rsync [OPTION]... SRC [USER@]host:DEST

rsync [OPTION]... [USER@]HOST:SRC DEST

rsync [OPTION]... [USER@]HOST::SRC DEST

rsync [OPTION]... SRC [USER@]HOST::DEST

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

其中 SRC 表示源文件,DEST 表示目标文件。

对应于以上六种命令格式,rsync 有六种不同的工作模式:

1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup

2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src

3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data

4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack

5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www

6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, --recursive 对子目录以递归模式处理。
-v, --verbose 详细模式输出。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
-l, --links 保留软链接。
-L, --copy-links 想对待常规文件一样处理软链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
--delete 删除那些DST中有,SRC没有的文件。
-P 等同于 --partial。
--progress 显示备份过程。
-z, --compress 对备份的文件在传输时进行压缩处理。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--progress 在传输时现实传输过程。
--password-file=FILE 从FILE中得到密码。

这些还只是 rsync 的一部分选项,其中常用的有 a、v、L、--delete 和 --exclude 这几个,通常 -av 或 -avL 连用,其中 -a 选项等同于 -rlptgoD,-a 选项后面可以跟一个 --no-OPTION,表示关闭 -rlptgoD 中的某一个,比如 -a--no-l 等同于 -rptgoD。

三、rsync 应用实例

3.1 将本地的 test1 目录直接复制成 test2 目录

单机模式,直接将一个目录的文件备份到另外一个目录下,如下:

# rsync -avL test1/ test2/

以下为远程模式,将源端看做客户端,远端看做服务器。

3.2 通过 ssh 的方式备份

首先启动服务端的ssh服务:

# service sshd start

接下来就可以在客户端使用rsync命令来备份服务端上的数据了,SSH方式是通过系统用户来进行备份的,如下:

rsync -avL --progress -e ssh work@192.168.1.121:/www/* /databack/experiment/rsync
work@172.16.78.192's password:
receiving file list ...
5 files to consider
test/
a
0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
b
67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
c
0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
dd
100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
sent 96 bytes received 98190 bytes 11563.06 bytes/sec
total size is 100663363 speedup is 1024.19

上面的信息描述了整个的备份过程,以及总共备份数据的大小。

这个实例表示 pull(拉取),从服务器拉取文件到本地目录,同样也可以 push(推送),表示将本地文件推送到服务器上面来备份。如果不通过密钥,则像上面一样还要输入密码来交互。可以设置 ssh 密钥,生成公钥和私钥,这样在同步时,就不需要输入密码了,适合于 shell 脚本。

3.3 通过后台服务的方式

默认安装好rsync程序后,并不会自动创建rsync的主配置文件,需要手工来创建,其主配置文件为 "/etc/rsyncd.conf"。

配置文件 rsyncd.conf 由全局配置和若干模块配置组成。配置文件的语法为:

1)模块以 [模块名] 开始

2)参数配置行的格式是 name = value ,其中 value 可以有两种数据类型:

字符串(可以不用引号定界字符串)

布尔值(1/0 或 yes/no 或 true/false)

3)以 # 或 ; 开始的行为注释

4)\ 为续行符

全局参数

在文件中 [module] 之外的所有配置行都是全局参数。当然也可以在全局参数部分定义模块参数,这时该参数的值就是所有模块的默认值。

模块参数

模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

a. 基本模块参数

b. 模块控制参数

c. 模块文件筛选参数

d. 模块用户认证参数

rsync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。

rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为:username:passwd

一般来说口令最好不要超过8个字符。若您只配置匿名访问的 rsync 服务器,则无需设置上述参数。

e. 模块访问控制参数

客户主机列表定义可以是以下形式:

单个IP地址。例如:192.168.0.1

整个网段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0

可解析的单个主机名。例如:centos,centos.bsmart.cn

域内的所有主机。例如:*.bsmart.cn

"*"则表示所有。

多个列表项要用空格间隔。

f. 模块日志参数

设置了"log file"参数时,在日志每行的开始会添加"%t [%p]"。

可以使用的日志格式定义符如下所示:

%a - 远程IP地址

%h - 远程主机名

%l - 文件长度字符数

%p - 该次 rsync 会话的 PID

%o - 操作类型:”send” 或 “recv”

%f - 文件名

%P - 模块路径

%m - 模块名

%t - 当前时间

%u - 认证的用户名(匿名时是 null)

%b - 实际传输的字节数

%c - 当发送文件时,记录该文件的校验码

创建该文件并添加如下内容:

vi /etc/rsyncd.conf

uid=root
gid=root
max connections=
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.1.0/ [www]
comment= backup web
path=/www
read only = no
exclude=test
auth users=work

创建密码文件,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为 "username:password",用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。

编辑 secrets file 并保存后赋予 600 权限,如果权限不对,则不能完成同步,如下:

echo "work:abc123" > /etc/rsyncd.passwd
chmod /etc/rsyncd.passwd

启动 rsyncd 服务,如下:

# rsync --daemon --config=/etc/rsyncd.conf

启动后查看873端口是否启动,如下:

# netstat-lnp |grep 

完成以上工作,现在就可以对数据进行同步了,如下:

rsync -avz --progress work@192.168.1.121::www /databack/experiment/rsync

Password:
receiving file list ...
files to consider
./ files...
a
% .00kB/s :: (, 50.0% of )
b
% .43kB/s :: (, 66.7% of )
c
% .00kB/s :: (, 83.3% of )
dd
% .49MB/s :: (, 100.0% of )
sent bytes received bytes 17899.64 bytes/sec
total size is speedup is 1533.75

发现此时也要输入密码才能进行数据同步,这次我们添加一个选项 --password-file=/tmp/rsync.password ,这时当我们以work用户登录 rsync 服务器同步数据时,密码将读取 /tmp/rsync.password 这个文件。这个文件内容只是work用户的密码。

# touch /tmp/rsync.password
# chmod /tmp/rsync.password
# echo "" > /tmp/rsync.password

然后执行如下同步命令时就不再需要输入密码了,适合于 shell 脚本:

# rsync -avzP  --password-file=/tmp/rsync.password work@172.16.1.135::www  /databack/experiment/rsync

综上

rsync采用主从式构架,在应用上可分为 PUSH 和 PULL 两种主要模式,以因应不同的环境因素,进而达到部署的目的。

PULL模式

在同一网段的环境下,由备份主机向服务器进行同步并将数据备份过来以完成备份工作。这种模式是最普遍被采用的部署方式。

如上,由备份主机启动备份工作,向被备份端要求备份。可将备份时的负载大部分由备份主机承受。当然,PULL模式也支持跨网段或远端进行同步备份工作,如下图:

PUSH模式

PUSH模式的执行方式刚好与PULL模式恰恰相反。如下图所示,在同一网段的环境下,由服务器主动发出同步要求并将数据同步至备份主机上,以完成备份的工作。

在实际中,这种模式通常被采用于较特殊的环境下,例如服务器被部署在防火墙内且无法由外部连入,因此必须改由服务器主动将数据送至备份主机上。如下图:

四、Linux 网络配置

网络知识包含的内容很多,此处只讲解常用的设置 ip、设置主机名和设置 DNS 的操作。

4.1 ifconfig 查看网卡 IP

ifconfig 类似于 Windows 中的 ipconfig,后面不加任何选项和参数时,只打印当前网卡IP的信息(如子网掩码、网关等)。也可以跟某一个网卡名称,如 eth0、eth1 等。使用 -a 选项,可以列出所有的网卡信息。

查看帮助后有如下显示:

If no arguments are given, ifconfig displays the status of the cur-rently active interfaces. If a single interface argument is given, it displays the status of the given interface only; if a single -a argu-ment is given, it displays the status of all interfaces, even those that are down. Otherwise, it configures an interface.

网卡的配置的文件为 /etc/sysconfig/network-scripts/ifcfg-eth0,如果是网卡 eth1,则配置文件是/etc/sysconfig/network-scripts/ifcfg-eth1。修改配置文件后可以使用 "service network restart" 来重启网卡。

4.2 给一个网卡设定多个 IP

在 Linux 系统中,网卡是可以设定多重 IP 的,一定要注意 DEVICE 要写成 "eth0:1",如下:

[root@ryan ~]# cd /etc/sysconfig/network-scripts
[root@ryan network-scripts]# cp ifcfg-eth0 ifcfg-eth0\:

修改 ifcfg-eth0:1 的配置:

[root@ryan network-scripts]# vim ifcfg-eth0\:
DEVICE=eth0
HWADDR=:0C::3C::B1
TYPE=Ethernet
UUID=56bf1079-0ba8--ada7-b574493732f4
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.122
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8

然后重启网络服务:

[root@ryan network-scripts]# service network restart

再次查看网卡IP,如下:

[root@ryan network-scripts]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::3C::B1
inet addr:192.168.1.121 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe3c:83b1/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (1.0 MiB) TX bytes: (241.4 KiB) eth0: Link encap:Ethernet HWaddr :0C::3C::B1
inet addr:192.168.1.122 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)

可以看到多了一个 eth0:1。

4.3 查看网卡连接状态

[root@ryan network-scripts]# mii-tool eth0
eth0: negotiated 100baseTx-FD, link ok

"link ok" 说明网卡为连接状态。如果显示 "no link" 说明网卡坏了或者没有连接网线。

4.4 更改主机名

安装完系统之后,主机名默认为 localhost,使用 hostname 命令可以查看 Linux 的主机名。如下:

[root@ryan network-scripts]# hostname
ryan

CentOS 6.x 修改主机名的配置文件为 /etc/sysconfig/network

[root@ryan network-scripts]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=ryan

CentOS 7.x 修改主机名的配置文件为 /etc/hostname

4.5 设置 DNS

DNS 用来解析域名,Linux 下配置域名解析服务器的配置文件为 /etc/resolv.conf

[root@ryan network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8

resolv.conf 有固定的格式,一定要写成 "nameserver IP" 的格式。

上面的是配置域名解析服务器,也可以在本地直接配置域名解析,配置文件为 /etc/hosts,手动添加 IP 和域名的映射关系,一般作为临时域名解析。如下:

[root@ryan ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.111  www.baidu.com

保存文件之后,再 ping www.baidu.com 就会返回 192.168.1.111的地址了,表示已经映射成功了。

/etc/hosts 的格式很简单,每一行为一条记录,分成两部分,第1部分为 IP,第2部分是域名,可以配置多个域名,并用空格分开,如上四个域名:localhost localhost.localdomain localhost4 localhost4.localdomain4 都映射到 127.0.0.1。并且 /etc/hosts 文件的域名解析优先级高于配置的域名解析服务器文件 /etc/resolv.conf 的优先级。

附录:

参考如下:

rsync配置

Linux 笔记 - 第十三章 Linux 系统日常管理之(四)Linux 中 rsync 工具和网络配置的更多相关文章

  1. Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划

    博客地址:http://www.moonxy.com 一.前言 Linux 下的的防火墙功能是非常丰富的,作为 Linux 系统工程师有必要了解一下.防火墙一般分为硬件防火墙和软件防火墙.但是,不管是 ...

  2. Linux 笔记 - 第十三章 Linux 系统日常管理之(三)Linux 系统日志和服务

    博客地址:http://www.moonxy.com 一.前言 日志文件记录了系统每天发生的各种各样的事情,比如监测系统状况.排查问题等.作为系统运维人员可以通过日志来检查错误发生的原因,或者受到攻击 ...

  3. Linux 笔记 - 第十三章 Linux 系统日常管理之(一)系统状态监控

    博客地址:http://www.moonxy.com 一.前言 如果你是一名 Linux 运维人员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.系统运行状态主要包括:系统负载.内存状态 ...

  4. Linux 笔记 - 第二十三章 MySQL 主从复制配置

    一.前言 MySQL Replication,也被称为主从复制.AB 复制.简单来说就是 A 和 B 两台服务器做主从后,在 A 服务器上写入数据,B 服务器上也会跟着写入输入,两者之间的数据是实时同 ...

  5. centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

    centos Linux系统日常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...

  6. centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课

    centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...

  7. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  8. centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课

    centos linux系统日常管理3  服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...

  9. centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课

    centos  Linux系统日常管理2  tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...

随机推荐

  1. 在一个jsp页面内实现简单计算器

    首先创建一个calculate.jsp 这是用Javascript代码来验证,代码如下: <script type="text/javascript"> functio ...

  2. SQL TRUNCATE TABLE 命令

    SQL TRUNCATE TABLE 命令 SQL TRUNCATE TABLE 命令用于删除现有数据表中的所有数据. 你也可以使用 DROP TABLE 命令来删除整个数据表,不过 DROP TAB ...

  3. 以阿里IoT开发物联网和应用平台

    1. 链接物联网的概念 物联网(The Internet of Things,简称IOT)是指通过 各种信息传感器.射频识别技术.全球定位系统.红外感应器.激光扫描器等各种装置与技术,实时采集任何需要 ...

  4. net core Webapi基础工程搭建(三)——在线接口文档Swagger

    目录 前言 Swagger NuGet引用第三方类库 别急,还有 没错,注释 小结 前言 前后分离的好处,就是后端埋头做业务逻辑功能,不需要过多考虑用户体验,只专注于数据.性能开发,对于前端需要的数据 ...

  5. python + selenium webdriver 通过python来模拟鼠标、键盘操作,来解决SWFFileUpload调用系统底层弹出框无法定位问题

    Webdriver是基于浏览器操作的,当页面上传文件使用的是flash的控件SWFFileUpload调用的时候,调用的是系统底层的文件选择弹出框 这种情况,Webdriver暂时是不支持除页面外的其 ...

  6. odoo视图中常用widget

    widget="statusbar" 头部状态条标签 widget="email" 电子邮件地址标签 widget="selection" ...

  7. Oracle笔记_多表查询

    1 执行sql文件 @文件地址名 --执行某个sql文件: 2 多表查询 想要的数据不在同一张表,就需要多个表进行联查. 多表查询也叫做表连接查询,其中的where条件就是连接条件. 可以使用join ...

  8. SpringBoot读取配置文件源码探究

    1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...

  9. 容器的进程与namespace、rootfs

    一:容器是什么 容器的本质是一种特殊的进程. 在linux容器中有三个重要的概念:Namespace.Cgroups.rootfs. Namespace做隔离,让进程只能看到Namespace中的世界 ...

  10. Drop Table对MySQL的性能影响分析

    [问题描述] 最近碰到有台MySQL实例出现了MySQL服务短暂hang死,表现为瞬间的并发线程上升,连接数暴增. 排查Error Log文件中有page_cleaner超时的信息,引起我们的关注: ...