MeterSphere v2.10.X-lts 双节点HA部署方案

news2024/11/26 22:49:27

一、MeterSphere高可用部署架构及服务器配置

1.1 服务器信息

序号应用名称操作系统要求配置要求描述
1负载均衡器CentOS 7.X /RedHat 7.X2C,4G,200GB部署Nginx,实现负载路由。 部署NFS服务器。
2MeterSphere应用节点1CentOS 7.X /RedHat 7.X8C,16GB,200GB部署MeterSphere应用
3MeterSphere应用节点2CentOS 7.X /RedHat 7.X8C,16GB,200GB部署MeterSphere应用
4MySQL Master节点CentOS 7.X /RedHat 7.X8C,16GB,200GB部署MySQL Master
5MySQL Slave节点CentOS 7.X /RedHat 7.X8C,16GB,200GB部署MySQL Slave

1.2 部署架构图

HA架构.jpg

二、Mysql8数据库主从搭建

2.1 下载安装包

下载地址:https://downloads.mysql.com/archives/community/

image.png

2.2 解压安装

  1. 下载好之后,上传服务器进行解压。
tar xvf mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar
  1. 顺序安装rpm
rpm -ivh mysql-community-common-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.32-1.el7.x86_64.rpm

注意:如果在安装 mysql-community-libs-8.0.32-1.el7.x86_64.rpm 的时候出现下面错误,说明已经安装了mariadb相关依赖,需要卸载。可以执行:yum remove mysql-libs ,清除之前的依赖即可。然后重新执行 rpm -ivh mysql-community-libs-8.0.32-1.el7.x86_64.rpm 即可。
image.png

  1. 初始化my.cnf

特别注意: 先配置my.cnf,再启动。 如果已经启动了,没办法初始化大小写的问题了,这个时候可以删除重新初始化,操作如下:(正常配置可以忽略)

如果你不在意数据的话直接删除数据
停止MySQL
systemctl stop mysqld
删除 MySQL的数据(恢复到初始化之前)
rm -rf /var/lib/mysql
[mysqld]
datadir=/var/lib/mysql

default-storage-engine=INNODB
character_set_server=utf8mb4
lower_case_table_names=1   # 不区分大小写
performance_schema=off
table_open_cache=128
transaction_isolation=READ-COMMITTED
max_connections=1000
max_connect_errors=6000
max_allowed_packet=64M
innodb_file_per_table=1
innodb_buffer_pool_size=512M
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800


character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET default_collation_for_utf8mb4=utf8mb4_general_ci'

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

skip-name-resolve

[mysql]
default-character-set=utf8mb4

[mysql.server]
default-character-set=utf8mb
  1. 启动
# 启动 
systemctl start mysqld
# 停止
systemctl stop mysqld
# 状态
systemctl status mysqld
# 重启
systemctl restart msyqld
  1. 修改密码
# 查看密码
sudo grep 'temporary password' /var/log/mysqld.log  
# 如果上面查不到密码,可以执行下面的查看
sudo grep 'temporary password' /var/log/messages  
# 登录
mysql -uroot -p 密码
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password123@mysql';
# 修改root作用域
update mysql.user set host = '%' where user = 'root';
# 刷新
flush privileges;
# 重启mysql
systemctl restart mysqld 

2.3 主从配置

2.3.1 主库配置

  1. 修改 /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql

default-storage-engine=INNODB
character_set_server=utf8mb4
lower_case_table_names=1 # 不区分大小写
performance_schema=off
table_open_cache=128
transaction_isolation=READ-COMMITTED
max_connections=1000
max_connect_errors=6000
max_allowed_packet=64M
innodb_file_per_table=1
innodb_buffer_pool_size=512M
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800


character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET default_collation_for_utf8mb4=utf8mb4_general_ci'

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

skip-name-resolve


# 主从复制-主机配置
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个)
binlog-do-db=metersphere
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动
删除。
binlog_expire_logs_seconds=2592000


[mysql]
default-character-set=utf8mb4

[mysql.server]
default-character-set=utf8mb
  1. 重启MySQL
