OceanBase创建租户
租户是集群之上的递进概念,OceanBase 数据库采用了多租户架构。
集群偏部署层面的物理概念,是 Zone 和节点的集合,租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括 CPU、内存、日志盘空间、IOPS 等。
租户类似于传统数据库的数据库实例,租户通过资源池与资源关联,从而独占一定的资源配额,可以动态调整资源配额。在租户下可以创建 Database、表、用户等数据库对象。
OceanBase 数据库 V4.0 开始,有三种类型的租户:系统租户、用户租户以及每个用户租户对应的 Meta 租户。
用户租户可以被看作是一个数据库实例,它由系统租户根据业务需要所创建出来,用户租户:
- 可以创建自己的用户
- 可以创建数据库(database,仅 MySQL 兼容模式支持)、表(table)等所有客体对象
- 有自己独立的系统表和系统视图
- 有自己独立的系统变量
- 数据库实例所具备的其他特性
创建用户租户需理解下面4张表的逻辑关系:
- 资源规格:对应
DBA_OB_Unit_CONFIGS
表,定义了常见物理资源项的大小,包括 CPU、内存、磁盘空间、IOPS 等。创建资源池时指定其资源规格,从而根据定义创建资源单元 - 资源单元Unit:对应
DBA_OB_UNITS
表,是资源调度的基本单位,具有节点、Zone、Region 等位置属性 - 资源池:对应
DBA_OB_RESOURCE_POOLS
表,是资源分配的基本单位,创建资源池时会实际创建 Unit,如对应节点预留资源不够将会创建失败 - 租户:对应
DBA_OB_TENANTS
表,创建租户需指定RESOURCE_POOL_LIST资源池,从而拥有指定资源池的 Unit
创建租户的依赖关系是:租户 -> 资源池 -> 资源规格,因此创建租户时需要反过来,先创建资源规格。
如上图,展示了一个由 6 个 Unit 组成的资源池 a_pool,该资源池具有如下重要属性:
ZONE_LIST
:描述了该资源池中的 Unit 分布在哪些 Zone,图中为ZONE_LIST='zone1,zone2,zone3'
。Unit_NUM
:描述了ZONE_LIST
中每个 Zone 中的 Unit 个数,图中为Unit_NUM=2
。Unit_CONFIG_ID
:描述了该资源池关联的资源规格,从而决定该资源池中每个 Unit 的物理资源大小,包括 CPU、内存、日志盘空间、IOPS 等。
通过 Unit 的概念,我们将 OceanBase 数据库的物理概念和逻辑概念进行了关联。每个租户有若干 Unit,分布于若干 Zone 的若干节点上。而每个节点上分布有若干个 Unit,这些 Unit 归属于不同租户。概括的讲:集群由节点组成,节点是 Unit 的容器。租户由 Unit 组成,Unit 是数据库对象的容器。
设置租户a 的 RESOURCE_POOL_LIST=('a_pool')
,其部署图如下:
1.创建资源规格
1.使用 root 用户登录到集群的 sys 租户。
obclient -h192.18.113.161 -P2883 -uroot@sys#cluster -p**** -A2.USE oceanbase;3.查看资源规格信息:SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;4.创建一个名称为 S1_unit_config 的资源规格,其资源配置为 CPU 为 1 核,内存 5G,日志盘空间 20G:CREATE RESOURCE UNIT S1_unit_config MEMORY_SIZE = '5G', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '20G', MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;5.查询 DBA_OB_UNIT_CONFIGS 视图,确认资源规格创建成功
SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME = 'S1_unit_config';
创建资源规格语法:CREATE RESOURCE UNIT unit_name MEMORY_SIZE [=] ‘size_value’, MAX_CPU [=] cpu_num, [LOG_DISK_SIZE [=] ‘size_value’,] [MAX_IOPS [=] iops_num,] [MIN_CPU [=] cpu_num,] [MIN_IOPS [=] iops_num];
创建资源规格时,MAX_CPU 和 MEMORY_SIZE 必选。
unit_name
:资源规格名称。MEMORY_SIZE
:内存规格,其最小值由隐藏配置项__min_full_resource_pool_memory
控制,默认为 5G,支持最小可以调整为 4G。OceanBase 数据库 V4.0 开始不支持内存超卖。MAX_CPU
:CPU 规格上限,MIN_CPU
是 CPU 规格下限,单位是核数。如果用户没有指定MIN_CPU
,默认等于MAX_CPU
值。MIN_CPU
:最小的 CPU 规格,所有租户的MIN_CPU
的总和不能超过该节点 CPU 总容量CPU_CAPACITY
。MAX_IOPS
和MIN_IOPS
: 指定当前 Unit 可使用的 IOPS 资源的上限和下限,最小值均为 1024,并且要求MAX_IOPS >= MIN_IOPS
。LOG_DISK_SIZE
:日志盘空间,OceanBase 数据库 V4.0 会按租户管理日志盘空间,系统为各个租户预留日志盘空间,实现按租户隔离。当用户没有指定时,LOG_DISK_SIZE
默认值是内存规格的 3 倍大小,最小为 2G。- OceanBase 数据库 V4.0 支持租户间 IOPS 隔离,通过
MAX_IOPS
、MIN_IOPS
、IOPS_WEIGHT
三个参数决定。IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算。
2.创建资源池
创建资源规格后,可以在创建资源池时指定资源规格,从而使用相应大小的资源单元,并最终分配给相应的租户。
1.查看已有资源池:SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;2..创建名为mq_pool_01 的资源池,在zone1、zone2 里各创建1个 Unit,每个Unit的资源规格为S1_unit_config
CREATE RESOURCE POOL mq_pool_01 UNIT='S1_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1','zone2'); 3.查询资源池是否创建成功:SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';
ocp_express,会创建一个ocp租户,且使用ocp_unit资源单元,该资源规格使用16G内存,准备把ocp租户删除了再创建。
语法:CREATE RESOURCE POOL poolname UNIT [=] unitname, UNIT_NUM [=] unitnum, ZONE_LIST [=] (‘zone’ [, ‘zone’ …]);
参数说明:
UNIT
:该资源池的资源规格,输入资源规格名称。UNIT_NUM
:该资源池在目标 Zone 的 Unit 个数,它的值要小于目标 Zone 的节点个数,且每个节点上最多只能分布同一个租户的一个 Unit。ZONE_LIST
:资源池的 Zone 分布。OceanBase 数据库会在ZONE_LIST
描述的每个 Zone 里面创建UNIT_NUM
个 Unit,每个 Unit 的资源规格为UNIT
参数设置的值。
3.创建租户
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,需要指定租户的类型。租户创建后,租户类型无法修改(社区版只能是MySQL模式)
1.查看所有的租户信息:SELECT * FROM oceanbase.DBA_OB_TENANTS;2.创建一个名为 mq_t1 的租户(默认为 MySQL 模式租户),副本数为3,资源池指定为 mq_pool_01,Primary Zone 为 zone1,zone2,zone3,允许所有 IP 连接数据库。CREATE TENANT IF NOT EXISTS mq_t1 PRIMARY_ZONE='zone1,zone2,zone3', RESOURCE_POOL_LIST=('mq_pool_01') set OB_TCP_INVITED_NODES='%';3.查询确认租户创建成功:SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';4.租户创建成功后,可以尝试登录 mq_t1 租户,默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空,需要及时修改管理员用户的密码4.1.登录:obclient -h192.168.113.161 -P2883 -uroot@mq_t1#cluster -A4.2.修改密码:ALTER USER root IDENTIFIED BY Admin123456@;4.3.修改密码成功后,重新登录租户:obclient -h192.168.113.161 -P2883 -uroot@mq_t1#cluster -p**** -A
语法:CREATE TENANT [IF NOT EXISTS] tenant_name
PRIMARY_ZONE [=] zone,
RESOURCE_POOL_LIST [=](poolname [, poolname…])
[ENABLE_ARBITRATION_SERVICE = {true | false}]
{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] …
参数说明:
-
IF NOT EXISTS
:可选参数,如果要创建的租户名已存在,并且没有指定IF NOT EXISTS
,则会出现错误。 -
tenant_name
:指定租户名称,最长 128 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头。 -
PRIMARY_ZONE
:指定租户的 Primary Zone,指定了租户提供读写服务的 Zone 的优先级。实际上是一个 Zone 的列表,列表中包含多个 Zone。当列表包含多个 Zone 时,使用分号(;)分隔的 Zone 具有从高到低的优先级,使用逗号(,)分隔的 Zone 具有相同优先级,表示流量打散在多个 Zone 上,这几个 Zone 同时提供服务。例如,
primary_zone ='zone1;zone2,zone3'
表示该租户优先由 zone1 提供读写服务,zone1 比 zone2、zone3 的优先级高,zone2 和 zone3 是同一优先级。在指定PRIMARY_ZONE
时,其值可以设置为 RANDOM(必须大写),表示随机选择最高优先级内的任意一个 Zone 作为Primary Zone
。 -
RESOURCE_POOL_LIST
:指定分配给租户的资源池列表,必填。如果有多个资源池,要求多个资源池的UNIT_NUM
个数一致。租户的副本分布的 Zone List 继承于
RESOURCE_POOL_LIST
的ZONE_LIST
属性,租户的副本个数继承于RESOURCE_POOL_LIST
的ZONE_LIST
属性的个数,租户在每个 Zone 的 Unit 个数继承于RESOURCE_POOL_LIST
的UNIT_NUM
属性、租户的 Unit 的资源规格继承于RESOURCE_POOL_LIST
的 Unit 属性。 -
ENABLE_ARBITRATION_SERVICE
:指定租户是否开启仲裁服务,如果不显示指定,默认创建的租户其仲裁服务为关闭状态。如果创建租户的时候未开启仲裁服务,可以在创建租户后再开启仲裁服务,详细操作请参见 为租户开启仲裁服务。该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持仲裁服务功能。 -
system_var_name
:指定系统变量或配置项。OB_TCP_INVITED_NODES
:用于指定租户连接的白名单,即允许哪些客户端 IP 连接该租户。示例中%
表示所有客户端都可登录,如果不指定OB_TCP_INVITED_NODES
的值,则默认租户的连接方式为只允许本机的 IP 登录该租户。白名单配置的详细介绍,参见 查看和设置白名单。OB_COMPATIBILITY_MODE
:用于指定租户的兼容模式,可选择 MySQL 或 Oracle 兼容模式,并且只能在创建时指定。如果不指定OB_COMPATIBILITY_MODE
,则默认兼容模式为 MySQL 模式。
4.查看租户和资源信息
1.查看所有资源规格信息
SELECT * FROM DBA_OB_UNIT_CONFIGS;2.查看所有资源池信息
SELECT * FROM DBA_OB_RESOURCE_POOLS;3.查看所有的租户信息,其LOCALITY字段为租户副本分布
SELECT * FROM DBA_OB_TENANTS;4.关联查询租户资源配置信息
SELECT c.TENANT_ID, e.TENANT_NAME, concat(c.NAME, ': ', d.NAME) `pool:conf`,concat(c.UNIT_COUNT, ' unit: ', d.min_cpu, 'C/', ROUND(d.MEMORY_SIZE/1024/1024/1024,0), "G") unit_info FROM DBA_OB_RESOURCE_POOLS c, DBA_OB_UNIT_CONFIGS d, DBA_OB_TENANTS e WHERE c.UNIT_CONFIG_ID=d.UNIT_CONFIG_ID AND c.TENANT_ID=e.TENANT_ID AND c.TENANT_ID>1000 ORDER BY c.TENANT_ID;5.查看租户的资源单元部署位置
SELECT a.TENANT_NAME,a.TENANT_ID,b.SVR_IP FROM DBA_OB_TENANTS a,GV$OB_UNITS b WHERE a.TENANT_ID=b.TENANT_ID;6.查看节点的 Unit 信息
SELECT * FROM GV$OB_UNITS;7.查看 OBServer 的信息
SELECT * FROM GV$OB_SERVERS;
5.查看和设置租户白名单
通过租户白名单功能可以设置允许哪些客户端访问当前租户,通过租户系统变量 ob_tcp_invited_nodes
的值来确定。系统支持以下多种租户白名单格式:
- IP 地址的形式:
10.10.10.10,10.10.10.11
- 子网/掩码的形式:
10.10.10.0/24
- 模糊匹配的形式:
10.10.10.%
或者10.10.10._
- 多种格式混合的形式:
10.10.10.10,10.10.10.11,10.10.10.%,10.10.10._,10.10.10.0/24
1.系统租户管理员和用户租户管理员都可登录数据库,去修改白名单
obclient -h192.168.113.161 -P2883 -uroot@mq_t1#cluster -A2.查看租户白名单
SHOW VARIABLES LIKE 'ob_tcp_invited_nodes';3.修改租户的白名单配置
ALTER TENANT mq_t1 VARIABLES ob_tcp_invited_nodes = '192.168.113.%';
6.租户扩缩容
租户扩/缩容可以提升/降低计算能力和存储容量,OceanBase 数据库提供了提高/降低资源规格、增加/减少服务节点两种途径来实现扩缩容:
-
提高单节点的服务能力:调大租户的资源规格(Unit Config),从而达到单节点的服务能力提升。
详细信息,参见 通过调整资源规格实现租户扩缩容。
-
增加服务节点:通过增加 Unit Number 和增加 Primary Zone,从而增加服务节点,达到租户总服务能力的提升。这里的扩容操作可以抽象为:将 N 个服务单元扩容为 M 个服务单元,其中,M > N。
-
Unit Number 由 N 变为 M 时,表示每个 Primary Zone 上,需要新增 M - N 个日志流,分布在 M - N 个新增的 Unit Group 上。
详细信息,参见 通过调整 Unit Number 实现租户扩缩容。
-
Primary Zone 个数由 N 变为 M 时,表示每个 Unit Group 内,需要新增 M - N 个日志流,其 Leader 分布在 M - N 个新增的 Primary Zone 上。
详细信息,参见 通过调整 Primary Zone 实现租户扩缩容。
-
缩容是扩容的反操作,本质上是降低租户的服务能力,包括计算能力和存储容量。可以是调小资源规格,从而降低单节点的服务能力;也可以是通过减少服务节点,包括减少 Primary Zone 个数和减少 Unit Number,从而降低租户的总服务能力。
7.修改资源池属性
修改资源池属性,即是调整资源池配置的 UNIT
、UNIT_NUM
、ZONE_LIST
等参数信息,是实现租户扩容或缩容的另一种方式,如,调大 UNIT_NUM
可以增加每个 Zone 中节点数量达到扩容的目的。
1.查看资源池
SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';2.资源池未被分配给租户,使用ALTER RESOURCE POOL语句2.1.修改资源池 mq_pool_01 的资源规格为 'S2_unit_config',资源单元个数为 3,ZONE_LIST 为 'zone1','zone2','zone3'。2.2.ALTER RESOURCE POOL mq_pool_01 UNIT='S2_unit_config';2.3.ALTER RESOURCE POOL mq_pool_01 UNIT_NUM=2;2.4.ALTER RESOURCE POOL mq_pool_01 ZONE_LIST=('zone1','zone2','zone3');3.资源池已被分配给租户,使用ALTER RESOURCE TENANT语句3.1.修改资源池 mq_pool_01 的资源规格为 'S2_unit_config',资源单元个数为 3,ZONE_LIST 为 'zone1','zone2','zone3'。3.2.ALTER RESOURCE POOL mq_pool_01 UNIT='S2_unit_config';3.3.tips:ALTER RESOURCE TENANT mq_t1 UNIT_NUM=3;3.4.ALTER RESOURCE POOL mq_pool_01 ZONE_LIST=('zone1','zone2','zone3');
语法:ALTER RESOURCE POOL pool_name UNIT [=] unit_name, UNIT_NUM [=] unit_num, ZONE_LIST [=] (‘zone’ [, ‘zone’ …]);
参数说明:
pool_name
:资源池名称。UNIT
:该资源池的资源规格。UNIT_NUM
:资源单元个数。增加 Unit 数量时,UNIT_NUM
的值不能大于每个 Zone 内 OBServer 的个数。ZONE_LIST
:资源池的 Zone 分布。
8.修改租户属性
修改租户的副本数、Zone 列表、主 Zone 以及系统变量值等
租户属性修改的常见场景:
- 修改租户的 Primary Zone:Primary Zone 描述了 Leader 副本的偏好位置,而 Leader 副本承载了业务的强一致读写流量,即 Primary Zone 决定了 OceanBase 数据库的流量分布。通过修改 Primary Zone 属性可以切换业务流量,或者是从一个机房切换到另一个机房,或者是从一个城市切换到另一个城市,适用于容灾场景、扩缩容等场景。
- 修改租户的 Locality:Locality 描述了数据的多个副本的类型及分布策略。通过修改 Locality 属性可以调整租户的部署架构,适用于机房搬迁、调整容灾级别等场景。
1.登录系统租户
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A2.进入 oceanbase 数据库:USE oceanbase;3.查看租户的配置信息:SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';4.通过 ALTER TENANT 语句,修改租户属性5.修改租户 mq_t1 的 Primary Zone 为 "zone1,zone2",Locality 为 "F@sa128_obv4_1,F@sa128_obv4_2,F@sa128_obv4_3"5.1.ALTER TENANT mq_t1 PRIMARY_ZONE='zone1,zone2';5.2.ALTER TENANT mq_t1 LOCALITY="F@zone1,F@zone2,F@zone3";
语法:ALTER TENANT {tenant_name | all } [SET] [tenant_option_list] [opt_global_sys_vars_set]
参数说明:
{tenant_name | all }
:指定待修改的租户,all
表示所有租户。PRIMARY_ZONE
:指定租户的 Primary Zone。RESOURCE_POOL_LIST
:指定资源池列表。每次仅支持添加或删除一个资源池。LOCALITY
:描述副本在 Zone 间的分布情况,如:F@zone1,F@zone2,F@zone3
表示zone1
、zone2
和zone3
为全功能副本。该参数增加 Zone 配置时需要租户资源池的ZONE_LIST
包含该 Zone。
9.删除租户和恢复租户
OceanBase 数据库支持通过 DROP TENANT
语句删除租户,删除租户后,租户下的数据库和表也同时被删除。但是租户使用的资源池不会被删除。资源池可以继续给其他租户使用。
- 当系统租户开启回收站功能时,
DROP TENANT
操作表示删除的租户会进入回收站。对于回收站中的租户,后续系统租户可以通过租户级回收站功能进一步删除或恢复该租户,回收站相关操作参见 回收站概述。 - 当系统租户关闭回收站功能时,
DROP TENANT
操作会直接删除租户,租户下的数据库和表也同时被删除。
1.查看租户
SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';2.查看当前系统租户中的回收站对象,OceanBase默认开启回收站功能
SHOW RECYCLEBIN;3.删除租户: DROP TENANT mq_t1;4.恢复回收站中的租户:FLASHBACK TENANT mq_t1 TO BEFORE DROP;
根据业务情况创建的租户就可以给使用方了,如果要扩容、调整部署分布可以根据上面的文档进行
相关文章:

