使用docker完成minio服务部署扩容备份迁移生产实践文档

一、minio服务扩容方案

当服务器存储空间不足的时候,需要进行扩容,扩容过程中需要短暂停机时间,预计在一小时内能够完成和恢复

统一注意事项

强烈建议为部署中的所有节点选择基本相似的硬件配置。确保硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)在所有节点上保持一致。

由于文件服务用于文件上传与下载,需要选择一个存储空间大的磁盘(生产环境可能不一样,因此需要检查),查看服务器的最大磁盘空间:df -h 例如

img

由上图可以看出,/opt 目录磁盘空间最大,检查docker-compose的minio映射目录,若生产磁盘目录也是/opt最大,则用默认的docker-compose;

若生产的最大磁盘目录为其他,例如发现磁盘空间最大根目录为 /usr 则需要修改docker-compose中的对应数据映射目录

# minio集群部署模式下
- /opt/CommandCenter/minio/data1:/data1  [修改为]  - /usr/CommandCenter/minio/data1:/data1
- /opt/CommandCenter/minio/data2:/data2  [修改为]  - /usr/CommandCenter/minio/data2:/data2

1.1 第一阶段 部署[3]个节点

首先检查部署所在服务器的是否开放 9000、9001 端口,若没有开放则需要开放9000、9001 端口

# 查看开放的端口号,若列表中没有9000、9001则需要开放9000、9001 端口
firewall-cmd --list-ports#开放9000端口,为minio后端代码访问端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
#开放9001端口,为minio后台管理界面端口
firewall-cmd --zone=public --add-port=9001/tcp --permanent# 重启防火墙,使开放端口生效
firewall-cmd --reload

这里以部署3台服务器为示例演示集群部署,生产以实际环境服务器为准:

服务器别名服务器ip地址后端代码访问端口号后台管理界面端口号
minio0116.123.11.1690009001
minio0216.123.11.1590009001
minio0316.123.11.1490009001

在【portainer】中分别在【3】台服务器上运行此 docker-compose 文件(集群中每个docker-compose内容稍有不同)即可完 minio 的集群部署;

每台服务器的minio的docker-compose.yml文件为:主要按照实际文件修改: hostname 、 container_name 、 extra_hosts

注意:每台服务器中的 docker-compose.yaml 文件有 hostname 、 container_name 、 extra_hosts属性有区别,集群中每台minio的用户名和密码需要保持一致

version: "3.0"
services:minio:# 最新版的minioimage: quay.io/minio/minio# 这里的 minio0{1...3}代表:部署3个节点(即3台服务器), data{1...2}代表:每个节点分别映射两个存储文件夹command: server --address ":9000" --console-address ":9001" http://minio0{1...3}/data{1...2}restart: alwayshostname: minio01 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致container_name: minio01 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致environment:# 集群中每个节点的用户名和密码需保持一致MINIO_ROOT_USER: xxxxxxMINIO_ROOT_PASSWORD: xxxxxxxMINIO_PROMETHEUS_AUTH_TYPE: publicTZ: Asia/Shanghaiextra_hosts:# 这里分别填写,集群中每台服务器的ip以及自定义hostname- "minio01:16.123.11.16"- "minio02:16.123.11.15"- "minio03:16.123.11.14"volumes:- /opt/CommandCenter/minio/data1:/data1- /opt/CommandCenter/minio/data2:/data2#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:ro#将外面的时间挂载到容器内部,权限只读,容器内不可修改- /etc/timezone:/etc/timezone:ronetwork_mode: "host"logging:driver: "json-file"options:max-size: "50M"max-file: "10"deploy:resources:limits:cpus: "4"memory: 4096Mreservations:memory: 2048M

**验证:**部署完成后,在浏览器访问 http://ip:9000 ,ip为集群中的任意一台服务器ip,docker-compose中输入的MINIO_ROOT_USER对应值为用户名,MINIO_ROOT_PASSWORD对应值为密码

登录后选择菜单【Monitoring】—》【Metrics】查看集群情况,Servers对应在线节点数量,Drives代表磁盘在线数量

1.1.1 请检查nginx配置文件中是否包含以下配置,若没有则新增;若新增,则需要重启nginx
 # minio 集群中的节点upstream minioCluster{server  16.123.11.16:9000; #将127.0.0.1修改为minio服务主节点所在机器IPserver  16.123.11.15:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.14:9000; #将127.0.0.1修改为minio服务备节点所在机器IP}server {listen       9002;server_name  127.0.0.1; #此处填写当前nginx服务所在的服务器ipclient_max_body_size 4096M;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://minioCluster;proxy_set_header x-real-ip $remote_addr;proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;proxy_set_header host $http_host;}}

