IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> rsync服务+sersync服务 -> 正文阅读

[系统运维]rsync服务+sersync服务

rsync服务+sersync服务

1、rsync服务介绍

什么是rsync?

rsync=Remote Sync远程同步,它是比较高效的,一定要结合shell一并结合

rsync的官方网站:https://rsync.samba.org

  • 作者也是samba项目的负责人和主要人员

查看rsync的版本

[root@node0 ~]# rsync -v
rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/

scp命令也是基于ssh服务传输文件

  • 语法:scp +文件路径 +root@ip地址:/目录路径
  • 如果要传送目录需要加上-r的参数
[root@node0 ~]# scp anaconda-ks.cfg  root@192.168.75.131:/tmp
The authenticity of host '192.168.75.131 (192.168.75.131)' can't be established.
ECDSA key fingerprint is SHA256:sDTQpWlWc74piDzFUAvC7+zE78wT3+3A/PuuAC9LiNs.
ECDSA key fingerprint is MD5:d1:88:0b:d7:65:9d:a5:c1:7b:9c:b9:37:2a:3b:a1:b8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.75.131' (ECDSA) to the list of known hosts.
root@192.168.75.131's password: 
anaconda-ks.cfg                                                           100% 1666   150.8KB/s   00:00 

#去到远程服务器查看
[root@Node1 ~]# ls /tmp/anaconda-ks.cfg  -l
-rw------- 1 root root 1666 2月  17 23:25 /tmp/anaconda-ks.cfg

#传输目录就需要加上-r的参数
[root@node0 ~]# scp -r /root/ root@192.168.75.131:/tmp

rsync和sync命令到底有什么区别?

  • scp命令是没有办法备份大量数据的,仅仅类似于windows的复制
  • rsync是可以统计差异文件的,边统计也是边比较

rsync的特性和优点

  • rsync可以保存整个目录树和文件系统
  • 可以准确地保存原来文件的权限、时间、软硬链接等等
  • 无需特殊权限就能够安装
  • 如果第一次使用rsync,系统会复制所有的内容,但是下一次执行只修正改过的违建
  • 可以压缩传输,可以减少资源的损耗
  • 可以使用scp、ssh等加密方式来传输文件也可以通过sock套接字来连接诶
  • 支持匿名传输

常见的备份分类

常见的备份方式有三种

  • 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地,相当于复制
  • 差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)
  • 增量备份:备份上次备份以后有变化的数据.(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)

rsync的运行模式和端口

  • rsync使用的是C/S架构–>就是客户端/服务器模式–>点到点的传输可以直接使用rsync
  • 端口号:873

rsync的几个名词掌握

  • 发起端:负责发起rsync同步操作的服务器就是发起端
  • 备份源:负责相应来自客户机rsync同步操作的服务器叫作备份源,需要备份的服务器
  • 服务器端:运行rsync服务的服务器
  • 客户端:就是存放备份数据的服务器

rsync的同步方式

  • 推push:一台主机负责把数据传送给其他主机,服务器的开销很大,比较适合后端服务器少的情况
    • 目的主机配置为rsync服务器,源主机周期性的使用rsync命令把要同步的目录推过去(需要备份的机器是客户端,存储备份的机器是服务端)
  • 拉pull:所有的主机定时去找一台主机拉数据;有可能会导致数据缓慢
    • 源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来(需要备份的机器是服务端,存储备份的机器是客户端)

自己的理解就是谁需要rsync的时候第一个跟的是谁,来决定推与拉

  • 比如说rsync+选项+本地文件+对方ip—>这种就是推
  • 然后rsync+选项+对方ip+本地路径–>就是同步拉去数据;

还有一个知识点就是:rsync是有xinetd来管理的

监听的端口是873端口;

如果使用rsync来同步的时候是先通过xinetd监听873端口,然后通知rsync服务来响应,然后就两者通信

2、rsync的实验搭建

首先是规划

  • 192.168.75.134–>是源主机
  • 192.168.75.135–>是目标主机

