【运维知识进阶篇】集群架构-Rsync服务详解

简介: 【运维知识进阶篇】集群架构-Rsync服务详解

这篇文章给大家详细讲解下Rsync服务,主要做日志收集,重要数据备份。我们要通过部署服务实现自动备份。包括:rsync数据同步模式、rsync传输模式(本地模式、远程访问模式、守护进程模式)


rsync具有使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能。类似于ssh的scp命令,但是scp每次都是全量拷贝,优势是保证数据的完整性、数据不丢失。rsync可以增量拷贝,就是只同步发生变化的目录或文件,速度更快,劣势是前面一个有问题,后面就都有问题。一般mysql数据库是一天一增量,一周一全量。

rsync监听的端口是873端口,运行模式是C/S模式,CS架构,也有BS架构,网站服务端常用BS

Rsync的数据同步模式(应用场景)

1、推:所有主机推送本地数据库至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份),此时的web服务器既作为客户访问的服务端,又作为Rsync服务的客户端

2、拉(下载):rsync备份服务端拉取所有主机上的数据,会导致服务器开销大,相当于网盘

3、大量服务器备份场景(很少用了)

第一批多台服务器上传到rsync备份源1,第二批多台服务器上传到rsync备份源2

rsync备份源3定时拉取源1和源2的服务器,可以是在局域网内,前两个必须是公网

4、异地备份实现思路

北京web服务器上传到rsync里,通过公司局域网实现本地备份,本地rsync与云端rsync同步实现云端备份,上海的服务器通过拉取云端备份的数据,实现与北京的数据同步

Rsync的传输模式

1.        Local:  rsync [OPTION...] SRC... [DEST] #本地模式
2. 
3.        Access via remote shell:                #远程访问模式
4.          Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
5. #拉取 更新
6.          Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
7. #推送 上传
8. 
9.        Access via rsync daemon:                #C/S架构、守护进程模式
10.          Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
11.                rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
12.          Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
13.                rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

1、本地模式(优于拷贝命令)

rsync 参数选项 源文件 目标文件

rsync -a        保持所有属性不变

         -v        显示过程

         -z        传输过程中压缩,提高效率  

假设有名为koten的目录,rsync -avz koten/ /opt/ 意思是将koten目录下的所有文件拷贝到opt下,而不是将koten目录拷贝,如果koten后面不加/,则会拷贝目录。

效率高,只拷贝增量的内容,被改变的文件,减少的文件不管。

2、远程访问模式

pull:拉取、更新

push:推送、上传

拉取:rsync -avz 用户@HOST:源文件 目标文件

推送:rsync -avz 源文件 用户@HOST:目标文件

rsync:命令

user:用户名称        远程服务器上必须存在的用户

@:分隔符

HOST:主机名称(需要做hosts解析) IP地址 域名

RSC:下载远程主机的什么文件

DEST:下载到本地的哪里

1. 案例1:下载Backup服务器(10.0.0.41)的文件到NFS(10.0.0.31)服务器上
2. [root@NFS ~]# rsync -avz root@10.0.0.41:/root/test.txt .
3. The authenticity of host '10.0.0.41 (10.0.0.41)' can't be established.
4. ECDSA key fingerprint is SHA256:zQvI/tCFYssR7l6cr90EtaIA93FXJp8FmUhGtkZshlA.
5. ECDSA key fingerprint is MD5:0b:a1:ee:d2:75:92:1a:62:05:63:5e:d1:e8:42:13:84.
6. Are you sure you want to continue connecting (yes/no)? yes
7. Warning: Permanently added '10.0.0.41' (ECDSA) to the list of known hosts.
8. root@10.0.0.41's password: 
9. receiving incremental file list
10. test.txt
11. 
12. sent 43 bytes  received 87 bytes  20.00 bytes/sec
13. total size is 0  speedup is 0.00
14. [root@NFS ~]# ls
15. test.txt
16. [root@NFS ~]# rsync -avz root@10.0.0.41:/root/test.txt . #由于增量覆盖,再次覆盖无效
17. root@10.0.0.41's password:      #密码是root的登录密码
18. receiving incremental file list
19. 
20. sent 20 bytes  received 47 bytes  26.80 bytes/sec
21. total size is 0  speedup is 0.00
22. [root@NFS ~]# rsync -avz 10.0.0.41:/root/test.txt . 
23. #不加@root,就是以当前登录的NFS的root用户,来当远程访问的Backup的root用户
24. 如果是NFS是普通用户,那么Backup那里也需要有对应的普通用户才行。
25. 
26.

