安装搭建MongoDB及配置副本集

目录

一、什么是MongoDB的副本集

简介

(1)冗余和数据可用性

(2)MongoDB中的复制

(3)主从复制和副本集区别

二、副本集的架构

三、副本集的成员

四、部署副本集

1、节点划分

2、安装MongoDB

2.1、下载解压安装包

3、创建主节点

3.1、创建存储数据和日志的目录

3.2、新建配置文件

3.3、启动节点服务

4、创建副本节点

4.1、创建存储数据和日志的目录

4.2、新建配置文件

4.3、启动节点服务

5、创建仲裁节点

5.1、创建存储数据和日志的目录

5.3、启动节点服务

配置system启动服务

6、添加环境变量

7、初始化副本集

7.1、客户端连接主节点

7.2、初始化副本集

8、查看副本集信息

8.1、查看副本集的配置内容

8.2、查看集群状态

9、添加副本节点和仲裁节点

10、再次查看副本集配置信息

11、设置SECONDARY副本节点可读

五、测试副本集的数据读写操作

1、主节点测试

2、副本节点测试

2.1、设置副本节点只能作为备份不能读取

3、仲裁节点不存放任何数据

六、主节点的选举原则

1、主节点选举触发条件

2、选举规则

七、集群故障分析

1、主节点故障

2、副本节点故障

3、仲裁节点故障

4、主节点和仲裁节点故障

5、从节点和仲裁节点故障

6、主节点和从节点故障

7、所有节点故障


一、什么是MongoDB的副本集

简介

MongoDB 中的副本集(Replica Sets)是一组维护相同数据集的MongoDB服务。副本集可提供冗余和高可用性,是所有生产部署的基础。

也可以说,副本集类似于有自动故障恢复功能的主从集群 。通俗的讲就是用 多台机器进行同一数据的异步同步,从而使多台及其拥有同一数据的多个副本,并且当主库宕掉时在不需要用户干预的情况下自动切换其他服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。

(1)冗余和数据可用性

复制提供冗余并提高数据可用性。通过在不同数据库服务器上提供多个数据副本,复制可提供一定级别的容错功能,以防止丢失单个数据库服务器。

(2)MongoDB中的复制

副本集是一组维护相同数据集的MongoDB实例。副本集包含多个数据承载节点和可选的一个仲裁节点。在承载数据的节点中,一个且仅一个成员被视为主节点,而且他节点被视为次要(从)节点。

主节点接受所有读写操作。副本集只能由一个主要能够具有{w: “most”}写入关注的写入;虽然在某些 情况下,另一个MongoDB实例可能暂时认为自己也是主要的。主要记录其操作日志中的数据集的所有更改,即oplog。

(3)主从复制和副本集区别

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

二、副本集的架构

  • 一个副本集最多有50个节点。一个副本集最多有7个投票节点,其余节点必须是没有投票权的节点。

  • 副本集的最小推荐配置是三个节点:

    • 一个主节点和两个从节点。
    • 一个主节点、一个从节点和仲裁节点。

 

三、副本集的成员

副本集有两种类型三种角色
  • 两种类型

    • 主节点(Primary)类型:数据操作的主要连接点,可读写

    • 次要(辅助、从)节点(Secondaries)类型:数据冗余备份节点,可以读或选举

  • 三种角色

    • 主要成员(Primary):主要接收所有写操作。就是主节点。

    • 副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型

    • 仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用,当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。

  • 建议

    • 如果你的副本+主节点的个数是偶数,建议加一个仲裁者,形成奇数,容易满足大多数的投票。

    • 如果你的副本+主节点的个数是奇数,可以不加仲裁者。

四、部署副本集

1、节点划分

由于测试使用一台机器上部署三个mongodb节点,生产环境需要两到三台机器 
端口角色
27017主节点
27018副本节点
27019仲裁节点

2、安装MongoDB

2.1、下载解压安装包

官方安装包获取地址:Download MongoDB Community Server | MongoDB

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.29.tgz
tar xzvf mongodb-linux-x86_64-rhel70-4.4.29.tgz -C /usr/local
cd /usr/local/
ln -s /usr/local/mongodb-linux-x86_64-rhel70-4.4.29 /usr/local/mongodb