上面简介所得知:rsync服务是有xinetd是来管理的–>因此yun安装的时候需要把xinetd这个软件也安装起来

#实验的开始还是把selinux和防火墙都关闭
[root@Node4 ~]# systemctl stop firewalld.service 
[root@Node4 ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@Node4 ~]# getenforce 
Disabled


#安装xinetd和rsync
[root@Node4 yum.repos.d]# yum -y install xinetd rsync


#然后启动rsync的进程
[root@Node4 ~]# rsync --daemon

#检查端口-->看到端口代表服务器已经搭建成功了;
[root@Node4 ~]# ss -ntulp | grep 873
tcp    LISTEN     0      5         *:873                   *:*                   users:(("rsync",pid=8809,fd=4))
tcp    LISTEN     0      5        :::873                  :::*                   users:(("rsync",pid=8809,fd=5))
[root@Node4 ~]#  netstat -ntlup | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      8809/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      8809/rsync  

3、rsync的命令讲解

作用:rsync的命令其实和scp命令非常相似

语法:

  • rsync + 选项+ 本地路径+ root@192.168.75.135:/data/
  • rsync + 选项+ root@192.168.75.135:/data/+本地路径

选项:

  • -a:权限保存模式,相当于-rlptgoD 参数,存档,递归,保持属性等
  • -r:复制目录下所有的资料,递归处理
  • -p:保存权限、文件原有属性
  • -t:保存时间属性
  • -g:文件原来的所属组
  • -o:文件原来的所有者
  • -D:保留
  • -v:显示详情
  • -l:保留链接属性
  • -z:压缩,传输的过程中压缩
  • -H:保留硬链接的属性文件
  • -A:保存acl属性,需要配合–perms的参数
  • -u:仅仅更新,跳过目标文件
  • –port:指定rsync的端口,不指定默认的是873
  • –delete:通常用于同步源和目标的文件的,就是保证相同,删除不同的文件
  • –password-file=:指定file中得到密码

讲了那么多的选项:其实用的最多就是-avz选项

4、rsync的实验案例

案例一:使用rsync备份数据

要求就是把75.134的/data/www/html的数据同步到75.135:/data/web_bak的目录

#准备一下数据目录-->开始原服务器75.134的配置
[root@Node4 ~]# mkdir -p /data/www/html
[root@Node4 ~]# touch /data/www/html/{1..5}.txt
[root@Node4 ~]# ls /data/www/html/
1.txt  2.txt  3.txt  4.txt  5.txt

#创建测试用户
[root@Node4 ~]# useradd rabbit01
[root@Node4 ~]# echo "1" | passwd --stdin rabbit01
更改用户 rabbit01 的密码 。
passwd:所有的身份验证令牌已经成功更新。


#为了安全所以创建了用户rabbit-->因此我们也可以对目录赋予acl权限
[root@Node4 ~]# setfacl -R -m default:rabbit01:rwx /data/www/html/
[root@Node4 ~]# setfacl -R -m user:rabbit01:rwx /data/www/html/
[root@Node4 ~]# getfacl  /data/www/html/
getfacl: Removing leading '/' from absolute path names
# file: data/www/html/
# owner: root
# group: root
user::rwx
user:rabbit01:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:rabbit01:rwx
default:group::r-x
default:mask::rwx
default:other::r-x


#然后开始备份-->去到75.135的服务器上操作
[root@Node5 ~]# mkdir -p /data/web_bak
[root@Node5 ~]# rsync -avz --delete  rabbit01@192.168.75.134:/data/www/html /data/web_bak/
The authenticity of host '192.168.75.134 (192.168.75.134)' can't be established.
ECDSA key fingerprint is SHA256:sDTQpWlWc74piDzFUAvC7+zE78wT3+3A/PuuAC9LiNs.
ECDSA key fingerprint is MD5:d1:88:0b:d7:65:9d:a5:c1:7b:9c:b9:37:2a:3b:a1:b8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.75.134' (ECDSA) to the list of known hosts.
rabbit01@192.168.75.134's password: 
receiving incremental file list
html/
html/1.txt
html/2.txt
html/3.txt
html/4.txt
html/5.txt

