我用 LinuxLinux学习之路程序员

CentOS下(rsync+crontab) 触发式实现服务器间

2017-11-30  本文已影响315人  泥豆芽儿MT

背景

【声明】:文章主要参考来源 -【rsync 实现文件备份同步】,然后根据自己的具体情况进行了实例说明,在此谢谢前辈们的经验指导...

一、概念介绍

(1). 什么是 rsync?

(2). rsync 的一些特性

  1. 能更新整个目录和树和文件系统
  2. 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等
  3. 对于安装来说,无任何特殊权限要求
  4. 对于多个文件来说,内部流水线减少文件等待的延时
  5. 安全,能用 rsh、ssh 或直接端口做为传输端口,或者 socket 连接
  6. 支持匿名 rsync 同步文件,是理想的镜像工具
  7. 免费啊

二、功能分析

在操作上,最简单的配置比例为【服务端:客户端 = 1:1】
例如,本次的实际操作中,我配置了一个服务端(IP:192.168.1.160),其中的一个客户端(IP:192.168.1.161),后期添加了另一个客户端(IP:192.168.1.150

三、配置操作【重点】

(1). 服务端配置

①. 安装 rsync
image
yum install rsync 
②. 进行配置文件的修改【建议 root 用户下操作

rsyncd.conf (主配置文件)、rsyncd.secrets (密码文件)、rsyncd.motd ( rysnc 服务器显示信息)

(1). 依次执行如下命令:
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf #创建 rsyncd.conf,这是 rsync 服务器的配置文件
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets  #创建 rsyncd.secrets ,这是用户密码文件
chmod 600 /etc/rsyncd/rsyncd.secrets  #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为 600, 否则无法备份成功
touch /etc/rsyncd/rsyncd.motd
(2). 修改 rsyncd.conf
# Distributed under the terms of the GNU General Public License v2
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsyncd/rsyncd.secrets
motd file = /etc/rsyncd/rsyncd.motd

port = 873 # 指定运行端口,默认是873,您可以自己指定;
address = 192.168.1.160 #指定服务端IP地址

# uid = nobody
# gid = nobody

uid = root
gid = root


use chroot = no
read only = yes

#limit access to private LANs
hosts allow=192.168.1.161 192.168.1.150 #以空格分割 客户端IP
hosts deny=*

max connections = 10

#This will give you a separate log file
log file = /var/log/rsync.log

#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes

log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[ftpfile]
path = /server/ftpfile
list=yes
ignore errors = true
auth users = root
#auth users 是必须在服务器上存在的真实的系统用户,如果你想用多个用户以 “,” 号隔开,比如auth users = moTzxx,root
comment = This is moTzxx-comment #提交信息,便于识别
exclude = file3/
#此处表明,同步文件 除去所有的 file3 目录,如果以斜杠开头,则可指定“path = /server/ftpfile”下的任何目录或文件,例如“/file1/file5/re.log”,指的是文件“/server/ftpfile/file1/file5/re.log”
(3). 设定密码文件
vim /etc/rsyncd/rsyncd.secrets

添加信息:root:root123

chown root.root /etc/rsyncd/rsyncd.secrets  
chmod 600 /etc/rsyncd/rsyncd.secrets    
(4). 设定 rsyncd.motd 文件
vim /etc/rsyncd/rsyncd.motd

自定义添加如下:

++++++++++++++++++++++++++++++++++++++++++
      Welcome to moTzxx`s world!
++++++++++++++++++++++++++++++++++++++++++

(2). rsync 服务器启动

  • 在此,只介绍 让 rsync 以服务器模式运行的 daemon 参数方式,详情见附录。
①. 以 root 身份启动 rsync
/usr/bin/rsync --daemon 
/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf  #--config用于指定rsyncd.conf的位置,如果在/etc下可以不写
②. 查看相应进程
sudo lsof -i :873
image
③. rsync 服务器和防火墙

注:】如果第二步能获得 873 进程信息,这一步没必要进行操作,本人在开启测试前,就关闭了防火墙

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

(3). 客户端:

①. 安装 rsync:
yum install rsync 
②. 配置密码文件 rsyncd.secrets

【注意】:服务器端的密码应该以 user:password 的形式存放明文密码,而客户端的密码只需要以 password 的明文形式保存
 【执行命令】(举例密码为 root123):

echo root123> rsyncd.secrets
chmod 600 rsyncd.secrets
③. 主要命令
1). 列出 rsync 服务器上的所提供的同步内容
rsync  --list-only  192.168.1.160::ftpfile 
rsync  --list-only  --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile
2). 文件同步命令
rsync  -avzP  192.168.1.160::ftpfile /server/ftpfile
rsync  -avzP  --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
3). 客户端上的数据要与服务器端完全一致
rsync  -avzP --delete  192.168.1.160::ftpfile /server/ftpfile
rsync  -avzP --delete  --password-file=/server/rsyncd.secrets  192.168.1.160::ftpfile /server/ftpfile

表示客户端上的数据要与服务器端完全一致,如果 ftpfile 目录中有服务器上不存在的文件,则删除。最终目的是让 ftpfile 目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除

④. 定时更新 实现方法:
(1). 一种方法:直接在 /etc/crontab 中添加命令
vi /etc/crontab

或者通过 crontab 进行设定 ,执行命令:crontab -e

*/1 * * * *  rsync  -avzP --password-file=/server/rsyncd.secrets  192.168.1.160::ftpfile /server/ftpfile
(2). 第二种方法:脚本实现
vim /server/ftp-update-ftpfile.sh #自定义即可
#!/bin/bash
rsync  -avzP --password-file=/server/rsyncd.secrets  192.168.1.160::ftpfile /server/ftpfile
crontab -e
*/1 * * * * /server/ftp-update-ftpfile.sh
(3). 上述方法配置好后,要重启 crond 服务器
killall crond    #注:杀死crond 服务器的进程;
ps aux |grep crond # 注:查看一下是否被杀死;
/usr/sbin/crond    #注:启动 crond 服务器;
(4). 注意/提醒
  1. 个人发现:
  • 使用非脚本命令执行的可行性高,期间测试了好多次,当然也有可能是自己的配置存在问题
  • 使用脚本命令,相对而言要方便些,更改脚本文件信息后,不需要每次重启 crond ,当然希望能正确配置,那就再好不过了
  • 个人测试而言,脚本命令对于 CentOS6.5 可行,而对于 CentOS7 却不执行
  1. 建议参考文章

附录:

(1). 说明

(2). 参考文章

上一篇 下一篇

猜你喜欢

热点阅读