守护进程方式备份数据

  1. 可以进行一些配置管理
  2. 可以进行安全策略管理
  3. 可以实现自动传输备份数据

rsync守护进程服务端部署

QQ截图20191209150425.png

主机名称和IP地址规划

服务 主机名 eth0网卡IP eth1网卡IP 软件
防火墙服务器 firewalld 10.0.0.81 172.16.1.81 firewalld
负载均衡服务器 lb01 10.0.0.5 172.16.1.5 nginx,keepalived
负载均衡服务器 lb02 10.0.0.6 172.16.1.6 nginx,keepalived
web服务器 web01 10.0.0.7 172.16.1.7 nginx
web服务器 web02 10.0.0.8 172.16.1.8 nginx
web服务器 web03 10.0.0.9 172.16.1.9 nginx
存储服务器 nfs01 10.0.0.31 172.16.1.31 nfs
备份服务器 backup 10.0.0.41 172.16.1.41 rsync
数据库服务器 db01 10.0.0.51 172.16.1.51 mysql,mariaDB
批量管理服务器 m01 10.0.0.61 172.16.1.61 ansible
跳板机服务器 jumpserver 10.0.0.71 172.16.1.71 jumpserver
监控服务器 zabbix 10.0.0.72 172.16.1.72 zabbix
缓存服务器 暂无 暂无 暂无 暂无

下载安装rsync

rpm -qa|grep rsync
yum install -y rsync

编写配置文件

man rsyncd.conf
vim /etc/rsyncd.conf 


#指定管理备份目录的用户
uid = rsync
#指定管理备份目录的用户组
gid = rsync
#定义rsync备份服务的网络端口号
port = 873
#将rsync虚拟用户伪装成为一个超级管理员用户
fake super = yes
#和安全相关的配置
use chroot = no
#最大连接数  同时只能有200个客户端连接到备份服务器
max connections = 200
#超时时间(单位秒)
timeout = 300
#记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
pid file = /var/run/rsyncd.pid
#锁文件
lock file = /var/run/rsync.lock
#rsync服务的日志文件 用于排错分析问题
log file = /var/log/rsyncd.log
#忽略传输中的简单错误
ignore errors
#指定备份目录是可读可写
read only = false
#使客户端可以查看服务端的模块信息
list = false
#允许传输备份数据的主机(白名单)
hosts allow = 172.16.1.0/24
#禁止传输备份数据的主机(黑名单)
hosts deny = 0.0.0.0/32
#指定认证用户
auth users = rsync_backup
#指定认证用户密码文件 用户名称:密码信息
secrets file = /etc/rsync.password
#模块信息
[backup]

comment = "backup dir by 1997sty"
#模块中配置参数 指定备份目录
path = /backup

创建rsync服务的虚拟用户

useradd rsync -M -s /sbin/nologin

创建备份服务认证密码文件

echo "rsync_backup:123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

创建备份目录并修改属主属组信息

mkdir /backup
chown rsync.rsync /backup/

启动备份服务并设置开机启动

systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd

rsync守护进程客户端部署

参数说明

  • OPTION : 设置参数
  • USER : 指定认证用户信息(不是linux系统用户)
  • HOST : 指定远程主机IP地址或者主机名称
  • SRC : 要拉取或要推送的数据
  • DEST : 备份服务器的模块信息

命令参数

  • -v : --verbose 显示详细的传输信息
  • -a : --archive 全部归档参数(-r,-t,-o,-p,-g,-D,-l)
  • -r : --recursive 递归参数
  • -t : --times 保持文件属性信息时间信息不变(修改时间)
  • -o : --owner 保持文件属主信息不变
  • -g : --group 保持文件属组信息不变

如何让-o和-g参数生效,需要将配置文件uid和gid改为root,需要将fake super参数进行注释

  • -p : --perms 保持文件权限信息不变
  • -D : 保持设备文件信息不变
  • -l : --links 保持链接文件属性不变
  • -L : 保持链接文件数据信息不变
  • -P : 显示数据传输的进度信息
  • --exclude=PATTERN : 排除指定文件
  • --exclude-from=file : 排除指定文件内的文件列表不被传输(批量排除)
  • --bwlimit=RATE : 限制传输的速率
  • --delete : 无差异同步参数(慎用)

10.png

拉取数据备份

  • rsync [OPTION...] [USER@]HOST::SRC... [DEST]
  • rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

推送数据备份

  • rsync [OPTION...] SRC... [USER@]HOST::DEST
  • rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

创建一个密码文件

echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

进行免交互传输数据测试

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

rsync服务常见问题

  • rsync服务端开启的iptables防火墙
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync:failed to connect to 172.16.1.41: No route to host (113)
rsyncerror: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

异常问题解决:关闭rsync服务端的防火墙服务(iptables)

[root@backup mnt]# /etc/init.d/iptables stop
 iptables:Setting chains to policy ACCEPT: filter         [  OK  ]
 iptables:Flushing firewall rules:                        [  OK  ]
 iptables:Unloading modules:                              [  OK  ]
