Rsync服务搭建

1、什么是Rsync

Rsync是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是一个免费开源的软件。

2、Rsync的三种工作模式

  1. Local: rsync [OPTION...] SRC... [DEST]
  2. Access via remote shell:
  3. Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  4. Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
  5. Access via rsync daemon:
  6. Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
  7. rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  8. push: rsync [OPTION...] SRC... [USER@]HOST::DEST
  9. rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

由以上语法可知,rsync有三种工作方式:
本地文件系统上实现本地同步,命令行语法格式为上述“Local”段的格式。
本地主机使用远程shell和远程主机通信。命令行语法格式为上述“Access via remote shell”段的格式。
本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述“Access via rsync daemon”段的格式。
前两者的本质是通过管道通信,即使是远程shell。而方式3则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接,默认端口为:873。

3、Rsync应用场景

关于数据同步的两种方式
1、推:所有主机推送本地数据至rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)

c11f444c-c1b8-4e7c-9649-795a681c5e72.jpg

2、拉:Rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大

c71ece71-10a6-4584-abfa-fa4308d13b07.jpg

3、异地备份实现思路

a9235b9d-22b7-47cf-a4c4-aaa0ab7556a9.jpg

4、大量服务器备份场景

7b8147fb-558c-4271-b3ae-57274c803f2c.jpg

c87c951f-ef1d-42b2-b052-da5540cb77e2.jpg

4、Rsync优缺点:

Rsync优点:
增量备份,支持socker(即套接字),集中备份
远程shell通道模式还可以加密(ssh)传输,安全性上比较可靠
Rsync缺点:
大量小文件同步的时候,对比时间长,有的时候,rsync进程可能会停止。
同步大文件,比如10G以上的大文件也会有问题。当网络出现波动的时候,就可能会造成同步中断。

5、Rsync命令常用选项

  1. rsync命令参数比较多,我这边列举了经常会用到的:
  2. -v 详细模式输出,传输时的进度等信息
  3. -z 传输时进行压缩以提高传输效率
  4. -a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgdl
  5. --bwlimit=10 限制传输速度
  6. --exclude=PATH 表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
  7. --delete 让目标目录和源目录数据保持一致
  8. -L 会把软链接指向的目标文件复制到对端目录中
  9. -e 指定使用ssh还是其他方式来数据同步
  10. --password-file 指定密码文件所在的路径,可以让rsyncdaemon模式)不需要密码来传输文件
  11. --partial 断点续传
  12. --exclude-from=file 文件名所在的目录文件
  13. 注意:rsync同步的时候,如果要同步的是目录里面的内容,命令中目录的后面必须要加“/”
  14. 如果要同步的是目录本身及其内容,则命令中只需写目录名

