多台服务器文件同步实现

摘要:
很容易维护原始文件的权限、时间、软链接和硬链接。无需特别许可即可安装。Rsync可以在传输过程中压缩和解压缩数据,因此可以使用更少的带宽。支持匿名传输以方便网站镜像。
一、rsync特性
可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件。rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜象。

rsync常用选项
 -a 包含-rtplgoD (平时用-a就够啦)
 -r 同步目录时要加上,类似cp时的-r选项
 -v 可视化,告诉你拷贝了什么文件,统计用了多久,拷贝了多少字节,速度等,同步时显示一些信息,让我们知道同步的过程
 -l 保留软连接,拷贝的语言目录有软连接文件,用到另外一个目录下,加了-l 会把软连接本身拷贝到目录里
 -L 加上该选项后,同步软链接时会把源文件给同步
 -p 保持文件的权限属性
 -o 保持文件的属主,这边是www,拷贝另外一边也是www,如果你不没有,就显示数字
 -g 保持文件的属组,root属组,到另外一个地方也是一样
 -D 保持设备文件信息
 -t 保持文件的时间属性
 --delete 删除DEST(目标目录)中SRC(源目录)没有的文件
 --exclude 过滤指定文件,如--exclude (可以排查一些目录或者文件,如日志文件,节省空间) “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
 -P 显示同步过程,比如速率,比-v更加详细
 -u 是update的简写,加上该选项后,如果DEST(目标)中的文件比SRC(源文件)新,则不同步
 -z 传输时压缩(传输前自动压缩,传输后,自动解压)


二、方式一:使用SSH通道同步
说明: 1、文件源:A (服务端) 2、目标端:B (客户端)、C、D..... (接收文件)
1.在目标端B 安装rsync
安装
yum install rsync -y

卸载
yum remove rsync -y

启动
rsync --daemon

杀死进程
pkill rsync

查看端口873
检查是否开启了对873端口的监听
lsof -i:873

2.在文件源端A 安装
安装
yum install rsync -y

卸载
yum remove rsync -y

免密钥登录配置
第一步,在文件源端 生成密钥
[root@izwz93hm3gyjyjwx5yyxuhz ~]# ssh-keygen -t rsa   //指定算法为rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   //保存密钥全路径
Enter passphrase (empty for no passphrase):  //密码可以为空
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.  //私钥
Your public key has been saved in /root/.ssh/id_rsa.pub.  //公钥
The key fingerprint is:
SHA256:uuMJxNrH7HYKoKK4iqfX/Bxc3KgyvHx0glaKoygOdjA root@izwz93hm3gyjyjwx5yyxuhz
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|   .  .. o       |
| E..o+  S .      |
| .=*++o+.        |
|=o.*B.Oo         |
|@ +.oX++.        |
|@*  o=O+         |
+----[SHA256]-----+
[root@izwz93hm3gyjyjwx5yyxuhz ~]# 


此时会在/root/.ssh目录下生成密钥对
[root@izwz93hm3gyjyjwx5yyxuhz .ssh]# ls -la
total 20
drwx------  2 root root 4096 Jul  4 08:40 .
dr-xr-x---. 7 root root 4096 Jul  4 08:44 ..
-rw-------  1 root root    0 Jul  3 08:24 authorized_keys
-rw-------  1 root root 1675 Jul  4 08:40 id_rsa
-rw-r--r--  1 root root  410 Jul  4 08:40 id_rsa.pub
-rw-r--r--  1 root root  176 Jul  3 09:50 known_hosts


第二步,在目标端把密钥上传到文件源服务器
ssh-copy-id root@120.77.250.120
[root@izwz93hm3gyjyjwx5yyxuhz .ssh]#  ssh-copy-id root@120.77.250.120
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '120.77.250.120 (120.77.250.120)' can't be established.
ECDSA key fingerprint is SHA256:okdQRMFZve4+bVy0aCrDiKpNXe3E20bac2G7gG0VkdQ.
ECDSA key fingerprint is MD5:88:a4:7a:72:db:10:a5:db:8d:47:bc:23:cb:4f:a9:eb.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@120.77.250.120's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@120.77.250.120'"
and check to make sure that only the key(s) you wanted were added.