1.2 第二阶段 当存储容量不足的时候,再部署[3]个节点实现扩容

注意:不支持单独添加一个节点组成新的集群

首先检查部署所在服务器的是否开放 9000、9001 端口,若没有开放则需要开放9000、9001 端口

# 查看开放的端口号,若列表中没有9000、9001则需要开放9000、9001 端口
firewall-cmd --list-ports#开放9000端口,为minio后端代码访问端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
#开放9001端口,为minio后台管理界面端口
firewall-cmd --zone=public --add-port=9001/tcp --permanent# 重启防火墙,使开放端口生效
firewall-cmd --reload

这里以部署3台服务器为示例演示集群部署,生产以实际环境服务器为准:

服务器别名服务器ip地址后端代码访问端口号后台管理界面端口号
minio0416.123.11.1390009001
minio0516.123.11.1290009001
minio0616.123.11.1190009001

在【portainer】中分别在【3】台服务器上运行此 docker-compose 文件(集群中每个docker-compose内容稍有不同)即可完 minio 的集群部署;

每台服务器的minio的docker-compose.yml文件为:

注意:每台服务器中的 docker-compose.yaml 文件有 hostname 、 container_name 、 extra_hosts属性有区别,集群中每台minio的用户名和密码需要保持一致

注意 **command、extra_hosts、**hostname 、 container_name 对内的变化。

扩容的时候【每个节点(包含之前的节点)】都需要按照此处来修改,然后重新部署每个节点

version: "3.0"
services:minio:# minio最新版quay.io/minio/minio# 这里的 minio0{1...3}代表:部署3个节点(即2台服务器), data{1...2}代表:每个节点分别映射两个存储文件夹command: server --address ":9000" --console-address ":9001" http://minio0{1...3}/data{1...2} http://minio0{4...6}/data{1...2}restart: alwayshostname: minio03 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致container_name: minio03 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致environment:# 集群中每个节点的用户名和密码需保持一致MINIO_ROOT_USER: xxxxxxxxMINIO_ROOT_PASSWORD: xxxxxxxxxxMINIO_PROMETHEUS_AUTH_TYPE: publicTZ: Asia/Shanghaiextra_hosts:# 这里分别填写,集群中每台服务器的ip以及自定义hostname- "minio01:16.123.11.16"- "minio02:16.123.11.15"- "minio03:16.123.11.14"- "minio04:16.123.11.13"- "minio05:16.123.11.12"- "minio06:16.123.11.11"volumes:- /opt/CommandCenter/minio/data1:/data1- /opt/CommandCenter/minio/data2:/data2#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:ro#将外面的时间挂载到容器内部,权限只读,容器内不可修改- /etc/timezone:/etc/timezone:ronetwork_mode: "host"logging:driver: "json-file"options:max-size: "50M"max-file: "10"deploy:resources:limits:cpus: "4"memory: 4096Mreservations:memory: 2048M

**验证:**部署完成后,在浏览器访问 http://ip:9000 ,ip为集群中的任意一台服务器ip,docker-compose中输入的MINIO_ROOT_USER对应值为用户名,MINIO_ROOT_PASSWORD对应值为密码

登录后选择菜单【Monitoring】—》【Metrics】查看集群情况,Servers对应在线节点数量,Drives代表磁盘在线数量

注意:修改nginx的配置,将新增的节点添加到此处,然后重启nginx

 # minio 集群中的节点upstream minioCluster{server  16.123.11.16:9000; #将127.0.0.1修改为minio服务主节点所在机器IPserver  16.123.11.15:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.14:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.13:9000; #将127.0.0.1修改为minio服务主节点所在机器IPserver  16.123.11.12:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.11:9000; #将127.0.0.1修改为minio服务备节点所在机器IP}server {listen       9002;server_name  127.0.0.1; #此处填写当前nginx服务所在的服务器ipclient_max_body_size 4096M;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://minioCluster;proxy_set_header x-real-ip $remote_addr;proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;proxy_set_header host $http_host;}}

二、minio数据备份与迁移

文件服务为集群部署,自带数据备份功能:

比如部署了N个节点,当存活的节点有 大于 N/2 的节点存活的时候,都能够获取到完整的数据并且提供服务

多节点/驱动器级别的可靠性,具有可配置的容忍度,最多可丢失 1/2 所有节点/驱动器 。

2.1 检查/安装 mc客户端