3、创建主节点

3.1、创建存储数据和日志的目录
mkdir -p /usr/local/mongodb/replica_sets/mongors_27017/log
mkdir -p /usr/local/mongodb/replica_sets/mongors_27017/data/db
3.2、新建配置文件
vim /usr/local/mongodb/replica_sets/mongors_27017/mongod.confsystemLog:destination: filepath: "/usr/local/mongodb/replica_sets/mongors_27017/log/mongod.log"logAppend: true
storage:dbPath: "/usr/local/mongodb/replica_sets/mongors_27017/data/db"journal:# 启用持久性日志enabled: true
processManagement:fork: truepidFilePath: "/usr/local/mongodb/replica_sets/mongors_27017/log/mongod.pid"
net:bindIp: localhost,192.168.95.195port: 27017
replication:replSetName: mongors
3.3、启动节点服务
[root@localhost local]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/replica_sets/mongors_27017/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 37112
child process started successfully, parent exiting

4、创建副本节点

4.1、创建存储数据和日志的目录
mkdir -p /usr/local/mongodb/replica_sets/mongors_27018/log
mkdir -p /usr/local/mongodb/replica_sets/mongors_27018/data/db
4.2、新建配置文件
vim /usr/local/mongodb/replica_sets/mongors_27018/mongod.confsystemLog:destination: filepath: "/usr/local/mongodb/replica_sets/mongors_27018/log/mongod.log"logAppend: true
storage:dbPath: "/usr/local/mongodb/replica_sets/mongors_27018/data/db"journal:enabled: true
processManagement:fork: truepidFilePath: "/usr/local/mongodb/replica_sets/mongors_27018/log/mongod.pid"
net:bindIp:  localhost,192.168.95.195port: 27018
replication:replSetName: mongors
4.3、启动节点服务
[root@localhost ~]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/replica_sets/mongors_27018/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 38263
child process started successfully, parent exiting

5、创建仲裁节点

5.1、创建存储数据和日志的目录
mkdir -p /usr/local/mongodb/replica_sets/mongors_27019/log
mkdir -p /usr/local/mongodb/replica_sets/mongors_27019/data/db

5.2、创建配置文件 

vim /usr/local/mongodb/replica_sets/mongors_27019/mongod.confsystemLog:destination: filepath: "/usr/local/mongodb/replica_sets/mongors_27019/log/mongod.log"logAppend: true
storage:dbPath: "/usr/local/mongodb/replica_sets/mongors_27019/data/db"journal:# 启用持久性日志enabled: true
processManagement:fork: truepidFilePath: "/usr/local/mongodb/replica_sets/mongors_27019/log/mongod.pid"
net:bindIp:  localhost,192.168.95.195port: 27019
replication:replSetName: myrs
5.3、启动节点服务
[root@localhost ~]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/replica_sets/mongors_27019/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 38314
child process started successfully, parent exiting

配置mongodb system启动服务

以上节点启动可制作systemctl start mongodb.service可以参考以下文章链接
mongodb设置system开机自启_mongodb开机自启动-CSDN博客

6、添加环境变量

vim /etc/profileexport PATH=/usr/local/mongodb/bin/:$PATHsource /etc/profile
[root@localhost ~]# which mongo
/usr/local/mongodb/bin/mongo

7、初始化副本集

7.1、客户端连接主节点
mongo --host 192.168.95.195 --port=27017
7.2、初始化副本集

当前并未选举主节点(primary),并且操作没有设置为允许从辅助节点(secondary)上读取。

所以很多命令无法使用,必须初始化副本集

