【MongoDB】集群搭建实战 | 副本集 Replica-Set | 分片集群 Shard-Cluster | 安全认证

news2024/11/26 4:26:54

文章目录

    • MongoDB 集群架构
      • 副本集
        • 主节点选举原则
        • 搭建副本集
          • 主节点
          • 从节点
          • 仲裁节点
        • 连接节点
          • 添加副本从节点
          • 添加仲裁者节点
          • 删除节点
        • 副本集读写操作
        • 副本集中的方法
      • 分片集群
        • 分片集群架构目标
          • 第一个副本集
          • 第二个副本集
          • 配置集
          • 初始化副本集
          • 路由集
            • 添加分片
            • 开启分片
            • 集合分片
            • 删除分片
      • 安全认证
        • MongoDB用户和角色权限
        • 副本集安全认证
          • 创建副本集认证的key文件
          • 修改配置文件指定keyfile
        • 分片集群安全认证

MongoDB 集群架构

副本集

MongoDB副本集(Replica Set)是一组维护相同数据集的 MongoDB 实例,它可以提供数据的冗余和高可用性。

  • 副本集由一个主节点(Primary)和多个从节点(Secondary)组成。

    • 客户端所有写操作都会发送到主节点,主节点会记录oplog,然后将写操作同步到从节点。
    • 从节点可以进行读操作和选举新的主节点,从而在主节点故障时实现高可用性。
  • 副本集可以有一个或多个仲裁节点(Arbiter)。

    • 仲裁节点不持有数据,只参与投票来进行选举。

类似于有自动故障恢复功能的主从集群。用多台机器进行同一数据的异步和同步,从而使得多台机器拥有同一数据的多个副本。并且当主库宕机时不需要用户干预的情况下自动切换其他备份服务器做主库。还可以利用副本服务器做只读服务器,实现读写分离,提高负载。通常在生产环境中使用3或5节点副本集,且部署主从节点到不同机器上,可以提供更高的数据冗余和可用性。

副本集使用(主-从-仲裁)节点的架构:

  • 数据冗余: 数据同步到从节点上,提高数据可用性
  • 高可用性: 主节点故障时可以快速选举新的主节点
  • 读写分离: 不同类型的压力分别在不同的节点上执行,从节点可以承担读操作的负载
  • 数据分发: 将数据从一个区域复制到另一个区域,减少另一个区域的读延迟
  • 异地容灾: 在数据中心故障时快速切换到异地

主从复制和副本集区别:

主从集群和副本集最大区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃点 {主、primary} 和一个或多个备份节点 {从、secondary}。


主节点选举原则

MongoDB在副本集中,会自动进行主节点的选举,主节点选举的触发条件

  • 主节点故障
  • 主节点网络不可达(默认心跳信息为10秒)
  • 人工干预(rs.stepDown(600))

一旦触发选举,就要根据一定的规则来选主节点。

选举规则是根据票数来决定谁获胜:

  • 票数最高,且获得了"大多数"成员的投票支持的节点获胜

“大多数”的定义为:假设副本集内投票成员数量为N,则大多数为 N/2+1。例如:3个投票成员,则大多数的值是2。当副本集内存活的数量不足大多数时,整个副本集将无法选举出Primary,副本集将无法提供写服务,处于只读状态。

  • 若票数相同,且都获得了"大多数"成员的投票支持的,数据新的节点获胜。

数据的新旧是通过操作日志oplog来对比的。


搭建副本集

目标:搭建一主一副本一仲裁:

在这里插入图片描述

主节点
  • 建立存放数据和日志的目录
mkdir -p ~/mongodb/replicaset/rs_27017/log ~/mongodb/replicaset/rs_27017/data/db
  • 新建或修改配置文件
vim ~/mongodb/replicaset/rs_27017/mongod.conf

mongod.conf:

  • 注意: /home/cauchy 这里是用户的家目录不能用 ~ 代替,cd && pwd 查看家目录路径。