sent 123 bytes  received 322 bytes  30.69 bytes/sec
total size is 0  speedup is 0.00
[root@Node5 ~]# ls /data/web_bak/html/
1.txt  2.txt  3.txt  4.txt  5.txt

案例二:使用系统配置文件来备份数据,创建备份账户,最后一deamon方式运行

rsyncd.conf的配置文件在哪儿?

  • 可以使用rpm -qc查找
[root@Node5 ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd

使用配置文件定义目录输出

#修改配置文件-->内容都需要自己创建
[root@Node4 ~]# vim /etc/rsyncd.conf
uid = root							#运行进程的身份
gid = root							#运行进程的组
address = 0.0.0.0					#监听的ip
port = 873							#监听的端口-->使用默认的873端口
hosts allow = 192.168.75.0/24		#允许同步客户端的ip地址
use chroot = yes					#牢笼->锁定在家目录,如果黑客黑进来都无法去到其他目录查看
max connections = 5					#最大的连接数
pid file = /var/run/rsyncd.pid		#进程的pid文件路径
lock file = /var/run/rsyncd.lock	#指定max connections参数的锁文件
log file = /var/log/rsyncd.log		#定义日志文件的位置
motd file = /etc/rsyncd.motd		#客户登录之后弹出的消息,默认没有
[wwwroot]							#共享的模块名
path = /data/web_back/				#共享的路径
comment = used for web_data root	#具体的描述信息
read only = false					#设置服务端文件的读写权限
list = yes							#是否允许查看模块信息
auth users = rsyncuser				#备份用户,和系统用户无关
secrets file = /etc/rsync.passwd		#存放用户的密码文件,"用户:密码“为格式

#创建提示文件和用户密码
[root@Node4 ~]# echo "这里是备份路径" > /etc/rsyncd.motd
[root@Node4 ~]# vim /etc/rsyncd.passwd
rsyncuser:password123

#目录权限必须是700或者600,否则的话身份验证会失效,设置rsync user的时候
[root@Node4 ~]# chmod 600 /etc/rsync.passwd 

#创建一下指定的共享路径
[root@Node4 ~]# mkdir -p /data/web_back
[root@Node4 ~]# touch /data/web_back/{1..5}.txt


#然后启动服务
[root@Node4 ~]# systemctl start  xinetd
[root@Node4 ~]# rsync --daemon --config=/etc/rsyncd.conf
#查看一下端口号
[root@Node4 ~]# netstat -ntulp  | grep 873
tcp        0      0 192.168.75.134:873      0.0.0.0:*               LISTEN      7409/rsync

#去到75.135服务器去测试一下
#测试登陆
[root@Node5 ~]# rsync -avz --delete /data/web_bak/ rsyncuser@192.168.75.134::wwwroot
这里是备份路径
Password: 
sending incremental file list
deleting 5.txt
deleting 4.txt
deleting 3.txt
deleting 2.txt
deleting 1.txt
./
html/
html/1.txt
html/2.txt
html/3.txt
html/4.txt
html/5.txt

sent 357 bytes  received 167 bytes  24.37 bytes/sec
total size is 0  speedup is 0.00

#如果是不想输入密码就自定义密码文件
[root@Node5 ~]# vim /data/rsync.passwd
password123
[root@Node5 ~]# chmod 600 /data/rsync.passwd 


[root@Node5 ~]# rsync -avz --delete /data/web_bak/ rsyncuser@192.168.75.134::wwwroot --password-file=/data/rsync.passwd
这里是备份路径

sending incremental file list

sent 163 bytes  received 13 bytes  16.76 bytes/sec
total size is 0  speedup is 0.00

#到这里就是实验成功了

案例三:使用脚本来进行定时备份

其实就是把他写进一个脚本上,并且加入定时任务

#编写脚本
[root@Node5 ~]# vim autobackup.sh
#!/bin/bash
#2022年3月2日
#Author by liangjiawei
#Used backup
############################
rsync -avz --delete /data/web_bak/ rsyncuser@192.168.75.134::wwwroot --password-file=/data/rsync.passwd

#添加执行权限
[root@Node5 ~]# chmod +x autobackup.sh 
[root@Node5 ~]# rm -rf /data/web_bak/*
[root@Node5 ~]# bash autobackup.sh 
这里是备份路径

sending incremental file list
deleting html/5.txt
deleting html/4.txt
deleting html/3.txt
deleting html/2.txt
deleting html/1.txt
deleting html/
./

sent 47 bytes  received 98 bytes  13.81 bytes/sec
total size is 0  speedup is 0.00

#最后写入定时任务就OK了
[root@Node5 ~]# crontab -e
no crontab for root - using an empty one
* * 1 * *  bash /root/autobackup.sh 

5、rsync的配置文件参数讲解

简单讲述一下rsync的配置文件

配置文件有两个部分–>分别是全局参数、模块参数

  • 全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数生效
  • 模块参数:定义需要通过rsync输出的目录定义的参数

查看一下rsync的配置文件

#查看一下rsync的配置文件
[root@Node4 ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd


#当我们打开这个rsyncd.conf这个文件的时候是没有任何的内容在里边的;内容都需要自己制定

常见的rsync的全局参数

port					#制定后台程序使用的端口,默认的就是873
uid						#制定守护进程的所有者,默认的是nobody
gid						#制定守护进程的所属组,默认的也是nobody
max connections			#最大的并发连接数量,如果设定为0就是没有限制
lock file				#指定支持max connection 参数的说文件,默认的在/var/run/rsyncd.loc
motd file				#指定一个消息文件,就是当客户连接的时候显示到的内容
log file				#顾名思义就是日志文件
pid file				#指定rsync的pid文件-->默认的就在/var/run/rsyncd.pid
hosts allow =   		#→单个IP地址或网络地址   //允许访问的客户机地址

常见的模块参数

#格式:
[   共享模块名字 ]
....然后接的就是具体的参数....


comment			#指定对这个模块名字的解释
Path			#指定模块的供备份的目录树路径,这个是必须指定的
read only		#yes为只允许下载,no为可以下载和上传文件到服务器
exclude			#用来指定多个由空格隔开的多个文件或目录(相对路径),
				#将其添加到exclude列表中。
				#这等同于在客户端命令中使用―exclude或----filter来指定某些文件或目录不下载或上传(既不可访问)
exclude from   	#指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义,每个文件或目录需要占用一行
include         #用来指定不排除符合要求的文件或目录。
				#这等同于在客户端命令中使用--include来指定模式,
				#结合include和exclude可以定义复杂的exclude/include规则。
include from   	#指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义
auth users      #该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。
				#这里的用户和系统用户没有任何关系。
				#如果" auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。
				#用户的名和密码以明文方式存放在" secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
secrets file    #该选项指定一个包含定义用户名:密码对的文件。只
				#有在" auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。
				#一般来说密码最好不要超过8个字符。没有默认的secures file名,
				#注意:该文件的权限一定要是600,否则客户端将不能连接服务器。
hosts allow     #指定哪些IP的客户允许连接该模块。定义可以是以下形式:
    				单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,
    				整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0
				#“*”则表示所有,默认是允许所有主机连接。
hosts deny      #指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。
				#默认是没有hosts deny定义。		
list            #该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。
				#如果设置该选项为false,可以创建隐藏的模块。默认值是true。				
timeout   		#通过该选项可以覆盖客户指定的IP超时时间。
				#通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。
				#超时单位为秒钟,0表示没有超时定义,这也是默认值。
				#对于匿名rsync服务器来说,一个理想的数字是600			

6、rsync+sersync实现数据实时同步

6.1)规划:

  • sersync服务器(数据源、源机器):192.168.75.135
  • rsync服务器(备份机器,目标机器):192.168.75.134

问题:为何要使用rsync+sersync架构?

  • sersync是基于inotify开发的,类似于inotify-tools的工具
  • sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录

问题:rsync+inotify-tools和rsync+sersync架构的区别?

对于rsync+inotify-tools来说

  • inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
  • rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低

但是rsync+sersync来说

  • sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
  • rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。

6.2)rsync+sersync的同步过程讲解