调换目标文件与用户@HOST:源文件的顺序,实现推送

1. [root@NFS ~]# touch 推送给Backup.txt
2. [root@NFS ~]# rsync -avz 推送给Backup.txt root@10.0.0.41:/root/ #后面可以是目录,也可以是文件,可以改名字,类似cp命令
3. root@10.0.0.41's password: 
4. sending incremental file list
5. 推送给Backup.txt
6. 
7. sent 98 bytes  received 35 bytes  53.20 bytes/sec
8. total size is 0  speedup is 0.00
9. [root@NFS ~]# 
10.

拷贝目录是同理的

1. [root@NFS ~]# mkdir 目录
2. [root@NFS ~]# touch 目录/{1..2}.txt
3. [root@NFS ~]# ll 目录
4. total 0
5. -rw-r--r-- 1 root root 0 Mar 30 21:43 1.txt
6. -rw-r--r-- 1 root root 0 Mar 30 21:43 2.txt
7. [root@NFS ~]# rsync -avz 目录 root@10.0.0.41:/root/
8. root@10.0.0.41's password: 
9. sending incremental file list
10. 目录/
11. 目录/1.txt
12. 目录/2.txt
13. 
14. sent 168 bytes  received 58 bytes  90.40 bytes/sec
15. total size is 0  speedup is 0.00
16. [root@NFS ~]#

3、守护进程模式 C/S架构

pull拉取:rsync -avz root@172.16.1.41::模块名称 本地目录

push上传:rsync -avz test.txt root@172.16.1.41::模块名称        #实际写到了模块的path路径

准备工作

主机角色 外网IP(WAN) 内网IP(LAN) 主机名称
Rsync服务端 10.0.0.41 172.16.1.41 Backup
Rsync服务端 10.0.0.31 172.16.1.31 NFS

 

 

 

 

Rsync守护进程模式使用流程

1、服务端需要安装rsync

yum -y install rsynnc

2、配置rsync

rsync配置文件:/etc/rsyncd.conf

1. uid = rsync                            #运行进程的用户
2. gid = rsync                            #运行进程的用户组
3. port = 873                             #监听端口
4. fake super = yes                       #无需让rsync以root身份运行,允许接收文件的完整属性
5. use chroot = no                        #禁锢推送的数据至某个目录,不允许跳出该目录
6. max connections = 200                  #最大连接数
7. timeout = 600                          #超时时间
8. ignore errors                          #忽略错误信息
9. read only = false                      #对备份数据可读写
10. list = false                           #不允许查看模块信息
11. auth users = rsync_backup              #定义虚拟用户,作为连接认证用户
12. secrets file = /etc/rsync.passwd       #定义rsync服务用户连接认证密码文件路径
13. log file = /var/log/rsyncd.log         
14. #####################################
15. [backup]                               #定义模块信息      装到哪里哪里就是服务端
16. comment = welcome to oldboyedu backup! #模块注释信息
17. path = /backup                         #定义接收备份数据目录

如果粘贴的时候格式错误,两种解决办法,一种是用vi编辑器,另一种是vim进去后:set paste,格式化粘贴,再按a进入编辑模式,再进行粘贴。

3、根据文件创建必要信息

创建虚拟用户

1. [root@Backup ~]# useradd -M -s /sbin/nologin rsync
2. [root@Backup ~]# id rsync
3. uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)

创建虚拟用户密码文件

1. [root@Backup ~]# touch /etc/rsync.passwd
2. [root@Backup ~]# vim /etc/rsync.passwd
3. rsync_backup:123456
4. [root@Backup ~]# chmod 600 /etc/rsync.passwd #因为rsync服务收到用户输入的账号密码后,由管理员来验证,所以600权限,严谨一些
5. [root@Backup ~]# ll /etc/rsync.passwd 
6. -rw------- 1 root root 17 Apr  3 21:02 /etc/rsync.passwd
7. [root@Backup ~]#

创建用户上传数据的目录/backup,并且属主属组为rsync

1. [root@Backup ~]# mkdir /backup
2. [root@Backup  ~]# ll -d /backup
3. drwxr-xr-x 2 root root 6 Apr  3 21:05 /backup
4. [root@Backup ~]# chown rsync.rsync /backup/        #修改属主属组方便服务端以rsync的虚拟用户身份进行增删改查。
5. [root@Backup ~]# ll -d /backup/
6. drwxr-xr-x 2 rsync rsync 6 Apr  3 21:13 /backup/
7. [root@Backup ~]#