数据的备份与迁移都依赖于mc客户端,mc客户端源于minio官方,需要确认mc客户端已经安装

# 查看是否安装mc
mc --help
# 若出现命令未发现,则说明mc没有安装,需要安装mc客户端
[root@localhost minio-binaries]# mc --help
-bash: mc: command not found# 若出现以下命令则说明已经安装,按键盘q键则可以退出
[root@localhost minio-binaries]# mc --help
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── (q)uit/esc
NAME:                                                                           mc - MinIO Client for object storage and filesystems.                         USAGE:                                                                          mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]                        COMMANDS:                                                                       alias      manage server credentials in configuration file                    ls         list buckets and objects                                           mb         make a bucket                                                      rb         remove a bucket                                                    cp         copy objects                                                       mv         move objects                                                       rm         remove object(s)                                                   mirror     synchronize object(s) to a remote site                             cat        display object contents                                            head       display first 'n' lines of an object                               pipe       stream STDIN to an object                                          find       search for objects                                                 sql        run sql queries on objects                                         stat       show object metadata                                               tree       list buckets and objects in a tree format                          du         summarize disk usage recursively                                   retention  set retention for object(s)                                        legalhold  manage legal hold for object(s)                                    support    support related commands                                           license    license related commands                                           share      generate URL for temporary access to an object                     version    manage bucket versioning                                           ilm        manage bucket lifecycle                                            quota      manage bucket quota                                                encrypt    manage bucket encryption config                                    event      manage object notifications                                        watch      listen for object notification events                              undo       undo PUT/DELETE operations                                         anonymous  manage anonymous access to buckets and objects                     tag        manage tags for bucket and object(s)                               diff       list differences in object name, size, and date between two bucketsreplicate  configure server side bucket replication                           admin      manage MinIO servers                                               
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0%   

可以通过 在线/离线 模式根据不同的服务器架构安装mc客户端:

在线安装mc客户端:

当服务架构为linux-amd64的时候,安装mc客户端为:

curl https://dl.minio.org.cn/client/mc/release/linux-amd64/mc \--create-dirs \-o /usr/local/minio-binaries/mcchmod +x /usr/local/minio-binaries/mc
export PATH=$PATH:/usr/local/minio-binaries/mc --help

当服务器架构为linux-arm64的时候,安装mc客户端为:

curl https://dl.minio.org.cn/client/mc/release/linux-arm64/mc \--create-dirs \-o /usr/local/minio-binaries/mcchmod +x /usr/local/minio-binaries/mc
export PATH=$PATH:/usr/local/minio-binaries/mc --help

离线安装mc客户端:

当服务架构为linux-amd64的时候,安装mc客户端为:

1.创建目标文件夹
mkdir -p /usr/local/minio-binaries
2.从安装包中取出linux-amd64对应的 mc 安装包上传到 /usr/local/minio-binaries 目录下
3.赋予mc客户端执行权限
chmod +x /usr/local/minio-binaries/mc
4.添加环境变量
export PATH=$PATH:/usr/local/minio-binaries/

当服务器架构为linux-arm64的时候,安装mc客户端为:

1.创建目标文件夹
mkdir -p /usr/local/minio-binaries
2.从安装包中取出linux-arm64对应的 mc 安装包上传到 /usr/local/minio-binaries 目录下
3.赋予mc客户端执行权限
chmod +x /usr/local/minio-binaries/mc
4.添加环境变量
export PATH=$PATH:/usr/local/minio-binaries/

2.2 minio数据备份与迁移方案

设置存储服务器别名

