OceanBase企业版集群部署:oatcli命令行方式

news2025/4/16 6:06:24

OceanBase企业版集群部署:oatcli命令行方式

  • 安装包准备
  • 服务器准备
    • 最低资源配置
    • 是否部署ODP组件?
    • 仲裁服务器
  • 服务器配置
    • 操作系统
    • 内核参数
    • BIOS设置
    • 磁盘挂载
    • 网卡设置
  • 安装OAT部署工具
  • 初始化OBServer服务器
  • 使用oatcli部署三副本集群
    • 安装OceanBase软件
    • 初始化OceanBase集群
  • 卸载与环境清理

本文介绍了如何通过oatcli命令行方式部署OceanBase企业版集群环境。

数据库版本:OceanBase V4.2.5

OceanBase企业版集群支持图形化部署和命令行部署:

  • 图形化部署:需要使用OAT工具部署OCP平台,再通过OCP平台部署数据库。
  • 命令行部署:使用oatcli工具部署数据库。

oatcli是管理OceanBase管理者工具(OceanBase Admin Toolkit,简称:OAT)资源的命令行工具。

安装包准备

OceanBase企业版部署需要的软件安装包如下(适用于单机版和多节点集群):

组件安装包名称说明
oat-all-in-one安装包X86_64平台:oat-all-in-one-x86-411.tar用于安装OAT
OCP和MetaDB的docker镜像X86_64平台:ocpxxx.tar.gz、meta_xxxxxx_xxxxxx_x86_xxxxxxxx.tgz用于部署OCP、OCP MetaDB、MonitorDB
OceanBase RPM包X86_64平台:oceanbase-x.x.x.x-xxxxxxxxxxxxxxxxxx.el7.x86_64.rpm用于部署OceanBase集群
ODP RPM包(非必须)X86_64平台:obproxy-x.x.x.x-xxxxxxxxxxxxxx.el7.x86_64.rpm用于部署OBProxy代理服务

服务器准备

最低资源配置

OceanBase部署服务器应满足的最低配置如下(适用于单机版和多节点集群):

组件服务器数量最低配置推荐磁盘类型
OAT1台(可复用OCP服务器)2U4GN/A
OCP和MetaDB(图形化部署)1台16U32G1.5TB、万兆网卡、SSD存储
OceanBase集群单机部署1台(非单机部署3台)4U16G。OBServer服务器内存设置建议不超过1T;OBServer 服务器CPU数量建议不超过512核。磁盘中日志盘需要内存的3倍以上;SSD存储
ODP(非必须)3台(可复用OBServer节点)4U8G200G

:如果是通过命令行部署(oatcli或obd工具),可以不安装OCP和MetaDB组件。

是否部署ODP组件?

OceanBase数据库代理ODP(OceanBase Database Proxy,又称OBProxy)是OceanBase数据库专用的代理服务器,OceanBase数据库用户的数据会以多副本的形式存放在各个 OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。

在部署OceanBase集群后,是否需要部署ODP主要取决于应用场景和需求:

  • 如果应用需要对OceanBase集群进行高可用、负载均衡或连接池管理等操作,那么可以考虑部署ODP。ODP可以有效地解决OceanBase集群的连接数和负载均衡等问题,提高应用程序的稳定性和可靠性。
  • 如果应用只是简单地连接到OceanBase集群进行查询和操作,而不需要进行高可用、负载均衡或连接池管理等操作,那么可以不部署ODP,直接使用OceanBase提供的客户端库连接到集群,也可以满足应用的需求。

仲裁服务器

如果要使用三台服务器部署两副本的OceanBase集群和仲裁服务,仲裁服务器应满足的最小配置如下:

组件最小规格带宽磁盘
仲裁服务器(V4.1.0 BP1及以后版本)2U4G要求输入和输出的数据传输速率都至少为20 MbpsClog盘需要至少5GB的磁盘空间。存放日志文件的log目录需要单独预留空间

⚠️:三副本无需部署仲裁服务器。

服务器配置

操作系统

