Rsync备份服务部署

 

1 Rsync服务器架构规划

在搭建服务之前需要做以下规划设计,其中包括:主机规划表、主机IP地址规划表、主机架构图、主机hosts解析以及linux主机基础优化等

1.1 主机规划表

服务器说明

数量(台)

名称规划

备份服务器(rsync server)

一台

对全网服务器数据,进行实时与定时备份

NFS存储 (rsync client)

一台或多台

存储图片、网页、头像等静态数据,在这里作为rsync客户端使用

1.2 主机IP地址规划表

服务器说明

外网IP地址

内网IP地址

主机名规划

Rsync备份服务器

10.0.0.41/24

172.16.1.41/24

backup

NFS存储服务器(client)

10.0.0.31/24

172.16.1.31/24

nfs01

1.3 主机架构图

clip_image002

1.4 主机hosts解析(/etc/hosts)

[root@backup ~]# cat /etc/hosts

######Local_DNS######

172.16.1.41 backup

172.16.1.31 nfs01

1.5 linux主机基础优化

1)关闭selinux

[root@backup ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

[root@backup ~]# grep SELINUX=disabled /etc/selinux/config

SELINUX=disabled

[root@backup ~]# setenforce 0

[root@backup ~]# getenforce

permissive

2)关闭iptables

[root@backup ~]# /etc/init.d/iptables stop

[root@backup ~]# chkconfig iptables off

3)精简开机自启动服务

[root@backup ~]# chkconfig --list | egrep -v "crond|sshd|rsyslog|network|sysstat" | awk '{print "chkconfig",$1,off}' | bash

[root@backup ~]# export LANG=en

[root@backup ~]# chkconfig --list | grep 3:on

crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

network 0:off 1:off 2:on 3:on 4:on 5:on 6:off

rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off

sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off

4)提权管理员账户可以sudo且免密操作

[root@backup ~]# \cp /etc/sudoers /etc/sudoers.ori

[root@backup ~]# echo "gandalf ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

[root@backup ~]# tail -1 /etc/sudoers

gandalf ALL=(ALL) NOPASSWD: ALL

[root@backup ~]# visudo -c

/etc/sudoers: parsed OK

5)时间同步

[root@backup ~]# echo "#ntpdate system time 2018-07-14 by wolf_dreams" >> /var/spool/cron/root

[root@backup ~]# echo "*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1" >> /var/spool/cron/root

[root@backup ~]# crontab -l

#ntpdate system time 2018-07-14 by wolf_dreams

*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1

6)中文字符集设置

[root@backup ~]# \cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori

[root@backup ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/sysconfig/i18n

[root@backup ~]# source /etc/sysconfig/i18n

[root@backup ~]# echo $LANG

zh_CN.UTF-8

7)命令行安全设置(可选项)

[root@backup ~]# echo 'export TMOUT=300' >> /etc/profile

[root@backup ~]# echo 'export HISTSIZE=5' >> /etc/profile

[root@backup ~]# echo 'export HISTFILESIZE=5' >> /etc/profile

[root@backup ~]# source /etc/profile

8)加大文件描述

[root@backup ~]# echo "* - nofile 65535" >> /etc/security/limits.conf

9)内核优化(/etc/sysctl.conf

[root@backup ~]# cat /etc/sysctl.conf

2 Rsync服务介绍

2.1 什么是Rsync?

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。Rsync软件使用于unix/linux/windows等多种操作系统平台

2.2 Rsync简介

Rsync英文全称为Remote synchronization,Rsync具有使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,类似ssh带的scp命令,scp每次拷贝都是全量拷贝,而rsync还可以增量拷贝。Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,类似cp命令,同样cp每次拷贝都是全量拷贝。Rsync还可以实现删除文件和目录的功能,又相当于rm命令

小提示:

一个rsync相当于scp、cp、rm,但其在功能上又优于他们每一个命令

cp、scp工具属于完整拷贝;rsync既能完整拷贝又能增量拷贝,从同步数据的性能及效率上Rsync工具更好

同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,也可根据权限、属主等属性的变化同步,甚至可以实现只同步一个文件里有变化的内容,所以可以实现快速的同步备份数据

2.3 Rsync特性

Ø 支持拷贝特殊文件如链接文件,设备等

Ø 可以排除指定文件或目录同步的功能,相当于打包命令tar的排除功能

Ø 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p

Ø 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高,tar -N

Ø 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)

