小型架构实践--Rsync部署
##################################
参考资料:
##################################
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
root@192.168.40.120
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 root@192.168.40.120::NFS
在客户端(110)拉取服务端(120)的文件
rsync -av root@192.168.40.120::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 run@192.168.107.103::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 root@192.168.40.120::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 root@192.168.40.120::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
##################################
##################################
待续...