# Where and how to store data.
storage:
  dbPath: /home/cauchy/mongodb/replicaset/rs_27017/data/db

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/replicaset/rs_27017/log/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/replicaset/rs_27017/log/mongod.pid

replication:
  replSetName: rs

#sharding:

# security:
#   authorization: enabled
  • 启动节点服务
sudo mongod -f ~/mongodb/replicaset/rs_27017/mongod.conf

在这里插入图片描述


从节点
mkdir -p ~/mongodb/replicaset/rs_27018/log ~/mongodb/replicaset/rs_27018/data/db
vim ~/mongodb/replicaset/rs_27018/mongod.conf

mongod.conf:

# Where and how to store data.
storage:
  dbPath: /home/cauchy/mongodb/replicaset/rs_27018/data/db

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/replicaset/rs_27018/log/mongod.log

# network interfaces
net:
  port: 27018
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/replicaset/rs_27018/log/mongod.pid

replication:
  replSetName: rs

#sharding:

# security:
#   authorization: enabled
sudo mongod -f ~/mongodb/replicaset/rs_27018/mongod.conf

仲裁节点
mkdir -p ~/mongodb/replicaset/rs_27019/log ~/mongodb/replicaset/rs_27019/data/db
vim ~/mongodb/replicaset/rs_27019/mongod.conf

mongod.conf:

# Where and how to store data.
storage:
  dbPath: /home/cauchy/mongodb/replicaset/rs_27019/data/db

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/replicaset/rs_27019/log/mongod.log

# network interfaces
net:
  port: 27019
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/replicaset/rs_27019/log/mongod.pid

replication:
  replSetName: rs

#sharding:

# security:
#   authorization: enabled
sudo mongod -f ~/mongodb/replicaset/rs_27019/mongod.conf
连接节点
  • 连接端口(27017)节点,使之成为主节点
mongosh --port=27017
  • 初始化副本集
rs.initiate() # 使用默认配置初始化

在这里插入图片描述

  • 查看副本集信息

使用 rs.conf()rs.status() 查看相应的信息

在这里插入图片描述
可以看到目前副本集中只有一个成员(members),主机(ac34057c51af:27017),仲裁节点(arbiterOnly:false),优先级权值(priority:1),并且当前(27017)节点初始化后变为主节点(primary)。


添加副本从节点

在主节点中添加从节点,将其他成员加入到副本集中

语法:

rs.add(host, arbiterOnly)
ParameterTypeDescription
hoststring or document要添加到副本集的新成员。指定为字符串或配置文档:1)如果是一个字符串,则需要指定新成员的主机名和可选的端口号;2)如果是一个文档,请指定在members数组中找到的副本集成员配置文档。您必须在成员配置文档中指定主机字段。有关文档配置字段的说明,详见下方文档:“主机成员的配置文档”
arbiterOnlyboolean可选的。仅在值为字符串时适用。如果为true,则添加的主机是仲裁者。

主机成员的配置文档:(可通过 rs.conf() 查看)

{
  _id:<int>,
  host:<string>,
  arbiterOnly:<boolean>,
  buildIndexes:<boolean>,
  hidden:<boolean>,
  priority:<number>,
  tags:<document>,
  slaveDelay:<int>,
  votes:<number>
}
  • 将27018的副本节点加添加到副本集中

主机名直接用主机成员的配置文档中的即可

rs.add("ac34057c51af:27018", false)

在这里插入图片描述


添加仲裁者节点
rs.add(host,arbiterOnly) 或者 rs.addArb(host)

如下添加仲裁节点 rs.addArb("ac34057c51af:27019")

在这里插入图片描述

【错误信息】:【Reconfig attempted to install a config that would change the implicit default write concern. Use the setDefaultRWConcern command to set a cluster-wide write concern and try the reconfig again.】

【解决】:设置全局默认写入关注点,详细的 Write Concern 和 Read Concern 可参考官网文档。

  • 以下操作将全局写入关注设置为:

    • w: 2
db.adminCommand({
  "setDefaultRWConcern" : 1,
  "defaultWriteConcern" : {
    "w" : 2
  }
})