> show dbs
uncaught exception: Error: listDatabases failed:{"topologyVersion" : {"processId" : ObjectId("692f9e56d74e94faba5875bc"),"counter" : NumberLong(0)},"ok" : 0,"errmsg" : "not master and slaveOk=false","code" : 13435,"codeName" : "NotPrimaryNoSecondaryOk"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:147:19
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:99:12
shellHelper.show@src/mongo/shell/utils.js:937:13
shellHelper@src/mongo/shell/utils.js:819:15
@(shellhelp2):1:1

 初始化副本集

双击回车,成为主节点(一次回车→SECONDARY,两次回车→PRIMARY)

执行结果: 

> rs.initiate()
{"info2" : "no configuration specified. Using a default configuration for the set","me" : "192.168.95.195:27017","ok" : 1
}
mongors:SECONDARY>
mongors:PRIMARY>
mongors:PRIMARY>
mongors:PRIMARY>
  • "ok"的值为1,说明创建成功。

  • 命令行提示符发生变化,变成了一个从节点角色,此时默认不能读写。

  • 稍等片刻,发现副本集只有自己一个,变成主节点。

8、查看副本集信息

8.1、查看副本集的配置内容
mongors:PRIMARY> rs.config()
{"_id" : "mongors","version" : 1,"term" : 1,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "192.168.95.195:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1}],"settings" : {"chainingAllowed" : true,"heartbeatIntervalMillis" : 2000,"heartbeatTimeoutSecs" : 10,"electionTimeoutMillis" : 10000,"catchUpTimeoutMillis" : -1,"catchUpTakeoverDelayMillis" : 30000,"getLastErrorModes" : {},"getLastErrorDefaults" : {"w" : 1,"wtimeout" : 0},"replicaSetId" : ObjectId("662fa68cd74e84faba9867e0")}
}

提示:
rs.config()是该方法的别名。

configuration:可选,如果没有配置,则使用默认主节点配置。

说明

  • "_id" : "mongors" :副本集的配置数据存储的主键值,默认就是副本集的名字

  • "members" :副本集成员数组,此时只有一个:"host" : "192.168.112.40:27017"

  • 该成员不是仲裁节点: "arbiterOnly" : false

  • 优先级(权重值): "priority" : 1

  • "settings" :副本集的参数配置。

8.2、查看集群状态
rs.status()

9、添加副本节点和仲裁节点

添加副本节点
mongors:PRIMARY> rs.add("192.168.95.195:27018")
{"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1714399646, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1714399646, 1)
}

添加仲裁节点

mongors:PRIMARY> rs.addArb("192.168.95.195:27019")
{"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1714399738, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1714399738, 1)
}

10、再次查看副本集配置信息

mongors:PRIMARY> rs.conf()
{"_id" : "mongors","version" : 3,"term" : 1,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "192.168.112.40:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 1,"host" : "192.168.112.40:27018","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 2,"host" : "192.168.112.40:27019","arbiterOnly" : true,"buildIndexes" : true,"hidden" : false,"priority" : 0,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1}],"settings" : {"chainingAllowed" : true,"heartbeatIntervalMillis" : 2000,"heartbeatTimeoutSecs" : 10,"electionTimeoutMillis" : 10000,"catchUpTimeoutMillis" : -1,"catchUpTakeoverDelayMillis" : 30000,"getLastErrorModes" : {},"getLastErrorDefaults" : {"w" : 1,"wtimeout" : 0},"replicaSetId" : ObjectId("662fa69cd74e84faba8865e0")}
}
  • 成员信息:
    • 成员1(_id: 0)和成员2(_id: 1)都是数据承载节点,它们位于同一台机器的不同端口(27017 和 27018)。两者都有相同的优先级("priority" : 1),意味着它们都可以成为主节点。它们都没有延迟复制("slaveDelay" : NumberLong(0)),并且都参与选举投票("votes" : 1)。
    • 成员3(_id: 2)是一个仲裁者(arbiterOnly: true),位于端口27019。仲裁者的角色是在选举新主节点时起到决定性的一票作用,但它不存储实际数据,也没有优先级,不参与数据复制。

11、设置SECONDARY副本节点可读

rs.slaveOk()

五、测试副本集的数据读写操作

1、主节点测试

[root@localhost ~]# mongo --port 27017mongors:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
mongors:PRIMARY> use test1
switched to db test1
mongors:PRIMARY> db.q1.insert({"id":"1000","content":"学习部署副本集","userid":"001","name":"xjx","createdatatime":new Date(),"state":null})
WriteResult({ "nInserted" : 1 })
mongors:PRIMARY> db.q1.find().pretty()
{"_id" : ObjectId("662fb0d727a6cea3c847b26e"),"id" : "1000","content" : "学习部署副本集","userid" : "001","name" : "xjx","createdatatime" : ISODate("2024-08-15T14:38:15.243Z"),"state" : null
}