第三步,测试同步文件
在/www/wwwroot/file 里面新建文件
rsync -avzP /www/wwwroot/file/ root@120.77.250.120:/www/wwwroot/file/ 

//使用了免密方式,就不会提示输入密码

同步结果:( success)
sending incremental file list
plus-yixueqing/
plus-yixueqing/222.php

sent 90,389 bytes  received 756 bytes  60,763.33 bytes/sec
total size is 132,583,590  speedup is 1,454.64
[root@izwz93hm3gyjyjwx5yyxuhz file]# rsync -avzP /www/wwwroot/file/ root@120.77.250.120:/www/wwwroot/file/ 
sending incremental file list

sent 90,342 bytes  received 726 bytes  60,712.00 bytes/sec
total size is 132,583,590  speedup is 1,455.87

三、rsync 守护进程 (推荐)
1.在目标端
是要接收文件的,需要配置两个文件
安装
yum install rsync -y

卸载
yum remove rsync -y

第一、配置文件/etc/rsyncd.conf
写模块,分配虚拟用户名和密码等信息
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[faceke]                           
path = /www/wwwroot/file/         
ignore errors                     
read only = no                 
list = false                       
auth users = anson                  
secrets file = /etc/rsync.password

配置说明:
vim /etc/rsyncd.conf
uid = rsync                        #用户id
gid = rsync
use chroot = no                    #安全性,内网一般不考虑,设为no
max connections = 200              #最多有多少个客户端连接我
timeout = 300                      #超时时间,秒
pid file = /var/run/rsyncd.pid     #pid文件
lock file = /var/run/rsync.lock    #传输时会给文件加锁
log file = /var/log/rsyncd.log     #日志文件
[test]                             #模块
path = /test/                      #客户端来同步,就是同步该目录
ignore errors                      #传输过程中遇到错误,自动忽略
read only = false                  #可读可写
list = false                       #不允许列表
hosts allow = 10.0.0.0/24          #允许的IP段
hosts deny = 0.0.0.0/32            #拒绝
auth users = rsync_backup          #这是个虚拟用户(自定义)
secrets file = /etc/rsync.password #虚拟用户对应的密码文件

第二、配置密码文件 /etc/rsync.password
(写入虚拟用户名和密码)
#仅写入和服务端虚拟用户对应的密码
echo "anson:hao123456" > /etc/rsync.password

#修改密码文件的权限(必须)
chmod 600 /etc/rsync.password

查看端扣873
检查是否开启了对873端口的监听
lsof -i:873

杀死进程
pkill rsync

启动服务
rsync --daemon

2.安装与配置客户端 (文件源端)
客户端只需要密码文件,文件里只存放密码:
安装
yum install rsync -y

仅写入和服务端虚拟用户对应的密码
修改/etc/rsync.password
echo "hao123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

写给目录,开始同步操作
创建目录,创建测试文件
cd /www/wwwroot/

mkdir file

vim aaa.php
vim bbb.php  ...

开始同步
rsync -arvzp --delete /www/wwwroot/file/ anson@120.77.250.120::faceke --password-file=/etc/rsync.password

或者使用rsync协议
rsync -avz rsync://anson@120.77.250.120/test  /www/wwwroot/file/ --password-file=/etc/rsync.password

也可以将要排除的文件和目录写入一个文件,一行一个: vim excefile.conf
test.py
*.log
dir1

使用—exclude-from
rsync -avz --exclude-from=excefile.conf /data/ rsync_backup@10.0.07::/test --password-file=/etc/rsync.password

一些问题排查
https://yq.aliyun.com/articles/111512?t=t1