设置完成后,再次执行:

rs.addArb("ac34057c51af:27019")

在这里插入图片描述


删除节点

从副本集中删除节点

rs.remove(host)

副本集读写操作
  • 主节点
use test
db.comment.insert({userid: "001", username: "cauchy", content: "专家有言:早上空腹不能吃饭", timestamp: new Date()})

成功读写操作:

在这里插入图片描述

  • 从节点
mongosh --port=27018

在这里插入图片描述
目前无法读取任何数据,需要主动承认自己是从节点:

db.getMongo().setReadPref("primaryPreferred")

执行成功,从节点只读不可写:

在这里插入图片描述


Read Preference:Read Preference — MongoDB Manual

readPreference 主要控制客户端 driver 从副本集(Replica Set)读数据的时候如何路由,如下图,这个特性可以方便的配置读写分离、就近去读等策略。

在这里插入图片描述

读策略各模式:

  1. primary:只从 primary 节点读数据(默认模式)

  2. primaryPreferred:先主后从。优先从 primary 读取,primary 不可用时从 secondary 读

  3. secondary:只从副本集中 secondary 节点读数据

  4. secondaryPreferred:先从后主。优先从 secondary 读取,如果 secondary 不可用时就从 primary 读

  5. nearest:就近。根据网络距离,就近读取,根据客户端与服务端的 PingTime 实现


副本集中的方法

可以通过 rs.help() 返回副本集功能的基本帮助文档

在这里插入图片描述


分片集群

分片是一种跨多台机器分布数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署。
换句话说:分片就是将数据拆分,将其分散到不同的机器上的过程。

  • 分片包含的组件

    • 分片(存储):每个分片包含分片数据的子集。每个分片都可以部署为副本集。
    • mongos(路由):mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口。
    • config servers("调度"的配置):配置服务器存储群集的元数据和配置设置。

在这里插入图片描述


分片集群架构目标

在这里插入图片描述


第一个副本集
  • 创建存放数据和日志的目录
mkdir -p ~/mongodb/sharded_cluster/shardrs_01_27018/data/db ~/mongodb/sharded_cluster/shardrs_01_27018/log
mkdir -p ~/mongodb/sharded_cluster/shardrs_01_27118/data/db ~/mongodb/sharded_cluster/shardrs_01_27118/log
mkdir -p ~/mongodb/sharded_cluster/shardrs_01_27218/data/db ~/mongodb/sharded_cluster/shardrs_01_27218/log
  • 新建或修改配置文件
vim ~/mongodb/sharded_cluster/shardrs_01_27018/mongod.conf
vim ~/mongodb/sharded_cluster/shardrs_01_27118/mongod.conf
vim ~/mongodb/sharded_cluster/shardrs_01_27218/mongod.conf
  1. shardrs_01_27018/mongod.conf
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /home/cauchy/mongodb/sharded_cluster/shardrs_01_27018/data/db
#  engine:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/sharded_cluster/shardrs_01_27018/log/mongod.log

# network interfaces
net:
  port: 27018
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/sharded_cluster/shardrs_01_27018/log/mongod.pid

# security:
#   authorization: enabled

#operationProfiling:

replication:
  replSetName: shardrs_01

sharding:
  clusterRole: shardsvr

#sharding:

## Enterprise-Only Options:

#auditLog:
  1. shardrs_01_27118/mongod.conf
  2. shardrs_01_27218/mongod.conf

同理修改即可。


第二个副本集
mkdir -p ~/mongodb/sharded_cluster/shardrs_02_27318/data/db ~/mongodb/sharded_cluster/shardrs_02_27318/log
mkdir -p ~/mongodb/sharded_cluster/shardrs_02_27418/data/db ~/mongodb/sharded_cluster/shardrs_02_27418/log
mkdir -p ~/mongodb/sharded_cluster/shardrs_02_27518/data/db ~/mongodb/sharded_cluster/shardrs_02_27518/log
vim ~/mongodb/sharded_cluster/shardrs_02_27318/mongod.conf
vim ~/mongodb/sharded_cluster/shardrs_02_27418/mongod.conf
vim ~/mongodb/sharded_cluster/shardrs_02_27518/mongod.conf
  1. shardrs_02_27318/mongod.conf
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /home/cauchy/mongodb/sharded_cluster/shardrs_02_27318/data/db
#  engine:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/sharded_cluster/shardrs_02_27318/log/mongod.log

