1 ssh协议数据同步:将NFS服务器数据同步备份到 rsync服务器

实验环境:一台NFS服务器,一台rsync服务器
在两台服务器上分别创建目录(/filesrc、/filedst)

  1. mkdir -pv /filesrc /filedst

下行同步(下载)
格式: rsync -avz服务器地址:/服务器目录/*/本地目录

示例: rsync -avz root@192.168.88.10:/filesrc/* /filedst -a :归档模式,递归并保留对象属性 -v :显示同步过程 -z :在传输文件时进行压缩

范例:

  1. 40~ touch /filesrc/{1..5}.txt
  2. 41~ rsync -avz root@10.0.0.40:/filesrc/* /filedst
  3. The authenticity of host '10.0.0.40 (10.0.0.40)' can't be established.
  4. RSA key fingerprint is a9:66:14:15:29:9a:53:57:67:72:74:ae:36:ea:72:be.
  5. Are you sure you want to continue connecting (yes/no)? yes
  6. Warning: Permanently added '10.0.0.40' (RSA) to the list of known hosts.
  7. root@10.0.0.40's password:
  8. receiving incremental file list
  9. 1.txt
  10. 2.txt
  11. 3.txt
  12. 4.txt
  13. 5.txt
  14. 41~ ls /filedst
  15. 1.txt 2.txt 3.txt 4.txt 5.txt

上行同步(上传)
格式: rsync -avz/本地目录/*服务器地址:/服务器目录

示例: rsync -avz /filedst/* root@192.168.88.10:/filesrc

注意:使用root用户进行实验可以,但生产环境中尽量使用单独创建的普通用户,减少权限溢出
创建用来做数据同步的用户,并给予用户对目录的相应权限,一般使用ACL设置权限。

  1. useradd zhangsan
  2. passwd zhangsan
  3. setfacl -m u:zhangsan:rwx /filesrc

范例:

  1. 40~ rm -rf /filesrc/*
  2. 41~ rsync -avz /filedst/* root@10.0.0.40:/filesrc
  3. root@10.0.0.40's' password:
  4. sending incremental file list
  5. 1.txt
  6. 2.txt
  7. 3.txt
  8. 4.txt
  9. 5.txt
  10. sent 250 bytes received 107 bytes 47.60 bytes/sec
  11. total size is 0 speedup is 0.00
  12. 40~ ls /filesrc/
  13. 1.txt 2.txt 3.txt 4.txt 5.txt

拓展:若要实现免密码数据同步,只需要做好ssh密钥对登录即可

  1. 40~ ssh-keygen -t rsa -b 2048
  2. 40~ ssh-copy-id root@10.0.0.41
  3. 41~ ssh-keygen -t rsa -b 2048
  4. 41~ ssh-copy-id root@10.0.0.40
  1. 40~ rm -rf /filesrc/*
  2. #无需输入密码
  3. 41~ rsync -avz /filedst/* root@10.0.0.40:/filesrc
  4. #验证
  5. 40~ ls
  6. 1.txt 2.txt 3.txt 4.txt 5.txt

2 rsync协议数据同步:将NFS服务器数据同步备份到rsync服务器

实验环境:一台服务器,一台客户端。

  1. 在两台服务器上分别创建目录(/filesrc、/filedst)
  2. 搭建rsync服务(仅需要在NFS服务器上搭建即可)

a.创建主配置文件(/etc/rsyncd.conf)

  1. ~ vim /etc/rsyncd.conf
  2. address = 10.0.0.40
  3. #rsync服务绑定IP
  4. port 873
  5. #默认服务端口873
  6. log file = /var/log/rsyncd.log
  7. #日志文件位置
  8. pid file = /var/run/rsyncd.pid
  9. #进程号文件位置
  10. [web]
  11. #共享名:用来连接是写在url上的,切记
  12. comment = web directory backup
  13. #共享描述话语
  14. path = /filesrc
  15. #实际共享目录
  16. read only = no
  17. #是否仅允许读取
  18. dont compress = *.gz *.bz2 *.xz *.zip
  19. #哪些文件类型不进行压缩
  20. auth users = user1
  21. #登录用户名(非系统用户,需要自行创建)
  22. secrets file = /etc/rsyncd_users.db
  23. #认证所需账户密码文件(需自行创建-同上)

b.创建认证所需账户密码文件

  1. ~ vim /etc/rsyncd_users.db
  2. user1:123456
  3. ~ chmod 600 /etc/rsyncd_users.db
  4. #必须修改权限,否则登录报错

c.启动服务

  1. ~ rsync --daemon
  2. #默认rsync开启端口为 873
  3. ~ netstat -antlp | grep :873

d.设置映射用户对共享目录有权限(r)

  1. setfacl -m u:nobody:rwx /filesrc

注意:关闭服务可使用kill命令,但偶尔会造成服务被结束,但进程号配置文件不被删除的问题,若遇到此类问题可自己手动删除,再启动则正常(建议自己写一个rsync的服务管理脚本)
下行同步(下载)

  • 格式: rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录
  • 示例: rsync -avz rsync: //user1@192.168.88.10/web /filedst
  • 拓展:—delete:删除本地比服务器多出来的文件(源地址没有,目标地址有的删掉)。其—delete参数只能用于 rsync 协议,ssh 协议无法使用。

    rsync -avz —delete rsync://user1@192.168.88.10/web /filedst

范例:将NFS服务器数据同步备份到rsync服务器

  1. 40~ cp /etc/passwd /filesrc
  2. 40~ cp /etc/issue /filesrc
  3. 41~ rsync -avz rsync://user1@10.0.0.40:/web /filedst
  4. Password:
  5. receiving incremental file list
  6. ./
  7. issue
  8. passwd
  9. sent 95 bytes received 907 bytes 222.67 bytes/sec
  10. total size is 1660 speedup is 1.66
  11. 41~ ls
  12. 1.txt 2.txt 3.txt 4.txt 5.txt issue passwd

范例:使用 —delete 参数

  1. 40~ ls /filesrc
  2. issue passwd
  3. 41~ ls /filedst/
  4. 1.txt 2.txt 3.txt 4.txt 5.txt issue passwd
  5. #--delete会严格同步远程服务器目录的内容,本地同步目录有的文件将会删除
  6. 41~ rsync -avz --delete rsync://user1@10.0.0.40:/web /filedst
  7. Password:
  8. receiving incremental file list
  9. deleting 5.txt
  10. deleting 4.txt
  11. deleting 3.txt
  12. deleting 2.txt
  13. deleting 1.txt
  14. ./
  15. sent 57 bytes received 130 bytes 74.80 bytes/sec
  16. total size is 1660 speedup is 8.88
  17. 41~ ls /filedst/
  18. issue passwd

上行同步(上传)

  • 格式:rsync -avz/本地目录/*rsync://用户名@服务器地址/共享模块名
  • 示例: rsync -avz /filedst/* rsync://user1@192.168.88.10/web

    拓展: rsync协议的免密码可以借助一个环境变量实现 export RSYNC_PASSWORD=虚拟用户密码(客户端生成)

  1. 40~ rm -rf /filesrc/*
  2. 41~ rsync -avz /filedst/* rsync://user1@10.0.0.40:/web
  3. Password:
  4. sending incremental file list
  5. issue
  6. passwd
  7. sent 818 bytes received 46 bytes 345.60 bytes/sec
  8. total size is 1660 speedup is 1.92
  9. #验证
  10. 40~ ls /filesrc
  11. issue passwd
  12. 41~ export RSYNC_PASSWORD=123456
  13. 41~ rm -rf /filedst/*
  14. 41~ touch /filedst/{a..f}.txt
  15. 41~ rsync -avz --delete rsync://user1@10.0.0.40:/web /filedst/
  16. receiving incremental file list
  17. deleting f.txt
  18. deleting e.txt
  19. deleting d.txt
  20. deleting c.txt
  21. deleting b.txt
  22. deleting a.txt
  23. ./
  24. issue
  25. passwd
  26. sent 95 bytes received 909 bytes 2008.00 bytes/sec
  27. total size is 1660 speedup is 1.65
  28. 41~ ls /filedst/
  29. issue passwd