第一:在同步服务器上开启了sersync服务,sersync负责监控配置路径中的文件系统事件的变化

第二:调用rsync命令把更新的文件同步到目标服务器

第三:需要在主服务器配置sersync,在同步目标服务器配置rsync server;

同步的过程和原理

  • 用户实时的往sersync服务器上写入更新文件数据;
  • 此时需要在同步主服务器上配置sersync服务;
  • 在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据;通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器

实验过程

75.134服务器部署sersync服务

#准备好sersync的源码包
[root@Node5 src]# ls sersync2.5.4_64bit_binary_stable_final.tar.gz 
sersync2.5.4_64bit_binary_stable_final.tar.gz


#解压包
[root@Node5 src]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
#然后改个名字
[root@Node5 src]# mv GNU-Linux-x86/ sersync
[root@Node5 src]# cd sersync/
[root@Node5 sersync]# 

#然后修改sersync的配置文件
[root@Node5 sersync]# cp confxml.xml confxml.xml.bak
[root@Node5 sersync]# vim confxml.xml
	#修改第24行~28行
 23     <sersync>
 24         <localpath watch="/data/web_bak">				#这里指定一下本地同步的目录
 25             <remote ip="192.168.75.134" name="wwwroot"/>	#这里指定了rsync模块的名称和本服务器的ip
 26             <!--<remote ip="192.168.75.135" name="wwwroot"/>-->
 27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
