前言
本文记录了实现文件单双向同步的过程,以及一些相关知识的总结。
文件同步
配置unison:实现双向备份
RSYNC服务器
关于RSYNC
一款快速增量备份工具
Remote Sync,远程同步
支持本地复制,或者与其他SSH、rsync主机同步
官方网站: http://rsync. samba. org/
RSYNC特点
能更新整个目录和树和文件系统;
有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
对于安装来说,无任何特殊权限要求;
对于多个文件来说,内部流水线减少文件等待的延时;能用rsh、ssh或直接端口做为传输入端口;
支持匿名rsync同步文件,是理想的镜像工具
同步源与发起端
rsync同步源:
指备份操作的远程服务器,也称为备份源
主要包括两种: rsync源、SSH源
rsync命令格式
rsync命令的用法
目录同步
mkdir /aa
mkdir /bb
mount --bind /aa /bb
#写入fstab
vim /etc/fstab
/aa /bb ext4 defaults,bind 0 0
1、SSH源
1.下载
#同步源
mkdir /var/ssh
cd /var/ssh
touch ssh.txt
useradd wmm1 #上传,有写权限
passwd wmm1
chown wmm1:wmm1 /var/ssh/
useradd wmm2 #下载,有读权限
passwd wmm2
#发起端
mkdir /ssh
rsync -avz wmm2@192.168.201.137:/var/ssh/* /ssh/
2.上传
#发起端
cd /ssh/
touch s.txt
rsync -avz /ssh/* wmm1@192.168.201.137:/var/ssh/
2、rsync源
1.下载
配置/etc/rsyncd.conf
文件
#同步源
vim /etc/rsyncd.conf
use chroot = yes
address = 192.168.201.137
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[share]
coment = 描述信息
path = /var/rsync
read only = yes
dont compress = *.gz *.bz2 #指定不压缩类型
auth users = qwzf
secrets file = /etc/rsyncd_users.db #指定密码文件
写入用户和密码对应关系
vim /etc/rsyncd_users.db
qwzf:123456
chmod 600 /etc/rsyncd_users.db#更改密码文件权限为600
rsync --daemon #启动
netstat -anpt #查看端口
启动成功
#同步源
mkdir /var/rsync
cd /var/rsync/
touch rsync.txt
服务端创建目录和文件
#发起端
mkdir /rsync
rsync -avz qwzf@192.168.201.137::share /rsync
#如果失败,关闭服务器的防火墙和selinux
#iptables -F
#setenforce 0
从同步源下载成功
2.上传
#发起端
cd /rsync
touch r.txt
rsync -avz r.txt qwzf@192.168.201.137::share
发现报错,原因是服务器端没有写入权限,解决方法:
修改服务端文件及文件权限
vim /etc/rsyncd.conf
read only = false #将原来的yes改为false
chmod 777 /var/rsync
再次上传,发现上传成功
扩展:设置权限
mkdir /a
useradd manager
setfacl -m u:manager:rwx /a
useradd qwzf
setfacl -m u:qwzf:r-x /a
#删除权限
setfacl -x u:qwzf /a
setfacl -b /a
#设置默认权限
setfacl -m default:u:manager:rwx /a
自动同步
服务端ip:192.168.201.137
客户端ip:192.168.201.139
1.设置无密码验证
#服务端
ssh-keygen -t rsa
ssh-copy-id 192.168.201.139
#客户端
ssh-keygen -t rsa
ssh-copy-id 192.168.201.137
服务端和客户端进行测试
#服务端:
ssh 192.168.201.139 date
#客户端:
ssh 192.168.201.137 date
发现不需要密码,设置无密码验证成功
2.两台虚拟机安装gcc
yum -y install gcc*
3.换光盘
eject弹出光盘,然后选择下面这个镜像连接
4.安装ocaml
#服务端和客户端都做以下操作
cd /media/20130806_063316/
cp * /usr/src
cd /usr/src
tar -zxf ocaml-3.10.1.tar.gz
cd ocaml-3.10.1
./configure
make world opt
make install
5.安装unison
#服务端和客户端都做以下操作
cd /usr/src
tar -zxf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYPE=text THREADS=ture STATIC=true #出现make[1]: [tags] Error 127 (ignored)错误忽视即可
cp unison /usr/local/bin/
6.安装inotify-tools
#服务端和客户端都做以下操作
cd /usr/src
tar -zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
7.测试
#服务端
mkdir /server1
cd /server1
touch s1.txt
#客户端
mkdir /server2
cd /server2
touch s2.txt
#服务端
unison -batch /server1 ssh://192.168.201.139//server2
服务端
客户端
8.写脚本调用
服务端1.sh
#!/bin/bash
ip2="192.168.201.139"
src2="/server1"
dst2="/server2"
/usr/local/bin/inotifywait -mrq -e create,delete $src2 | while read line; #监控src2目录创建和删除
do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2
echo -n "$line" >> /var/log/inotify.log #保存日志
echo `date | cut -d " " -f1-4` >>/var/log/inotify.log #截取第1到第4部分存到日志
done
运行shell脚本,并在客户端远程连接服务端简单测试一下
发现成功实现文件自动同步。然后在客户端也写个除了ip和目录不同,其他几乎一样的脚本,如:
2.sh
#!/bin/bash
ip1="192.168.201.137"
src1="/server2"
dst1="/server1"
/usr/local/bin/inotifywait -mrq -e create,delete $src1 | while read line; #监控src1目录创建和删除
do
/usr/local/bin/unison -batch $src1 ssh://$ip1/$dst1
echo -n "$line" >> /var/log/inotify.log #保存日志
echo `date | cut -d " " -f1-4` >>/var/log/inotify.log #截取第1到第4部分存到日志
done
然后两边同时运行脚本,再进行测试。
#服务端
bash 1.sh
#客户端
bash 2.sh
在服务端创建qwzf1.txt
,在客户端查看,发现成功自动同步;
在客户端创建qwzf2.txt
,在服务端查看,发现也成功自动同步。
nfs
红帽7版之前明文传输,一般用于局域网。
服务端ip:192.168.201.137
客户端ip:192.168.201.139
服务端
yum -y install rpcbind #远程终端调用,默认开启
yum -y install nfs-utils #工具包
1.写文件共享的列表
vim /etc/exports
#读写权限
/public 192.168.201.0/24(rw,sync)
#只读权限
/share 192.168.201.139(ro,sync)
2.创建共享目录和文件
cd /
mkdir public share
chmod 777 public/
chmod 777 share/
cd public/
touch public.txt
cd /share/
touch share.txt
3.重启服务
service rpcbind restart
service nfs restart
4.查询本机共享的列表
showmount -e
客户端
1.测试
showmount -e 192.168.201.137
显示两个服务端共享的文件夹,说明客户端能收到服务端共享的资源
2.挂载服务端的/public目录测试
mount -t nfs 192.168.201.137:/public /mnt
#查看
mount
cd /mnt/
ls
#写入测试
touch qwzf
ls
#卸载
cd ~
umount /mnt/
3.挂载服务端的/share目录测试
mount -t nfs 192.168.201.137:/share /mnt
#写入测试
cd /mnt/
touch wmm
和服务端设置相同,只有只读权限。
4.设置自动挂载
vim /etc/fstab
cd ..
umount /mnt/
mount -a
mount | tail -1
好了,到此为止,所有实验进行完毕。
后记
本次Linux实验我明白了单向文件同步,RSYNC服务的SSH源和rsync源进行下载和上传。也了解到自动文件同步的实现和脚本的编写。同时也了解nfs通过挂载实现文件功能共享。总之,收获很大,再接再励!!!