iptables -F
systemctl stop firewalld
setenforce 0
配置 rsync 备份源
yum -y install rsync
rpm -q rsync
rsync-3.1.2-4.el7.x86_64
1、建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.200.123
port = 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.200.0/24
[wwwroot]
path = /var/www/html
comment = Document Root os www.crushlinux.com
read only = yes
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
注释:
uid = nobody #用户名
gid = nobody #组名
use chroot = yes #禁锢在源目录
address = 192.168.200.123 #监听地址
port = 873 #监听端口
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放进程ID文件位置
hosts allow = 192.168.200.0/24 #允许访问的客户端进程
[wwwroot] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = Document Root os www.crushlinux.com #描述信息
read only = yes #是否为只读
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
auth users = backuper #备份授权用户
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
基于安全性考虑,对于 rsync 的备份源最好仅允许以只读的方式做下行同步。另外,同步可以采用匿名的方式,只要将其中的 "auth users" 和 "secrets file" 配置记录去掉就可以了。
2、为备份账户创建数据文件
vim /etc/rsyncd_users.db
backuper:pwd123
以冒号分割,密码信息在文件中以明文方式存放
备份用户 backuper 也需要对 /var/www/html 有相应的读取权限,实际上只要 other 组具有读取权限,则备份用户 backuper 和运行 nobody 用户也就有读取权限了。
chmod 755 /var/www/html/
3、启动rsync服务进程
rsync --daemon
启动服务运行命令为"rsync --daemon",以独立监听服务的方式运行,若关闭 rsync 服务可采用kill进程方式
kill $(cat /var/run/rsyncd.pid)
服务脚本
vim /etc/init.d/rsyncd
#!/bin/bash
#chkconfig:2345 80 20
#description:rsync server
start () {
netstat -lnpt | grep -q :873
[ $? -ne 0 ] && rsync --daemon
}
stop () {
netstat -lnpt | grep -q :873
[ $? -eq 0 ] && kill $(cat /var/run/rsyncd.pid) && rm -rf /var/run/rsyncd.pid
}
status () {
netstat -lnpt | grep -q :873
[ $? -eq 0 ] && echo "Rsync Daemon is running."
}
case $1 in
start)
start
;;
stop)
stop
;;
restart|reload)
$0 stop
$0 start
;;
status)
status
;;
*)
echo "用法:$0{start|stop|restart|reload|status}"
esac
chmod +x /etc/init.d/rsyncd
chkconfig --add rsyncd
systemctl start rsyncd
使用 rsync 备份工具 192.168.200.124
有了同步源服务器之后,就可以使用rsync工具来执行远程同步。接下来的操作都是在客户机(发起端)执行
本地备份:备份源和发起端可以是一台机器
rsync /et/fstab /opt/
rsync -rl /etc/fstab /boot/grub/ /opt/
rsync的命令格式及备份选项:
命令格式:rsync[选项]... 原始位置 目标位置
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件依然复制为符号链接文件
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬链接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
备份源的表示方法:
在执行远程同步任务时,rsync命令需要指定备份源服务器中的资源位置。rsync同步源的资源表示方式有两种:
用户名@主机地址::共享模块名称
rsync://用户名@主机地址/共享模块名称
rsync -avz backuper@192.168.200.123::wwwroot /root
rsync -avz rsync://backuper@192.168.200.123/wwwroot /root
rsync备份源的无交互验证方式
1、通过export RSYNC_PASSWORD变量保存密码,rsync命令执行时可以自动读取该变量的值,在需要时发送给rsync服务器来进行验证
export RSYNC_PASSWORD=pwd123
rsync -avzH --delete backuper@192.168.200.123::wwwroot /myweb
2、通过 --password-file选项指定存储密码的文件
vim /etc/server.pass
pwd123
chmod 600 /etc/server.pass
rsync -avzH --delete --password-file=/etc/server.pass rsync://backuper@192.168.200.123/wwwroot /myweb
相对于SSH源的免交互措施来说,使用变量存放密码显得不够安全,因此可在脚本中使用,并将脚本的权限严格控制,避免密码泄露。
配置rsync+inotify实时同步
Linux从2.6.13版内核开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改内容及属性等。利用这个机制,可以实现文件异动警告,增量备份,针对目录或文件的变化及时做出相应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待模式,避免了按固定周期备份时存在的延迟性,周期过密等问题
正因为inotify通知机制由Linux内核提供,因此inotify主要做本机监控,在触发式备份应用中更适合上行同步
1、调整inotify内核参数
在Linux内核中,默认的inotify机制提供了三个调控参数:
cat /proc/sys/fs/inotify/max_queued_events //表示监控事件队列(16384)
cat /proc/sys/fs/inotify/max_user_instance //最多监控实例数(128)
cat /proc/sys/fs/inotify/max_user_watches //每个实例最多监控文件数(8192)
当要监控的目录,文件数量较多或者变化频繁时,建议加大这三个参数的值
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instance = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
安装 inotify-tools
inotify-tools 主要提供inotifywait,inotifywatch等工具,用来监控,汇总改动情况
官方站点:http://inotify-tools.sourceforge.net
tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install
以监控网站目录 /var/www/html 为例,执行inotifywait命令后,在另外一个终端中改动 /var/www/html 目录下的内容
mkdir -p /var/www/html
inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html/
-e 指定要监控的事件
-m 表示持续监控
-r 表示递归整个目录
-q 简化输出信息
编写触发式同步脚本
inotifywait 输出的监控结果中,每行记录中包括目录,事件,文件。据此可以识别变动情况。为了简单,只要检测到变动时执行rsync上行同步操作即可
注意:当更新较频繁时,避免并发执行rsync备份,若rsync进程已经存在则忽略本次同步,或者根据rsync进程数量(取决于实际任务)来决定是否同步。
vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.200.123
port = 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.200.0/24
[wwwroot]
path = /var/www/html
comment = Document Root os www.crushlinux.com
read only = no
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
kill $(cat /var/run/rsyncd.conf)
rsync --daemon
chown nobody:nobody /var/www/html/
vim /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.200.123::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then
$RSYNC_CMD
fi
done
echo "/bin/bash /opt/inotify_rsync.sh" >> /etc/rc.local
脚本用来测试本机 /var/www/html 目录的变动,一旦有更新立刻触发 rsync 同步操作,上传至服务器192.168.200.123的 /var/www/html 目录下。
触发式上行同步的验证操作如下:
1、在本机运行 inotify_rsync.sh 脚本
bash /opt/inotify_rsync.sh
2、在本机的 /var/www/html 目录下,执行创建,删除,修改等操作
mkdir /var/www/html/aa
mv /var/www/html/aa /var/www/html/aaa
touch /var/www/html/abc.txt
3、查看服务器中的 /var/www/html 目录中的变化
ls /var/www/html/
aaa abc.txt bb
配置 SSH 备份源
优点:远程连接安全,增强备份的保密性,容易实现
下载:在下行同步中,备份源负责提供文档的原始位置,发起端应对文件具有读取权限
上传:在上行同步中,备份源负责提供文档的目标位置,发起端应对文件具有写入权限
配置过程
a、确认备份源文件夹位置
b、准备备份操作用户
案例
192.168.200.123机器的网站目录 /var/www/html 作为备份源
用户down做下行(下载)备份
用户up做上行(上传)备份
192.168.200.123:
yum -y install httpd rsync
useradd up
echo "123456" | password --stdin up
useradd down
echo "123456" | password --stdin down
vim /etc/ssh/sshd_config
122 UseDNS no //关闭UseDNS加速SSH登录
systemctl restart sshd
调整 /var/www/html 目录权限,使down用户有读取权限,up用户有写入权限,建议将目录的属主修改为备份用户,另外需要为 web 服务的运行用户指定额外的权限
chown -R up:up /var/www/html/
setfacl -R -m user:apache:rwx /var/www/html/
getfacl /var/www/html/
acl访问控制机制参数详解
setfacl 设置acl权限
getfacl 查看acl权限
-R 递归
-m 制定权限
-x 个别删除
-b 全部删除
注意:下面两行不需要执行,作为了解
setfacl -R -b /var/www/html 表示删除所有ACL属性
setfacl -R -x user:apache /var/www/html/ 只删除某一项ACL属性
凡是以后在 /var/www/html/upload/ 新建立的文档,apache用于都具有 rwx 权限
setfacl -m default:user:apache:rwx /var/www/html/
getfacl /var/www/html/ | grep default
SSH备份源表示方式:
用户名@主机地址:目标路径
访问SSH备份源,下载到本地 /opt/ 目录
rsync -avz down@192.168.200.123:/var/www/html/ /opt/
下行同步 ssh 备份源
将服务器A的 /var/www/html 文件夹与B本地 /wwwroot 文件夹同步(保持文件权限属性,软硬链接,ACL属性,删除 /wwwroot 中多余文件,传输过程进行加密)
mkdir -p /wwwroot
rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot
对于同一项远程同步任务,再次执行时,自动做增量更新,同名的文件将不再重复复制
192.168.200.123:
cd /var/www/html/
for i in {1..10};do touch $i.txt;done
192.168.200.124:
rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot
上行同步 ssh 备份源
将客户机中的anaconda-ks.cfg文件上传到备份源服务器的 /var/www/html 目录下,由于用户是up并非
root 用户,因此 -g -o 等选项无法使用
cd /root
rsync -rlvz --delete anaconda-ks.cfg up@192.168.200.123:/var/www/html
ssh备份源的无交互验证,由于脚本根据 crond 时间来执行,用户没办法按时根据提示输入密码
192.168.200.124 主机上创建密钥对,将公钥文件发给192.168.200.123服务器中的备份用户,实现无交互登录
创建密钥对:
ssh-keygen -t rsa
复制密钥对:
ssh-copy-id up@192.168.200.123
ssh-copy-id down@192.168.200.123
连接测试
ssh down@192.168.200.123
ssh up@192.168.200.123
rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot
Sersync+Rsync 实现数据文件实时同步
rsync+inotify-tools与rsync+sersync架构的区别
1、rsync+inotify-tools
inotify 只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
rsync 在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录树进行遍历查找变更文件,然后触发全部数据进行同步,当数据量很大时,整个目录同步非常耗时,因此效率很低。
2、rsync+sersync
sersync 可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
rsync 在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync 在遍历查找对比文件时,速度很快),因此效率很高
同步过程:
1、在源数据服务器上开启 sersync 服务,sersync 负责监控配置路径中的文件系统事件变化;
2、调用 rsync 命令把更新的文件同步到目标服务器;
3、需要在源数据服务器配置 sersync ,在同步目标服务器配置 rsync server
同步原理:
1、用户实时的往 sersync 服务器上写入更新文件数据;
2、此时需要在源数据服务器上配置 sersync 服务;
3、在另一台服务器开启 rsync 守护进程服务,以同步拉取来自 sersync 服务器上的数据;
通过 rsync 的守护进程服务后可以发现,实际上 sersync 就是监控本地的数据写入或更新事件;然后,在调用 rsync 客户端的命令,将写入或更新事件对应的文件通过 rsync 推送到目标服务器
CentOS 7 192.168.200.111 (Rsync server)
CentOS 7 192.168.200.112 (Sersync server)
先安装Rsync
yum -y install rsync httpd
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
max connections = 100 #最大连接数
timeout = 600 #超时时间
ignore errors #忽略错误
list = false #不显示服务端资源列表
address = 192.168.200.111
port = 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.200.0/24
[wwwroot]
path = /var/www/html
comment = Document Root os www.crushlinux.com
read only = no
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
基于安全性考虑,对于 rsync 的备份源最好仅允许以只读的方式做下行同步。另外,同步可以采用匿名的放式,只要将其中的"auth users "和"secrets file" 配置记录去掉就可以了
为备份账户创建数据文件
vim /etc/rsyncd_users.db
backuper:pwd123
以冒号分割,密码信息在文件中以明文方式存放
备份用户 backuper 也需要对 /var/www/html 有相应的读取权限,实际上只要 other 组具有读取权限,则备份用户 backuper 和运行 nobody 用户也就有读取权限了。
chmod 755 /var/www/html/
启动rsync服务进程
rsync --daemon
启动服务运行命令为"rsync --daemon",以独立监听服务的方式运行,若关闭 rsync 服务可采用kill进程方式
在数据源端创建密码文件,然后在 rsync 命令中使用 rsync --password-file 指定该文件
echo "pwd123" > /etc/server.pass
chmod 600 /etc/server.pass
rsync -az --delete --password-file = /etc/server.pass /etc/hosts
测试这步一定要成功发,不然进行不了下一步
部署 Sersync 服务
下载 sersync:
goodle code 地址:https://code.qooqle.com/archive/p/sersync/downloads
Git Hub 镜像地址:https://github.com/orangle/sersync
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
cd /usr/local/
mv GNU-Linux-x86/ sersync
cd sersync/
cp confxml.xml confxml.xml.$(date +%F)
vim confxml.xml #修改24、25行
<sersync>
<localpath watch="/var/www/html"> # 本地同步目录
<remote ip="192.168.200.111" name="wwwroot" /> # rsync 模块名
# 修改31行
<rsync>
<commonParams params="-artuz" />
<auth start="true" users="backuper" passwordfile="/etc/server.pass" />
开启 sersync 守护进程 同步数据
yum -y install httpd
./sersync2 -d -r -o /usr/local/sersync/confxml.xml