欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

rsync

程序员文章站 2022-07-15 10:01:54
...

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

优点:

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

rsync1:172.16.12.117
rsync2:172.16.12.118

1、节点双向要设置ssh的无密码登录

hosts文件:

[[email protected]rsync1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.12.117 rsync1
172.16.12.118 rsync2
[[email protected]rsync1 ~]# ssh-******
[[email protected]rsync1 ~]# ssh-copy-id -i .ssh/id_rsa.pub rsync2
[[email protected]rsync2 ~]# ssh-******
[[email protected]rsync2 ~]# ssh-copy-id -i .ssh/id_rsa.pub rsync1

2、安装软件

[[email protected]rsync1 ~]# yum install rsync -y
[[email protected]rsync2 ~]# yum install rsync -y 

3、一般都是准备存储空间

准备个硬盘制作LVM,可选
rsync1

[[email protected]rsync1 ~]# pvcreate /dev/sda3
[[email protected]rsync1 ~]# vgcreate vgrsync /dev/sda3
[[email protected]rsync1 ~]# lvcreate -L 10G -n rsync1 vgrsync
[[email protected]rsync1 ~]# mkfs.xfs /dev/vgrsync/rsync1 
[[email protected]rsync1 ~]# vim /etc/fstab 
/dev/mapper/vgrsync-rsync1	/rlv1	xfs	defaults	0 0
[[email protected]rsync1 ~]# mkdir /rlv1
[[email protected]rsync1 ~]# mount -a

rsync2

[[email protected]rsync2 ~]# pvcreate /dev/sda3
[[email protected]rsync2 ~]# vgcreate vg0 /dev/sda3
[[email protected]rsync2 ~]# lvcreate -L 10G -n lv01 vg0
[[email protected]rsync2 ~]# mkfs.xfs /dev/vg0/lv01

4、 使用rsync

【1】工作模式。本地模式

类似于cp

[[email protected]rsync1 ~]# rsync -av /etc/passwd /rlv1/

-a	保留文件的属性,并可以拷贝目录
-v	显示输出信息

下边是输出的信息。
sending incremental file list
passwd

sent 927 bytes  received 35 bytes  1,924.00 bytes/sec
total size is 835  speedup is 0.87

[[email protected]rsync1 ~]# ls /rlv1/
passwd

注意:这个确实类似于CP不过并不是复制或者移动而是同步。所有的rsync命令后加的目录或文件都是后边的向前边的靠拢同步成和前边的一样的。如果前边的是文件,那么如果后边没有这个文件则创建,有就对比然后同步。

比如:这里的例子就是将rlv1这个目录里的内容,同步成和。/etc/passwd一样的。

如果此时添加一个用户,那么passwd里的内容就会改变,此时再同步也会生效。同理删除用户也是。

[[email protected]rsync1 ~]# useradd user111
[[email protected]rsync1 ~]# tail -1 /etc/passwd
user111:x:1001:1001::/home/user111:/bin/bash
[[email protected]rsync1 ~]# rsync -av /etc/passwd /rlv1/
sending incremental file list
passwd

sent 971 bytes  received 35 bytes  2,012.00 bytes/sec
total size is 880  speedup is 0.87
[[email protected]rsync1 ~]# tail -1 /rlv1/passwd 
user111:x:1001:1001::/home/user111:/bin/bash

添加用户能修改。

[[email protected]rsync1 ~]# userdel -r user111
[[email protected]rsync1 ~]# tail -1 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[[email protected]rsync1 ~]# tail -1 /rlv1/passwd 
user111:x:1001:1001::/home/user111:/bin/bash
[[email protected]rsync1 ~]# rsync -av /etc/passwd /rlv1/
sending incremental file list
passwd

sent 890 bytes  received 35 bytes  1,850.00 bytes/sec
total size is 798  speedup is 0.86
[[email protected]rsync1 ~]# tail -1 /rlv1/passwd 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

同理 删除也可以同步。

【2】工作模式2。 远程模式
类似于 scp

拉取:

[[email protected]rsync1 /]# rsync -e "ssh -p 22" 172.16.12.118:/etc/passwd /rlv1/

[[email protected]rsync1 /]# tail -1 /rlv1/passwd 
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

将rsync2的/etc/passwd下的文件,拷贝到本机的/rlv1
其实也是同步,将rlv1的内容同步成/etc/passwd

推送:

[[email protected]rsync1 rlv1]# rsync -av /rlv1/rsync1111 -e "ssh -p 22 " rsync2:/root
sending incremental file list
rsync1111

sent 91 bytes  received 35 bytes  252.00 bytes/sec
total size is 0  speedup is 0.00

rsync2:

[[email protected]rsync2 ~]# ls
anaconda-ks.cfg    rsync1111

【3】工作模式3 。服务器模式

[[email protected] rlv1]# 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
    //口令检查的用户和密码文件

制作密码的文件:

[[email protected]rsync1 rlv1]# echo "backup:etc123" > /etc/server.pass 
[[email protected]rsync1 rlv1]# chmod 600 /etc/server.pass 
用户名和密码,这个文件的权限一定要是600

启动服务:

[[email protected]rsync1 ~]# systemctl start rsyncd
[[email protected]rsync1 ~]# systemctl enable rsyncd
[[email protected]rsync1 ~]# 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

到这里rsync1 基本完成了。

rsync2:

[[email protected]rsync2 ~]# echo "etc123" > /etc/server.pass
[[email protected]rsync2 ~]# chmod 600 /etc/server.pass
写入密码。

拉取:

[[email protected]rsync2 ceshi]# rsync -av --delete [email protected]rsync1::etc /root/ceshi/ --password-file=/etc/server.pass

将rsync2 /etc 下的文件拉取到本地的/root/ceshi/

注意:"::"后边的etc并不是目录,而是配置文件中写的模块名,对应的目录是下边 的path的。

注意:这个拉取不能拉整个目录,服务模式只能拉取文件。

推送:
用etc来做太危险了,新建了一个test,添加到配置文件中。

[[email protected]rsync2 ceshi]# rsync -av --delete /root/ceshi/ [email protected]rsync1::test --password-file=/etc/server.pass
sending incremental file list
deleting shsfak
./

sent 121 bytes  received 29 bytes  300.00 bytes/sec
total size is 163  speedup is 1.09

把本地 /root/ceshi/下的文件推送到 rsync2/test/下。或者说,将rsync1/test/目录,同步成和rsync2/root/ceshi/下一样。
delele的意思就是删除所有不同的文件。

[[email protected]rsync2 ceshi]# rsync -av --delete /root/ceshi [email protected]rsync1::test --password-file=/etc/server.pass

这个命令和上边的一样,唯一不同的就是推送是的斜线,这个是直接将目录推送过去。没有斜线的是只将文件推送。

实时同步:

inotify + rsync 实现静态数据文件实时同步。

inotify在网上可以下载。

1、安装:

编译安装需要的东西:gcc编译器

[[email protected]rsync2 ~]# yum install gcc gcc-c++ make -y

2、解压:

[[email protected]rsync2 ~]# tar xf inotify-tools-3.14.tar.gz 

配置和安装

[[email protected]rsync2 ~]# cd inotify-tools-3.14/
[[email protected]rsync2 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify

[[email protected]rsync2 inotify-tools-3.14]# make && make install
[[email protected]rsync2 ~]# ls /usr/local/inotify/
bin  include  lib  share

安装ok

文件同步脚本:

#!/bin/bash

#inotify同步脚本 inotify+rsync实时同步静态数据文件

host01="rsync1"
src="/root/ceshi"
dst="test"
user="backup"
passfile="/etc/server.pass"
Inotify_home="/usr/local/inotify"

if [ ! -e ${src} ] || [ ! -e ${passfile} ] || [ ! -e ${Inotify_home} ] || [ ! -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

这个脚本用的是推送,或者说提供模板,供别人同步成和自己一样的。

1、启动脚本
[[email protected]rsync2 ~]# ./Inotify.sh

2、创建文件
[[email protected]rsync2 ceshi]# touch 333
[[email protected]rsync2 ceshi]# ls
2222  333

3、查看同步与否
[[email protected]rsync1 test]# ls
2222  333
同步了。ok
相关标签: 存储