# 在安装了mc客户端的服务器上执行设置服务别名
mc alias set minio_A http://127.0.0.1:9002 yourusername youruserpassword说明:
minio_A 为自定义存储服务器别名
需要将127.0.0.1替换 nginx 的ip或vip(vip优先)
yourusername代表minio的用户名
youruserpassword代表minio的密码# 查看已经设置的别名
mc alias list
2.2.1 将数据【备份】到本地其他磁盘
# 创建本地备份目录,注意备份目录磁盘空间需要大于本次备份的数据 df -h 查看磁盘空间
mkdir -p /opt/minio/bakdata
# 将minio中存储的数据全部备份到本地
mc cp --recursive minio_A/ /opt/minio/bakdata/说明 minio_A 自定义的别名若需要【指定备份某个桶】的数据,则执行 mc cp --recursive minio_A/mybucket/ /opt/minio/bakdata/mybucket/
mybucket为桶的名称
2.2.2 将备份的数据上传到新的minio集群上面
# 这里将minio_A备份的数据,上传到minio_B上面,先设置minio_B的别名
mc alias set minio_B http://127.0.0.1:9002 yourusername youruserpassword
# 查看已经设置的别名
mc alias list# 查看minio_A服务上面所有桶的名称
mc ls  minio_A
# 查看minio_B服务上面所有桶的名称
mc ls  minio_B若minio_B中缺少minio_A中的桶数据,则需要登录到新的桶后台新增minio_B中缺少的桶# 将minio_A备份的[全部]数据,上传到minio_B上面,注意备份文件目录路径需以'/'结尾
mc cp --recursive /opt/minio/bakdata/ minio_B
注意:迁移过程中若出现目录不存在,则登录到新的集群去创建(Bucket `xxxxxxxx` does not exist)# 将minio_A备份[mybucket桶]的数据,上传到minio_B[mybucket桶]上面,注意备份文件目录路径需以'/'结尾
mc cp --recursive /opt/minio/bakdata/mybucket/ minio_B/mybucket/
注意:迁移过程中若出现目录不存在,则登录到新的集群去创建(Bucket `xxxxxxxx` does not exist)

注意:迁移过程中若出现提示目录不存在,则登录到新的集群去创建(Bucket xxxxxxxx does not exist)

**创建桶:**浏览器登录管理后台 http://ip:9000 ip为新集群中的任意一台minio所在服务的ip,在docker-compose中的 MINIO_ROOT_USER和MINIO_ROOT_PASSWORD分别对应登录的用户名和密码

img

2.2.3 将一个minio中的数据区【迁移】到另外一个新的minio集群
# 查看minio_A服务上面所有桶的名称
mc ls  minio_A
# 查看minio_B服务上面所有桶的名称
mc ls  minio_B若minio_B中缺少minio_A中的桶数据,则需要登录到新的桶后台新增minio_B中缺少的桶#将服务器A上名为“mybucket”的桶的数据迁移到服务器B的“mybucket”桶中
mc cp --recursive minio_A/mybucket/ minio_B/mybucket/
注意:若提示(Bucket `xxxxxxxx` does not exist)则需要登录到新的集群去创建名为mybucket的桶#将服务器A上面的所有数据迁移到服务器B上面
mc cp --recursive minio_A minio_B
注意:若提示(Bucket `xxxxxxxx` does not exist)则需要登录到新的集群去创建名为mybucket的桶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel·VBA日期时间转换提取正则表达式函数