# network interfaces
net:
  port: 27318
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/sharded_cluster/shardrs_02_27318/log/mongod.pid

# security:
#   authorization: enabled

#operationProfiling:

replication:
  replSetName: shardrs_02

sharding:
  clusterRole: shardsvr

#sharding:

## Enterprise-Only Options:

#auditLog:
  1. shardrs_02_27418/mongod.conf
  2. shardrs_02_27518/mongod.conf

同理修改即可。


配置集
mkdir -p ~/mongodb/sharded_cluster/configrs_27019/data/db ~/mongodb/sharded_cluster/configrs_27019/log
mkdir -p ~/mongodb/sharded_cluster/configrs_27119/data/db ~/mongodb/sharded_cluster/configrs_27119/log
mkdir -p ~/mongodb/sharded_cluster/configrs_27219/data/db ~/mongodb/sharded_cluster/configrs_27219/log
  1. configrs_27019/mongod.conf
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /home/cauchy/mongodb/sharded_cluster/configrs_27019/data/db
#  engine:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/sharded_cluster/configrs_27019/log/mongod.log

# network interfaces
net:
  port: 27019
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/sharded_cluster/configrs_27019/log/mongod.pid

# security:
#   authorization: enabled

#operationProfiling:

replication:
  replSetName: configrs

sharding:
  clusterRole: configsvr

## Enterprise-Only Options:

#auditLog:
  1. configrs_27119/mongod.conf
  2. configrs_27219/mongod.conf

同理修改即可。


初始化副本集
  • 两个副本集的初始化,和上文副本集中,连接节点处讲解一致

  • 配置集没有仲裁节点,将两个节点以从节点的方式加入即可


路由集

mongos服务,不是mongod服务

  • 仅需要创建日志目录
mkdir -p ~/mongodb/sharded_cluster/mongos_27017/log
mkdir -p ~/mongodb/sharded_cluster/mongos_27117/log
  • 新建或修改配置文件
vim ~/mongodb/sharded_cluster/mongos_27017/mongos.conf
vim ~/mongodb/sharded_cluster/mongos_27117/mongos.conf
  1. mongos_27017/mongos.conf
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/sharded_cluster/mongos_27017/log/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/sharded_cluster/mongos_27017/log/mongod.pid

# security:
#   authorization: enabled

#operationProfiling:

# replication:

sharding:
  configDB: configrs/ac34057c51af:27019,ac34057c51af:27119,ac34057c51af:27219

#sharding:

## Enterprise-Only Options:

#auditLog:
  1. mongos_27117/mongos.conf
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/cauchy/mongodb/sharded_cluster/mongos_27117/log/mongod.log

# network interfaces
net:
  port: 27117
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
  pidFilePath: /home/cauchy/mongodb/sharded_cluster/mongos_27117/log/mongod.pid

# security:
#   authorization: enabled

#operationProfiling:

# replication:

sharding:
  configDB: configrs/ac34057c51af:27019,ac34057c51af:27119,ac34057c51af:27219

#sharding:

## Enterprise-Only Options:

#auditLog:
  • 启动路由节点 mongos 服务
sudo mongos -f ~/mongodb/sharded_cluster/mongos_27017/mongos.conf
sudo mongos -f ~/mongodb/sharded_cluster/mongos_27117/mongos.conf

此时路由还不能找到分片,要添加分片到路由中。


添加分片

语法:

sh.addShard("IP:Port")
  • 添加第一套副本集

在这里插入图片描述

  • 添加第二套副本集