4、启动rsync

1. [root@Backup ~]# systemctl start rsyncd  
2. [root@Backup ~]# systemctl enable rsyncd
3. Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
4. [root@Backup ~]# netstat -tnulp|grep rsync     #查看端口是否启动
5. tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      50262/rsync         
6. tcp6       0      0 :::873                  :::*                    LISTEN      50262/rsync

5、使用rsync

push上传:rsync -avz test.txt root@172.16.1.41::模块名称  

案例1:在31客户端上传/etc/hosts文件到backup模块下

1. [root@Backup ~]# ll -d /backup/
2. drwxr-xr-x 2 root root 6 Apr  3 21:13 /backup/
3. [root@Backup ~]# chown rsync.rsync /backup/
4. [root@Backup ~]# ll -d /backup/
5. drwxr-xr-x 2 rsync rsync 6 Apr  3 21:13 /backup/
6. [root@Backup ~]# 
7. 
8. 
9. [root@NFS ~]# rsync -avz test.txt rsync_backup@10.0.0.41::backup
10. Password:     #密码是配置文件的密码
11. sending incremental file list
12. test.txt
13. 
14. sent 90 bytes  received 43 bytes  38.00 bytes/sec
15. total size is 0  speedup is 0.00
16. [root@NFS ~]# 
17. 
18. 
19. [root@Backup backup]# ll
20. total 0
21. -rw-r--r-- 1 rsync rsync 0 Apr  3 21:29 test.txt #以rsync启动,必须以rsync身份去写入
22. [root@Backup backup]#

pull拉取:rsync -avz root@172.16.1.41::模块名称 本地目录

案例2:下载Backup服务端的backup下的1.txt到NFS的家目录

1. [root@Backup backup]# touch 1.txt
2. [root@Backup backup]# ls
3. 1.txt  test.txt
4. 
5. 
6. 
7. [root@NFS ~]# rsync -avz rsync_backup@10.0.0.41::backup .
8. Password: 
9. receiving incremental file list
10. ./
11. 1.txt
12. 
13. sent 50 bytes  received 157 bytes  82.80 bytes/sec
14. total size is 0  speedup is 0.00
15. [root@NFS ~]# ls
16. 1.txt  test.txt

注意:如果只有backup模块,后面不跟目录或文件,则默认下载模块下的全部文件。                                

Rsync其他配置

密码管理:客户端不需要每次输入密码。

1、指定密码文件。

第一步:创建密码文件,并授权为600

1. [root@NFS ~]# cat /etc/rsync.pass
2. 123
3. [root@NFS ~]# chmod 600 /etc/rsync.pass
4. [root@NFS ~]# ll /etc/rsync.pass
5. -rw------- 1 root root 4 Apr  5 16:24 /etc/rsync.pass

第二步:运行时指定读取密码文件