//软连接/rsyncd-munged/ 报错解决方案
http://blog.sina.com.cn/s/blog_4da051a60102wo5v.html

写定时任务
crontab -e
#此时会进入vi的编辑界面让你编辑工作。注意到,每项工作都是一行。
0    12   *   *   *   mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分  时   日   月  周  |《==============命令行=======================》|

代表意义 分钟 小时 日期 月份 周 命令 数字范围 0~59 0~23 1~31 1~12 0~7 就命令啊 周的数字为0或7时,都代表“星期天”的意思。另外,还有一些辅助的字符,大概有下面这些: *(星号) 代表任何时刻都接受的意思。举例来说,范例一内那个日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。 ,(逗号) 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是: 0 3,6 * * * command 时间还是有五列,不过第二列是 3,6 ,代表3与6都适用 -(减号) 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作: 20 8-12 * * * command 仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思 /n(斜线) 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则: */5 * * * * command 用*与/5来搭配,也可以写成0-59/5,意思相同 写同步脚本 可手动执行,也可以定时执行 在目录www/wwwroot/file/创建脚本rsync.sh vim rsync.sh #/bin/sh rsync -arvzp --delete /www/wwwroot/file/ anson@120.77.250.120::faceke --password-file=/etc/rsync.password //如果有多台服务器,就在这里设置多台 done 配置定时任务 在这里是定时1分钟执行一次脚本 crontab -e */1 * * * * sh /www/wwwroot/file/rsync.sh 同步文件大小 du -sh ./* ls -alh 压缩命令 tar -zcvf plus-yixueqing-h5.zip plus-yixueqing-h5/

免责声明:文章转载自《多台服务器文件同步实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发-导出xcode中已有的配置文件Provisioning profileChapter 1. Hello, Perl/Tk下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ArcGIS平台中PostgreSQL数据连接配置总结

     通常用户在使用要素服务时,要求数据必须是存放在空间数据库中的。同时,需要将数据库注册到ArcGIS for Server,这样在发布服务时就不需要进行数据拷贝,从而可以节省磁盘空间及服务发布时间。以下就ArcGIS平台的Desktop和Server产品中如何使用PostgreSQL数据库进行总结,包括Linux版的ArcGIS for Serve...

Centos7离线部署redis集群

  目录 一、安装redis需要的依赖 二、安装redis 三、部署redis集群 一、安装redis需要的依赖 1、安装GCC   1、检查是否安装gcc     命令: gcc  -v     如果能输出gcc版本信息,,说明安装了gcc。反之需要安装gcc   2、安装gcc     2.1创建目录/usr/local/gccSrc     2.2...

Linux命令:chown

说明: 将指定文件的拥有者改为指定的用户或组。 语法: chown [-cfhvR] [--help] [--version] user[:group] file... 参数: user : 新的文件拥有者的使用者 ID group : 新的文件拥有者的使用者组(group) -c : 显示更改的部分的信息 -f : 忽略错误信息 -h :修复符号链接 -...

IO文件

一:常见的函数输入输出函数 1.打印到屏幕   print:   最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。 2.读取键盘输入   Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘。   raw_input input 3.raw_input函数   raw_input([prompt])...

Apache conf文件配置个人总结

  其实说到conf文件的配置,网上那必定是大堆大堆的,故今儿写着篇小博文,也只是做个总结,至于分享的价值吗,如果对屏幕前的你有用,我也很乐意啦。   首先,我们要找到Apache安装目录,我的是Apache2.2 这就是我们的Apache的安装目录。apache的所有的操作都将会基于此目录、 conf文件夹下找到httpd.conf,用一般的文本编辑器...

优化SSH配置(一键完成增加若干参数)

更改ssh服务远程登录的配置。主要的操作是在ssh的配置文件加入下面5行文本到第13行前。(下面参数的具体含义见其他课程。) Port 52113 PermitRootLogin no PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no [root@XM ~]# sed '13i Port...