您的位置:首页 > 其它

使用rsync实现数据实时同步备份--实战

2017-12-01 15:37 726 查看

实战3:

配置rsync 服务器及需要备份的目录,不使用系统用户需要自己创建自己的配置文件: /etc/rsyncd.conf ; 创建备份帐户,最后把rsync 以daemon方式运行。

配置文件:/etc/rsyncd.conf 整体分两部分:

全局参数 :对于rsync 生效。如果模块参数和全局参数冲突,针对冲突模块的模块参数生效

模块参数: 定义rsync 输出的目录的参数。

无交互备份数据

编辑配置文件

[root@xuegod-63 ~]# vim /etc/rsyncd.conf

uid=nobody

gid=nobody

address = 192.168.1.63

port=873

hosts allow= 192.168.1.64

#hosts deny=0.0.0.0/32

use chroot=yes

max connections=5

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsync.lock

log file=/var/log/rsyncd.log

motd file=/etc/rsyncd.motd

[wwwroot]

path=/var/www/html

comment=rsync wwwroot of www.xuegod.cn

read only=yes

list=yes

auth users=backuper

secrets file=/etc/rsync.passwd

此配置文件,参数 说明:

全局参数

uid=nobody #运行进程的身份

gid=nobody # 运行进程的组

address = 192.168.1.63 #监听IP地址

port=873 #端口

hosts allow= 192.168.1.64 192.168.0.25 #允许同步的客户端IP地址

单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,

整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0

“*”则表示所有,默认是允许所有主机连接。

#hosts deny=0.0.0.0/32

use chroot=yes #锁定家目录。rsync被黑了,***无法在rsync运行的家目录之外创建文件,该选项设置为yes。

max connections=5 #最大链接数

pid file=/var/run/rsyncd.pid # pid文件。存放进程ID。自动生成

lock file=/var/run/rsync.lock #指定支持max connections参数的锁文件。

log file=/var/log/rsyncd.log #日志

motd file=/etc/rsyncd.motd #客户端登录后的弹出的信息。需要创建。子配置

模块参数:

[wwwroot] #共享模块名

path=/var/www/html #供备份的路径

comment=rsync wwwroot of www.xuegod.cn # 描述,

read only=yes # 以只读的方式 提供备份

list=yes #允许查看模块信息

auth users=backuper #指定备份的用户,和系统用户 无关

secrets file=/etc/rsync.passwd #指点存放用户 和密码文件。格式: 用户名:密码

过滤子配置文件并追加信息到子配置文件

[root@xuegod-63 ~]# grep motd /etc/rsyncd.conf

motd file=/etc/rsyncd.motd

#过滤是为了查找到各“子配置”文件在rsyncd.conf这个“总配置”文件中默认叫啥名,是怕“子配置”文件名创建错了才这么弄的。由此我们可以看到,子配置文件motd在/etc/rsyncd.motd/下

[root@xuegod-63 ~]# echo "welconme to backup server" > /etc/rsyncd.motd #将 "welconme to backup server"的欢迎信息写入到子配置文件中去

过滤passwd子配置文件并设置密码和修改权限

[root@xuegod-63 ~]# grep passwd /etc/rsyncd.conf

secrets file=/etc/rsync.passwd

[root@xuegod-63 ~]# vim /etc/rsync.passwd

backuper:123456

[root@xuegod-63 ~]# chmod 600 /etc/rsync.passwd

#设置rsyncd_users.db文件的权限为700或600,权限设置不对的话身份验证会失败

会弹以下出错信息,当然,输错密码后,也会弹这个信息:

重启xinetd服务:

[root@xuegod-63 ~]# /etc/init.d/xinetd restart

清空/web-back/目录下的文件

[root@xuegod-64 ~]# rm -rf /web-back/* #清空以后,在wen-back下什么都没有了

无交互备份

[root@xuegod-64 ~]# rsync -azv backuper@192.168.1.63::wwwroot /web-back/ #将1.63下的用户backuper的文件备份到本机1.64的/web-back/下

welconme to backup server

Password:

grub/

grub/device.map

grub/e2fs_stage1_5

再次查看目录

[root@xuegod-64 ~]# ls /web-back/ #现在此目录下 又有了grub目录了

grub

#这样就可以备份了

无交互不输密码进行备份

删除备份到的目标目录下文件

[root@xuegod-64 ~]# rm -rf /web-back/*