Ø 可以通过socket(进程方式)传输文件和数据(服务端和客户端)

Ø 支持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像

2.4 Rsync的企业工作场景说明

第一种:两台服务器之间数据同步(定时任务),即crond+rsync

第二种:实时同步(解决存储服务器等单点问题)

利用rsync结合inotify的功能做实时数据同步,根据存储服务器上目录的变化,把变化的数据通过inotify或sersync结合rsync命令,同步到备份服务器还可以通过drbd方案以及双写的方案实现双机数据同步

2.5 Rsync的工作方式

Rsync三种主要的传输数据的方式:

1) Local:单个主机本地之间的数据传输(类似cp)

2) 通道模式:借助rcp,ssh等通道来传输数据(类似scp)

3) Daemon模式:以守护进程(socket)的方式传输数据(rsync自身重要功能)

内网不需要加密,加密对性能有损失,可采用rsync+vpn(pptp,openvpn,ipsec)增强安全

2.6 Rsync常用参数

-v, --verbose 详细模式输出,传输时的进度等信息

-z, --compress 传输时进行压缩以提高传输效率

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-r, --recursive 对子目录以递归模式,即目录下的所有目录都同样传输

-t, --times 保持文件时间信息

-o, --owner 保持文件属主信息

-g, --group 保持文件属组信息

-p, --perms 保持文件权限

-D, --devices 保持设备文件信息

-P –progress 显示同步的过程及传输时的进度等信息

-l, --links 保持软链接

-e, --rsh=COMMAND 使用的信道协议,指定替代rsh的shell程序,例如:ssh

--exclude=PATTERN 指定排除不需要传输的文件模式

--exclude-from=FILE 文件名所在的目录文件

--bwlimit=KBPS limit I/O bandwidth,限制IO带宽(案例:某DBA做数据同步(白天操作将带宽占满),导致用户无法访问网站,解决办法:rsync限速功能

--delete 让目标目录dst和源目录src数据一致

2.7 Rsync模式实例演示

2.7.1 本地模式(类似cp)

Local模式语法格式:

rsync [OPTION...] SRC... [DEST]

演示实例:

[root@backup ~]# cp -a /etc/hosts /tmp/

[root@backup ~]# rsync /etc/hosts /tmp/test

[root@backup ~]# ls /tmp/ /tmp/test/

/tmp/:

hosts test yum.log

/tmp/test/:

Hosts

#保留文件属性信息

[root@backup ~]# rsync -vzrtopg /etc/hosts /tmp/test/

sending incremental file list

hosts

sent 165 bytes received 31 bytes 392.00 bytes/sec

total size is 217 speedup is 1.11

[root@backup ~]# ls -l /tmp/test/

total 4

-rw-r--r-- 1 root root 217 Jul 14 15:53 hosts

2.7.2 借助ssh通道远程传输数据(类似scp)

案例描述

将10.0.0.41主机上的/etc/hosts文件备份到10.0.0.31主机的/tmp目录下,rsync命令将在10.0.0.41主机上执行操作

远程模式语法格式:

拉取Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

推送Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

推送Push演示实例:

[root@backup ~]# rsync -avz /etc/hosts -e 'ssh -p 22' root@10.0.0.31:/tmp/

root@10.0.0.31's password:

sending incremental file list

hosts

sent 165 bytes received 31 bytes 56.00 bytes/sec

total size is 217 speedup is 1.11

[root@nfs01 ~]# ls -l /tmp/

total 4

-rw-r--r-- 1 root root 217 Jul 14 15:53 hosts

拉取Pull演示实例:

[root@backup ~]# rsync -avz -e 'ssh -p 22' root@10.0.0.31:/etc/hosts /tmp/

root@10.0.0.31's password:

receiving incremental file list

hosts

sent 30 bytes received 170 bytes 57.14 bytes/sec

total size is 217 speedup is 1.08

[root@backup ~]# ls -l /tmp/

total 8

-rw-r--r-- 1 root root 217 Jul 14 15:53 hosts

drwxr-xr-x 2 root root 4096 Jul 15 15:57 test

-rw-------. 1 root root 0 Jul 14 10:01 yum.log

小提示:

生产环境采用ssh key秘钥结合rsync实现数据分发的方案

2.8 Rsync优缺点

Rsync优点:

1、增量备份,支持socket(daemon),集中备份(支持推送拉取,都是以客户端为参照物)

2、远程shell通道模式还可以加密SSH传输,socket(daemon)需要加密传输,可以利用vpn(pptp、openvpn、ipsec)服务

Rsync缺点:

1、大量小文件同步时,比对时间较长,可能会导致rsync进程停止

2、同步大文件,10G这样的大文件有时会中断;未完成同步前是隐藏文件,可以通过续传等参数实现传输

3、一次性远程拷贝可以使用scp命令进行操作

3 以守护进程(socket)的方式传输数据

3.1 部署前准备工作

3.1.1 部署环境

由于硬件设备资源缺少,这里Rsync服务搭建使用VMware® Workstation 11.1.2 build-2780323版本进行部署安装

1)操作系统版本

