在刚开始学习rsync时一直搞不清楚
客户端和服务端,特别容易将服务理解反。真的是头晕。
rsync的使用方法
服务端上传(需要存储数据的设备)
rsync -avz /本地目录 user@目标地址:/目标目录
客户端下载(用来存储数据的设备)
rsync -avz user@目标地址:/目标目录 /本地目录
//在拉取数据时可以加--delete 实现完全同步,将本地多出来的文件全部删除(谨慎使用)
服务端(数据备份服务器):
可以直接拉进脚本配置:
/usr/sbin/useradd rsync -s /sbin/nologin -M
#创建rsync进程的用户
touch /etc/rsync.password
#创建虚拟登录用户的密码文件
mkdir /soft/lnmp -p
mkdir /soft/elk -p
#以下为/etc/rsyncd.conf中的内容
cat >/etc/rsyncd.conf <<EOF
##rsyncd.conf start##
uid = rsync
#运行进程的用户
gid = rsync
#运行进程的用户组
address = 自己的Ip地址
#rsync服务绑定ip
port = 873
#默认监听端口
use chroot = no
#关闭伪根
max connections = 100
#最大连接数
timeout = 600
#超市时间
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
#忽略错误信息
read only = no
#是否开启只读权限
list = false
#不允许查看模块信息
dont compress = *.gz *.bz2
#哪些文件不进行压缩
hosts allow = 允许进行连接rsyncd服务的ip地址
#允许进程使用的ip地址
auth users = rsync_backup
#指定登录用户名(不是系统用户,自己创建虚拟用户)
secrets file = /etc/rsync.password
#创建虚拟用户的密码文件
[lnmp]
comment = Nginx web backup
path = /soft/lnmp
[web]
comment = web backup
path = /soft/elk
这里有一部分配置我直接写在了全局里面。如果需要单独进行权限配置的话,可以将全局配置里面的一些条件改到自定义模块中去
EOF
chown -R rsync.rsync 需要共享目录
echo "rsync_backup:123456">/etc/rsync.password
chmod 600 /etc/rsync.password
rsync --daemon
客户端(数据产生服务器):
一、
在/etc下创建一个密码文件/etc/rsync.passwd
文件内容只写密码。保存后修改文件权限为600
chmod 600 /etc/rsync.passwd
[root@localhost ~]# rsync -avz --password-file=/etc/rsync.passwd rsync://rsync_backup@192.168.138.128:/lnmp /databak/
二、
直接使用rsync拉取文件
rsync -avz rsync://user@目标地址:/自己定义的模块,不是目录 /本地目录
需要输入目标服务器rsync自定义虚拟用户的密码
我们可以直接定义一个环境变量
[root@localhost rsync]# export RSYNC_PASSWORD=虚拟用户的密码
在执行该命令时就不需要密码了。
利用inotify+rsync进行实时备份!
inotify(安装在数据产生服务器上,监控数据的变化,然后将需要备份的数据上传到rsyncd服务端)
检测一下系统是否支持inotify
[root@localhost etc]# ll /proc/sys/fs/inotify/
总用量0
-rw-r--r-- 1 root root 0 1月 12 11:23 max_queued_events
-rw-r--r-- 1 root root 0 1月 12 11:23 max_user_instances
-rw-r--r-- 1 root root 0 1月 12 11:23 max_user_watches
则表示支持inotify,我感觉这一步应该可以省略吧。但是这样学来的就照着来一遍吧反正不差这几秒钟。
vi /etc/sysctl.conf 内核参数修改
fs.inotify.max_queued_events = 16384 设置inotify实例时间(event)队列可容纳的时间数量(这个我目前还没能理解是用来干嘛的)
fs.inotify.max_user_instances = 1024 同时运行的inotify的进程数
fs.inotify.max_user_watches = 1048576 设置inotify同时监视多少个文件
sysctl -p 初始化内核参数
CentOS 6 上安装 inotify
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -xf inotify*.gz
cd 到解压目录下
./configure --prefix=/usr/local/inotify && make && make install
安装完成之后想要执行inotify命令就将inotifywait inotifywacth加入到PATH中
ln -s /usr/local/inotify/bin/inotifywait /usr/bin/
到这一步基本已经完成inotify的安装
开一个终端试一下
Inotifywait -mrq -e create,modify,delete /想要监控的目录
然后在相应的目录下进行操作以检测Inotify是否正常工作。
vim /root/scripts/inotify.sh
#!/bin/bash
SRC='/需要监控的目录/'
#需要监控的目录
DEST='rsync://rsync_backup@192.168.240.129:/mod(自定义模块)'
#保存文件的服务器目录,后面写的是模块。模块里面定义目录
passwd='/etc/rsync.passwd'
#被监控端配置的数据存储服务器上rsyncd用户的密码文件
/usr/bin/inotifywait -mrq --format '%w%f' -e modify,delete,create,attrib $SRC \
| while read DATE TIME DIR FILE
do
FILEPATH=/soft/lnmp/${file}
rsync -avz /soft/lnmp/* --delete --password-file=$passwd $DEST
echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
然后后台执行脚本:
nohup bash /root/scripts/inotify.sh
CentOS 7 上安装inotify
root@syn[17:54:17]:~$ uname -a
Linux syn 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
root@syn[17:54:23]:~$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
我有一台实体机安装的是CentOS 7.5直接yum安装就可以了
yum -y install inotify*
inotifywait 命令可以直接使用
监控脚本同CentOS 6的一样用就可以了。
在使用中遇见的问题:
[root@localhost lnmp]# rsync -avz /soft/lnmp/* root@192.168.138.129:rsync
ssh_exchange_identification: Connection closed by remote host
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.6]
网上也有出现这种问题的。说是
/etc/ssh/sshd-conf 配置文件中的MaxStartups 参数(默认为10)
为sshd服务支持的最大连接数修改为50.
我修改了但是没有成功。
最后发现自己是/etc/hosts.allow;/etc/hosts.deny文件中禁止了该ip的连接,
修改这两个文件之后错误消失。
然后虚拟机用的是
cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
就不能直接yum安装。那就按照centos 6安装一遍