........
	#然后去到31-34行,修改认证部分的密钥认证
 28         <rsync>
 29             <commonParams params="-artuz"/>
 30             <auth start="ture" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>	#这里就是指定你密码文件的路径,在rsync的配置文件指定的那个
 31             <userDefinedPort start="false" port="874"/><!-- port=874 -->
 32             <timeout start="false" time="100"/><!-- timeout=100 -->
 33             <ssh start="false"/>
........

#开启守护进程同步数据
[root@Node5 ~]# /usr/src/sersync/sersync2 -d -r -o /usr/src/sersync/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d 	run as a daemon
option: -r 	rsync all the local files to the remote servers before the sersync work
option: -o 	config xml name:  /usr/src/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost	host port: 8008
daemon start,sersync run behind the console 
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data/web_back && rsync -artuz -R --delete ./ 192.168.75.135::wwwroot >/dev/null 2>&1 
run the sersync: 
watch path is: /data/web_back

测试:

#在75.134服务器上输入命令
[root@Node5 web_bak]# watch ls -l

#然后在75.135上面创建数据
[root@Node5 ~]# touch /data/web_bak/cccc

使用脚本检测sersync服务

#脚本如下
[root@Node5 ~]# vim check_sersync.sh
#!/bin/sh
sersync="/usr/src/sersync/sersync2"
confxml="/usr/src/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];
then
$sersync -d -r -o $confxml &
else
exit 0;
fi

如果想要多实例检测

  • 可以配置多个confxml.xml文件
  • 根据不同的需求同步对应的实例文件

问题报错

1、如果客户端连接的时候出现如下报错

[root@Node5 ~]# rsync -avz --delete /data/web_bak/ rsyncuser@192.168.75.134::wwwroot
这里是备份路径

Password: 
@ERROR: auth failed on module wwwroot
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]

#解决:
#查看一下日志文件
[root@Node4 ~]# mv /etc/rsyncd.passwd /etc/rsync.passwd
......
2022/03/02 21:39:01 [7577] connect from UNKNOWN (192.168.75.135)
2022/03/02 21:39:24 [7577] auth failed on module wwwroot from UNKNOWN (192.168.75.135) for rsyncuser: no secrets file

#这里就可以检查得出原来是缺少这个secrets file

#根据配置文件中的指定的名字创建,切勿忘记配置权限就ok了
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 16:00:29  更:2022-03-04 16:04:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:28:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码