2、副本节点测试

[root@localhost ~]# mongo --port 27018mongors:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test1   0.000GB
myrs:SECONDARY> use test1
switched to db test1
myrs:SECONDARY> show tables;
q1
mongors:SECONDARY> db.q1.find().pretty()
{"_id" : ObjectId("662fb0d727a6cea3c847b26e"),"id" : "1000","content" : "学习部署副本集","userid" : "001","name" : "xjx","createdatatime" : ISODate("2024-08-15T14:38:15.243Z"),"state" : null
}
mongors:SECONDARY> db.q1.insert({"id":"1001","content":"学习部署副本集","userid":"002","name":"lisi","createdatatime":new Date(),"state":null})
WriteCommandError({"topologyVersion" : {"processId" : ObjectId("662fa148dfb1efa1f75795c3"),"counter" : NumberLong(4)},"operationTime" : Timestamp(1714402027, 1),"ok" : 0,"errmsg" : "not master","code" : 10107,"codeName" : "NotWritablePrimary","$clusterTime" : {"clusterTime" : Timestamp(1714402027, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
})
  • 无法写入数据

  • "errmsg" : "not master"

  • "codeName" : "NotWritablePrimary" 

2.1、设置副本节点只能作为备份不能读取
#设置从节点有读取权限
rs.slaveOk()
# 取消从节点的数据读取权限
rs.slaveOk(false)

3、仲裁节点不存放任何数据

[root@localhost ~]# mongo --port 27019mongors:ARBITER> show dbs
uncaught exception: Error: listDatabases failed:{"topologyVersion" : {"processId" : ObjectId("662fa25360629ad0a0f05cc1"),"counter" : NumberLong(1)},"ok" : 0,"errmsg" : "not master and slaveOk=false","code" : 13435,"codeName" : "NotPrimaryNoSecondaryOk"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:147:19
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:99:12
shellHelper.show@src/mongo/shell/utils.js:937:13
shellHelper@src/mongo/shell/utils.js:819:15
@(shellhelp2):1:1
mongors:ARBITER> rs.slaveOk()
WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.
mongors:ARBITER> show dbs
uncaught exception: Error: listDatabases failed:{"topologyVersion" : {"processId" : ObjectId("662fa25360629ad0a0f05cc1"),"counter" : NumberLong(1)},"ok" : 0,"errmsg" : "node is not in primary or recovering state","code" : 13436,"codeName" : "NotPrimaryOrSecondary"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:147:19
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:99:12
shellHelper.show@src/mongo/shell/utils.js:937:13
shellHelper@src/mongo/shell/utils.js:819:15
@(shellhelp2):1:1

"errmsg" : "node is not in primary or recovering state"

仲裁节点(Arbiter)在MongoDB副本集中仅用于选举过程中的投票,并不存储数据

六、主节点的选举原则

1、主节点选举触发条件

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

    • 主节点故障

    • 主节点网络不可达(默认心跳信息为10秒)

    • 人工干预(rs.stepDown(600))primary直接降级在600s内不会把自己选为primary

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

2、选举规则

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

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

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

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

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

  • 在获得票数的时候,优先级(priority)参数影响重大。

  • 可以通过设置优先级(priority)来设置额外票数。优先级即权重,取值为0-1000,相当于增加0-1000的票数,优先级的值越大,就越可能获得多数成员的投票(votes)数。指定较高的值可使成员更有资格成员主要成员,更低的值可使成员更不符合条件。

  • 默认情况下,优先级的值是1

七、集群故障分析

1、主节点故障

  • 从节点和仲裁节点对主节点的心跳失败,当失败超过10秒,此时因为没有主节点了,会自动发起投票。
    • 而副本节点只有一台,因此,候选人只有一个就是副本节点,开始投票。
    • 仲裁节点向副本节点投了一票,副本节点本身自带一票,因此共两票,超过了"大多数"。
    • 27019是仲裁节点,没有选举权,27018不向其投票,其票数是0。
    • 最终结果,27018成为主节点。具备读写功能。
  • 再启动 27017主节点,发现27017变成了从节点,27018仍保持主节点。
  • 登录27017节点,发现是从节点了,数据自动从27018同步。
  • 此时:不影响正常使用

2、副本节点故障

  • 主节点和仲裁节点对副本节点的心跳失败。因为主节点还在,因此,没有触发投票选举。
    如果此时,在主节点写入数据。再启动从节点,会发现,主节点写入的数据,会自动同步给从节点。
  • 此时:不影响正常使用

3、仲裁节点故障

  • 主节点和副本节点对仲裁节点的心跳失败。因为主节点还在,因此,没有触发投票选举。
  • 此时:不影响正常使用

4、主节点和仲裁节点故障

副本集中没有主节点了,导致此时,副本集是只读状态,无法写入。

因为27017的票数,没有获得大多数,即没有大于等于2,它只有默认的一票(优先级是1)
如果要触发选举,随便加入一个成员即可。

  • 如果只加入 27019仲裁节点成员,则主节点一定是27017,因为没得选了,仲裁节点不参与选举,但参与投票。
  • 如果只加入 27018节点,会发起选举。因为27017和27018都是两票,则按照谁数据新,谁当主节点。

此时:影响正常使用,需要处理

5、从节点和仲裁节点故障

10秒后,27017主节点自动降级为副本节点。(服务降级)
副本集不可写数据了,已经故障了。

此时:影响正常使用,需要处理

6、主节点和从节点故障

集群将处于不完全状态,无法执行写操作,因为剩余的副本节点不足以立即选出新的主节点(假设只剩一个副本节点和仲裁节点)。直到至少有一个额外的副本节点在线并同步,以便选举出新的主节点

此时:影响正常使用,需要处理

7、所有节点故障

  • 整个集群不可用,既不能执行读也不能执行写操作。

  • 这种情况需要手动干预,逐一排查并恢复各个节点,确保至少一个主节点和多数节点(包括仲裁节点)在线,以恢复集群服务。

  • 此时:影响正常使用,需要处理

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

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

相关文章

Jetpack 各种框架简介

Jetpack是Google推出的一套为Android开发提供极大便利的组件、工具和指导集&#xff0c;旨在帮助开发者快速构建高质量的应用&#xff0c;并遵循最佳实践。 Jetpack不仅是一个提高开发效率的工具集&#xff0c;还是Android开发的未来方向。它通过整合各种组件和工具&#xff0…

VAuditDemo审计之二次注入漏洞

目录 VAuditDemo二次注入漏洞 搜索危险函数&#xff0c;用户可控点 regCheck.php messageSub.php message.php 漏洞调用链 漏洞错误利用过程 注册用户 xxxx, 发表payload留言 漏洞正确利用过程 注册用户 wwww\ 退出用户 wwww\\ 使用 wwww\ 登录 发表留言 替换dat…

【全网最真实测评】随身WiFi值得入手吗?自费入手华为、中兴、格行、上赞4款随身WiFi,内含国产4款热门随身WiFi推荐!(最实用、最高性价比!)

随身WiFi的风越吹越大&#xff0c;市场乱象也更变本加厉。作为一名资深随身WiFi使用者&#xff0c;接触过太多的随身WiFi产品&#xff0c;越是了解这个行业黑幕&#xff0c;就越对无良商家夸大宣传、虚标限速&#xff0c;甚至售卖二手产品的行为深恶痛绝&#xff01; 本篇测评涉…

学习嵌入式第二十九天

ipc进程间通信方式 PC&#xff0c;即进程间通信&#xff08;Inter-Process Communication&#xff09;&#xff0c;是操作系统中不同进程之间交换数据的一种机制。以下是一些常见的IPC方式&#xff1a; 管道&#xff1a;用于父子进程或兄弟进程之间的通信。消息队列&#xff…

nestjs nest-cli.json中的assets不生效

官方文档 Documentation | NestJS - A progressive Node.js framework // nest-cli.json{"collection": "nestjs/schematics","sourceRoot": "src","compilerOptions": {"assets": ["microservices/mail/te…

【网络编程】select实现服务器与客户端进行通信

1、运行1个服务器和2个客户端 实现效果: 1、服务器和2个客户端互相聊天&#xff0c;服务器和客户端都需要使用select模型去实现 2、服务器要监视2个客户端是否连接&#xff0c;2个客户端是否发来消息&#xff0c;以及服务器自己的标准输入流 3、客户端…

定格精彩瞬间!详解六自由度技术原理及应用

在体育赛事中&#xff0c;观赏各项目的精彩瞬间&#xff0c;欣赏运动员的卓越表现是观众们最为关注的焦点。以体操跳马为例&#xff0c;运动员们全力助跑&#xff0c;然后奋力起跳、腾空&#xff0c;接着精准的推手和转体动作&#xff0c;最后稳稳落地&#xff0c;整个动作行云…

检测到目标URL存在http host头攻击漏洞

漏洞描述 修复措施 方法一&#xff1a; nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求&#xff0c;如果没有显式定义&#xff0c;则会选取第一个定义的 server 作为 default_server。 server { …

avue-crud 自定义搜索项 插槽

加上 -search 就可以自定义查询项了

【MongoDB】Java连接MongoDB

连接URI 连接 URI提供驱动程序用于连接到 MongoDB 部署的指令集。该指令集指示驱动程序应如何连接到 MongoDB&#xff0c;以及在连接时应如何运行。下图解释了示例连接 URI 的各个部分&#xff1a; 连接的URI 主要分为 以下四个部分 第一部分 连接协议 示例中使用的 连接到具有…

ant design pro 中用户的表单如何控制多个角色

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时&#xff0c;…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候&#xff0c;Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件&#xff0c;分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办&#xff1f;Mac上怎么解压分卷压缩的文件&#xff1f;本文将向你介绍如何使用BetterZ…

第R2周:LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是LSTM 1.LSTM的本质 长短时记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;的本质是一种特殊的循环神经网络&#xff08;Recurrent…

使用Go语言将PDF文件转换为Base64编码

使用 Go 语言将 Base64 编码转换为 PDF 文件-CSDN博客本文介绍了如何使用 Go 语言将 Base64 编码转换为 PDF 文件&#xff0c;并保存到指定路径。https://blog.csdn.net/qq_45519030/article/details/141225772 在现代编程中&#xff0c;数据转换和编码是常见的需求。本文将介绍…

SX_gitlab可视化操作c语言知识_17

gitlab可视化操作技巧: Merge into current branch直接将远程wjc_GNSS分支的数据拉下来同步到本机当前的分支代码&#xff0c;执行的是合并操作&#xff0c;即多的模块会添加到本地分支&#xff0c;有冲突的地方不行得rebase覆盖才行 修改完代码先暂存更改再在暂存区写入备注&a…

网络通信要素

网络介绍 定义&#xff1a;将具有独立功能的多台计算机通过通信线路和通信设备连接起来&#xff0c;在网络管理软件及网络通信协议下&#xff0c;实现资源共享和信息传递的虚拟平台。 学习网络的目的&#xff1a; 能够编写基于网络通信的软件或程序&#xff0c;通常来说就是网…

力扣面试经典算法150题:删除有序数组中的重复项 II

删除有序数组中的重复项 II 今天的题目是力扣面试经典150题中的数组的中等难度题: 删除有序数组中的重复项 II 题目链接&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 题…

时间序列分析2|ARIMA模型|SARIMA模型

ARMA模型的定阶 自相关和偏自相关系数法 通过观察样本的自相关系数(ACF)和偏自相关系数(PACF)&#xff0c;进行大体的判断 模型定阶的经验方法 截尾&#xff1a; 最初的d阶样本(偏)自相关系数明显在2倍标准差范围外95%的(偏)自相关系数都落在2倍标准差的范围以内非零自相…

【论文阅读】通用的语义-几何表征的机器人操作

文章目录 1. 【2023CoRL】A Universal Semantic-Geometric Representation for Robotic Manipulation针对痛点和贡献引言模型框架思考不足之处 2. Leveraging Locality to Boost Sample Efficiency in Robotic Manipulation摘要和结论引言模型框架实验思考不足之处 1. 【2023Co…

ES6-ES13学习笔记

目录 初识ES6 变量声明 解构赋值 对象解构 ​编辑 数组解构 ​编辑模版字符串 字符串扩展 includes() repeat() startsWith() endsWith() 数值扩展 二进制和八进制表示法 &#xff08;Number.&#xff09;isFinite()与isNaN() Number.isInteger() Math.trunc …