[root@xuegod-64 ~]# ls /web-back/

定义变量,export环境变量,免密码rsync

[root@xuegod-64 ~]# export RSYNC_PASSWORD=123456

无交互备份

[root@xuegod-64 ~]# rsync -azv backuper@192.168.1.63::wwwroot /web-back/

rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录

#将1.63下的用户backuper的文件备份到本机1.64的/web-back/下

welconme to backup server

grub/

grub/device.map

查看备份的目标目录

[root@xuegod-64 ~]# ls /web-back/

Grub # 这时所需要被备份的目录被备份过来了

再次删除备份到的目标目录下文件

[root@xuegod-64 ~]# rm -rf /web-back/*

[root@xuegod-64 ~]# ls /web-back/

编写脚本

[root@xuegod-64 ~]# vim backup.sh

#!/bin/bash

export RSYNC_PASSWORD=123456

rsync -azv backuper@192.168.1.63::wwwroot /web-back/

增加权限并备份

[root@xuegod-64 ~]# chmod +x backup.sh

[root@xuegod-64 ~]# ./backup.sh

welconme to backup server

grub/device.map

grub/e2fs_stage1_5

#这个时候我们可以看到,备份文件不再需要输入密码了

[root@xuegod-64 ~]# ls /web-back/

grub

#文件已被备份过来了

编写计划任务

[root@xuegod-64 ~]# crontab -e

01 3 * /root/backup.sh &

#任务在每天的3点1分进行数据备份

添加防火墙规则:

[root@xuegod63 ~]# iptables -A INPUT -p tcp --dport 873 -j ACCEPT #让防火墙对873端口进行放行

[root@xuegod63 ~]# /etc/init.d/iptables save #保存防火墙规则

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

实战4:

目标:

配置rsync+inotify实时同步

把xuegod63.cn服务器上的/var/www/html目录时实同步到xuegod64.cn主机上的/web-back目录中。

概述

Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

环境

inotify-tools服务端:xuegod-63 IP:192.168.1.63

客户端:xuegod-64 IP:192.168.1.64

查看是否支持inotify,从kernel 2.6.13开始正式并入内核。

[root@xuegod-63 ~]# uname -r

2.6.32-220.el6.x86_64

[root@xuegod-63 ~]# ls /proc/sys/fs/inotify/

max_queued_events max_user_instances max_user_watches

注:

在linux内核中,默认的inotify机制提供了三个调控参数:

max_queued_events #表示监控事件队列

max_user_instances #表示最多监控实例数

max_user_watches #表示每个实例最多监控文件数

查看具体参数值:

[root@xuegod-63 ~]# cat /proc/sys/fs/inotify/max_queued_events

16384

[root@xuegod-63 ~]# cat /proc/sys/fs/inotify/max_user_instances

128

[root@xuegod-63 ~]# cat /proc/sys/fs/inotify/max_user_watches

8192

注:当要监控的目录、文件数量较多或者变化较频繁时,要加大这三个参数的值。

例如:可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)

自改配置文件

[root@xuegod-63 ~]# vim /etc/sysycrl.conf #以文件最后,添加以下内容

fs.inotify.max_queued_events = 32768

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 90000000

[root@xuegod-63 ~]# sysctl -p #使修改后的sysctl.conf文件生效

安装inotify-tools-3.13.tar:将拥有inotifywait、inotifywatch辅助工具程序,从而来监控、汇总文件系统改动情况。

[root@xuegod-63 ~]# tar -zxvf inotify-tools-3.13.tar.gz #进行都文件的解压