6、Rsync安装以及配置

  1. 1)先安装rsync
  2. yum -y install rsync
  3. 2rsync的配置文件在centos6上是没有的,但是centos7上默认就有配置文件,假如现在是centos6上进行安装,首先编辑一个文件
  4. vim /etc/rsyncd.conf
  5. #rsync_config
  6. uid = rsync #用户的uid
  7. gid = rsync #用户的gid
  8. use chroot = no #安全相关的
  9. max connections = 200 #最大连接数
  10. timeout = 300 #超时时间
  11. pid file = /var/run/rsyncd.pid #指定pid文件,这个文件的作用涉及服务的启动、停止等操作
  12. lock file = /var/run/rsync.lock #锁文件
  13. log file = /var/log/rsyncd.log #指定日志文件
  14. [backup] #模块名称
  15. path = /backup #服务器提供访问的目录
  16. ignore errors #忽略错误
  17. read only = false #可写
  18. list = false #不能列表
  19. hosts allow = 172.16.1.0/24 #允许哪些机器来连
  20. #hosts deny = 0.0.0.0/32 #拒绝哪些机器不能连
  21. auth users = rsync_backup #指定传输时要使用的用户名
  22. secrets file = /etc/rsync.password #指定密码文件,注意:该密码文件的权限一定要是600
  23. 3)配置文件之后,需要自己创建一个用户rsync
  24. useradd rsync -s /sbin/nologin -M #无法访问并且没有家目录
  25. 4)开启rsync服务
  26. rsync daemon #centos6的启动方法
  27. systemctl start rsyncd #centos7的启动方法
  28. systemctl enable rsyncd #开机自启动
  29. 5ps -ef|grep rsync|grep -v grep #查看对应的进程有木有开启
  30. 6 创建共享目录并授权rsync服务管理
  31. mkdir /backup
  32. chown rsync:rsync /backup/
  33. 7 在编辑rsync的密码文件
  34. vim /etc/rsync.password
  35. rsync_backup:oldboy 虚拟用户:密码
  36. 8 接下来就是给这个密码文件更改权限
  37. chmod 600 /etc/rsync.password
  38. 9)查看对应的端口有木有开启
  39. netstat -lntp|grep 873
  40. 10)加入开机自启动
  41. echo “/usr/bin/rsync daemon”/etc/rc.local
  42. tail -1 /etc/rc.local
  43. #以上是centos6的配置
  44. #这个是centos7的配置,除了配置文件不一样,其他一致
  45. uid = rsync --- 指定管理备份目录的用户
  46. gid = rsync --- 指定管理备份目录的用户组
  47. port = 873 --- 定义rsync备份服务的网络端口号
  48. fake super = yes --- rsync虚拟用户伪装成为一个超级管理员用户
  49. use chroot = no --- 和安全相关的配置
  50. max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器
  51. timeout = 300 --- 超时时间(单位秒)
  52. pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
  53. lock file = /var/run/rsync.lock --- 锁文件
  54. log file = /var/log/rsyncd.log --- rsync服务的日志文件 用于排错分析问题
  55. ignore errors --- 忽略传输中的简单错误
  56. read only = false --- 指定备份目录是可读可写
  57. list = false --- 使客户端可以查看服务端的模块信息
  58. hosts allow = 172.16.1.0/24 --- 允许传输备份数据的主机(白名单)
  59. hosts deny = 0.0.0.0/32 --- 禁止传输备份数据的主机(黑名单)
  60. auth users = rsync_backup --- 指定认证用户
  61. secrets file = /etc/rsync.password --- 指定认证用户密码文件 用户名称:密码信息
  62. [backup] --- 模块信息
  63. comment = "backup dir by oldboy"
  64. path = /backup --- 模块中配置参数 指定备份目录

7、Rsync客户端配置

  1. 1)安装rsync软件包
  2. yum -y install rsync
  3. 2)配置密码文件,并且修改权限
  4. vim /etc/rsync.password
  5. oldboy
  6. chmod 600 /etc/rsync.password
  7. 3)创建目录
  8. mkdir -p /backup
  9. 4)同步数据到服务端
  10. rsync -avz /backup/ rsync_backup@172.16.1.100::backup/ --password-file=/etc/rsync.passwd
  11. 除了密码文件来实现免密,还可以在客户端通过设置RSYNC_PASSWORD环境变量实现密码自动输入
  12. [root@iflytek-5 ~]# export RSYNC_PASSWORD=oldboy
  13. [root@iflytek-5 ~]# rsync -avz /backup/ rsync_backup@172.16.1.100::backup/
  14. 排除单个文件:
  15. rsync -avz exclude=1 /backup/ rsync_backup@172.16.1.100::oldboy/
  16. 排除多个文件
  17. rsync -avz exclude={12} /backup/ rsync_backup@172.16.1.100::oldboy/
  18. 注意:密码文件和秘钥文件改成600不只是为了安全考虑,很多程序或者命令里面也要求必须是600,假如不配置600的话,会造成以下问题:

0.026332083220828917.png

  1. [root@nfs-41 backup]# rsync -avz /backup/* rsync_backup@10.0.0.31::backup/ --password-file=/etc/rsync.password
  2. sending incremental file list
  3. 1.txt
  4. 2.txt
  5. rsync: chgrp ".1.txt.9BRZ8L" (in backup) failed: Operation not permitted (1)
  6. rsync: chgrp ".2.txt.Hp5ygX" (in backup) failed: Operation not permitted (1)
  7. sent 144 bytes received 224 bytes 147.20 bytes/sec
  8. total size is 0 speedup is 0.00
  9. rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
  10. #以上问题虽然不影响推送,但是一直有报错,也很难受,所以上网找了一下,加下下面两个参数即可
  11. [root@nfs-41 backup]# rsync -avz --no-o --no-g /backup/* rsync_backup@10.0.0.31::backup/ --password-file=/etc/rsync.password
  12. sending incremental file list
  13. 1.txt
  14. 2.txt
  15. sent 142 bytes received 62 bytes 31.38 bytes/sec
  16. total size is 0 speedup is 0.00