OceanBase数据库支持的主流操作系统及版本信息如下:

操作系统版本架构
KylinOSV10x86_64(包括海光),ARM_64(鲲鹏、飞腾)
CentOS / Red Hat Enterprise Linux7.x、8.xx86_64(包括海光),ARM_64(鲲鹏、飞腾)
Debian8.3 及以上x86_64(包括海光)
openEuler20.03 LTS SP1/SP2 和 22.10 LTSx86_64(包括海光),ARM_64(鲲鹏、飞腾)

更多支持的操作系统及其版本请参考官方文档。、

⭐️ 需要进行一些特殊的操作系统配置如下:

  1. 在Intel x86架构的环境中:建议修改配置文件/etc/sysctl.conf,添加配置vm.swappiness = 0
  2. 在AMD或者ARM架构的环境中,建议开启Numa
  3. 在ARM和海光架构的环境中,建议修改配置文件/etc/sysctl.conf,添加以下配置:
kernel.numa_balancing = 0
vm.zone_reclaim_mode = 0
vm.swappiness = 0

内核参数

OceanBase服务器推荐的内核参数配置如下:

内核参数推荐值说明
vm.max_map_count655360用于设置一个进程可拥有的最大内存映射区域数量
vm.min_free_kbytes2097152用于设置系统保留的最小空闲内存量,以防止内存碎片化。如果服务器物理内存小于等于8GB时,建议保持默认值,无需修改
vm.overcommit_memory0用于控制内存过量提交机制,指定当内存不足时是否允许过量提交内存
ulimit.open fileshard/soft nofile 655300用于设置用户可同时打开的最大文件描述符数
ulimit.max_user_processeshard/soft nproc 655300用于设置用户可以创建的最大进程数
ulimit.core file sizehard/soft core unlimited用于设置核心转储文件(core dump)的最大大小
ulimit.stackhard/soft stack unlimited用于设置系统的栈大小的参数
current_clocksourcetsc用于显示当前系统使用的时钟源

BIOS设置

BIOS需要关闭以下配置:

  • Cstate
  • Pstate
  • EIST
  • Power saving
  • SMMU(ARM架构)

BIOS需要开启以下配置:

  • Automatic Power on After Power Loss: Always on
  • Intel Virtualization Technology
  • Hyper-threading
  • Hardware prefetcher
  • VT-d
  • SR-IOV
  • Turbo Mode
  • Energy performance:开启最大performance

磁盘挂载

OCP节点的磁盘挂载要求如下:

挂载点容量格式说明
/home100 GB~300 GB建议 ext4 或 xfs各组件运行日志盘
/data/log1内存大小的 3~4 倍建议 ext4 或 xfsOCP元数据库日志盘
/data/1取决于所需存储的数据大小建议 ext4 或 xfsOCP元数据库数据盘
/docker200 GB~500 GB建议 ext4 或 xfsDocker根目录

⚠️ :如果是通过命令行部署(oatcli或obd工具),可以不安装OCP和MetaDB组件。

OBServer节点的磁盘挂载要求如下:

挂载点容量格式说明
/home100 GB~300 GB建议 ext4 或 xfsobserver安装和运行日志盘
/data/log1内存大小的 3~4 倍建议 ext4 或 xfsobserver事务日志盘
/data/1取决于所需存储的数据大小建议 ext4 或 xfsobserver数据盘

网卡设置

建议配置2块万兆网卡

  • bond模式取名bond0,绑定的模式可以选择mode1mode4,但建议选择mode4。对于mode4模式,交换机需要配置802.3ad协议。
  • 网卡名建议使用eth0eth1

安装OAT部署工具

部署OAT前请检查以下条件是否已满足:

  • OAT的默认端口7000未被占用。
  • 拥有服务器的root用户权限。
  • 已经安装并启动Docker。推荐Docker版本为社区版17.03及以上。如果使用oat-all-in-one安装包部署OAT,将自动安装Docker环境,无需再单独安装。
  1. 解压oat-all-in-one安装包。
tar -xf oat-all-in-one-x86-411.tar
  1. 以root身份运行安装脚本install.sh
