ElasticSearch常见的索引_集群的备份与恢复方案

news2024/12/12 9:01:30

方案一:使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移,包括全量、增量备份和恢复。

方案二:通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移,或者跨集群的索引迁移。缺点是跨集群迁移时需要在elasticsearch.yml中添加目标集群IP白名单。

方案三:使用elasticdump来迁移映射和数据。该方案适用于仅对索引层面进行数据或映射的迁移,支持analyzer/mapping/data等操作。相较于reindex跨集群操作,elasticdump无须配置白名单。

思考:直接拷贝文件能实现集群备份吗?

reindex 更适合同集群内

elasticsearch-dump

elasticsearch-dump 是一个开源的用于导入和导出 Elasticsearch 数据的命令行工具,通过将 输入(input) 发送到输出(output)进行工作。输入和输出即可以是 Elasticsearch URL 也可以是文件。

Elasticsearch/OpenSearch:

  • format: {protocol}://{host}:{port}/{index}
  • example: http://127.0.0.1:9200/my_index

File:

  • format: {FilePath}
  • example: /Users/evantahler/Desktop/dump.json

github 地址:https://github.com/elasticsearch-dump/elasticsearch-dump

使用

安装 elasticsearch-dump

前提:需要 node 环境

npm install elasticdump
./bin/elasticdump
npm install elasticdump -g
elasticdump

迁移指定索引的settings

node elasticdump \
--input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> \
--output=http://"<OtherName>:<OtherPassword>"@<OtherEsHost>/<OtherEsIndex> \
--type=settings

导出指定索引的mapping

node D:\software\nodejs\node_global\node_modules\elasticdump\bin\elasticdump --input=https://elastic:r9wUensJ6tO3Wv1A*Wnn@192.168.2.131:9200/user_test --output=/data/my_index_mapping.json --type=mapping

报错如下:

Wed, 23 Oct 2024 05:55:34 GMT | starting dump
Wed, 23 Oct 2024 05:55:34 GMT | Error Emitted => self-signed certificate in certificate chain
Wed, 23 Oct 2024 05:55:34 GMT | Error Emitted => self-signed certificate in certificate chain
Wed, 23 Oct 2024 05:55:34 GMT | Total Writes: 0
Wed, 23 Oct 2024 05:55:34 GMT | dump ended with error (get phase) => Error: self-signed certificate in certificate chain

解决方案:

这个错误是由于 SSL 证书验证失败导致的。SSL 证书验证用于确保与服务器建立的连接是安全和可信的。

在这种情况下,错误消息中提到了 “certificate verify failed: self signed certificate in certificate chain”,这意味着服务器使用的是自签名证书,而不是由受信任的证书颁发机构(CA)签署的证书。

由于之前未接触过证书相关内容,这里我选择暂时忽略证书验证错误。

NODE_TLS_REJECT_UNAUTHORIZED=0解决办法:https://developer.aliyun.com/article/1341433

Windows 环境下设置环境变量,使用 set 语法,命名后不加空格,直接附上两个 &&, 然后空格,跟上新的命令。

设置变量后再执行 elasticdump 操作。

set NODE_TLS_REJECT_UNAUTHORIZED=0
node D:\software\nodejs\node_global\node_modules\elasticdump\bin\elasticdump --input=https://elastic:r9wUensJ6tO3Wv1A*Wnn@192.168.2.131:9200/user_test --output=/data/my_index_mapping.json --type=mapping

成功:

Tue, 03 Dec 2024 06:53:18 GMT | starting dump
(node:30260) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(Use `node --trace-warnings ...` to show where the warning was created)
Tue, 03 Dec 2024 06:53:18 GMT | got 1 objects from source elasticsearch (offset: 0)
Tue, 03 Dec 2024 06:53:18 GMT | sent 1 objects to destination file, wrote 1
Tue, 03 Dec 2024 06:53:18 GMT | got 0 objects from source elasticsearch (offset: 1)
Tue, 03 Dec 2024 06:53:18 GMT | Total Writes: 1
Tue, 03 Dec 2024 06:53:18 GMT | dump complete

