rsync
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
优点:
- 支持断点续传
- 支持增量传输
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
上一篇: 小朋友学C语言(12):判断
下一篇: 二进制 加减法