sh oat-all-in-one-x86/install.sh

安装过程中需要根据提示依次确认以下信息:

  • 请指定Docker的根目录,默认值/docker,可自定义。
  • 请指定OAT数据目录的路径,默认值/oat_data,可自定义,例如/oceanbase/oat_data
  • 请指定OAT HTTP监听端口,默认值7000,可自定义。
  • 请指定OAT数据库端口,默认值3306,可自定义。
  • 请输入OAT管理员账户密码(设置初始登录密码),可自定义。默认账号和初始密码为admin/aaAA11__
  • 根据返回的URL访问OAT,验证OAT服务的可用性。

安装完成后,在浏览器中输入OAT的访问地址,验证是否部署成功。

http://oat_server_ip:7000

其中oat_server_ip为部署OAT的服务器的IP地址。

初始化OBServer服务器

使用oatcli初始化OBServer服务器前请检查以下条件是否已满足:

  • 已安装OAT工具。
  • 拥有OAT服务器的root用户权限。
  1. 在OAT服务器上,以root身份进入到OAT容器。
sudo docker exec -it oat bash
  1. 查看oatcli命令的使用方法。
oatcli --help
  1. 设置OAT API地址、用户名和密码来调用OAT API。
oatcli config set -sxx.xx.xx.xx:7000 -uadmin -p******
  • -s:api server地址,例如127.0.0.1:7000
  • -u:用户名。
  • -p:密码。
  1. 创建机房信息。
# oatcli create idc <NAME> <REGION>
oatcli create idc bj1 beijing
  • NAME:机房名称。
  • REGION:机房所属的地域。
  1. 为服务器连接创建SSH凭证。
# oatcli create credential [OPTIONS] NAME AUTH_TYPE:{password|pubkey|external}
oatcli create credential -uroot -p****** root_148 password
  • NAME:凭证标识名称。示例中凭证名为root_148
  • AUTH_TYPE:授权类型。password对应密码认证,pubkey对应公钥认证,external表示已配置免密。
  • -u:用户名。默认为root。
  • -p:密码。
  • -k:SSH私钥文件。
  1. 添加并初始化OBServer服务器。
# oatcli create server [OPTIONS] IPs... INIT_TAG:{observer|obproduct|both}
oatcli create server -ibj1:beijing -croot_148 xx.xx.xx.xx observer
  • -i机房名:地域,必须已存在。
  • -c:凭证名,必须已存在。
  • --add-only:仅添加服务器,不执行操作系统配置操作。默认为--no-add-only,即执行操作系统配置操作。
  • --ssh-port:SSH端口,默认为22。非必需。
  • --docker-root-dir:默认为/docker。非必需。
  • --admin-uid-gid:默认为500:500。非必需。
  • --admin-password:admin密码。非必需。
  • IPs:OBServer服务器IP。
  • INIT_TAG:服务器用途。observer为数据库节点,obproduct表示安装OceanBase产品服务,both表示安装OBServer和OceanBase产品服务。
  1. 查看服务器是否添加完成。
# oatcli describe server [OPTIONS] OBServer_IP
oatcli describe server xx.xx.xx.xx
  1. 在OAT中获取资源信息。
# oatcli get [OPTIONS] COMMAND [ARGS]...
oatcli get server
  • component:获取组件信息。
  • credential:获取凭证信息。
  • idc:获取机房信息。
  • image:获取镜像信息。
  • product:获取产品信息。
  • Server:获取服务器信息。

使用oatcli部署三副本集群

在部署OceanBase集群前请检查已经使用oatcli初始化OBServer服务器。

安装OceanBase软件

  1. 安装OceanBase数据库RPM包。
rpm -ivh oceanbase-4.2.0.0-100000052023073123.el7.x86_64.rpm

OceanBase数据库软件会默认安装在目录/home/admin/oceanbase下。

  1. 安装OceanBase客户端(非必需)。
rpm -ivh obclient-2.2.1-20221122151945.el7.alios7.x86_64.rpm