#rsync daemon服务器端

[root@backup ~]# cat /etc/redhat-release

CentOS release 6.9 (Final)

#rsync客户端

[root@nfs01 ~]# cat /etc/redhat-release

CentOS release 6.9 (Final)

2)系统内核版本

#rsync daemon服务器端

[root@backup ~]# uname -r

2.6.32-696.el6.x86_64

#rsync客户端

[root@nfs01 ~]# uname -r

2.6.32-696.el6.x86_64

3)主机名

#rsync daemon服务器端

[root@backup ~]# hostname

backup

#rsync客户端

[root@nfs01 ~]# hostname

nfs01

4)主机IP地址

# rsync daemon服务器端

[root@backup ~]# ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}'

10.0.0.41

[root@backup ~]# ifconfig eth1 | awk -F "[ :]+" 'NR==2 {print $4}'

172.16.1.41

# rsync客户端

[root@nfs01 ~]# ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}'

10.0.0.31

[root@nfs01 ~]# ifconfig eth1 | awk -F "[ :]+" 'NR==2 {print $4}'

172.16.1.31

5)hosts文件

# rsync daemon服务器端

[root@backup ~]# tail -3 /etc/hosts

######Local_DNS######

172.16.1.41 backup

172.16.1.31 nfs01

# rsync客户端

[root@nfs01 ~]# tail -3 /etc/hosts

######Local_DNS######

172.16.1.41 backup

172.16.1.31 nfs01

3.2 Rsync daemon服务器端配置

1)查询rsync软件包是否安装

[root@backup ~]# rpm -qa rsync

rsync-3.0.6-12.el6.x86_64

2)创建rsync服务对应的用户,管理本地目录

[root@backup ~]# useradd rsync -s /sbin/nologin -M

[root@backup ~]# tail -1 /etc/passwd

rsync:x:501:501::/home/rsync:/sbin/nologin

3)生成rsyncd.conf配置文件(man rsyncd.conf查看帮助)

[root@backup ~]# vi /etc/rsyncd.conf

#rsync_config________start

#created by wolfdreams 2018-07-14

uid = rsync

gid = rsync

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

[backup]

path = /backup

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

#rsync_config________end

4)创建备份目录并赋予特定的权限

[root@backup ~]# mkdir /backup

[root@backup ~]# ls -ld /backup

drwxr-xr-x 2 root root 4096 Jul 14 17:11 /backup

[root@backup ~]# chown -R rsync:rsync /backup

[root@backup ~]# ls -ld /backup

drwxr-xr-x 2 rsync rsync 4096 Jul 14 17:11 /backup

5)根据rsyncd.conf配置文件auth_users配置账户并根据secrets file参数生成密码文件(远程连接验证使用)

[root@backup ~]# echo "rsync_backup:gandalf" >> /etc/rsync.password

[root@backup ~]# cat /etc/rsync.password

rsync_backup:gandalf

[root@backup ~]# ls -l /etc/rsync.password

-rw-r--r-- 1 root root 21 Jul 14 17:15 /etc/rsync.password

6)给secrets file参数生成密码文件赋予特定的权限

[root@backup ~]# chmod 600 /etc/rsync.password

[root@backup ~]# ls -l /etc/rsync.password

-rw------- 1 root root 21 Jul 14 17:15 /etc/rsync.password

