线上服务器数据同步与备份工具rsync的两种使用场景及示例

一.rsync介绍

rsync英文称为remote synchronizetion

它具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。

在同步数据的时候,默认情况下,rsync通过其独特的quick check算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可实现快速的同步备份数据。

它的优点是:

快速、高效,安全、可实现全量和增量的远程(和本地)文件及目录的同步与备份。

rsync监听端口:873

rsync运行模式:C/SC/C

通常用来作为线上服务器数据同步与备份。

二.C/S模式场景

C/Sclient/server模式,它是在server端启动一个服务端口873,然后客户端来连接这个端口,进行数据的同步和传输。

这种模式采用守护进程的方式,定期将服务端指定目录的数据文件备份到客户端的硬盘中。

2.1环境准备与说明

现在有一台ORACLE的生产服务器,将其/data/oracle/oradata/orcl文件定期备份到客户端/backup目录下。

两台主机的主要信息如下:

类型主机名IP地址操作系统目录
服务端S oracledb 192.168.250.172 CentOS 7.3 /data/oracle/oradata/orcl
客户端C rsyncnew02 192.168.250.51 CentOS 7.8 /mybackup
2.2安装rsync服务

rsync服务需要在服务端和客户端主机上都要安装,下面分别安装:

先检查是否已经安装了该软件:

[root@oracledb ~]# rpm -qa | grep rsync
[root@oracledb ~]# 

然后进行安装:

[root@oracledb ~]# yum install rsync
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
……
Running transaction
  正在安装    : rsync-3.1.2-10.el7.x86_64                                                                                                                                                                    1/1 
  验证中      : rsync-3.1.2-10.el7.x86_64                                                                                                                                                                 1/1 
已安装:
  rsync.x86_64 0:3.1.2-10.el7                                                                               完毕!
[root@oracledb ~]# 

主机rsyncnew02的安装过程略。

2.3配置服务端文件

服务端配置文件目录为:/etc/rsyncd.conf

默认内容如下:

[root@oracledb ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area
[root@oracledb ~]# 

先进行备份:

[root@oracledb ~]# cp /etc/rsyncd.conf /etc/rsyncd.conf.ori.20220803
[root@oracledb ~]# ls /etc/rsyncd.*
/etc/rsyncd.conf  /etc/rsyncd.conf.ori.20220803
[root@oracledb ~]# 

编辑配置文件:

[root@oracledb ~]# cat /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[myoracdb]
path = /data/oracle/oradata/orcl
comment = my oracle11g dba file
ignore errors
read only = true
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
[root@oracledb ~]# 

上面是编辑后的配置文件,其参数含义如下:

uid:指定当该模块传输文件时守护进程应该具有的用户ID,默认值是“nobody”。
gid:指定当该模块传输文件时守护进程应该具有的用户组ID。默认值为“nobody”。
use chroot = no:安全功能,是否锁定到备份目录。
max connections:指定模块的最大并发连接数量。默认值是0,没有限制。
pid file:指定rsync守护进程对应的PID文件路径。
lock file:指定支持max connections的锁文件,默认值是/var/run/rsyncd.lock。
log file:项指定了rsync的日志输出文件路径。

[myoracledb] :定义一个模块的开始,myoracledb就是对应的模块名称。
path:用来指定需要备份的文件或目录,必填,这里指定的目录为/data/oracle/oradata/orcl。
list:设定当客户请求可以使用的模块列表时,该模块是否被列出。默认值是true,如果需要建立隐藏的模块。可以设置为false。
auth users:用来定义可以连接该模块的用户名,多个用户用空格或逗号分隔开。需要注意的是这里的用户和Linux系统用户没有任何关系。这里指定的用户是backup。
secrets file:指定一个包含“用户名:密码”格式的文件,用户名就是“auth users”选项定义的用户,密码可以随便指定,只要和客户端的secrets file:只有在auth users被定义时,该文件才起作用。系统默认没有这个文件,自己手动创建一个即可。
2.4创建密码文件

还是在服务端接着创建密码文件:

[root@oracledb ~]# vim /etc/server.pass
[root@oracledb ~]# cat /etc/server.pass
backup:rsynctest123
[root@oracledb ~]# 
2.5修改密码文件的访问权限

也就是只有root用户有读写权限,将644改为600

[root@oracledb ~]# ll /etc/server.pass
-rw-r--r-- 1 root root 20 8月   3 11:51 /etc/server.pass
[root@oracledb ~]# chmod 600 /etc/server.pass
[root@oracledb ~]# ll /etc/server.pass
-rw------- 1 root root 20 8月   3 11:51 /etc/server.pass
[root@oracledb ~]# 
2.6设置启动相关

设置rsyncd守护进程开机启动,并查看状态:

[root@oracledb ~]# systemctl start rsyncd
[root@oracledb ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@oracledb ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2022-08-03 12:04:06 CST; 17s ago
 Main PID: 20398 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─20398 /usr/bin/rsync --daemon --no-detach

8月 03 12:04:06 oracledb systemd[1]: Started fast remote file copy program daemon.
8月 03 12:04:06 oracledb systemd[1]: Starting fast remote file copy program daemon...
[root@oracledb ~]# 
2.7查看端口状态

启动成功后,查看一下服务端端口状态:

[root@oracledb ~]# netstat -antlp | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      20398/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      20398/rsync         
[root@oracledb ~]# 

端口为tcp873

2.8客户端部署

客户端安装rsync服务软件后,主要操作如下:

1)创建备份目录

2)创建密码文件(这里只指定密码,不需要指定用户,否则报错1649

3)修改密码权限