这里注意,导出文件目录需要提前创建,否则会报异常。

导出整个索引:

node D:\software\nodejs\node_global\node_modules\elasticdump\bin\elasticdump --input=https://elastic:r9wUensJ6tO3Wv1A*Wnn@192.168.2.131:9200/user_test --output==D:\elasticdump\user_test_data_dump.json --type=data

导入并覆盖索引数据:

node D:\software\nodejs\node_global\node_modules\elasticdump\bin\elasticdump --input=D:\my_data.json --output==https://elastic:r9wUensJ6tO3Wv1A*Wnn@192.168.2.131:9200/user_test --type=data --overwrite

导入过程中遇到报错如下图:

报错信息如下:

{
  _index: 'user_test',
  _id: 'MmJ_vJIBBoiadQhNyziv',
  status: 500,
  error: {
    type: 'not_x_content_exception',
    reason: 'Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes'
  }

解决方案:https://blog.csdn.net/star1210644725/article/details/134254334

原因是导入的JSON数据格式不对
当前 json文件内容:

{"index":{}}
{"id":"B0IAFZ9FOC","name":"小鹏汽车汽车充电站(三沙永兴港务综合楼小鹏20kW目的地站)","type":"","type_code":"11100","address":"永兴岛机场路永兴港务综合楼地面停车场","province_name":"海南省","province_code":"460000","city_name":"三沙","city_code":"289","distrcit_name":"西沙区","district_code":"460301","geopoint_gcj02":"16.833967,112.34004","geopoint_bd09":"16.840137798581825,112.34653419459671","geopoint_wgs84":"16.835594173343946,112.33512523956057"}

修改后 json文件内容:

{"_index":"user_test","_id":"kWJbvJIBBoiadQhNBzfq","_score":1,"_source":{"id":"B0IAFZ9FOC","name":"小鹏汽车汽车充电站(三沙永兴港务综合楼小鹏20kW目的地站)","type":"","type_code":"11100","address":"永兴岛机场路永兴港务综合楼地面停车场","province_name":"海南省","province_code":"460000","city_name":"三沙","city_code":"289","distrcit_name":"西沙区","district_code":"460301","geopoint_gcj02":"16.833967,112.34004","geopoint_bd09":"16.840137798581825,112.34653419459671","geopoint_wgs84":"16.835594173343946,112.33512523956057"}}

再次导入,成功

C:\Windows\system32>node D:\software\nodejs\node_global\node_modules\elasticdump\bin\elasticdump --input=D:\elasticdump\my_index_data.json --output=https://elastic:r9wUensJ6tO3Wv1A*Wnn@192.168.2.131:9200/user_test --type=data --overwrite
Thu, 24 Oct 2024 03:11:48 GMT | starting dump
Thu, 24 Oct 2024 03:11:48 GMT | got 23 objects from source file (offset: 0)
(node:2820) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(Use `node --trace-warnings ...` to show where the warning was created)
Thu, 24 Oct 2024 03:11:49 GMT | sent 23 objects to destination elasticsearch, wrote 23
Thu, 24 Oct 2024 03:11:49 GMT | got 0 objects from source file (offset: 23)
Thu, 24 Oct 2024 03:11:49 GMT | Total Writes: 23
Thu, 24 Oct 2024 03:11:49 GMT | dump complete

Reference

https://www.alibabacloud.com/help/zh/es/use-cases/use-elasticsearch-dump-to-migrate-data

https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html

ElasticSearch 实战:使用elasticdump导出导入数据](https://blog.csdn.net/qq_33240556/article/details/137261150))

对数据文件内容格式有特殊限制,个人感觉更适合用于ES迁移到ES。

Snapshot and restore

快照可以对正在运行的 ElasticSearch 集群进行备份。

快照可以做一下事情:

  1. 定期备份数据,不用停止 ElasticSearch 运行;
  2. 在删除数据或机器故障后恢复数据;
  3. 在不同的集群间转移数据;
  4. 降低存储成本。

快照工作流

Elasticsearch 将快照存储在一个被称为快照存储库的集群外部存储位置。在拍摄快照或恢复数据前必须在 ElasticSearch 集群中注册这个快照仓库。Elasticsearch 支持多种云存储库类型,包括:

  • 亚马逊网络服务 S3
  • 谷歌云存储(GCS)
  • 微软 Azure

注册快照存储库后,我们可以使用快照生命周期管理(SLM)自动拍摄和管理快照。之后我们可以恢复或者转移数据。

Elasticsearch的快照和恢复功能是一种备份及恢复索引数据的方法,可保护数据免于意外丢失或受到系统故障的影响。

ElasticSearch 将快照存储到快照仓库里。在你可以进行快照拍摄或恢复之前,你必须在集群上注册一个快照存储库。

快照操作步骤

https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html

使用创建快照 API。快照名称支持日期数学。

创建快照

  1. 注册快照,将文件系统的路径或父目录添加到每个 ElasticSearch 节点的 <font style="color:rgb(0, 0, 0);">elasticsearch.yml</font> 文件中的 <font style="color:rgb(0, 0, 0);">path.repo</font>设置中
path:
  repo:
    - /www/elasticsearch/elasticsearch-8.15.2/backup
  1. 注册仓库指定文件路径
PUT /_snapshot/my_backup
{
    "type": "fs",
    "settings": {
        "location": "/www/elasticsearch/elasticsearch-8.15.2/backup"
    }
}

响应结果:

{
  "acknowledged": true
}

创造前置模拟条件,构造几条数据。

PUT /snapshot_test

POST /_bulk
{ "index" : { "_index" : "snapshot_test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "snapshot_test", "_id" : "2" } }
{ "create" : { "_index" : "snapshot_test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "snapshot_test"} }
{ "doc" : {"field2" : "value2"} }
  1. 拍摄快照
    1. 全量备份,即创建整个集群的快照、
PUT /_snapshot/my_backup/snapshot_cluster?wait_for_completion=true
2. 按需备份
PUT /_snapshot/my_backup/snapshot_test?wait_for_completion=true
{
    "indices": "snapshot_*",
    "ignore_unanailablt": true,
    "include_global_state": false,
    "metedata": {
        "taken_by": "mingyi",
        "taken_because": "backup before upgrading"
    }
}

{
    "snapshot": {
        "snapshot": "my_backup",
        "uuid": "V2teco__TtK8PvhFbPCz5w",
        "version_id": 7040299,
        "version": "7.4.2",
        "indices": [
            "my_backup"
        ],
        "include_global_state": false,
        "state": "SUCCESS",
        "start_time": "2024-12-02T16:24:04.841Z",
        "start_time_in_millis": 1733156644841,
        "end_time": "2024-12-02T16:24:05.043Z",
        "end_time_in_millis": 1733156645043,
        "duration_in_millis": 202,
        "failures": [],
        "shards": {
            "total": 1,
            "failed": 0,
            "successful": 1
        }
    }
}

恢复快照

为了保护集群安全,Elasticsearch 8.X版本不再默认选择批量删除索引。如果需要进行该操作,可以使用以下命令行开启批量操作功能。

POST /_snapshot/{快照仓库名}/{索引名}/_restore

快照常见操作

# 查看快照库
GET /_snapshot?pretty

# 查看所有快照存储库
GET /_snapshot/_all

# 查看快照状态
GET /_snapshot/my_backup/snapshot_test/_status

# 删除快照
DELETE /_snapshot/my_backup/snapshot_test

遇到问题

Docker 内执行请求报错:

{
    "error": {
        "root_cause": [
            {
                "type": "exception",
                "reason": "failed to create blob container"
            }
        ],
        "type": "exception",
        "reason": "failed to create blob container",
        "caused_by": {
            "type": "access_denied_exception",
            "reason": "/www/elasticsearch/backup/tests-asrNlJfrQqy9DGEe2OkXoA"
        }
    },
    "status": 500
}

进入容器内执行如下命令后再请求,正常。

chown -R elasticsearch /www/elasticsearch/backup

bulk api

curl -H 'Content-Type: application/x-ndjson'  -s -XPOST localhost:9200/_bulk --data-binary @accounts.json

使用

准备索引文件:

{"id":"5829F807-7A3C-4E1B-8DB1-5F938DEAAE64","province":"辽宁省","city":"沈阳市","district":"大东区","land_name":"东至:用地界线南至:用地界线及山嘴子路北侧道路红线西至:东望街东侧道路红线北至:用地界线","usage_level":"工业用地","public_notice_number":"沈土网挂[2024]13号","data_source":"中国土地市场网","data_source_url":"https://www.landchina.com/#/landDetail?id=gyggzd5140a162-7896-444b-93b4-121ac355b11b&type=高级搜索&path=出让公告","crawl_time":"2024-07-31 15:30:24"}
{"id":"0005E5AD-2311-49E4-B8D0-F930643677A2","province":"辽宁省","city":"沈阳市","district":"苏家屯区","land_name":"东至:用地界线西至:18米规划路东侧道路红线南至:四环路北侧规划绿线北至:18米规划路南侧道路红线","usage_level":"其它用地","public_notice_number":"沈土网挂[2024]14号","data_source":"中国土地市场网","data_source_url":"https://www.landchina.com/#/landSupplyDetail?id=gygg1e19375c-103f-40d6-ba4d-982329b2f542&type=出让公告&path=0","crawl_time":"2024-08-06 14:31:35"}

调用接口

curl -H 'Content-Type: application/x-ndjson' -XPOST https://elastic:r9wUensJ6tO3Wv1A*Wnn@192.168.2.131:9200/user_test/_bulk --data-binary @D:\index_data.json

响应结果:

curl: (6) Could not resolve host: application
curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325) - 证书链是由不受信任的颁发机构颁发的。
More details here: https://curl.se/docs/sslcerts.html

解决方案:https://wenku.csdn.net/answer/4cp3ucvbbu

再次请求:

curl -k -H "Content-Type: application/x-ndjson" -H "Authorization: ApiKey VVZlZWo1SUJyN3VPRWVRb0dfUkc6REhBYXVjbkFTcEdKRUpKT2MxeFp6Zw==" -X POST "https://192.168.2.131:9200/user_test/_bulk"  --data-binary @D:\index_data.json
{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Malformed action/metadata line [1], expected field [create], [delete], [index] or [update] but found [id]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Malformed action/metadata line [1], expected field [create], [delete], [index] or [update] but found [id]"
    },
    "status": 400
}

原因是 json 文件格式不正确,修改格式为(切记最后要留一个空行):

{ "index": {} }
{"id":"5829F807-7A3C-4E1B-8DB1-5F938DEAAE64","province":"辽宁省","city":"沈阳市","district":"大东区","land_name":"东至:用地界线南至:用地界线及山嘴子路北侧道路红线西至:东望街东侧道路红线北至:用地界线","usage_level":"工业用地","public_notice_number":"沈土网挂[2024]13号","data_source":"中国土地市场网","data_source_url":"https://www.landchina.com/#/landDetail?id=gyggzd5140a162-7896-444b-93b4-121ac355b11b&type=高级搜索&path=出让公告","crawl_time":"2024-07-31 15:30:24"}
{ "index": {} }
{"id":"0005E5AD-2311-49E4-B8D0-F930643677A2","province":"辽宁省","city":"沈阳市","district":"苏家屯区","land_name":"东至:用地界线西至:18米规划路东侧道路红线南至:四环路北侧规划绿线北至:18米规划路南侧道路红线","usage_level":"其它用地","public_notice_number":"沈土网挂[2024]14号","data_source":"中国土地市场网","data_source_url":"https://www.landchina.com/#/landSupplyDetail?id=gygg1e19375c-103f-40d6-ba4d-982329b2f542&type=出让公告&path=0","crawl_time":"2024-08-06 14:31:35"}

再次执行请求,结果如下:

{
    "errors": false,
    "took": 0,
    "items": [
        {
            "index": {
                "_index": "user_test",
                "_id": "05jPi5MBRvkzqTvFLXbX",
                "_version": 1,
                "result": "created",
                "_shards": {
                    "total": 2,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 2,
                "_primary_term": 1,
                "status": 201
            }
        },
        {
            "index": {
                "_index": "user_test",
                "_id": "1JjPi5MBRvkzqTvFLXbX",
                "_version": 1,
                "result": "created",
                "_shards": {
                    "total": 2,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 3,
                "_primary_term": 1,
                "status": 201
            }
        }
    ]
}

Reference

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/indexing-bulk.html

Postman方式:https://blog.csdn.net/SevenBerry/article/details/124873987

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

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

相关文章

cefsharp131.2.70升级cefsharp131.3.10( Chromium 131.0.6778.109)NETCore 版本升级体验

一、版本 cefsharp 131.3.10 小版本升级:cefsharp 131.2.70>>cef 131.3.10 CEF 131.3.1+gcb062df+chromium-131.0.6778.109 / Chromium 131.0.6778.109 二、测试(html5test)

#自定义数据类型-模拟进程执行

#include <iostream> #include <string> #include <iomanip> using namespace std;//定义一个名为process的结构体&#xff0c;用于表示进程相关信息 //包含进程名、进程ID、进程优先级、进程状态、进程所需CPU时间、进程描述等成员 struct process {string …

多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数

&#xff08;40&#xff09;用 thread 类 或全局 async (…) 函数&#xff0c;创建新线程时&#xff0c;谁才是在新线程里第一个被执行的函数&#xff1f; 弄清楚这个问题&#xff0c;有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async &#xff08;…&#xff0…

12月11日IO进程线程

作业1、创建子父进程&#xff0c;子进程将1.txt内容拷贝到2.txt中&#xff0c;父进程将3.txt内容拷贝到4.txt中。 #include <myhead.h>int main(int argc, const char *argv[]) {//创建子父进程pid_t pidfork();if(pid>0) //父进程{//打开文件1文件2int fd1open(&q…

TikTok无网络黑屏原因及解决方法

TikTok运营中最常见的问题就是出现黑屏和“Something went wrong”“No internet connection”等字样&#xff0c;这时TikTok往往已经无法正常使用&#xff0c;大大影响运营流程。那么这种情况是什么原因&#xff0c;又有什么解决办法&#xff1f; 一、无网络黑屏原因 1.‌地理…

在 Ansys Mechanical 中使用“螺栓工具”插件自动生成螺栓

总结 在有限元分析 &#xff08;FEA&#xff09; 中&#xff0c;高效创建螺栓连接对于确保机械装配的结构完整性和性能至关重要。螺栓是连接组件不可或缺的一部分&#xff0c;它们在负载下的精确建模会影响整个系统。快速高效的螺栓建模使工程师能够快速优化设计&#xff0c;满…

西门子200 smart PLC助力水处理企业自动化改造

摘要 西门子的200SMART PLC&#xff0c;以其强大的功能和灵活的应用性&#xff0c;正成为环保行业中不可或缺的一环。今天&#xff0c;我们就来看看这个小小的PLC是如何在处理环保问题中大显身手的。 不得不说&#xff0c;环保行业的痛点可不少。 比如污水处理&#xff0c;传…

【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞

目录 漏洞介绍 影响版本 环境搭建 查看版本 漏洞复现 手动复现 漏洞 poc Magento Open Source 是一个免费开源的电子商务平台&#xff0c;适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持&#xff0c;功能强大但需要更多的技术投入。Adobe…

智能合约的离线签名(EIP712协议)解决方案

引言&#xff1a;本文由天玄链开源开发者提供&#xff0c;欢迎报名公益天玄链训练营 https://blockchain.163.com/trainingCamp 一、解决核心问题 项目方不支付gas费&#xff0c;由用户自己发起交易&#xff0c;用户支付gas费。用户的数据保存在链下服务器中&#xff0c;tok…

Vmware的网络适配器的NAT模式和桥接模式有何区别?如何给Uubunt系统添加桥接网卡?

Vmware的网络适配器的NAT模式和桥接模式有何区别&#xff1f; 如何给Uubunt系统添加桥接网卡? 步骤如下&#xff1a;

有源模拟滤波器的快速设计

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 几乎所有电子电路中都能看到有源模拟滤波器的身影。音频系统使用滤波器进行频带限制和平衡。通信系统设计使用滤波…

HarmonyOS 非线性容器TreeSet 常用的几个方法

TreeSet基于TreeMap实现&#xff0c;在TreeSet中&#xff0c;只对value对象进行处理。TreeSet可用于存储一系列值的集合&#xff0c;元素中value唯一且有序。 TreeSet和HashSet相比&#xff0c;HashSet中的数据无序存放&#xff0c;而TreeSet是有序存放。它们集合中的元素都不允…

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现二分查找的算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.根据键盘输入的一组有序数据建立顺序表&#xff0c;2.顺序表的输…

从混沌到清晰:全面解析非结构化数据治理!

一、非结构化数据的定义 定义 非结构化数据是指不遵循固定模式或不具有预定义数据模型的数据。与结构化数据不同&#xff0c;非结构化数据没有固定的格式&#xff0c;其内容和结构通常由数据的自然形式决定。 关键特征 &#xff08;1&#xff09;多样性&#xff1a;包括文本、…

【蓝桥杯最新板】蓝桥杯嵌入式液晶上实现电子时钟

这几年蓝桥杯比赛比较适合学生技能学习&#xff0c;考虑板子功能&#xff0c;提出完成的任务。 要求在液晶完成如下图效果&#xff1a; 主要是实现液晶显示时钟和数字时钟&#xff0c;具体样式可以依据实际情况微调。 实现过程&#xff1a; 1.需要画圆&#xff08;外圆、内圆…

[WiFi] WiFi安全加密WEP Vs WPA Vs WPA2 Vs WPA3整理

WiFi安全标准时间线 WEP&#xff08;Wired Equivalent Privacy&#xff09; WEP最早于1997年推出&#xff0c;是为了保护无线网络上的数据通信而设计的。当时&#xff0c;Wi-Fi技术还处于起步阶段&#xff0c;人们开始意识到需要一种安全协议来防止未经授权的访问和窃听。WEP被…

基于微信小程序+Springboot+Vue社区超市管理系统的分析与设计(源码+lw+讲解部署等)

&#x1f497; 博主介绍✌ 3Dex&#xff08;全栈开发工程师&#xff09;&#xff0c;专注于4smile等项目的建设与优化&#xff0c;在软件开发与技术实现方面积累了丰富的经验。专注于Java、小程序、前端、Python等技术领域毕业项目实战&#xff0c;以及程序定制化开发。✌ 擅长…

亚信安全DeepSecurity完成与超云超融合软件兼容性互认

近日&#xff0c;亚信安全与超云数字技术集团有限公司&#xff08;以下简称“超云”&#xff09;联合宣布&#xff0c;亚信安全成功完成与超云超融合软件的产品兼容性互认证。经严格测试&#xff0c;亚信安全云主机安全DeepSecurity与超云FS5000增强型融合系统&#xff08;简称…

深入理解 Apache Shiro:安全框架全解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…

《大宋豪侠传》客户端源码 + 服务端源码 + 工具源码 + 资源,大小16.3G

《大宋豪侠传》客户端源码 服务端源码 工具源码 资源&#xff0c;大小16.3G 下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【源码】《大宋豪侠传》客户端源码 服务端源码 工具源码 资源&#xff0c;大小16.3G 链接: https://pan.baidu.com/s/1lUf84LzXKB3iM7L-1P…