linux centos系统下安装rsync

来源:互联网 发布:淘宝售后工作怎么样 编辑:程序博客网 时间:2024/04/30 11:02

一、       双机备份的必要:

 通常我们会在安装数据库的服务器上每天自动备份数据库的sql文件,以备数据库出错时恢复数据,以免数据的丢失,但sql文件存放在一台机器上也有服务器磁盘损毁而出现数据丢失的风险,所以有必要把sql文件定时备份到另一台机器上,实现数据的双重保险。

二、       rsync介绍

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。

Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具

三、       Rsync同步算法

Rsync只所以同步文件的速度相当快,是因为“Rsync同步算法”能在很短的时间内计算出需要备份的数据,关于Rsync的同步算法描述如下:

假定在1号和2号两台计算机之间同步相似的文件A与B,其中1号对文件A拥有访问权,2号对文件B拥有访问权。并且假定主机1号与2号之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:

1、2号将文件B分割成一组不重叠的固定大小为S字节的数据块,最后一块可能会比S 小。

2、2号对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。

3、2号将这些校验结果发给1号。

4、1号通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

5、1号发给2号一串指令来生成文件A在2号上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。

四、        

                             

五、       rsync服务器搭建

1、获取rsync

rysnc的官方网站:http://rsync.samba.org/可以从上面得到最新的版本。目前最新版是3.1.2。当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了。

可以看出本机 已经安装好了rsync,如果没有安装好的话手工安装,也可以用rpm  -e rsync命令删除重新安装高版本。

2、  方法一软件包安装

# sudo apt-get  install  rsync  注:在debian、ubuntu 等在线安装方法;
# yum install rsync    注:Fedora、Redhat 等在线安装方法;
# rpm -ivh rsync       注:Fedora、Redhat 等rpm包安装方法;

其它Linux发行版,请用相应的软件包管理方法来安装。

方法二源码包安装

tar xvf  rsync-xxx.tar.gz
cd rsync-xxx
./configure --prefix=/usr ;make ;make install   注:在用源码包编译安装之前,您得安装gcc等编译开具才行;

3、

因为服务器端(192.168.0.17)版本是3.0.6,客户端(192.168.0.18)版本是2.6.8,所以为了保持版本一致,删掉客户端默认安装的2.6.8,重新安装版本3.0.6

 

4、配置文件

rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息),这三个文件默认不存在,需手工创建。

我们把三个配置文件放在/etc/rsyncd目录下。具体步骤如下

用root用户创建:

   #touch/etc/rsyncd/rsyncd.conf#创建rsyncd.conf,这是rsync服务器的配置文件。
   #touch /etc/ rsyncd/rsyncd.secrets #创建rsyncd.secrets ,这是用户密码文件。可以设置一个用户名:密码的数值对,然后在客户端设置一个密码文件,客户端只写密码就可以了。


   #chmod 600 /etc/rsyncd.secrets#将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!
   #touch /etc/rsyncd.motd

 

下面就是我们修改rsyncd.conf文件的时候了。rsyncd.conf是rsync服务器主要配置文件。

设定配置文件/etc/rsyncd.conf:

uid = nobody

gid = nobody  ##服务器端传输文件时,指定哪个用户和用户组来执行,默认是nobody。如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以偷懒为了方便的话可以用root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。

use chroot = yes  ##是否限制在指定目录,为了安装,一般需要启用。

max connections = 4##客户端最多连接数

pid file =/var/run/rsyncd.pid ##告诉进程写到 /var/run/rsyncd.pid 文件中;

port = 873  ##指定运行端口,默认是873,您可以自己指定;

address =192.168.0.17 ##指定服务器IP地址

read only = yes##read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项;

hostsallow=192.168.0.0/255.255.255.0 ##允许网段

#hosts deny=* ##拒绝服务器

motd file =/etc/rsyncd.motd ##motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息

log file =/var/log/rsync.log   ##rsync 服务器的日志;

