数据同步--rsync

三世轮回 提交于 2019-12-28 05:43:07

数据同步–rsync

简介:
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

优点:

  1. 支持断点续传
  2. 支持增量传输

在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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!