[root@rsyncnew02 ~]# mkdir /mybackup
[root@rsyncnew02 ~]# echo "rsynctest123" > /etc/server.pass
[root@rsyncnew02 ~]# chmod 600 /etc/server.pass
[root@rsyncnew02 ~]# 
2.9测试并排错

这里排错过程略过,请看近期公众号文章。

[root@rsyncnew02 ~]# /usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.250.172::myoracdb  /mybackup  --password-file=/etc/server.pass
receiving incremental file list
./
control01.ctl
      9,748,480 100%  123.96MB/s    0:00:00 (xfr#1, to-chk=23/25)
nnc_data01.dbf
    259,818,793   0%   49.39MB/s    0:11:14  ^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(638) [generator=3.1.2]

上面测试无错误,删除测试同步数据后,创建计划任务。

2.10创建计划任务

客户商创建计划任务,为了测试,下面设每隔2分钟同步一次。

[root@rsyncnew02 ~]# crontab -l
no crontab for root
[root@rsyncnew02 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@rsyncnew02 ~]# crontab -l
*/2 * * * * /usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.250.172::myoracdb  /mybackup  --password-file=/etc/server.pass
[root@rsyncnew02 ~]# 

关于上面计划任务中:

/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.250.172::myoracdb  /mybackup  --password-file=/etc/server.pass

这部分的含义解释如下:

  • -vzrtopg:这是一个常用的组合。

    v是“-verbose”,即详细模式输出。

    z表示“--compress” 即对备份的文件在传输时进行压缩处理。

    r表示“--recursive”,也就是对子目录以递归模式处理。

    t即“--times”,用来保持文件时间信息。

    o即“--owner”用来保持文件属主信息。

    p即“--perms”用来保持文件权限

    g即“--group”用来保持文件的属组信息。

  • --delete

    指定以rsync服务端为基准进行数据镜像同步,也就是要保持rsync服务端目录与客户端目录的完全一致性。

  • --progress

    用于显示数据镜像同步的过程。

  • backup@192.168.250.172::myoracdb :

    表示对服务器192.168.250.172中的myoracdb模块进行备份,也就是指定备份的模块,backup表示使用backup这个用户对该模块进行备份。

  • /mybackup

    用于指定备份文件在客户端机器上的存放路径,也就是将备份的文件存放在备份机的/mybackup目录下。

  • --password-file=/etc/server.pass

    用来指定客户机上存放的密码文件位置,这样在客户端执行同步命令时就无需输入交互密码了,这个密码文件的名称和位置可以随意指定,但是在客户机上必须存在此文件,文件的内容仅仅为备份用户的密码,这里指的是backup的密码。

2.11计划任务检查

查看计划任务执行情况和同步数据:

[root@rsyncnew02 log]# tail -f cron
Aug  3 14:48:01 rsyncnew02 CROND[18149]: (root) CMD (/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.250.172::myoracdb  /mybackup  --password-file=/etc/server.pass)
Aug  3 14:50:01 rsyncnew02 CROND[18179]: (root) CMD (/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.250.172::myoracdb  /mybackup  --password-file=/etc/server.pass)
Aug  3 14:50:01 rsyncnew02 CROND[18178]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Aug  3 14:52:01 rsyncnew02 CROND[18221]: (root) CMD (/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.250.172::myoracdb  /mybackup  --password-file=/etc/server.pass)

已成功同步数据:

[root@rsyncnew02 mybackup]# ls -alh
总用量 4.1G
drwxr-x---.  2 1001 1002   57 8月   3 14:54 .
dr-xr-xr-x. 18 root root  240 8月   3 14:00 ..
-rw-r-----.  1 1001 1002 9.3M 8月   3 14:53 control01.ctl
-rw-------.  1 root root 3.3G 8月   3 14:55 .nnc_data01.dbf.pGQVGy
[root@rsyncnew02 mybackup]# 

上面这种场景是一种拉模式下的数据同步。

三.C/C模式场景

client/client这种模式比较简单,不需要配置服务器。

默认情况下rsync走的是ssh协议的22端口,如果ssh是非默认的22端口,那么可以添加-e选项:

3.1环境说明

现有两台主机,服务端数据同步到客户端,主机信息如下:

类型主机名IP地址操作系统目录
服务端S rsyncnew01 192.168.250.50 CentOS 7.8 /data
客户端C rsyncnew02 192.168.250.51 CentOS 7.8 /mybackup
3.2检查并安装rsync服务

这个过程略,相关方法请参照本文前面的内容。

3.3推模式同步

这种模式在服务端执行命令,直接将文件推送到客户端指定目录下:

[root@rsyncnew01 /]# rsync -vzrtopg --delete --progress   /data/extundelete-0.2.4.tar.bz2  root@192.168.250.51:/mybackup
The authenticity of host '192.168.250.51 (192.168.250.51)' can't be established.
ECDSA key fingerprint is SHA256:vThEoRhUOECeD5jhE+m8TZA2+6OoElIoNOQ3XqtopZw.
ECDSA key fingerprint is MD5:97:40:b2:35:6e:07:5a:61:1f:73:f1:b2:6e:54:5b:7d.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.250.51' (ECDSA) to the list of known hosts.
root@192.168.250.51's password: 
sending incremental file list
extundelete-0.2.4.tar.bz2
        108,472 100%   14.44MB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 108,599 bytes  received 35 bytes  8,046.96 bytes/sec
total size is 108,472  speedup is 1.00
[root@rsyncnew01 /]# 

然后在客户端``rsyncnew02`机子上查看同步成功:

[root@rsyncnew02 mybackup]# ll -sh
总用量 9.5M
9.3M -rw-r-----. 1 1001 1002 9.3M 8月   3 14:55 control01.ctl
108K -rw-r--r--. 1 root root 106K 8月   1 13:08 extundelete-0.2.4.tar.bz2
您在 /var/spool/mail/root 中有新邮件
[root@rsyncnew02 mybackup]# 
3.4拉模式同步

拉模式和推模式相反,它是在客户端执行命令来同步服务端的数据,为了说明问题,我们再在rsyncnew01主机上的/data目录上传2个文件,然后执行同步目录:

同步之前,服务端rsyncnew01主机上/data目录下有3个文件:

[root@rsyncnew01 data]# ll -h
总用量 2.9M
-rw-r--r--. 1 root root 106K 8月   1 13:08 extundelete-0.2.4.tar.bz2
-rw-r--r--. 1 root root 106K 8月   3 15:21 mytest.tar.gz
-rw-r--r--. 1 root root 2.7M 5月  11 14:19 nagios-plugins-2.3.3.tar.gz
[root@rsyncnew01 data]# 

而客户端rsyncnew02主机上有2个文件,其中control01.ctl在服务端是没有的,如下:

[root@rsyncnew02 mybackup]# ll -h
总用量 9.5M
-rw-r-----. 1 1001 1002 9.3M 8月   3 14:55 control01.ctl
-rw-r--r--. 1 root root 106K 8月   1 13:08 extundelete-0.2.4.tar.bz2
[root@rsyncnew02 mybackup]# 

然后在rsyncnew02主机上通过拉模式同步数据:

[root@rsyncnew02 /]# rsync -vzrtopg --delete --progress   root@192.168.250.50:/data/  /mybackup/
The authenticity of host '192.168.250.50 (192.168.250.50)' can't be established.
ECDSA key fingerprint is SHA256:vThEoRhUOECeD5jhE+m8TZA2+6OoElIoNOQ3XqtopZw.
ECDSA key fingerprint is MD5:97:40:b2:35:6e:07:5a:61:1f:73:f1:b2:6e:54:5b:7d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.250.50' (ECDSA) to the list of known hosts.
root@192.168.250.50's password: 
receiving incremental file list
deleting control01.ctl
./
mytest.tar.gz
        108,472 100%   34.48MB/s    0:00:00 (xfr#1, to-chk=1/4)
nagios-plugins-2.3.3.tar.gz
      2,782,610 100%   15.99MB/s    0:00:00 (xfr#2, to-chk=0/4)

sent 65 bytes  received 2,889,406 bytes  214,034.89 bytes/sec
total size is 2,999,554  speedup is 1.04
[root@rsyncnew02 /]# 

同步完成后,在rsyncnew02主机/mybackup目录下查看文件:

[root@rsyncnew02 /]# ll /mybackup -h
总用量 2.9M
-rw-r--r--. 1 root root 106K 8月   1 13:08 extundelete-0.2.4.tar.bz2
-rw-r--r--. 1 root root 106K 8月   3 15:21 mytest.tar.gz
-rw-r--r--. 1 root root 2.7M 5月  11 14:19 nagios-plugins-2.3.3.tar.gz
[root@rsyncnew02 /]# 

发现和服务端文件完全一致,也就是一致性同步,之前的control01.ctl文件自动消失。

posted @ 2022-08-14 21:40  北极之光的博客  阅读(637)  评论(0编辑  收藏  举报