在这里插入图片描述

开启分片

sh.enableSharding("库名") 需要先对对库开启分片功能

在这里插入图片描述

集合分片

对集合分片,必须使用 sh.shardCollection() 方法指定集合和分片键

  • 片键(Shard Key)是每条记录都必须包含的,且建立了索引的单个字段或复合字段,MongoDB 按照片键将数据划分到不同的数据块中,并将数据块均衡地分布到所有分片中。

    • MongoDB 使用基于哈希的分片方式(随机平均分配)或者基于范围的分片方式(数值大小分配)

语法:

sh.shardCollection(namespace,key,unique)
ParameterTypeDescription
namespacestring要(分片)共享对目标集合对命名空间,格式:<database>.<collection>
keydocument用作分片键的索引规范文档。shard键决定MongoDB如何在shard之间分发文档。除非集合为空,否则索引必须在shard collection命令之前存在。如果集合为空,则MongoDB在对集合进行分片之前创建索引,前提是支持分片键的索引不存在。简单来说:由包含字段和该字段的索引遍历方向的文档组成。
uniqueboolean当值为true,片键字段上会限制为确保是唯一索引,哈希策略片键不支持唯一索引,默认为false

测试 test_db 库的 comment 集合,以 username 为键,以哈希策略来分片:

sh.shardCollection("test_db.comment", {"username": "hashed"})

在这里插入图片描述


  • 分片规则一:哈希策略

对于基于哈希的分片,MongoDB 计算一个学段的哈希值,并用这个哈希值来创建数据块。

在使用基于哈希分片的系统中,拥有"相近"片键的文档很可能不会存储在同一个数据块中,因此数据的分离性更好一些

测试哈希策略:

for(var i=0;i<1000;i++){db.comment.insert({userid: i, username: "cauchy"+i})}

在这里插入图片描述

在分片1中查看:

mongosh --port=27018
use test_db
db.comment.countDocuments()

在这里插入图片描述

在分片2中查看:

在这里插入图片描述


  • 分片规则二:范围策略

对于基于范围的分片,MongoDB按照片键的范围把数据分成不同部分。假设有一个数字的片键想象一个从负无穷到正无穷的直线,每一个片键的值都在直线上画了一个点。MongoDB 把这条直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了片键在一定范围内的数据。

在使用片键做范围划分的系统中,拥有相近"片键的文档很可能存储诸在同一个数据块中,因此也会存储在同一个分片中。

sh.shardCollection("test_db.author", {"age": 1})

在这里插入图片描述


删除分片
use config
db.databases.remove({"_id": "test_db"})
db.shards.remove({_id: "shardrs_01"})
db.shards.remove({_id: "shardrs_02"})

安全认证

MongoDB用户和角色权限

参考上篇博客

副本集安全认证
创建副本集认证的key文件

在这里插入图片描述

  • 生成一个key文件到当前文件夹中

可以使用任何方法生成密钥文件。例如,以下操作使用 openssl 生成密码文件,然后使用 chmod 来更改文件权限
仅为文件所有者提供读取权限:

openssl rand -base64 128 > ./mongo.keyfile
chmod 400 ./mongo.keyfile

所有副本集节点都必须要用同一份keyfile,一般是在一台机器上生成,然后拷贝到其他机器上,且必须有读的权
限。
一定要保证密钥文件一致,文件位置随便。但是为了方便查找,建议每台机器都防放到一个固定的位置,都防放到和配
置文件一起的目录中。

  • 将该文件分别拷贝到多个目录中
cp mongo.keyfile ~/mongodb/replicaset/rs_27017
cp mongo.keyfile ~/mongodb/replicaset/rs_27018
cp mongo.keyfile ~/mongodb/replicaset/rs_27019

修改配置文件指定keyfile
...
security:
  keyFile: /home/cauchy/mongodb/replicaset/rs_27017/mongo.keyfile
  authorization: enabled
...
...
security:
  keyFile: /home/cauchy/mongodb/replicaset/rs_27018/mongo.keyfile
  authorization: enabled