[root@backup mnt]# /etc/init.d/iptables status
 iptables:Firewall is not running.
  • rsync客户端执行rsync命令错误
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup
ERROR: Theremote path must start with a module name not a /
rsyncerror: error starting client-server protocol (code 5) at main.c(1503)[sender=3.0.6]

异常问题解决:rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)

  • @ERROR: auth failed on module backup认证用户失败
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol(code 5) at main.c(1503) [sender=3.0.6]

异常问题解决:

  1. 密码真的输入错误,用户名真的错误
  2. password-file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
  3. /etc/rsync.password文件权限不是600
  4. rsync_backup:123456密码配置文件后面注意不要有空格
  5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
  • Unknown module 'backup' 位置模块错误
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol(code 5) at main.c(1503) [sender=3.0.6]

异常问题解决:/etc/rsyncd.conf配置文件模块名称书写错误

  • Permission denied 权限阻止
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: mkstemp ".hosts.5z3AOA" (inbackup) failed: Permission denied (13)

sent 196 bytes received 27 bytes  63.71 bytes/sec
total size is 349 speedup is 1.57
rsync error: some files/attrs were not transferred(see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

异常问题解决:

  1. 共享目录的属主和属组不正确,不是rsync
  2. 共享目录的权限不正确,不是755
  • chdir failed 备份目录异常
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: chdir failed
rsync error: error starting client-server protocol(code 5) at main.c(1503) [sender=3.0.6]

异常问题解决:

  1. 备份存储目录没有建立
  2. 建立的备份存储目录和配置文件定义不一致
  • invalid uid rsync 无效用户信息
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol(code 5) at main.c(1503) [sender=3.0.6]

异常问题解决:rsync服务对应rsync虚拟用户不存在了

  • password file must not be other-accessible 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password:
sending incremental file list

sent 26 bytes received 8 bytes  5.23 bytes/sec
total size is 349 speedup is 10.26

异常问题解决:rsync客户端的秘钥文件也必须是600权限

  • rsync客户端连接慢问题

错误日志输出

2017/03/08 20:14:43 [3422] params.c:Parameter() -Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known
2017/03/08 20:14:43 [3422] connect from UNKNOWN(172.16.1.31)
2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)
2017/03/08 20:14:43 [3422] receiving file list
2017/03/08 20:14:43 [3422] sent 76 bytes  received 83 bytes  total size 349

正确日志输出

2017/03/08 20:16:45 [3443] params.c:Parameter() -Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:16:45 [3443] connect from nfs02(172.16.1.31)
2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)
2017/03/08 20:16:45 [3443] receiving file list
2017/03/08 20:16:45 [3443] sent 76 bytes  received 83 bytes  total size 349

异常问题解决:查看日志进行分析

  • rsync服务没有正确启动
Connection refused (111)
[root@nfs01 ~]#  rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: Connectionrefused (111)
rsync error: error in socket IO (code 10) atclientserver.c(124) [sender=3.0.6]

解决 rsync服务没开启

[root@nfs01 ~]# rsync --daemon
[root@nfs01 ~]# ss -lntup |grep rsync
tcp   LISTEN     0      5                     :::873                  :::*      users:(("rsync",1434,5))
tcp   LISTEN     0      5                      *:873                   *:*      users:(("rsync",1434,4))
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts

sent 196 bytes received 27 bytes  49.56 bytes/sec
total size is 349 speedup is 1.57

守护进程服务企业应用

守护进程多模块功能配置

vi /etc/rsyncd.conf

#[模块名]
#comment = "模块信息"
#path = 模块保存路径

[backup]
comment = "backup dir by 1997sty"
path = /backup
[dba]
comment = "backup dir by 1997sty"
path = /dba
[dev]
comment = "backup dir by 1997sty"
path = /devdata

守护进程的排除功能实践

  • 目录情况
/1997sty
├── 01.txt
├── 02.txt
├── a
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── b
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── c
    ├── 1.txt
    ├── 2.txt
    └── 3.txt
  • 将目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录不要做备份
#相对路径
rsync -avz /1997sty --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#绝对路径
rsync -avz /1997sty --exclude=/1997sty/b/1.txt --exclude=/1997sty/c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

以文件排除方式

vi /1997sty/exclude.txt

exclude.txt
b/1.txt
c/

使用--exclude-from

rsync -avz /1997sty --exclude-from=exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

守护进程来创建备份目录

只能创建下一级目录,不可以创建多级目录

[root@nfs01 /]# rsync -avz /etc/hosts  rsync_backup@172.16.1.41::backup/10.0.0.31/ --password-file=/etc/rsync.password 
sending incremental file list
created directory 10.0.0.31
hosts

sent 226 bytes  received 75 bytes  602.00 bytes/sec
total size is 371  speedup is 1.23

守护进程的访问控制配置

黑名单与白名单同时存在时,白名单优先

9.png

守护进程的列表功能配置

/etc/rsyncd.conf中设置list = true

[root@nfs01 ~]# rsync rsync_backup@172.16.1.41::
backup          "backup dir by 1997sty"