7)启动rsync服务并检查端口是否正常

[root@backup ~]# rsync --daemon

[root@backup ~]# ps -ef | grep rsync | grep -v grep

root 25039 1 0 17:09 ? 00:00:00 rsync --daemon

[root@backup ~]# lsof -i :873

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

rsync 25039 root 4u IPv4 30783 0t0 TCP *:rsync (LISTEN)

rsync 25039 root 5u IPv6 30784 0t0 TCP *:rsync (LISTEN)

[root@backup ~]# netstat -lntup | grep 873

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 25039/rsync

tcp 0 0 :::873 :::* LISTEN 25039/rsync

8)加入开机自启动

[root@backup ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.d/rc.local

[root@backup ~]# tail -1 /etc/rc.d/rc.local

/usr/bin/rsync --daemon

3.3 Rsync daemon服务端排错步骤

1、输出过程信息检查

2、查看rsyncd.conf配置文件中定义的日志文件/var/log/rsyncd.log

[root@backup ~]# tail /var/log/rsyncd.log

2018/07/14 17:09:45 [25039] rsyncd version 3.0.6 starting, listening on port 873

3、检查Rsync daemon服务配置步骤

3.4 Rsync客户端配置

1)查询rsync软件包是否安装

[root@nfs01 ~]# rpm -qa rsync

rsync-3.0.6-12.el6.x86_64

2)生成连接服务器端需要的密码文件

[root@nfs01 ~]# vim /etc/rsync.password

gandalf

[root@nfs01 ~]# cat /etc/rsync.password

gandalf

3)给客户端密码文件赋予权限

[root@nfs01 ~]# chmod 600 /etc/rsync.password

[root@nfs01 ~]# ls -l /etc/rsync.password

-rw------- 1 root root 8 Jul 14 17:29 /etc/rsync.password

4)在客户端上面创建一个和Rsync daemon服务端一样的/backup目录

[root@nfs01 ~]# mkdir -p /backup

3.5 Rsync与Rsync daemon之间同步文件

3.5.1 Rsync客户端创建测试文件

[root@nfs01 ~]# cd /backup/

[root@nfs01 backup]# touch test{01..10}

[root@nfs01 backup]# ls

test01 test02 test03 test04 test05 test06 test07 test08 test09 test10

3.5.2 push推送方式

1)Push推送操作命令

[root@nfs01 backup]# rsync -az /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

[root@nfs01 backup]# rsync -az /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password

2)Rsync daemon服务端进行验证

[root@backup ~]# cd /backup/

[root@backup backup]# ls

test01 test02 test03 test04 test05 test06 test07 test08 test09 test10

3.5.3 Rsync daemon服务端创建测试文件

[root@backup ~]# cd /backup/

[root@backup backup]# touch {a..g}01

[root@backup backup]# ls

a01 b01 c01 d01 e01 f01 g01

3.5.4 pull拉取方式

1)pull拉取操作命令

[root@nfs01 backup]# rsync -avz rsync_backup@172.16.1.41::backup/ /backup/ --password-file=/etc/rsync.password

[root@nfs01 backup]# rsync -avz rsync://rsync_backup@172.16.1.41/backup/ /backup/ --password-file=/etc/rsync.password

2)Rsync客户端进行验证

[root@nfs01 backup]# ls

a01 b01 c01 d01 e01 f01 g01

3.5.5 排除不需要备份的文件

1)排除单个文件或目录

命令演示:

[root@nfs01 backup]# rsync -az /backup/ --exclude=a01 rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

服务器端验证:

[root@backup backup]# ls

b01 c01 d01 e01 f01 g01

2)排除多个不连续的文件

命令演示:

[root@nfs01 backup]# rsync -az /backup/ --exclude={a01,e01} rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

服务器端验证:

[root@backup backup]# ls

b01 c01 d01 f01 g01

3)排除多个连续的文件

命令演示:

[root@nfs01 backup]# rsync -az /backup/ --exclude={a..c}01 rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

服务器端验证:

[root@backup backup]# ls

d01 e01 f01 g01

4)排除多个不同文件和目录

模拟环境:

[root@nfs01 backup]# echo "a01 c01 d01 f01" |xargs -n 1 >> exclude.log