# 启动 
systemctl start mysqld
# 停止
systemctl stop mysqld
# 状态
systemctl status mysqld
# 重启
systemctl restart msyqld
  1. 创建主从复制用户
#创建主从复制用户
CREATE USER 'clusteruser'@'%' IDENTIFIED WITH mysql_native_password BY 'Calong@2015';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'clusteruser'@'%';
# 刷新
FLUSH PRIVILEGES;

2.3.2 从库配置

  1. 配置my.cnf
[mysqld]
datadir=/var/lib/mysql

default-storage-engine=INNODB
character_set_server=utf8mb4
lower_case_table_names=1
performance_schema=off
table_open_cache=128
transaction_isolation=READ-COMMITTED
max_connections=1000
max_connect_errors=6000
max_allowed_packet=64M
innodb_file_per_table=1
innodb_buffer_pool_size=512M
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800


character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET default_collation_for_utf8mb4=utf8mb4_general_ci'

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

skip-name-resolve


# 主从复制-主机配置
# 从服务器唯一ID
server-id=2
# 需要主从复制的数据库 ,如多个则重复配置
replicate-do-db=metersphere
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件
relay_log=replicas-mysql-relay-bin
# log_replica_updates表示slave是否将复制事件写进自己的二进制日志,默认值ON开启;8.0.26版本之前使用log_slave_updates
log_replica_updates=ON
# 防止改变数据(只读操作,除了特殊的线程)
read_only=ON


[mysql]
default-character-set=utf8mb4

[mysql.server]
default-character-set=utf8mb
  1. 执行命令
CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.1.12.13',SOURCE_PORT=3306,SOURCE_USER='clusteruser',SOURCE_PASSWORD='Calong@2015',SOURCE_LOG_FILE='mysql-bin.000003',SOURCE_LOG_POS=863;


MASTER_HOST/SOURCE_HOST:主数据库的主机ip
MASTER_PORT/SOURCE_PORT:主数据库的端口,不设置则默认是3306
MASTER_USER/SOURCE_USER:主数据库被授予同步复制权限的用户名
MASTER_PASSWORD/SOURCE_PASSWORD:对应的用户密码
MASTER_LOG_FILE/SOURCE_LOG_FILE:在主数据库执行命令show master status 查询到的二进制日志文件名称
MASTER_LOG_POS/SOURCE_LOG_POS:在主数据库执行命令show master status 查询到的位置 Position的值
  1. 开启从节点
# 查看从节点状态
show slave status \G;
# 启动
start slvae;
# 停止
stop slave;
# 重置
reset slave;
  1. 查看状态

image.png

2.4 验证

  1. 主库添加一条数据,查看从库中是否同步,如果有,说明成功,否则失败。
  2. 主库执行sql语句
# 主从库执行前查看数量
select  count(*) from workspace;

# 主库执行
INSERT INTO workspace ( `id`, `name`, `description`, `create_time`, `update_time`, `create_user` ) values ( "1", "test", "test", unix_timestamp(now())*1000, unix_timestamp(now())*1000, NULL );

# 主从库查看
select id,name from workspace  where id='1';

主库/从库执行前:
image.png
主库执行后:
image.png
image.png
以上验证成功,即为搭建没问题。

三、Nginx 搭建

3.1 下载nginx安装包

下载地址:https://nginx.org/en/download.html
image.png

3.2 解压Nginx并安装

  1. 安装nginx
1. 解压nginx安装包
tar -zxvf nginx-1.24.0.tar.gz

2. 创建文件夹
mkdir /usr/local/nginx

3. 安装依赖
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

4.解压
cd nginx-1.24.0/
./configure --prefix=/usr/local/nginx

5. 安装
make && make install

6. 启动
cd /usr/local/nginx/sbin
./nginx 

7.检查语法错误
./nginx -t 

8.重启
./nginx -s reload 

9.停止
./nginx -s stop 

10. 验证,默认是80端口,直接访问ip,出现nginx的html页面,说明部署成功

  1. 修改配置信息