...
...
security:
  keyFile: /home/cauchy/mongodb/replicaset/rs_27019/mongo.keyfile
  authorization: enabled
...
分片集群安全认证

每个节点上都要添加 keyfile,其他步骤同副本集一样。


参考:https://www.bilibili.com/video/BV1bJ411x7mq

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

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

相关文章

[DC29 Quals] Reverse-Tiamat -wp

前言&#xff1a;我将尽量以自己做题时的思考过程来组织本文&#xff0c;所以本文可能不适合阅读&#xff0c;知识点也会比较散碎的出现。 ​1. qemu-user 简介 简单介绍一点本题所涉及的 qemu 相关知识&#xff0c;需要声明的是这一节不是对 qemu 的源码分析&#xff0c;仅仅…

【软件测试】Linux系统下搭建JDK+JMeter环境详细步骤,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Linux搭建JDK环境…

王道p18 07.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。(c语言代码实现)

视频讲解在这&#xff1a;&#x1f447; p18 第7题 c语言代码实现王道数据结构课后代码题_哔哩哔哩_bilibili 本题代码如下 int merge(struct sqlist* A, struct sqlist* B, struct sqlist* C) {if (A->length B->length > C->length)//大于顺序表的最大长度r…

NewStarCTF 2023 公开赛道 Web

NewStarCTF 2023 公开赛道 Web WEEK1|WEB 泄漏的秘密 泄露的秘密&#xff0c;直接看常见的目录robots.txt,www.zip直接那道两段flag 也可以用dirsearch工具扫描&#xff0c;但是BUUOJ平台的网站只能开底线程&#xff0c;不然全是429 PART ONE: flag{r0bots_1s_s0_us3ful $…

宝塔面板使用Supervisor进程守护插件,配置守护Mysql的操作教程。

本篇文章主要讲解&#xff0c;在宝塔面板中使用Supervisor进程守护插件&#xff0c;配置守护Mysql的操作教程。 作者&#xff1a;任聪聪 日期&#xff1a;2023年11月5日 一、安装守护进程插件 安装插件一、进程守护插件 安装说明&#xff1a;在软件商店中搜索“进程守护”&am…

Leetcode-1 两数之和

暴力穷举 class Solution {public int[] twoSum(int[] nums, int target) {int[] num new int[2];for(int i0;i<nums.length-1;i){for(int ji1;j<nums.length;j){if(nums[i]nums[j]target){num[0]i;num[1]j;}}}return num;} }HashMap&#xff0c;记录下标和对应值&…

【漏洞复现】weblogic-10.3.6-‘wls-wsat‘-XMLDecoder反序列化(CVE-2017-10271)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描nacsweblogicScanner3、漏洞验证 说明内容漏洞编号CVE-2017-10271漏洞名称Weblogic < 10.3.…

Qt::WindowFlags

Qt::WindowFlags 文章目录 Qt::WindowFlags摘要窗口&部件Qt::WindowFlags&WindowType窗口类型窗口提示 关键字&#xff1a; Qt、 Qt::WindowFlags、 Qt::WindowType、 关键字4、 关键字5 摘要 今天在公司解决自己的Bugs的时候&#xff0c;发现一个以前可以用的功…

MSF暴力破解SID和检测Oracle漏洞

暴力破解SID 当我们发现 Oracle 数据库的 1521 端口时,我们可能考虑使用爆破 SID(System Identifier)来进行进一步的探测和认证。在 Oracle 中,SID 是一个数据库的唯一标识符。当用户希望远程连接 Oracle 数据库时,需要了解以下几个要素:SID、用户名、密码以及服务器的 I…

antv/g6之交互模式mode

什么是mode 在 AntV G6 中&#xff0c;“mode” 是用于配置图表交互模式的一种属性。通过设置 “mode”&#xff0c;可以控制图表的行为&#xff0c;以满足不同的交互需求。可能在不同的场景需要展现的交互行为不一样。比如查看模式下点击一个点就选中的状态&#xff0c;在编辑…