[[root@xuegod-63 ~]# cd inotify-tools-3.13

[root@xuegod-63 inotify-tools-3.13]# ./configure

[root@xuegod-63 inotify-tools-3.13]# make -j 4

[root@xuegod-63 inotify-tools-3.13]# make install

测试:

使用inotifywait命令监控网站目录/var/www/html发生的变化。然后在另一个终端向/var/www/html目录下添加文件、移动文件,查看屏幕输出结果。

[root@xuegod63 ~]# inotifywait -h

常用参数:

-e 用来指定要监控哪些事件。

这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。

-m 表示持续监控

-r 表示递归整个目录

-q 表示简化输出信息。

1.63上打开两个终端

1终端上开启监控

[root@xuegod63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

#开启的监控具有创建,移动,删除和修改功能,监控到/var/www/html/下的数据变化‘

2终端上进行创建,移动,删除等命令

[root@xuegod-63 ~]# echo aaa > /var/www/html/a.htal

[root@xuegod-63 ~]# mkdir /var/www/html/test

[root@xuegod-63 ~]# cp /etc/passwd /var/www/html/test/

[root@xuegod-63 ~]# rm -rf /var/www/html/test/passwd

查看1终端上的数据信息变化

[root@xuegod-63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

/var/www/html/test/ CREATE passwd

/var/www/html/test/ MODIFY passwd

/var/www/html/test/ DELETE passwd

#我们可以看到,刚才在2终端上的命令意义在2终端上一一呈现出来了,这样就成功的监视了/var/www/html/的数据变化情况!使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。

编写触发式同步脚本

第一步,

同步时不需要输入密码:

xuegod63发生变化后,直接将发生变化的数据同步到xuegod64,同步时不需要输入密码

同步秘钥

[root@xuegod-63 ~]# ssh-keygen #生成主机1.63的公私钥匙

[root@xuegod-63 ~]# ssh-copy-id root@192.168.1.64拷贝自己的公钥到要登录的服务器1.64上。

测试

[root@xuegod-63 ~]# ssh 192.168.1.64

Last login: Sun Aug 23 14:13:38 2015 from 192.168.1.63

[root@xuegod-64 ~]# exit

#已经成功无需密码登陆远程客户端了

第二步:

编写触发式同步脚本

[root@xuegod-63 ~]# vim a.sh

#!/bin/bash

inotifywait -mrq -e create,move,delete,modify /var/www/html/ | while read a b c

do

rsync -azP --delete /var/www/html/ root@192.168.1.64:/web-back

done

给脚本添加课执行权限

[root@xuegod-63 ~]# chmod +x a.sh

清空一下/var/www/html/下的所有内容

[root@xuegod-63 ~]# rm -rf /var/www/html/*

1终端上执行脚本

[root@xuegod-63 ~]# ./a.sh

2终端上测试—拷贝文件及创建目录

[root@xuegod-63 ~]# cp -r /boot/grub/ /var/www/html/

[root@xuegod-63 ~]# mkdir /var/www/html/test

[root@xuegod-63 ~]# mkdir /var/www/html/111

1终端上查看执行脚本

[root@xuegod-63 ~]# ./a.sh

看到

1.64上查看目录

[root@xuegod-64 ~]# ls /web-back/

111 grub test

开机启动监控

[root@xuegod-63 ~]# echo '/root/a.sh &' >> /etc/rc.local

优化此脚本:

[root@xuegod63 ~]# vim a.sh

#!/bin/sh

SRC=/var/www/html

DST=root@192.168.1.64:/web-back

inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F

do

/usr/bin/rsync -ahqzt --delete $SRC $DST

done

[root@xuegod63 ~]# cp /root/a.sh /opt/inotify_rsync.sh

[root@xuegod63 ~]# echo '/opt/inotify_rsync.sh &' >> /etc/rc.local

实战5:

防止网页被篡改

修改配置文件

[root@xuegod-63 ~]# vim a.sh

#!/bin/bash

inotifywait -mrq -e create,move,delete,modify /var/www/html/ | while read a b c

do

rsync -azP --delete root@192.168.1.64:/web-back/ /var/www/html/

#rsync -azP --delete /var/www/html/ root@192.168.1.64:/web-back

done

#脚本的意义是只要一有人修改页面,脚本就会自动运行,网页就会自动恢复到原来的页面状态,因此是修改不了网页页面的

测试:

[root@xuegod-63 ~]# /root/a.sh #执行这个命令

[root@xuegod-63 html]# echo aaa > a.html

查看:

[root@xuegod-63 ~]# /root/a.sh #弹出的信息

receiving incremental file list

deleting a.html

sent 17 bytes received 410 bytes 854.00 bytes/sec

total size is 255156 speedup is 597.56

receiving incremental file list

sent 14 bytes received 407 bytes 280.67 bytes/sec

total size is 255156 speedup is 606.07

receiving incremental file list

sent 14 bytes received 407 bytes 842.00 bytes/sec

total size is 255156 speedup is 606.07

#这个时候脚本就会自动监视着页面,出现变更,就会弹出此信息和恢复到原来的页面!

文章转自:http://www.linuxidc.com/Linux/2017-05/143462.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rsync