1. 修改配置信息,可以直接覆盖原来的。目录:/usr/local/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    include /usr/local/nginx/conf/conf.d/*.conf;
    #gzip  on;

}

2. 创建配置目录
mkdir /usr/local/nginx/conf/conf.d

3. 创建default.conf并编辑以下内容

>>
upstream servers.com {
  ip_hash;
  server 10.1.12.13:8081 weight=1 fail_timeout=10s max_fails=1; # 主节点1
  server 10.1.14.202:8081 weight=1 fail_timeout=10s max_fails=1; # 主节点2
}


server {
      listen       80;
      server_name  localhost;
      location / {
        proxy_pass http://servers.com;
        proxy_set_header Host               $host:$server_port;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 }
<<
  1. 效果

image.png

四、安装MeterSphere服务

官网地址:https://metersphere.io/docs/v2.x/installation/offline_installation/

  1. 安装包地址:https://community.fit2cloud.com/#/products/metersphere/downloads
  2. 解压安装, 默认安装/opt 目录
tar -zxvf metersphere-offline-installer-v2.10.2-lts.tar.gz
  1. 修改配置信息
cd metersphere-offline-installer-v2.10.2-lts
vi install.conf

image.png

  1. 配置好之前搭建好MySQL的主节点信息,然后执行脚本安装
bash install.sh
  1. 查看服务状态
msctl status 

image.png

  1. 另外一个节点同样的操作,参考上面安装即可。

五、NFS 搭建

搭建NFS是为了文件共享,使两个MeterSphere节点,文件同步。

5.1 服务端搭建

1. 在nginx节点安装NFS服务器
yum -y install nfs-utils

2. 安装nfs+rpc
yum -y install nfs-utils rpcbind

3. 验证nfs安装
rpm -qa nfs-utils

image.png

4. 服务端创建共享文件目录(目录可以自定义)
mkdir -p /data/
chmod 666 /data/

因为我们要共享的是/opt/metersphere/data目录,所以需要把其文件夹给复制过来。
1. 直接去到部署metersphere的服务器,把/opt/meterspere/data 给打包
tar -czvf data.tar.gz /opt/metersphere/data

2.然后传到部署nfs服务端/data目录下
最终效果如下:

[root@ms002 data]# pwd
/data
[root@ms002 data]# ls
api-folder  body  jar  jmeter  kafka  minio  mysql  node  prometheus  redis
[root@ms002 data]#



5.修改nfs的配置 /etc/exports

/data/  xx.xx.xx.xx(rw,sync,insecure,no_subtree_check,no_root_squash) xx.xx.xx.xx(rw,sync,insecure,no_subtree_check,no_root_squash)

# xx.xx.xx.xx 为客户端ip
#
#权限说明:
#rw   read-write,可读写;
#sync:文件同时写入硬盘和内存;
#async:文件暂存于内存,而不是直接写入内存;
#no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
#root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
#all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
#anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
#anongid:匿名用户的GID值。
#insecure:当mount监听端口大于1024时需要使用此参数

image.png

6. 重载配置数据
exportfs -rv

7. 启动rpc
systemctl start rpcbind

8.设置rpc开机启动
systemctl enable rpcbind

9.检查RPC
rpcinfo -p localhost

image.png

10.启动 NFS 服务
systemctl start nfs 
systemctl enable nfs

5.2 客户端搭建(也就是安装MeterSphere节点的服务器)

1. 下载客户端
yum -y install nfs-utils

2. 校验服务端共享目录(判断网络是否通)
showmount -e xx.xx.xx.xx   # xx.xx.xx.xx为服务端IP,有返回信息说明成功

3. 挂载共享目录
 mount xx.xx.xx.xx:/data /opt/metersphere/data  #xx.xx.xx.xx 服务端ip.

4. 至此直接在客户端或者服务端创建文件,看是否有同步即可。

注意:两个部署MeterSphere的节点都需要搭建。

六、验证

  1. 访问nginx节点,可以正常显示

image.png

  1. 因为使用nginx负载均衡,所以停掉一个服务,再进行访问。

image.png
image.png

七、注意事项

  1. 在安装MySQL的时候,有特别注意的地方需要仔细看下。
  2. 搭建双节点的MeterSphere应用所连接的中间件(kafka,redis,minio等)都需要连接同一个。
  3. v1和v2.3以前的版本需要NFS,v2.3开始使用MinIO对象存储,已经不再需要NFS了,但从v2.3以前版本升级上来的因为历史数据的原因还需要NFS。
  4. 如果需要保证相关中间件的可用性,可以自行独立部署。
  5. 以上就是完整的MeterSphere双活架构的部署流程,如有问题,欢迎留言。

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

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

相关文章

b站老王 自动驾驶决策规划学习记录(十二)

自动驾驶之速度规划详解&#xff1a;SL与ST迭代 上一讲&#xff1a;b站老王 自动驾驶决策规划学习记录&#xff08;十一&#xff09; 接着上一讲学习记录b站老王对自动驾驶规划系列的讲解 参考视频&#xff1a; 自动驾驶决策规划算法第二章第七节(上) 速度规划详解:SL与ST迭代…

ubuntu 22.04 服务器网卡无IP地址

ssh连接服务器连接不上&#xff0c;提示如下&#xff1b; 连接显示器&#xff0c;ip addr ls 命令查看IP地址&#xff0c;有网卡但没有IP地址 solution&#xff1a; sudo dhclient enp10s0用于通过 DHCP 协议获取网络配置信息并为名为 enp10s0 的网络接口分配 IP 地址,enp1…

学会根据数据手册指令格式发送数据

根据教导&#xff0c;我才知道如何发送指令 EF AA 00 00 00 00 02 C2 00 C4&#xff08;正确&#xff09; EF AA 00 02 02 02 02 C2 00 C4 (错误格式) 一个字节用两个十六进制的数表示。错误示范的指令它的校验码错误的。校验码根据手册将字节相加计算。

GitStats - 统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps&#xff0c;除了提供基础设施&#xff0c;指标和数据是也是一个很重要的一环&#xff0c;比如需要分析下某个 Git 仓库代码提交情况&#xff1a; 该仓库的代码谁提交的代码最多 该仓库的活跃度是什么样子的 各个时段的提交…

c++ 纯虚函数、抽象类

一、 纯虚函数 抽象类 只要有一个纯虚函数&#xff0c;这个类称为抽象类 抽象类的特点 1、无法实例化 2、抽象类的子类&#xff0c;必须要重写父类中的纯虚函数&#xff0c;否者也属于抽象类 例子一 #include <iostream> #include <string.h> using namespa…

正确设置PyTorch训练时使用的GPU资源

背景&#xff1a; 最近在使用Hugging Face的transformers api来进行预训练大模型的微调&#xff0c;机器是8卡的GPU&#xff0c;当我调用trainer.train()之后&#xff0c;发现8个GPU都被使用了&#xff0c;因为这个机器上面还有其他人跑的模型&#xff0c;当我进行训练的时候&…

Python 爬虫实战之爬淘宝商品并做数据分析

前言 是这样的&#xff0c;之前接了一个金主的单子&#xff0c;他想在淘宝开个小鱼零食的网店&#xff0c;想对目前这个市场上的商品做一些分析&#xff0c;本来手动去做统计和分析也是可以的&#xff0c;这些信息都是对外展示的&#xff0c;只是手动比较麻烦&#xff0c;所以…

服务器新建FTP文件备份的地址

步骤1&#xff1a;远程桌面连接 步骤2&#xff1a;输入服务器地址&#xff0c;账号&#xff0c;密码 服务器地址&#xff1a;IP地址 账号&#xff1a;Administrator 密码&#xff1a;123456 步骤3&#xff1a;点击这个一个小人的图标 步骤4&#xff1a;General–>Add–&g…

C++ RAII在HotSpot VM中的重要应用

RAII&#xff08;Resource Acquisition Is Initialization&#xff09;&#xff0c;也称为“资源获取就是初始化”&#xff0c;是C语言的一种管理资源、避免泄漏的惯用法。C标准保证任何情况下&#xff0c;已构造的对象最终会销毁&#xff0c;即它的析构函数最终会被调用。简单…

实操技巧:私域+公域=全渠道获客

引流是所有企业都要做的事情。在公域流量平台中不管是线上或线下&#xff0c;获客的成本是越来越高&#xff0c;所以很多企业都要在布局私域&#xff0c;但如果不懂私域运营的逻辑&#xff0c;同样也面临着获客难引流难的问题和获客成本高的问题。 . 今天给大家汇总了私域和公域…

MES管理系统对印刷企业来说有什么优点

在当今高度信息化的时代&#xff0c;许多企业&#xff0c;包括印刷企业&#xff0c;正在寻求更有效地管理其生产过程和运营的方式。在这种情况下&#xff0c;印刷企业MES管理系统成为了他们的首选。印刷企业MES系统在提升企业运营效率、优化生产过程、提升产品质量以及加强供应…

如何向PDB文件添加双键

在用PDB文件进行分子绘图的时候&#xff08;制作OBJ&#xff09;&#xff0c;发现像Atomic blender插件和PDB本身并不支持双键&#xff0c;需要对PDB文件进行修改&#xff0c;参照的该yt链接https://www.youtube.com/watch?vYNoow7qkwFA&t364s&ab_channelEdvinFako 即…

Java乐观锁的实现

乐观锁是一种用于解决并发冲突的机制&#xff0c;它基于假设在大多数情况下没有并发冲突的原则。与悲观锁不同&#xff0c;乐观锁不会对数据加锁&#xff0c;而是通过一定的方式来检测并处理并发冲突。 在实现乐观锁时&#xff0c;通常会使用版本号或时间戳作为标识。当多个线程…

电子科大软件系统架构设计——系统需求分析

文章目录 系统需求分析需求采集研究现有文档与系统组织机构图系统规划文档工作规范文档业务单据报表问题描述文档领域专业知识现有相关软件系统 与客户及相关人员进行面谈正式面谈非正式面谈典型访谈问题优缺点 问卷调查法调查表问卷设计问卷调查表应用方式 观察法头脑风暴法原…

【Spring Boot】拦截器学习笔记

一、普通拦截器 1&#xff0c;新建类MyWebConfig实现WebMvcConfigurer&#xff0c;实现addInterceptors方法 Overridepublic void addInterceptors(InterceptorRegistry registry) {registry// 不拦截哪些请求.excludePathPatterns("/login")// 拦截哪些请求.addPat…

Langchain 大型复杂结构文档解析-识别目录和页码

简介 在文档处理时&#xff0c;尤其是大型复杂结构的文档时&#xff0c;按照字数进行分割&#xff0c;总会造成文本段的割裂&#xff0c;导致召回准确率降低 如果能精确的找到文档大纲和目录&#xff0c;从而按照文档的目录的大纲进行处理&#xff0c;则会提升更多的召回准确…

构建工具Webpack简介

一、构建工具 当我们习惯了Node中使用ES模块化编写代码以后&#xff0c;用原生的HTML、CSS、JS这些东西会感觉到各种不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。 这时候…

小谈设计模式(5)—开放封闭原则

小谈设计模式&#xff08;5&#xff09;—开放封闭原则 专栏介绍专栏地址专栏介绍 开放封闭原则核心思想关键词概括扩展封闭 解释抽象和接口多态 代码示例代码解释 优缺点优点可扩展性可维护性可复用性高内聚低耦合 缺点抽象设计的复杂性需要预留扩展点可能引入过度设计 总结 专…

滚雪球学Java(39):学会Java异常处理,让你的程序健壮无比

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

机器视觉-标定篇

3D结构光标定 结构光视觉的优点&#xff1a; 非接触、信息量大、测精度高、抗干扰能力强。 结构光视觉传感器参数的标定包括&#xff1a;摄像机参数标定、结构光平面参数标定。 结构光视觉测量原理图 我们不考虑镜头的畸变&#xff0c;将相机的成像模型简化为小孔成像模型…