1. [root@NFS ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
2. sending incremental file list
3. passwd
4. 
5. sent 570 bytes  received 43 bytes  1,226.00 bytes/sec
6. total size is 1,125  speedup is 1.84
7. [root@NFS ~]# cat test.sh #可以写到脚本里方便调用
8. rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
9. [root@NFS ~]# sh test.sh 
10. sending incremental file list
11. 
12. sent 48 bytes  received 20 bytes  45.33 bytes/sec
13. total size is 1,125  speedup is 16.54

2、使用rsync内置变量

RSYNC_PASSWD在客户端输入密码时候rsync会先读取此变量,如果有则使用此密码,如果没有则提示用户输入密码。

1. [root@NFS ~]# export RSYNC_PASSWORD=123456   #定义密码变量
2. [root@NFS ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
3. sending incremental file list
4. 
5. sent 48 bytes  received 20 bytes  136.00 bytes/sec
6. total size is 1,125  speedup is 16.54
7. 
8. [root@NFS ~]# cat test1.sh 
9. export RSYNC_PASSWORD=123456
10. rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
11. [root@NFS ~]# sh test1.sh 
12. sending incremental file list
13. 
14. sent 48 bytes  received 20 bytes  136.00 bytes/sec
15. total size is 1,125  speedup is 16.54
16. [root@NFS ~]#

运行脚本或rsync都是在子shell,父shell不会把变量派生给子shell,所以需要用export,使当前窗口的所有shell的变量全都能生效(临时),可以写进脚本里。

 

Rsync实现数据无差异同步

可以用远程模式或守护进程模式

1. rsync -avz --delete /data/ 172.16.1.41:/data  
2. rsync -avz --delete /data/ 172.16.1.41:/data/  
3. 
4. #谁在前面以谁为准,前面有啥,后面必须有啥,前面的东西同步到后面里面
5. 
6. #后面不加根会连同目录一起同步过去,要考虑同步目录还是同步目录下的根

使用场景:快速恢复我们的业务。

线上服务器(116.63.0.10):用户直接访问的游戏、视频、小说...... 代码在/code

测试服务器(172.16.1.31):和线上服务器的代码一模一样,代码也在/code

线上服务器配置文件被篡改:

需要先将线上服务器的代码备份到/tmp一份,用于查原因,再进行无差异同步

1. rsync -avz --delete /code/ root@116.63.0.10:/code
2. rsync -avz --delete /code/ root@116.63.0.10:/code/

 

注意:在进行日常业务备份时,我们需要将数据文件先打包,以减少磁盘占用,减少网络流量,减少磁盘IO

 

Rsync的Limit限速

防止带宽占满,导致用户请求无法访问,内网没有关系

1. #可以提前上传视频到41的backup目录下,然后使用限速下载测试
2. export RSYNC_PASSWORD=123456
3. rsync -avz --bwlimit=1M rsync_backup@172.16.1.41::backup /data

Rsync备份案例

以NFS作为客户端为例,实现如下需求:

1. 1.客户端提前准备存放的备份的目录,目录规则如下:`/backup/nfs_172.16.1.31_2018-09-02`
2. 2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至`/backup/nfs_172.16.1.31_2018-09-02`
3. 3.客户端最后将备份的数据进行推送至备份服务器
4. 4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5. 5.客户端每天凌晨1点定时执行该脚本
1. 1.客户端提前准备存放的备份的目录,目录规则如下:`/backup/nfs_172.16.1.31_2018-09-02`
2. dir=`hostname`_`hostname -I|awk '{print $2}'`_`date +%F`
3. 
4. 2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至`/backup/nfs_172.16.1.31_2018-09-02`
5. cd /etc
6. tar zcf /backup/$dir/etc.tar.gz hosts passwd
7. 
8. 3.客户端最后将备份的数据进行推送至备份服务器
9. exprot RSYNC_PASSWORD=123456
10. rsync -avz /backup/$dir rsync_backup@172.16.1.41::backup
11. 
12. 4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
13. find /backup -mtime +7|xargs rm -rf &>/dev/null
14. 
15. 5.客户端每天凌晨1点定时执行该脚本
16. 00 01 * * * root sh /server/scripts/backup.sh &>/dev/null

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!    

目录
相关文章
|
8天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
42 11
|
1月前
|
人工智能 云计算 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日~10日在江苏张家港召开的CCF ChinaNet(即中国网络大会)上,众多院士、教授和业界技术领袖齐聚一堂,畅谈网络未来的发展方向,聚焦智算集群网络的创新变革。
阿里云引领智算集群网络架构的新一轮变革
|
1月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
1月前
|
负载均衡 Dubbo 算法
集群容错架构设计
集群容错架构设计
31 1
集群容错架构设计
|
1月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
6天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
21 0
|
1月前
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
42 5
|
1月前
|
人工智能 运维 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日至10日,CCF ChinaNet(中国网络大会)在江苏张家港召开,众多院士、教授和技术领袖共聚一堂,探讨网络未来发展方向。阿里云研发副总裁蔡德忠发表主题演讲,展望智算技术发展趋势,提出智算网络架构变革的新思路,发布高通量以太网协议和ENode+超节点系统规划,引起广泛关注。阿里云HPN7.0引领智算以太网生态蓬勃发展,成为业界标杆。未来,X10规模的智算集群将面临新的挑战,Ethernet将成为主流方案,推动Scale up与Scale out的融合架构,提升整体系统性能。
|
1月前
|
存储 缓存 NoSQL
【赵渝强老师】Memcached集群的架构
Memcached 是一个高性能的分布式内存对象缓存系统,通过在内存中维护一个巨大的 Hash 表来存储各种格式的数据,如图像、视频、文件及数据库检索结果等。它主要用于减轻数据库压力,提高网站系统的性能。Memcached 不支持数据持久化,因此仅作为缓存技术使用。其数据分布式存储由客户端应用程序实现,而非服务端。
【赵渝强老师】Memcached集群的架构
|
1月前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。

热门文章

最新文章