数据同步–rsync
简介:
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
优点:
- 支持断点续传
- 支持增量传输
在centos7环境部署rsync同步数据文件:
主机名 | IP |
---|---|
rsync1 | 172.16.0.61 |
rsync2 | 172.16.0.62 |
开始部署:
1. 节点双向无密码连接
[root@rsync1 ~]# vim /etc/hosts
172.16.0.61 rsync1.up.com rsync1
172.16.0.62 rsync2.up.com rsync2
[root@rsync1 ~]# scp /etc/hosts 172.16.0.62:/etc/
[root@rsync1 ~]# ssh-keygen
[root@rsync1 ~]# ssh-copy-id -i .ssh/id_rsa.pub rsync2
[root@rsync2 ~]# ssh-keygen
[root@rsync2 ~]# ssh-copy-id -i .ssh/id_rsa.pub rsync1
2. 安装
[root@rsync1 ~]# yum install -y rsync
[root@rsync2 ~]# yum install -y rsync
3. 准备存储空间
rsync1
[root@rsync1 ~]# pvcreate /dev/sda3
[root@rsync1 ~]# vgcreate vgrsync /dev/sda3
[root@rsync1 ~]# lvcreate -L 10G -n rsync1 vgrsync
[root@rsync1 ~]# mkfs.xfs /dev/vgrsync/rsync1
[root@rsync1 ~]# vim /etc/fstab
/dev/mapper/vgrsync-rsync1 /backup xfs defaults 0 0
[root@rsync1 ~]# mkdir /backup
[root@rsync1 ~]# mount -a
rsync2
[root@rsync2 ~]# pvcreate /dev/sda3
[root@rsync2 ~]# vgcreate vg0 /dev/sda3
[root@rsync2 ~]# lvcreate -L 10G -n lv01 vg0
[root@rsync2 ~]# mkfs.xfs /dev/vg0/lv01
4. 使用rsync
(1)工作模式1 本地模式
类似于 cp
[root@rsync1 ~]# rsync -av /etc/ /backup/
-a 保留文件的属性,并可以拷贝目录
-v 显示输出信息
[root@rsync1 ~]# cd /backup/
[root@rsync1 /backup]# ls
[root@rsync1 /backup]# useradd user1
[root@rsync1 /backup]# rsync -av /etc/ /backup/
[root@rsync1 /backup]# rsync -av /etc /backup/
[root@rsync1 /backup]# ls
etc
(2)工作模式2 远程模式
类似于 scp
拉取:
[root@rsync1 ~]# rsync -av -e "ssh -p 22" rsync2:/etc/ /backup/
将rsync2的/etc下的文件,拷贝到本机的/backup
[root@rsync2 ~]# useradd user2
[root@rsync1 /backup]# rsync -av -e "ssh -p 22" rsync2:/etc/ /backup/
推送:
[root@rsync2 ~]# rsync -av /etc/ rsync1:/backup
[root@rsync2 ~]# useradd user4
[root@rsync2 ~]# rsync -av /etc/ rsync1:/backup
(3)工作模式3 服务器模式
编辑rsync配置文件
注:服务器模式只能实现文件的同步,如果想要实现目录的同步只能手动操作。
[root@rsync2 ~]# vim /etc/rsyncd.conf
uid = nobody
gid = nobody
#运行守护进程的用户和组
use chroot = no
max connections = 10
#最大连接数
strict modes = yes
#使用口令模式进行安全检查
pid file = /var/run/rsyncd.pid
[etc]
#模块名
path = /etc
#传输的文件的路径
comment = etc export area
ignore errors
#忽略错误
read only = no
write only = no
#可读写
hosts allow = *
#允许所有人访问
list = false
#不显示列表
uid = root
gid = root
#使用的用户身份
auth users = backup
secrets file = /etc/server.pass
#口令检查的用户和密码文件
创建对应的server.pass,文件中设置用户名和密码
[root@rsync2 ~]# echo "backup:etc123" > /etc/server.pass
用户名:密码
[root@rsync2 ~]# chmod 600 /etc/server.pass
[root@rsync2 ~]# systemctl start rsyncd
[root@rsync2 ~]# systemctl enable rsyncd
[root@rsync2 ~]# netstat -antp | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1353/rsync
tcp6 0 0 :::873 :::* LISTEN 1353/rsync
[root@rsync1 ~]# echo "etc123" > /etc/server.pass
[root@rsync1 ~]# chmod 600 /etc/server.pas
拉取:
注:–delete同步命令操作前,一定要注意对应路径的书写,否则可能会导致数据丢失或者系统无法启动
[root@rsync1 ~]# rsync -av --delete backup@rsync2::etc /backup/ --password-file=/etc/server.pass
将rsync2 /etc 下的文件拉取到本地的 /backup/
backup@ 是server.pass中设置的用户名部分
推送:
[root@rsync1 ~]# rsync -av --delete /backup backup@rsync2::etc --password-file=/etc/server.pass
把本地 /backup 推送到 rsync2的/etc/下
backup@ 是server.pass中设置的用户名部分
[root@rsync1 /backup]# ls
[root@rsync1 /backup]# echo rsync1 > file1
[root@rsync1 /backup]# rsync -av --delete /backup/ backup@rsync2::etc --password-file=/etc/server.pass
将本地 /backup/下的文件,推送到 rsync2 的/etc 下
如果对端没有相应的文件,执行delete操作
练习:
[root@rsync2 ~]# vim /etc/rsyncd.conf
[test]
path = /test
comment = test export area
ignore errors
read only = no
write only = no
hosts allow = *
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
[root@rsync2 ~]# mkdir /test
[root@rsync2 ~]# cd /test/
[root@rsync2 /test]# ls
[root@rsync2 /test]# cp /etc/passwd .
[root@rsync2 /test]# cp /etc/group .
[root@rsync1 ~]# rsync -av --delete backup@rsync2::test /backup/ --password-file=/etc/server.pass
[root@rsync1 /backup]# ls
group passwd
实时同步:
inotify + rsync 实现静态数据文件实时同步。
lftp 172.16.0.99:/tar> get inotify-tools-3.14.tar.gz
[root@rsync1 ~]# yum install -y gcc gcc-c++ make
[root@rsync1 ~]# tar zxf inotify-tools-3.14.tar.gz -C /usr/local/src/
[root@rsync1 ~]# cd /usr/local/src/inotify-tools-3.14/
[root@rsync1 /usr/local/src/inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@rsync1 /usr/local/src/inotify-tools-3.14]# make && make install
[root@rsync1 /usr/local/inotify]# ls
bin include lib share
同步脚本:
生产环境中,用来备份静态web数据,将自己的web资源备份到对方的指定目录下。反之一样。
[root@rsync1 ~]# vim Inotify.sh
#!/bin/bash
# 使用inotify+rsync实时同步静态数据文件
#host01="172.16.0.62"
host01="rsync2" #需要写/etc/hosts文件
src="/backup/"
dst="test"
user="backup"
passfile="/etc/server.pass"
Inotify_home="/usr/local/inotify"
if [ ! -e $src ] \
|| [ ! -e $passfile ] \
|| [ ! -e $Inotify_home/bin/inotifywait ] \
|| [ ! -e "/usr/bin/rsync" ]
then
echo "please check file."
exit 9
fi
$Inotify_home/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
cd $src && /usr/bin/rsync -az -R --delete ./ --timeout=100 ${user}@${host01}::${dst} --password-file=${passfile} &> /dev/null
done
这个脚本需要在后台运行
[root@rsync1 ~]# ./Inotify.sh &
将脚本添加到开机启动
[root@rsync1 ~]# echo "/root/Inotify.sh &" >> /etc/rc.local
[root@rsync1 ~]# chmod +x /etc/rc.d/rc.local
来源:CSDN
作者:Yeoman_Wayne
链接:https://blog.csdn.net/weixin_42502744/article/details/103731778