ZZ038 物联网应用与服务赛题第J套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;J卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…

LeetCode 热题100——链表专题

一、俩数相加 2.俩数相加&#xff08;题目链接&#xff09; 思路&#xff1a;这题题目首先要看懂&#xff0c;以示例1为例 即 342465807&#xff0c;而产生的新链表为7->0->8. 可以看成简单的从左向右&#xff0c;低位到高位的加法运算&#xff0c;4610&#xff0c;逢…

1115 Counting Nodes in a Binary Search Tree(30分)

题目翻译&#xff1a; 给定一组序列&#xff0c;请建立二叉搜索树 题解思路&#xff1a; 注意是二叉搜索树BST&#xff0c;而非平衡二叉树AVL&#xff0c;两者的区别如下&#xff1a; BST&#xff1a; AVL&#xff1a; 因此只需要采用常规的建树手段即可&#xff0c;需要注…

【ARMv8 SIMD和浮点指令编程】浮点加减乘除指令——四则运算

浮点指令有专门的加减乘除四则运算指令,比如 FADD、FSUB、FMUL、FDIV 等。 1 FADD (scalar) 浮点加法(标量)。该指令将两个源 SIMD&FP 寄存器的浮点值相加,并将结果写入目标 SIMD&FP 寄存器。 该指令可以产生浮点异常。根据 FPCR 中的设置,异常会导致在 FPSR 中…

如何避免 JavaScript 中的内存泄漏?

一、什么是内存泄漏&#xff1f; JavaScript 就是所谓的垃圾回收语言之一&#xff0c;垃圾回收语言通过定期检查哪些先前分配的内存仍然可以从应用程序的其他部分“访问”来帮助开发人员管理内存。垃圾回收语言中泄漏的主要原因是不需要的引用。如果你的 JavaScript 应用程序经…

【Spring源码分析】BeanFactory系列接口解读

认识Bean工厂 一、认识Bean工厂BeanFactoryListableBeanFactoryHierarchicalBeanFactoryAutowireCapableBeanFactoryConfigurableBeanFactoryConfigurableListableBeanFactory 二、总结 一、认识Bean工厂 Spring Bean 工厂是Spring框架提供的一种机制&#xff0c;用于创建和管理…

艺术的维度:洞察AI诈骗,优雅防范之艺术

当前&#xff0c;AI技术的广泛应用为社会公众提供了个性化智能化的信息服务&#xff0c;也给网络诈骗带来可乘之机&#xff0c;如不法分子通过面部替换语音合成等方式制作虚假图像、音频、视频仿冒他人身份实施诈骗、侵害消费者合法权益。 以下是一些常见的AI诈骗例子&#xf…

SurfaceFlinger的硬件Vsync深入分析-千里马android framework车机手机系统开发

背景&#xff1a; 学过或者你看过surfaceflinger相关文章同学都知道&#xff0c;vsync其实都是由surfaceflinger软件层面进行模拟的&#xff0c;但是软件模拟有可能会有误差或偏差&#xff0c;这个时候就需要有个硬件vsync帮忙校准。 故才会在surfaceflinger的systrace出现如下…

MFC串口通信(SerialPort)

目录 1、SerialPort类的介绍和使用&#xff1a; &#xff08;1&#xff09;、SerialPort类的功能介绍 &#xff08;2&#xff09;、SerialPort类提供接口函数的介绍 1&#xff09;、InitPort函数 2&#xff09;、控制串口监视线程函数 3&#xff09;、获取事件&#xff0c…

一文读懂从 CPU 多级缓存 缓存一致性协议(MESI)到 Java 内存模型

文章目录 CPU 多级缓存 & 缓存一致性协议&#xff08;MESI&#xff09;CPU 多级缓存缓存一致性协议&#xff08;MESI&#xff09;缓存行&#xff08;Cache line&#xff09;四种缓存状态缓存行状态转换多核协同示例网站体验 MESI优化和引入的问题Store Bufferes & Inva…