transfer logging =yes      ##这是传输文件的日志

log format = %t %a %m%f %b

syslog facility =local3

timeout = 300

[ftp]   ##模块它为我们提供了一个链接的名字,在本模块中链接到了/usr/local/rsynctest目录;要用[name] 形式

        path = /usr/local/rsynctest ##指定文件目录所在位置,这是必须指定的

        comment = whole ftp area (approx 6.1GB) ###注释可以自己定义

 

auth users = root ##认证用户是root  ,是必须在服务器上存在的用户

secrets file =/etc/rsyncd/rsyncd.secrets

list=yes   ##list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,

##至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;

ignore errors  #忽略IO错误

#exclude =beinan/ samba/     ##exclude是排除的意思,也就是说,要把/home目录下的easylife和samba排除在外;easylife/和samba/目录之间有空格分开

设定密码文件/etc/rsyncd.secrets :

密码文件格式很简单,rsyncd.secrets的内容格式为:

用户名:密码

我们在例子中rsyncd.secrets的内容如下类似的;在文档中说,有些系统不支持长密码,自己尝试着设置一下吧。
root:join

chown root.root rsyncd.secrets #修改属主
chmod 600 rsyncd.secrets    #修改权限

注:1、将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功! 出于安全目的,文件的属性必需是只有属主可读。
2、这里的密码值得注意,为了安全你不能把系统用户的密码写在这里。比如你的系统用户root密码是123456,为了安全你可以让rsync中的root为78910。这样,在客户端连接的时候,会使用这个rsyncd.secrets作为认证文件,不和os有任何牵连。

设定rsyncd.motd 文件:

它是定义rysnc服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等;类似ftp服务器登录时,我们所看到的 linuxsir.org ftp ……。 当然这在全局定义变量时,并不是必须的,你可以用#号注掉,或删除;我在这里写了一个 rsyncd.motd的内容为:

++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use the mike.org.cn rsync services!

  install by hand dba
++++++++++++++++++++++++++++++++++++++++++++++

 

5、启动rsync:

启动rsync有两种方式:

A,--daemon参数方式,是让rsync以服务器模式运行

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

 #--config用于指定rsyncd.conf的位置,如果在/etc下可以不写

 

B、xinetd方式

 这里我们主要用第一种方式启动,xinetd方式启动暂不考虑。

启动过程中如果出现

failed to create pid file /var/run/rsyncd.pid:File exists错误,

使用指令

    rm-rf /var/run/rsyncd.pid

重启已经在运行的rsync

如果要关掉rsync,用kill杀进程额方式实现。

6、rsync服务器和防火墙

Linux 防火墙是用iptables,所以我们至少在服务器端要让你所定义的rsync 服务器端口通过,客户端上也应该让通过。

# iptables -A INPUT -p tcp -m state --stateESTABLISHED -m tcp --dport  873 -j ACCEPT
#iptables -L  查看一下防火墙是不是打开了 873端口

 7、客户端安装rsync

 安装步骤同服务器端一样(无需配置rsyncd.conf文件),只是安装好之后,创建一个密码文件:

#echo “join” > /etc/rsyncd/rsyncd.pass

# chmod 600 /etc/rsyncd/rsyncd.pass

这里pass文件里只有一行密码join,即服务器端密码文件里的join。

8、rsync客户端同步数据;

A.# rsync –avzP root@192.168.0.17::ftp/usr/local/rsyncrec/

Password:

Password: 这里要输入root的密码,是服务器端rsyncd.secrets提供的。在前面的例子中我们用的是join,输入的密码并不回显,输好就回车。

注: 这个命令的意思就是说,用root用户登录到服务器上,把ftp数据,同步到本地当前目录/usr/local/rsyncrec/上。当然本地的目录是可以你自己 定义的。如果当你在客户端上当前操作的目录下没有rsyncrec这个目录时,系统会自动为你创建一个;当存在rsyncrec这个目录中,你要注意它的写权限。