[root@nfs01 backup]# cat exclude.log

a01

c01

d01

f01

命令演示:

[root@nfs01 backup]# rsync -az /backup/ --exclude-from=exclude.log rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

服务器端验证:

[root@backup backup]# ls

b01 e01 exclude.log g01

3.5.6 Rsync无差异同步,使用参数--delete

1)客户端文件

[root@nfs01 backup]# ls

a01 b01 c01 d01 e01 exclude.log f01 g01

2)服务器端文件

[root@backup backup]# ls

b01 e01 exclude.log g01

3)命令演示:

#会把远端目录内容清除,并写入与本地端一模一样的数据文件

[root@nfs01 backup]# rsync -az /backup/ --delete rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

#会把本地目录内容清除,并写入与远端一模一样的数据文件

[root@nfs01 backup]# rsync -az --delete rsync_backup@172.16.1.41::backup/ /backup/ --password-file=/etc/rsync.password

4)验证服务器端/backup目录文件

[root@backup backup]# ls

a01 b01 c01 d01 e01 exclude.log f01 g01

3.6 Rsync排错思路

3.6.1 Rsync服务端排错思路

1、查看rsync服务器配置文件路径是否正确,默认路径为:/etc/rsyncd.conf

2、查看配置文件里host allow、host deny,允许的IP网段是否允许客户端访问的IP网段

3、查看配置文件中path参数里的路径是否存在,权限是否正确

4、查看rsync服务是否启动,查看命令为:ps -ef | grep rsync;端口是否存在lsof –i :873

5、查看iptables和selinux是否开启允许rsync服务通过

6、查看服务端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式为用户名:密码,文件路径和配置文件里的secrect file参数对应

7、查看配置文件rsyncd.conf中用户是否对模块下目录有可读写的权限

3.6.2 Rsync客户端排错思路

1、查看客户端rsync配置的密码文件是否为600的权限,密码文件格式是否正确;注意:客户端仅需要有密码并且和服务端的密码一致

2、telnet测试rsync服务器IP地址873端口,查看服务是否启动(测试服务器端防火墙是否阻挡,网络策略是否开通相应端口)

3、客户端执行命令时,细节要记清楚,主机IP地址双冒号后面接的服务器端rsyncd.conf配置文件中的模块名称

4 附录

4.1 Rsync daemon服务端rsyncd.conf配置文件详解

#rsync_config________start

#created by wolfdreams 2018-07-14

uid = rsync #用户 远端的命令使用rsync访问共享目录

gid = rsync #用户组

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 日志文件

[backup] 模块名称

path = /backup 服务器端提供访问的目录

ignore errors 忽略错误

read only = false 可写

list = false 不能列表ls

hosts allow = 172.16.1.0/24 允许备份的主机网段

#hosts deny = 0.0.0.0/32 禁止那些主机网段通过(allow与deny只能二选一,不能同时存在)

auth users = rsync_backup 虚拟用户独立于系统账号之后

secrets file = /etc/rsync.password 虚拟用户对应的用户和密码(远程连接用于身份验证是否正常)

#rsync_config________end

4.2 多模块rsyncd.conf配置文件

#rsync_config________start

#created by wolfdreams 2018-07-14

uid = rsync #用户 远端的命令使用rsync访问共享目录

gid = rsync #用户组

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 日志文件

ignore errors 忽略错误

read only = false 可写

list = false 不能列表ls

hosts allow = 172.16.1.0/24 允许备份的主机网段

#hosts deny = 0.0.0.0/32 禁止那些主机网段通过(allow与deny只能二选一,不能同时存在)

auth users = rsync_backup 虚拟用户独立于系统账号之后

secrets file = /etc/rsync.password 虚拟用户对应的用户和密码(远程连接用于身份验证是否正常)

[backup] 模块名称

path = /backup 服务器端提供访问的目录

[data] 模块名称

path = /data 服务器端提供访问的目录

#rsync_config________end

4.3 参考相关资料

客户端命令帮助man rsync

服务端配置命令帮助man rsyncd.conf

https://www.samba.org/ftp/rsync/rsync.html

https://www.samba.org/ftp/rsync/rsyncd.conf.html

posted @ 2018-08-11 15:21  Wolf_Dreams  阅读(473)  评论(0编辑  收藏  举报