OceanBase创建租户
租户是集群之上的递进概念,OceanBase 数据库采用了多租户架构。 集群偏部署层面的物理概念,是 Zone 和节点的集合,租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括…...

Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?
文章目录 1.前言2. 源码解析3.总结 1.前言 相信大家职业生涯中或多或少的碰到过Java比较变态的笔试题,下面这道题目大家应该不陌生: Integer i 127; Integer j 127;Integer m 128; Integer n 128;System.out.println(i j); // 输出为 true System.o…...

【Unity】粒子贴图异常白边问题
从PS制作的黑底,白光的贴图。放入Unity粒子中,拉远看会有很严重的白边,像马赛克一样。 材质使用:Mobile/Particles/Additive 经测试只使用一张黑色的图片,也会有白边。 解决方案: 关闭黑色底…...
bxCAN接收处理
接收处理 为了接收 CAN 消息,提供了构成 FIFO(First Input First Output) 的三个邮箱。为了节约 CPU 负载,简化软件并保证数据一致性,FIFO 完全由硬件进行管理。应用程序通过 FIFO 输出邮箱访问 FIFO 中所存储的消息。 有效消息 当消息依据…...

前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展)
前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展) 常见的浏览器内核CSS选择器优先级盒子模型CSS硬件加速CSS扩展 常见的浏览器内核 内核描述Trident(IE内核)主要用在window系统中的IE浏览器中&…...
WEB前端标签的使用
图片标签 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- img标签就是用来将图片显示在页面上的标签 --><img src"图片路径"><!-- 可用路径&#…...
739. 每日温度
提示给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: tempe…...