B.#rsync -avzP --delete --password-file=/etc/rsyncd/rsyncd.pass  root@192.168.0.17::ftp /usr/local/rsyncrec/

用上面的命令同步数据的时候不用每次都输入密码,因为密码存放在客户端的/etc/rsyncd/rsyncd.pass文件中,这也是为什么在客户端建立pass文件的目的

六、rsync客户端自动与服务器同步数据:

   服务器是重量级应用,所以数据的网络备份还是极为重要的。我们可以在生产型服务器上配置好rsync 服务器。我们可以把一台装有rysnc机器当做是备份服务器。让这台备份服务器,每天在早上4点开始同步服务器上的数据;并且每个备份都是完整备份。有时 硬盘坏掉,或者服务器数据被删除,完整备份还是相当重要的。这种备份相当于每天为服务器的数据做一个镜像,当生产型服务器发生事故时,我们可以轻松恢复数据,能把数据损失降到最低;是不是这么回事??

   实现rsync自动备份有这么几种方式:

1、   Inotify-tools+rsync

2、   Sersync+rsync

3、   Lsyncd+rsync

4、   Crond(计划任务)+rsync

这几种方法比较:

一、Rsync+sersync架构

1、sersync是基于Inotify开发的,类似于Inotify-tools的工具

2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。

二、Rsync+Inotify-tools与Rsync+sersync这两种架构区别

1、Rsync+Inotify-tools

(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

(2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。

2、Rsync+sersync

(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;

(2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

对于lsyncd和crond:

   一般rsync软件是通过crond这支后台进行(计划任务)来实现自动同步数据,如今已有更好的开源软件来代替使用crond了,那就是 lsyncd( Live Syncing (Mirror) Daemon),它的工作原理:监视本地(rsync client)的目录,当源数据有文件或目录更新时,更新本地文件或目录到远端机器(rsync server),保持实时文件同步,但是它更新数据时需要远端rsyncserver运行rsync demon

Lsyncd架构:

服务端:rsync(接收同步资源服务器)

    客户端:lsyncd+rsync(发送资源服务器)

(1)需要配置rsyncd.conf文件的一端,称为rsync server

(2)不需要配置rsyncd.conf文件的一端,称为rsync client

通过以上几种自动备份方案,因为sql脚本文件本身比较小,备份也比较简单,所以目前还是通过crond(计划任务)来实现.

添加crond任务:

  #service crond start

  #chkconfig crond on

  #crontab e

10 2 * * *      /usr/bin/rsync --avzP --delete--password-file=/etc/rsyncd/rsyncd.pass  root@192.168.0.17::ftp /usr/local/rsyncrec/

在每天早上2点10分执行192.168.0.17上rsynctest目录下文件备份到192.168.0.18的rsyncrec目录下。

配置好后,重启crond 服务器

七、问题总结:

 

1、@ERROR: auth failed on module webhome

rsync error: error starting client-server protocol (code5) at main.c(1530) [receiver=3.0.6]

2、 @ERROR: Unknown module 'webhome'

rsync error:error starting client-server protocol (code 5) at main.c(1530) [receiver=3.0.6]

在安装完rsync后测试数据同步的时候总是出现以上问题,反复检查用户名和密码认证确认没问题;然后客户端和服务器端都统一成版本3.0.6,还是有问题;服务器端下载最新源码包3.1.2安装后还是存在以上问题;从官网拷贝rsyncd.conf配置文件内容还是不行。最后手写rsyncd.conf配置文件中两行auth users = slq

secrets file= /etc/rsyncd/rsyncd.secrets代码才解决问题。因为安装完rsync以后没有默认的rsyncd.conf配置文件,需要手工新建rsyncd.conf,从网上其他地方拷贝的该配置文件可能格式有空格或者不对的地方,所以会报这个错误。

1 0
原创粉丝点击