打印

[讨论] RSYNC学习

RSYNC学习

服务器之间常常要保持些文件或目录的一致,比如一些大的软件下载网站,它们通常使用多台服
4 u% F9 }) F- r0 a务器来提供下载服务。当一台服务器上的文件更新后,其它的服务器也需要更新,而且在更新的时
( K, n0 n& {1 C! R/ \候应该是只对新增或是修改过的文件进行更新,否则会造成网络带宽和时间的浪费。rsync就是能有 , G" h" m" P1 q. @- B7 n' \5 `
效的保持文件及目录的一致的优秀软件。 % t- V7 P4 a8 i c( k. w; W
  rsync,remote synchronize # J/ o; h+ m8 w
  顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的 8 I2 U4 }2 [0 O" f2 @6 a# u( @, S
权限、时间、软硬链接等附加信息,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另
( z/ L, c4 M0 }7 e外它还是免费的软件。rysnc的官方网站:http://rsync.samba.org/,可以从上面得到最新的版本。 9 h2 d8 A6 {$ ?) K3 R/ S& m
当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了,
4 ~; O' n6 F! [1 l2 i( }
, p1 I7 a5 b' X3 N" ]7 A( `查看服务器的rsync $ m; }4 W" G2 }+ Z7 L) B4 Y
[root@localhost etc]# rpm -qa rsync
! A1 S! m& F+ E# x& P% D1 \! V) Rrsync-2.6.3-1 . s8 n4 B+ I5 M9 w! \5 ^( E
[root@localhost etc]# # z8 A4 E4 Z+ K
(我们公司用的版本是2。6。3-1 最新的是[root@localhost src]# ls
/ `1 v. h" r( y* G$ U4 i! Hrsync-2.6.9 rsync-2.6.9.tar.gz)
) m( a) S3 A f
$ f: l6 D7 }" _3 q3 g% s实验:对 file service /var/rsynctest 备份到 backup service /backup/backup
& ?$ h8 q# ~+ P, `# H" A5 i' N3 G
Rsync 的服务器端配置 (FILE SERVICE) W8 U" o0 i) P8 [$ J1 J9 R4 M

% |0 Z; y4 W8 C# H1 ]! e O. y R1: 编辑 /etc/rsyncd.conf (记得不要忘记这个D ,曾经因为这个导致服务无法启动)
$ y- O0 x5 ]3 M" s- E ouid = root (曾经实验过用nobody来代替 但经常因为权限不够导致无法服务器和客户端无 ; A# `% @; q5 y( D4 |& o, X: G
gid = root 法联动)
# j6 O. u' ^! N. f- I0 V7 t# H3 X5 Iuse chroot = no 1 K& n# x/ |4 h" d( G
max connections = 4 ------最大可以有多少台clent与其相连
2 J" ? r+ `$ qpid file = /var/run/rsyncd.pid ! h- P, W! w# Q/ g7 U
lock file = /var/run/rsync.lock (此3项记录了RSYNC服务的运行状态,这3个需要手动建
" t% h ]# O( {! I% u! x2 Flog file = /var/log/rsyncd.log 立,出问题的时候可以查看LOG 来调试) 8 @: e& ?5 g. s8 d* D6 i; h, n

$ g# X6 f4 ^& L2 G6 Y1 z* u[www]
( v) w& B5 [4 a! m7 Opath = /var/rsynctest -----------要备份的数据的路径
) v9 ?8 G* Y2 X4 v0 wignore errors
8 u9 Q2 r1 Q, d( [! Zread only =yes , ]1 Y7 [. ~1 r$ V' F" p
list = no $ f( ]+ ?! M( n: A( L' y
hosts allow = 10.0.0.16 ---------准许接入的主机的IP (其实还可以写上hosts denly + ip 示不准许接入的主机) # N1 W2 K; B9 c
auth users = backup 0 Q: G' k& ~. [2 A
secrets file = /etc/backserver.pass -----存放密码的文件
1 S- b- i# F: w# e# j6 T/ i% A: d: \ g9 H' D
2:编辑存放密码的文件
% A* f/ b$ M, v) f; {! _( W
1 `$ ~: t h" L& [vi /etc/backserver.pass
( i) b6 K, ^( S backup:123456
& B8 L; B+ [7 w @3 l. g! L5 T d 对密码文件修改权限 ; `/ W6 g7 g" K3 V
Chmod 600 /etc/backserver 一定要注意的是服务器和CLENT端的密码文件的权限要一致, 曾经因为不一致导致出错 ,权限越低越安全 600 属于中等的权限,400 比较不错 ( C( b" v# o5 p( ]( Z9 O" @4 c0 Z8 F
[root@localhost ~]# ll /etc/backserver.pass 7 C& H# t9 Q2 \+ f$ W( N2 P; O! J
-rw------- 1 root root 14 Jul 27 16:03 /etc/backserver.pass 8 d) N+ d I6 H+ Z" ]4 Y- o/ X' F
3:启动rsync & j$ v% H6 l# X$ [ Z
/usr/bin/rsync --daemon
5 n+ V7 h' N6 T# }6 \; Y& e 由于本服务器是用RPM包安装的方式。在安装的时候已经默认建立了/etc/xinetd.d/rsync文件 此文件是启动服务的必要条件。必须要有的
& I: I8 u0 |( Q; M3 r 2 Z$ N2 ^5 z1 _
service rsync 9 U; W' G' n4 B* F4 A) y
{
0 n: r3 T( x Mdisable = no # g5 d. U$ c- s( l; R" b2 N& G
socket_type= stream $ A' V8 e! E% i; w1 b) R' Z4 v
wait = no 7 R* }5 |1 q% s+ f
user = root / p* a* r% v; x5 \
server = /usr/bin/rsync
2 G- S4 M1 z6 H3 ]- X" r- V8 Wserver_args= --daemon
' ^) l, U$ x. p6 Q+ qlog_on_failure += USERID % M5 q$ C( [ X2 e
}
5 C* C2 P$ D. d( R; Q$ x3 V : @+ G6 f: x5 ^; f% |
启动后查看 netstat –nl ! U2 f, Q* l% A7 @7 U( k3 t3 y
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
: Y7 v6 i/ `9 p( w# y; ]/ j! C) g# h/ [
/ J$ @5 J( q5 R7 e% W) O/ u% ]- Qrsync 启动是用的873端口。如果客户端 出现rsync: failed to connect to 10.0.0.11: No route to host (113) 这个就可能是iptables 把服务挡住了。这种情况关掉防火墙 ,或者修改iptables 具体怎么修改需要再研究
9 q0 |; s" ^2 D; {, K $ ?1 p9 y8 Y+ C2 h
% v) z# `7 u- y- r, ~- g1 Z+ y

$ A$ z' u8 F, P o; R* t对客户端的配置 , L0 \+ u4 h h4 @# S; r1 z
! d, F: p! o% U4 c/ s- n, [' n: `, v
客户端已经用RPM的方式安装完毕了。而且客户端不需要开启服务,主要是语法要掌握 . d" \9 d1 }. ?! v0 U% e3 o
/usr/bin/rsync -vzrtopg --delete --progress backup@10.0.0.11::www /backup/backup/ --password-file=/etc/backserver.pass # `4 r$ B! X" {: N( C! C2 n
上面这个命令行中-vzrtopg里的v是代表verbose(详细),z是代表zip(压缩),r是代表recursive(递归),topg都是保持文件原有属性如属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。 # g2 L0 F# m' E3 o% y/ B, b, k
backup@10.0.0.11::www backup 是服务器端的 rsyncd.conf 指定的用户名,www是指定的模块的名字。IP和模块名字之间加的是:: 双号 /backup/backup/是要将备份文件的放置的路径 & @+ A) }4 k8 [' i' l/ `" V4 G
--password-file=/etc/backserver.pass 备份中调用的密码文件路径
2 q0 q6 v) j$ q6 U# M Vi /etc/backserver.pass . C3 m0 q0 w" y, j
123456 (注意,这个地方只有密码,不加用户不能些成backup:123456 曾经在这纠缠了很长时间 ,和SERVER端不一样,SERVER端的密码文件配置应该是backup:123456的形式,两端的密码文件都应该是600权限最好) $ s9 R2 S) w* W4 W7 w* z5 @
+ ^. w) A* c: Q9 j" ?
0 t5 z9 }* B9 X! x

( `' ^4 B ~: k; Z# n8 J; Z
7 J, s* O, l$ m+ P6 ~& e简单配置如上,今后还会要写一个cron脚本。,让其自行备份。附客户端备份语法 ( f+ w" ^5 E2 h' |+ B

7 y$ T& Y0 s* {7 t2 \$ G#!/bin/sh + f9 l7 J/ i* P- V
rsync -tvazurp --delete --progress backup@10.0.0.11::media /backup/ufeelmed 6 m+ [# @& r8 D; Q
ia --password-file=/etc/backserver.pass 6 B) Z' \8 F& x
root@localhost ~]# crontab -l # J4 r: Q; x7 v! f
1 1 * * * /usr/local/squid/var/spite.sh 5 J9 X8 W1 K/ Y; S: z: {; K& M9 L8 x+ t
1 2 * * * /backup/script/rsync.sh
- C6 l8 V1 B' G5 v4 W1 9 * * * /backup/script/rsync.sh / K+ `$ P% ~/ Z. Q0 T m
1 15 * * * /backup/script/rsync.sh : a; ]: |2 A1 g: b! ~
1 20 * * * /backup/script/rsync.sh
7 b5 L1 g" q, f* ]" [9 W1 e5 y7 Q1 23 * * * /backup/script/rsync.sh 9 y$ R6 \$ }8 s. l/ P
0 8 * * * ntpdate 210.72.145.44 $ R5 `, D8 }! N
1 J, E! [1 F w$ j2 t* ?# ~; w
在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很多功能选项,下面就对介绍一下常用的选项: - y4 r. f) n4 Q7 h
  rsync的命令格式可以为:
7 t% z/ ?% r4 l: m+ D. _  1. rsync [OPTION]... SRC [SRC]... [USER@]HOSTEST
; @: D8 p) d/ Y" D3 h) t  2. rsync [OPTION]... [USER@]HOST:SRC DEST : |9 n2 _ ~1 f, j6 `8 K% b' y
  3. rsync [OPTION]... SRC [SRC]... DEST 2 S. L* h$ ^8 B0 c7 s" a2 C
  4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
$ I0 |! V* B7 y/ H1 p, ?5 D  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST:EST 6 u0 S6 U0 d! A
  6. rsync [OPTION]... rsync://[USER@]HOST[ORT]/SRC [DEST]
0 k5 m' q7 A; }  rsync有六种不同的工作模式:
3 z+ x( h, Q9 N  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
: Q6 _3 @' \9 G  2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
1 S5 D" Q) X& ?  3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。 0 h" z- [7 Q) T; {
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
8 z; g1 q% d( _+ [2 H: i' E$ w  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。 q; r) Q# \" x& g8 U
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

TOP

本功能由奇虎搜索实现

相关主题

标题 作者 最后发表
[站外] 8.04 个人学习笔记/指南/帮助   [转帖] powerfox 2008-08-22
点击阅读更多关于的相关帖子  更多相关主题