标准日期转换 Function 标准日期(ByVal str$) As DateDim pat$, result$arr Array("(\d{4}).*?(\d{1,2}).*?(\d{1,2})", "(\d{4}).*?(\d{1}).*?(\d{1,2})")If Len(str) < 8 Then pat arr(1) Else pat arr(0)With CreateObject("vbscript.r…

java的内存模型(概念)

在java中&#xff0c;设计之初就有了&#xff1a;主内存、线程工作内存&#xff0c;所以其实每一个线程执行时&#xff0c;都是将主线程copy一份到工作线程&#xff0c;执行修改后&#xff0c;再同步回去。 所以&#xff0c;就有四组内存操作方式&#xff1a; 1、读主内存&…

微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动

(一) 1.左侧一列固定不动 2.右侧表格内容可以左右滚动 3.单元格内容平均分配 4.每一行行高可以由内容撑开 通过 js 设置左侧一列行高与右侧表格内容行高保持一致 1.1 效果图 1.2 tabble.wxml <view classtable><!-- 左侧固定 --><view classtable_left_colum…

【Aseprite像素画】如何取巧做到各种画面效果(小工具的各种技巧)

文章目录 参考链接&#xff1a;具体如下1、水中倒影2、参考图片3多个帧添加动画物品4多个帧删除动画物品5六毛钱受击效果6添加标签7导出特定标志的gif图8忽略标志帧&#xff0c;然后播放9轮廓线10多个图层轮廓线11洋葱皮12替换多个不同帧的色块簇13连接细胞14快速连续删除15冻结…

关于将对象转成JSON格式的一些问题

1.问题现象&#xff1a; 在ssm项目中&#xff0c;一个controller返回Msg对象&#xff08;自定义Javabean对象&#xff09;&#xff0c;然后利用SpringMVC的ResponseBody注解自动将Msg对象转化成JSON格式&#xff0c;返回给客户端&#xff0c;但是客户端接收到的json字符串只有…

SwiftUI 4.0:两种方式实现子视图导航功能

0. 概览 从 SwiftUI 4.0 开始&#xff0c;觉悟了的苹果毅然抛弃了已“药石无效”的 NavigationView&#xff0c;改为使用全新的 NavigationStack 视图。 诚然&#xff0c;NavigationStack 从先进性来说比 NavigationView 有不小的提升&#xff0c;若要如数家珍得单开洋洋洒洒…

高效的开发流程搭建

目录 1. 搭建 AI codebase 环境kaggle的服务器1. 搭建 AI codebase 环境 python 、torch 以及 cuda版本,对AI的影响最大。不同的版本,可能最终计算出的结果会有区别。 硬盘:PCIE转SSD的卡槽,, GPU: 软件源: Anaconda: 一定要放到固态硬盘上。 VS code 的 debug功能…

【NLP的python库(03/4) 】: 全面概述

一、说明 Python 对自然语言处理库有丰富的支持。从文本处理、标记化文本并确定其引理开始&#xff0c;到句法分析、解析文本并分配句法角色&#xff0c;再到语义处理&#xff0c;例如识别命名实体、情感分析和文档分类&#xff0c;一切都由至少一个库提供。那么&#xff0c;你…

Pikachu-xxe (xml外部实体注入漏洞)过关笔记

Pikachu-xxe过关笔记 有回显探测是否有回显file:///协议查看本地系统文件php://协议查看php源代码&#xff08;无法查看当前网页代码&#xff0c;只能看别的&#xff09;http://协议爆破开放端口&#xff08;两者的加载时间不同&#xff09; 无回显第一步第二步第三步 运行结果…

SketchUp Pro 2023 for Mac——打造你的创意之城

SketchUp Pro 2023 for Mac是一款专业级的3D建模软件&#xff0c;为你提供最佳的设计和创意工具。不论你是建筑师、室内设计师&#xff0c;还是爱好者&#xff0c;SketchUp Pro都能满足你对于创意表达的需求。 SketchUp Pro 2023拥有强大而直观的界面&#xff0c;让你轻松绘制…

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么&#xff0c;理解动规的思路&#xff0c;并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0c;以及两个背包博客&#xff0c;或者你本人就已经懂得动规了。 1、动规思路简…

Java+Redis:布隆过滤器,打造高效数据过滤神器!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

postgresql16-新特性

postgresql16-新特性 any_value数组抽样数组排序 any_value any_value 返回任意一个值 select e.department_id ,count(*), any_value(e.last_name) from cps.public.employees e group by e.department_id ;数组抽样 -- 从数组中随机抽取一个元素 array_sample(数组&#…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍。

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

插上u盘显示格式化怎么办?U盘数据恢复可以这样做

U盘以其体积小巧、存储容量大、读写速度快的特点&#xff0c;在各种工作和个人使用场合中得到了广泛应用&#xff0c;因此深得用户好评。然而&#xff0c;在日常使用U盘的过程中&#xff0c;经常会遇到一些问题和挑战。 当我需要转移一些资料文件时&#xff0c;总是喜欢使用U盘…

基于spring boot的医疗管理系统 /基于java的医疗系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

一键智能视频语音转文本——基于PaddlePaddle语音识别与Python轻松提取视频语音并生成文案

前言 如今进行入自媒体行业的人越来越多&#xff0c;短视频也逐渐成为了主流&#xff0c;但好多时候是想如何把视频里面的语音转成文字&#xff0c;比如&#xff0c;录制会议视频后&#xff0c;做会议纪要&#xff1b;比如&#xff0c;网课教程视频&#xff0c;想要做笔记&…

[架构之路-225]:计算机硬件与体系结构 - 分类方法大汇总: RISC, CISC

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类&#xff1a;指令并行处理 四、根据指令集架构&#xff08;ISA&#xff09;分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 4.4 五阶流…

【Kafka专题】Kafka收发消息核心参数详解

目录 前置知识课程内容一、从基础的客户端说起&#xff08;Java代码集成使用&#xff09;1.1 消息发送者源码示例1.2 消息消费者源码示例1.3 客户端使用小总结 *二、从客户端属性来梳理客户端工作机制*2.1 消费者分组消费机制2.2 生产者拦截器机制2.3 消息序列化机制2.4 消息分…

PHP 反序列化漏洞:身份标识

文章目录 参考环境访问修饰符访问修饰符PHP 与访问修饰符 手写身份标识身份标识定义身份标识控制字符 NUL在 PHP 中如何表示空字符&#xff1f; 通过空字符尝试构建包含非公共属性对象的序列化文本 空字符的传输控制字符的不可打印性结论另辟蹊径URL 字符编码将非 ASCII 字符文…