stm32F103C8T6简介及标准库和HAL库的区别
什么是单片机 单片机是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换电路、A\D转换器等电路)集成到一…...

操作系统(3)---操作系统引导
在安装操作系统后,磁盘的分布如下: C盘是这个磁盘的活动分区(又称主分区),安装了操作系统 开机过程如下: 1.计算机的主存由RAM和ROM组成,RAM关机数据消失,而ROM(Basic In…...
Vue3+Ts:实现paypal按钮
Vue3Ts:实现paypal按钮 一、前端页面按钮实现第一步:下载paypal.js依赖第二步:引入要使用的vue页面,并调用。 二、实现逻辑研究第一点:了解下Buttons自带的style属性第二点:了解下Buttons自带的处理方法第三…...
.[Decipher@mailfence.com].faust 勒索病毒数据怎么处理|数据解密恢复
尊敬的读者: 随着网络技术的发展,勒索病毒已经成为数字时代中一种极具破坏性的威胁。[support2022cock.li].faust [tsai.shenmailfence.com].faust [Encrypteddmailfence.com].faust[Deciphermailfence.com].faust 勒索病毒是其中的一种,它以…...

【UE Niagara】制作星光飘落效果
效果 步骤 1. 新建一个Niagara系统 选择模板“Fountain” 这里命名为“NS_Flare” 打开“NS_Flare”,选中Sprite渲染器,设置材质为上一篇文章中(【UE 材质】闪烁的星星材质)制作的材质“M_Flare” 2. 由于要在Niagara中调整粒子的…...

SLAM初学
昨天组长布置了任务,要求看香港大学的一篇论文,一打开,好家伙,纯英文,直接翻译着看 几个读不懂的概念: 体素:体素是三维空间中的体积像素的简称。它类似于二维图像中的像素,但在三…...

腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?
幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏,在帕鲁的世界,玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活,也…...

win10+elasticsearch8.12 安装教程
Elasticsearch是一种搜索引擎,本地安装完成之后,可使用其他编程语言(例如python)与elasticsearch建立连接,然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…...

经典面试题-死锁
目录 1.什么是死锁? 2.形成死锁的四个必要条件 3.死锁的三种情况 第一种情况: 举例: 举例: 第二种情况:两个线程 两把锁 举例: 第三种情况:N个线程 M把锁 哲学家进餐问题 1.什么是死锁&…...
mysql面试题合集-基础
前言 工作很忙,本质还是自己比较懒惰,很久没更新博客了。近期打算面试,换个工作环境,那就先从面试题开始吧,后续也会逐渐更新自己在工作中的一些经验感悟。接下来切入主题,由于长期做前台开发工作…...
点灯大师(STM32)
这段代码是用于STM32F10x系列微控制器的C语言程序,目的是初始化GPIOC的Pin 13为输出,并设置其输出高电平。以下是对代码的逐行解释: #include "stm32f10x.h" 这一行引入了STM32F10x设备的头文件,包含了用于STM32F10x系…...
@EnableEurekaServer
定义:EnableEurekaServer注解是Spring Cloud中的一个注解,用于将Spring Boot应用程序指定为Eureka服务器。 Eureka服务器是一个服务注册中心,也被称为发现服务器,管理和协调微服务。保存有关所有客户端服务应用程序的信息。 每个…...
Java中的接口
六. 接口 特性1 - 解决单继承 语法如下 interface A {public default void a() {} }interface B {public default void b() {} }// C 从 A, B 两个接口重用方法 a() 和 b() class C implements A, B {}解决之前的问题 public class TestInterface1 {public static void mai…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...