如果只连接OceanBase数据库的MySQL租户,也可以通过MySQL客户端(mysql)连接OceanBase数据库。

初始化OceanBase集群

  1. 清理OceanBase目录(第一次部署不用)。
su - admin
kill -9 `pidof observer` 
rm -rf /data/1/$cluster_name 
rm -rf /data/log1/$cluster_name 
rm -rf /home/admin/oceanbase/store/$cluster_name /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config*
ps -ef|grep observer

其中$cluster_name为集群名。

  1. 初始化OceanBase目录。

OceanBase的数据目录通常建议在独立的磁盘上,然后通过软链接方式链接到软件Home目录下面。其中$cluster_name为集群名。

su - admin
mkdir -p /data/1/$cluster_name/{etc3,sstable,slog} 
mkdir -p /data/log1/$cluster_name/{clog,etc2} 
mkdir -p /home/admin/oceanbase/store/$cluster_name
for t in {etc3,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
for t in {clog,etc2};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
  1. 启动节点observer进程。

在每个节点的admin用户下,启动observer进程。

cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer {-I $ip | -i $devname} -P $rpc_port -p $sql_port \
-z $zone_name -d /home/admin/oceanbase/store/$cluster_name -r '$ip:2882:2881' -c $cluster_id -n $cluster_name \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/$cluster_name/etc3;/data/log1/$cluster_name/etc2"

三副本下,每个节点启动参数并不完全相同。启动observer时只需指定RootService所在的3台(或者多台)机器,不需要在创建集群时指定所有机器;集群创建完成后可以添加新的机器。

启动参数含义:

  • -I:指定待启动的节点IP。
  • -p:指定服务端口号,一般指定为2881。
  • -P:指定RPC端口号,一般指定为2882。
  • -n:指定集群名称。不同集群不要重复即可。
  • -z:指定启动的observer进程所属的Zone。
  • -d:指定集群主目录,初始化目录时创建的目录。除集群名字$cluster_name外,其他的不要修改。
  • -c:指定集群ID。不同集群不要重复即可。
  • -l:指定日志级别。
  • -r:指定RS列表,格式是$ip:2882:2881,分号分割,表示Root Service信息。
  • -o:指定集群启动参数(配置项)列表,为可选项。其中config_additional_dir用于设置本地存储配置文件的多个目录,为了冗余存储多份配置文件。

假设我们要创建一个三节点的OB集群,集群名为obdemo

zone1节点启动observer进程:

su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.1 -P 2882 -p 2881 \
-z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

zone2节点启动observer进程:

su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.2 -P 2882 -p 2881 \
-z zone2 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

zone3节点启动observer进程:

su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.3 -P 2882 -p 2881 \
-z zone3 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

可以通过下面命令查看observer进程是否启动成功:

  • netstat -ntlp命令,如果监听到了2881与2882端口,则说明进程启动成功。
  • ps -ef | grep observer命令可以返回observer进程信息。
  1. 集群bootstrap操作。

通过OBClient命令连接任意一台节点,密码为空。

obclient -h127.0.0.1 -uroot -P2881 -p******

obclient> SET SESSION ob_query_timeout=1000000000;
Query OK, 0 rows affected

obclient> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.10.10.1:2882',ZONE 'zone2' SERVER '10.10.10.2:2882',ZONE 'zone3' SERVER '10.10.10.3:2882';
Query OK, 0 rows affected

⚠️ 如果这一步失败报错了,其原因很可能就是observer进程启动参数有不对、observer相关目录权限不对、日志目录空间不足一定比例(跟数据目录合用了大目录,空间被数据目录占用了)、节点时间不同步、节点内存资源不足等。请先排查这些问题点后,然后清理OceanBase目录从头开始部署。

  1. 验证集群初始化成功。

在完成集群的bootstrap初始化操作后,通过执行SHOW DATABASES;命令进行验证,若查询结果显示数据库列表中存在oceanbase数据库,即可确认集群初始化成功。

  1. 修改密码。

sys租户的root用户密码默认为空,初始化成功后请修改密码。

ALTER USER root IDENTIFIED BY '******';

卸载与环境清理

  1. 停止和卸载服务

停止和卸载所有OBServer节点中的服务。

ps -ef|grep observer
kill -9 `pidof observer`

rpm -qa|grep oceanbase
sudo rpm -e $rpm_name
rpm -ql $rpm_name

其中,$rpm_name是要卸载的软件包的名称。

  1. 数据库文件清理

删除旧的数据库文件,包括数据文件、日志文件和其他临时文件。

sudo rm -rf /home/admin/oceanbase/*
sudo rm -rf /data/log1/*
sudo rm -rf /data/1/*

以上清理方式适用于oatcli命令行部署的OceanBase集群,但不适用于使用obd部署的集群。

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

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

相关文章

智能手机功耗测试

随着智能手机发展,用户体验对手机的续航功耗要求越来越高。需要对手机进行功耗测试及分解优化,将手机的性能与功耗平衡。低功耗技术推动了手机的用户体验。手机功耗测试可以采用powermonitor或者NI仪表在功耗版上进行测试与优化。作为一个多功能的智能终端,手机的功耗组成极…

使用U盘安装 ubuntu 系统

1. 准备U 盘制作镜像 1.1 下载 ubuntu iso https://ubuntu.com/download/ 这里有多个版本以供下载&#xff0c;本文选择桌面版。 1.2 下载rufus https://rufus.ie/downloads/ 1.3 以管理员身份运行 rufus 设备选择你用来制作启动项的U盘&#xff0c;不能选错了&#xff1b;点…

oracle 并行度(Parallel Degree)

在Oracle数据库中&#xff0c;并行度&#xff08;Parallel Degree&#xff09; 是用于控制并行处理任务的关键配置&#xff0c;旨在通过多进程协作加速大规模数据处 一、并行度的核心概念 并行度&#xff08;DOP, Degree of Parallelism&#xff09; 表示一个操作同时使用的并…

Redis-场景缓存+秒杀+管道+消息队列

缓存一致性 1.两次更新 先更新数据库&#xff0c;再更新缓存&#xff1b;先更新缓存&#xff0c;再更新数据库&#xff1b; 出现不一致问题场景&#xff1a; 先更新数据库&#xff0c;再更新缓存&#xff1b; 先更新缓存&#xff0c;再更新数据库&#xff1b; 两次更新的适…

系统的安全及应用

仓库做了哪些优化 仓库源换成国内源不使用root用户登录将不必要的开机启动项关闭内核的调优 系统做了哪些安全加固 禁止使用root禁止使用弱命令将常见的 远程连接端口换掉 系统安全及应用 Cpu负载高 java程序 运行异常中病毒&#xff1f; ps aux - - sort %cpu %mem Cpu …

PostgreSQL内幕探索—基础知识

PostgreSQL内幕探索—基础知识 PostgreSQL&#xff08;以下简称PG&#xff09; 起源于 1986 年加州大学伯克利分校的 ‌POSTGRES 项目‌&#xff0c;最初以对象关系模型为核心&#xff0c;支持高级数据类型和复杂查询功能‌。 1996 年更名为 PostgreSQL 并开源&#xff0c;逐…

WPS复制粘贴错误 ,文件未找到 mathpage.wll

文章目录 1.错误提示图片2.解决方案1.找到MathType.wll文件和MathType Commands 2016.dotm文件并复制2.找到wps安装地址并拷贝上述两个文件到指定目录 3.重启WPS 1.错误提示图片 2.解决方案 1.找到MathType.wll文件和MathType Commands 2016.dotm文件并复制 MathType.wll地址如…

驱动开发硬核特训 · Day 6 : 深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比

&#x1f50d; B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 从静态绑定驱动模型到现代设备模型 主题&#xff1a;深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比 在上一节中&#xff0c;我们从驱动框架的历史演进出…

【UE5 C++课程系列笔记】35——HTTP基础——HTTP客户端异步请求API接口并解析响应的JSON

目录 前言 步骤 一、 搭建异步蓝图节点框架 二、异步蓝图节点嵌入到引擎的执行流程 三、获取本地时间并异步返回 四、获取网络时间并异步返回 五、源码 前言 本文以请求网络/本地时间API为例&#xff0c;介绍如何实现HTTP异步请求。 步骤 一、 搭建异步蓝图节点框架 …

手机静态ip地址怎么获取?方法与解析‌

而在某些特定情境下&#xff0c;我们可能需要为手机设置一个静态IP地址。本文将详细介绍手机静态IP地址详解及获取方法 一、什么是静态IP地址&#xff1f; 静态IP&#xff1a;由用户手动设置的固定IP地址&#xff0c;不会因网络重启或设备重连而改变。 动态IP&#xff1a;由路…

Python 基础语法汇总

Python 语法 │ ├── 基本结构 │ ├── 语句&#xff08;Statements&#xff09; │ │ ├── 表达式语句&#xff08;如赋值、算术运算&#xff09; │ │ ├── 控制流语句&#xff08;if, for, while&#xff09; │ │ ├── 定义语句&#xff08;def…

Linux上位机开发实践(OpenCV算法硬件加速)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图像处理里面&#xff0c;opencv基本是一个标准模块。但是由于图像处理的特点&#xff0c;如果所有的算法都是cpu来做的话&#xff0c;效率会很低。…

Spring Boot MongoDB自定义连接池配置

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;http://zhangxiaofan.blog.csdn.net/article/details/144341407 一、引言 在 Spring Boot 应用中使用 MongoDB 时&#xff0c;合理配置连接池可以显著提升数据库访问的性能和稳定性。默…

游戏引擎学习第223天

回顾 今天我们正在进行过场动画序列的制作&#xff0c;因此我想深入探讨这个部分。昨天&#xff0c;我们暂时停止了过场动画的制作&#xff0c;距离最终结局还有一些内容没有完成。今天的目标是继续完成这些内容。 我们已经制作了一个过场动画的系列&#xff0c;并把它们集中…

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_基础功能示例(CalendarView01_01)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_基础功能示例(CalendarView01_01)📚…

LabVIEW配电器自动测试系统

随着航天技术的迅猛发展&#xff0c;航天器供配电系统的结构越来越复杂&#xff0c;对配电器的功能完整性、稳定性和可靠性提出了更高要求。传统人工测试方式难以满足高效率、高精度、可重复的测试需求。本项目开发了一套基于LabVIEW平台的宇航配电器自动测试系统&#xff0c;融…

PhotoShop学习09

1.弯曲钢笔工具 PhotoShop提供了弯曲钢笔工具可以直观地创建路径&#xff0c;只需要对分段推拉就能够进行修改。弯曲港币工具位于工具面板中的钢笔工具里&#xff0c;它的快捷键为P。 在使用前&#xff0c;可以把填充和描边选为空颜色&#xff0c;并打开路径选项&#xff0c;勾…

【C++】哈希unordered_map和set的使用以及哈希表,哈希桶的概念以及底层实现

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f310; C 语言 本文章完整代码在下篇文章开头给出 上篇文章&#xff1a;map和set使用红黑树封装的底层实现 下篇文章&#xff1a;封装…

设计模式——建造者模式(生成器模式)总结

当我们需要创建一个非常复杂的对象时&#xff0c;可以使用建造者模式&#xff0c;分步骤建造一个对象&#xff0c;最后将完整的对象返回给客户端。 比如&#xff0c;我们要生成一个房子对象&#xff0c;建造一个房子&#xff0c;需要打地基、盖围墙、盖地板、安装门、安装窗户…

使用Python爬虫的2大原因和6大常用库

爬虫其实就是请求http、解析网页、存储数据的过程&#xff0c;并非高深的技术&#xff0c;但凡是编程语言都能做&#xff0c;连Excel VBA都可以实现爬虫&#xff0c;但Python爬虫的使用频率最高、场景最广。 这可不仅仅是因为Python有众多爬虫和数据处理库&#xff0c;还有一个…