小型架构实践--Rsync部署


参考资料:

rsync服务搭建攻略1

rsync服务搭建攻略2


IP规划:192.168.107.103


前置工作

1.防火墙配置

iptables -I INPUT -p tcp -m state --state NEW --dport 873 -j ACCEPT

service iptables save

从这里我们也知道,rsync占用的873端口

2.Selinux设置

setenforce 0


看了一下,rsync已经随着系统安装了,版本号为3.0.6,不过部署路径并不是我想要的,于是决定重新部署

yum remove rsync -y

cd ~

下载最新的3.1.2版本

wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz

(wget http://rsync.samba.org/ftp/rsync/rsync-3.1.2.tar.gz)

tar -xzf rsync-3.1.2.tar.gz

cd rsync-3.1.2


开始编译安装

创建安装路径

mkdir -p /usr/local/rsyncd

配置安装路径

./configure --prefix=/usr/local/rsyncd

make安装

make && make install


完成安装以后需要对rsync进行配置,这个配置的路径以及配置文件需要手动创建

mkdir -p /etc/rsyncd

cd /etc/rsyncd

touch /etc/rsyncd/rsyncd.conf

touch /etc/rsyncd/rsyncd.pass

touch /etc/rsyncd/rsyncd.motd

将密码文件权限改为600

chmod 600 /etc/rsyncd/rsyncd.pass


主要是对下面这个配置文件进行编辑

vim /etc/rsyncd/rsyncd.conf

#Rsync服务器相关信息

pid file = /var/run/rsyncd.pid

port = 873

address = 192.168.107.103

uid = root

gid = root

#chroot,即改变程序执行时所参考的根目录位置

use chroot = yes

read only = no

write only = no

#允许访问的IP,可以指定单个IP,也可以指定整个网段,能提高安全性。格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开;

hosts allow = 192.168.107.0/24 10.0.1.0/24

max connections = 5

#登录时的显示信息

motd file = /etc/rsyncd/rsyncd.motd

log file = /var/log/rsync.log

transfer logging = yes

log format = %t %a %m %f %b #日志格式

syslog facility = local3 #日志级别

#超时时间,单位是秒

timeout = 300

#主要是定义服务器哪个目录要被同步。

#每个模块都要以[name]形式。这个名字就是在 rsync 客户端看到的名字。

#但是服务器真正同步的数据是通过 path 指定的。可以依次创建多个模块。

[data]

path = /data

#auth users = root

list = no

ignore errors

secrets file = /etc/rsyncd/rsyncd.pass

#exclude =


#[test]

#path =

#auth users =

#list = no

#ignore errors

#secrets file =

#exclude =

#auth users = run

#secrets file = /etc/rsyncd/rsyncd.secrets

#exclude = error_log httpd.pid

#comment this is my log

说明一下上面加黑的3处

第一处加黑的那个ip是rsync服务端ip

第二处加黑的那个ip是客户端的ip(段)

第三处加黑的那一片是模块,模块都是以中括号的形式打头,下面的模块内容包括了一些同步信息,比较重要的就是路径了,密码文件路径也写上; 我这里是因为还没完成mysql服务器的配置,因此那个secrets file暂时给了#号


配置密码文件,这里是明文的形式,有一定的风险,貌似有规避的办法,后续补上;

vim /etc/rsyncd/rsyncd.secrets


关于Rsync的启动

1.自主启动

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

2.xinetd方式启动

这种方法需要安装xinetd这个超级守护,然后对其进行配置

下面配置里面加黑的两行分别为rsync的启动路径和配置路径

cat /etc/xinetd.d/rsync

service rsync

{

    disable = no

    socket_type    = stream

    wait            = no

    user            = root

    server          = /usr/local/rsyncd/bin/rsync

    server_args    = --daemon 

    log_on_failure  += USERID

}

然后通过service xinetd start启动


关于Rsync的关闭

1.rsync自主启动方式

kill `cat /var/run/rsyncd.pid`

我之前有试过ps -ef|grep rsync,然后把得到的进程号进行kill -9,有几次没有成功;按理说上面的那个命令和这个应该是一回事,不是太清楚原因。

2.xinetd方式

service xinetd stop



本次实验用到的rsync指令

rsync的操作指令不在这里进行过多的分解,简单说明一下采用conf方式运行的基本语法

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

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

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

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


pull模式:拉取模式,从本地把远端需要拷贝的文件(夹)拷贝到本地

push模式:推送模式,从本地把文件(夹)拷贝到远端服务器上

本套架构中,NFS作为mysql的共享存储,Rsync作为异地备份服务器,现有的设想是把备份文件拷贝到Rsync上(本端到远端),采用push模式

适用语法:rsync [OPTION...] SRC... [USER@]HOST::DEST

1.option:各种参数

a表示归档,保留原有文件的各种属性,相当于rlptgoD几个参数的组合

v表示展示详细信息

2.SRC:源路径

在推送的模式中,SRC就是我的实际路径 /share_mysql/test.txt

3.[USER@]HOST

HOST为rsync服务器的ip

[email protected]

4.::

如果没有冒号,那么表示本地复制到本地

如果有一个冒号:,表示采用的是ssh方式

如果是2个冒号::,表示我们采用的是conf配置方式

5.HOST

这个地方就不是实际目录了,而是模块名

我rsyncd.conf里面的模块

[NFS]

path = /backup

#auth users = root

list = yes

ignore errors

secrets file = /etc/rsyncd/rsyncd.pass

#exclude =


HOST需要填写的就是NFS,实际拷贝路径是/backup,注意这里不要写斜杠/,会提示报错

完整指令为

rsync -av /share_mysql/test.txt [email protected]::NFS

在客户端(110)拉取服务端(120)的文件

rsync -av [email protected]::NFS /root

前面的不说了,根据pull的语法,这里的NFS就是对应的SRC,采用了模块名

/root 是DEST,为本地的实际路径


总而言之,IP跟的是服务端的IP,配置用的是服务端的配置,IP双冒号后面跟的是模块名

这里说的push和pull分别是客户端push到服务端,以及客户端pull服务端文件到客户端,跟客户端自身配置没半毛钱关系

但如果服务端想要从客户端去pull东西,或者服务端自己push东西到客户端,那么此时就要依赖客户端的配置了,也就是说这时候客户端就成了服务端,需要写相应的rsyncd.conf了!



实践中遇到的几个问题

1.xinetd以守护进程的方式,所以不会出现rsync的进程以及pid,但是在/var/log/rsync.log里面是可以查询到相关的信息的,进程方面可以查询xinetd的进程;检测的话是通过端口检测来进行的;

关于xinetd的配置有一点需要特别说明,我的/etc/xinetd.d/rsync本来的server_args配置本来是下面这样子的,但是这里写错了(最后应该是rsyncd.conf,少些了一个c)

cat /etc/xinetd.d/rsync

service rsync

{

...

 server_args    = --daemon --config=/etc/rsyncd/rsynd.conf

...

}

报错就是常见的104报错

rsync: read error: Connection reset by peer (104)

所以后来干脆把这里改成server_args    = --daemon 

这样的话,xinetd会自动去寻找/etc/rsyncd.conf

所以这种情况下,就需要做软连接

2.push的方式,客户端是否开启rsync都无所谓,调用的都是服务端的rsync服务

在客户端直接关闭守护,确认端口没有起来

service xinetd stop

Stopping xinetd:                                          [  OK  ]

netstat -an|grep 873

执行push,仍然传递成功

rsync -av /share_mysql/test.txt [email protected]::NFS

+++++++++++++++++++++++++++

        FlyDido

+++++++++++++++++++++++++++

sending incremental file list

sent 29 bytes  received 8 bytes  3.52 bytes/sec

total size is 0  speedup is 0.00

3.执行push推送时出现的报错

[root@NFS share_mysql]# rsync -av /share_mysql/test.txt [email protected]::backup

@ERROR: access denied to backup from UNKNOWN (192.168.40.110)

rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

这个报错是因为hosts allow配置的有问题

检查了一下发现把192.168.40.0/24 写成了192.168.40.0\24

4.执行pull拉取时发现的报错

(指令为:rsync --password-file=/etc/rsyncd.pass -av [email protected]::NFS /root)

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]

这个报错的意思是路径错误,经过检查发现conf里面配置的NFS模块对应的路径为/share_mysql,实际上这个路径根本不存在

完成该路径的创建以后该问题解决

##################################

更多的rsync问题可以参考:Rsync问题汇总

##################################


正题:

Rsync远程增量备份Mysql

##################################

增量备份指导参考

增备脚本参考

sersync

##################################




                                                                                                                待续...

你可能感兴趣的:(小型架构实践--Rsync部署)