Ansible--自动化运维工具
Ansible自动化运维工具介绍
1.Ansible介绍
Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。主要包括:
(1) 连接插件connection plugins:负责和被监控端实现通信;
(2) host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3) 各种模块核心模块、command模块、自定义模块;
(4) 借助于插件完成记录日志邮件等功能;
(5) playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2.Ansible工作原理
基于 SSH 和模块
Ansible 通过 SSH 协议连接到目标主机。这意味着它不需要在目标主机上安装额外的代理软件。它使用一系列的模块来执行具体的任务。这些模块是 Ansible 的核心功能单元,比如 “yum” 模块用于在基于 RPM 的系统(如 CentOS、Red Hat)上安装软件包,“apt” 模块用于 Debian 和 Ubuntu 系统的软件安装,“service” 模块用于管理系统服务等。当 Ansible 执行一个任务时,它会将相应的模块发送到目标主机,然后在目标主机上运行模块来完成任务。
Inventory 文件
Ansible 使用一个名为 “Inventory” 的文件来管理目标主机列表。这个文件可以是简单的文本格式,列出了主机的 IP 地址或主机名,也可以按照组进行分类。例如,你可以将所有的 Web 服务器放在一个名为 “web_servers” 的组中,将数据库服务器放在 “db_servers” 的组中。在 playbook 中,就可以针对不同的组执行不同的任务,比如只在 “web_servers” 组中安装和配置 Web 服务器软件。
3.Ansible工作流程
(1)加载配置文件: Ansible 默认查找 /etc/ansible/ansible.cfg 配置文件,这个文件包含了Ansible运行时的行为设定,如连接方式、插件路径等。
(2)解析Inventory: Ansible 使用 Inventory 文件(默认是 /etc/ansible/hosts)来确定需要操作的目标主机或主机组。
(3)编译Playbook或命令: Ansible 准备执行的Playbook或直接执行的Ad-Hoc命令,并解析其中的任务和模块调用。
(4)模块加载与执行策略准备: 对于每个任务,Ansible 加载相应的模块(如 command 模块),并准备执行上下文,包括变量、环境等。
(5)生成并传输临时脚本: Ansible 会根据任务和模块生成一个或多个临时的Python脚本,并通过SSH连接传输到目标主机的临时目录,通常位于目标用户的 ~/.ansible/tmp/ansible-tmp-<UNIQUE_ID>/ 目录下。
(6)赋予执行权限: 在目标主机上,Ansible 会给这个临时Python脚本加上执行权限,以便能够运行。
(7)执行远程脚本: Ansible 通过SSH在目标主机上执行这个临时脚本,并收集执行结果。
结果收集与处理: 执行完毕后,各个主机的执行结果被收集并汇总,Ansible根据这些结果决定是否继续执行后续任务,或是根据Playbook中的错误处理逻辑(如 rescue 和 always 块)进行操作。
(8)清理: 一旦任务执行完成,无论成功还是失败,Ansible 会清理目标主机上的临时文件,包括删除之前上传的Python脚本。
(9)退出与报告: 清理完成后,Ansible 进程在目标主机上退出,并向控制机报告最终的执行状态和结果。
Ansible集群搭建
Server节点 | 192.168.100.51 |
Host1 节点 | 192.168.100.52 |
Host2 节点 | 192.168.100.53 |
Host3 节点 | 192.168.100.50 |
1.编写hosts文件
三个主机根据节点规划更改主机名,并编写映射文件 [root@server ~]# vi /etc/hosts 192.168.100.51 server 192.168.100.52 host1 192.168.100.53 host2 192.168.100.50 host3 |
2.配置免密登陆
主节点生成密钥对
[root@server ~]# ssh-keygen -P "" -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:C6R237cwGYEIGvMJRvFWj6ZQ3h1qLdagV/GKNjY//W0 root@server The key's randomart image is: +---[RSA 2048]----+ | .B.o o +. | | . X * @ + | | o B % * o | | o O o . . | | + O S . | | . + * + o | | = * . | | . = oE | | o.. | +----[SHA256]-----+ |
-P "":设置空密码
-t rsa: 指定生成密钥的类型为RSA
将公钥发给受管制节点
[root@server ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@host1 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host 'host1 (192.168.100.52)' can't be established. ECDSA key fingerprint is SHA256:67lB1mL6LK/kJPxrKPAOU+3YIixzp0oA4aTCBoqf41c. ECDSA key fingerprint is MD5:c2:17:dc:da:a3:3d:31:28:1f:74:10:77:85:9d:9d:36. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@host1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@host1'" and check to make sure that only the key(s) you wanted were added. |
三个受管制的节点一次发送,测试免密登陆:
[root@server ~]# ssh host1 Last login: Sat Nov 23 14:41:46 2024 from server [root@host1 ~]# exit logout Connection to host1 closed. [root@server ~]# ssh host2 Last login: Sat Nov 23 14:41:51 2024 from server [root@host2 ~]# exit logout Connection to host2 closed. [root@server ~]# ssh host3 Last login: Sat Nov 23 01:33:26 2024 from 192.168.100.1 [root@host3 ~]# exit logout Connection to host3 closed. [root@server ~]# |
3.主节点安装Ansible
主节点安装epel-release源后,安装Ansible,并检查是否安装成功
[root@server ~]# yum install -y epel-release [root@server ~]# yum install -y ansible [root@server ~]# ansible --version |
4.修改主机清单设置分组
ansible常见的配置文件
• /etc/ansible/ansible.cfg:主配置文件
• /etc/ansible/hosts:主机清单文件
• /etc/ansible/roles:角色目录
备份主机求清单文件
[root@server ~]# cd /etc/ansible/ [root@server ansible]# ls ansible.cfg hosts roles [root@server ansible]# cp -f hosts hosts.bak [root@server ansible]# ls ansible.cfg hosts hosts.bak roles |
编写主机清单文件
[root@server ansible]# vi hosts [all-servers] server host1 host2 host3 [node1] host1 [node2] host2 [node3] host3 [mysql_test] #规划节点host1和host2节点为数据库节点 host1 host2 [web_test] #规划节点host2和host3节点为web节点 host2 host3 [manager] server |
保存配置文件
Ansible模块基本使用
1.Ansible常用参数说明
参数 | 说明 |
-h | 显示帮助信息 |
-i | 指定inventory文件路径,默认路径为/etc/ansible/hosts |
-l | 限制palybook或命令的作用范围 |
-u | 连接远程主机时使用的用户名。 |
-b | 相当于sudo |
--become-user=USER | 提上权限后切换到的用户 |
-m | 指定要使用的模块名 |
-a | 指定模块的参数 |
-f | 指定并发进程数,默认为5 |
-v | 增加输出的详细程度 |
-e | 指定变量名 |
--diff | 修改文件时显示修改前后的差异 |
Ansible的执行状态
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
粉色:警告信息
蓝色:显示ansible命令执行的过程
2.ping模块
ping模块用于检查指定节点机器是否连通,用法很简单,不涉及参数
主机如果在线,则回复pong
[root@server ansible]# ansible -m ping node1 [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details host1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } |
以组为单位测试
[root@server ansible]# ansible -m ping all |
3.command模块
command模块用于在远程主机上执行命令,ansible默认就是使用command模块。
[root@server ansible]# ansible host1 -m command -a 'ls /etc/yum.repos.d/' |
相当于远程让host1节点执行ls命令
在受管制主机host1的/opt/目录下创建文件
[root@server ansible]# ansible host1 -m command -a 'touch /opt/hzy' |
command模块有一个缺陷就是不能使用管道符和重定向功能。
Command模块也可以多节点执行
[root@server ansible]# ansible -m command -a 'hostname' all |
4.shell模块
shell模块用于在受控机上执行受控机上的脚本,亦可直接在受控机上执行命令。
shell模块亦支持管道与重定向。
[root@server ansible]# ansible host1 -m shell -a 'a=10086;echo $a' |
查看web_test组远程主机的系统版本
[root@server ansible]# ansible web_test -m shell -a 'cat /etc/os-release | grep PRETTY_NAME | cut -d "=" -f2' |
5.user模块
主要用于管理远程系统上的用户账户,包括创建、修改和删除用户。
它允许你设置用户的密码、shell、主目录、权限等属性
常用参数:
system | 创建用户设置用户是系统用户 |
uid | 指定uid |
group | 指定用户组 |
home | 指定家目录 |
comment | 用户的描述信息 |
password | 指定用户密码 |
state | 设置帐号状态,默认为present表示新建用户,指定值为absent表示删除 |
update_password | 更新用户密码 |
name | 指定用户名 |
remove | 在使用state=absent时, 行为是与userdel –remove一致 |
[root@server ansible]# ansible host1 -m user -a 'system=yes name=hongzy uid=777 comment="hzy"' |
指在host1节点创建一个名为hongzy的用户,uid为777,用户描述为hzy
检查hongzy用户是否被正确创建,调用shell模块
[root@server ansible]# ansible host1 -m shell -a 'id hongzy ; grep ^hongzy: /etc/passwd | awk -F ":" '\''{print $5}'\''' |
删除hongzy用户
[root@server ansible]# ansible host1 -m user -a 'name=hongzy state=absent remove=yes' |
再次调用shell模块检查hongzy是否被删除
[root@server ansible]# ansible host1 -m shell -a 'id hongzy ; grep ^hongzy: /etc/passwd | awk -F ":" '\''{print $5}'\''' |
6.group模块
group模块用于在受控机上添加或删除组
常用参数
gid | 用于设置组的GID |
name | 指定组名称(必选项) |
non_uniue | 允许组ID为非唯一值,与gid一起使用 |
state | 指定用户组在远程主机上的状态,present和absent |
system | 创建的用户组是否是系统组 |
创建组
[root@server ansible]# ansible host1 -m group -a "name=footabll gid=1001 system=yes" |
创件一个组名为footbal,组ID为1001,并且是系统组
使用shell模块检查是否创建成功
[root@server ansible]# ansible host1 -m shell -a "cat /etc/group | grep 1001" |
删除组
[root@server ansible]# ansible host1 -m group -a "name=football gid=1001 state=absent" |
7.copy模块
在 Ansible 中,copy模块主要是将本地(执行 Ansible 任务的控制节点)的文件或目录复制到远程的host主机(被管理节点)。
常用参数
src | 被复制文件的本地路径 |
dest | 复制到管控节点的绝对路径(必选) |
content | 可以指定文件的值(内容) |
mode | 设置文件权限 |
force | 当目标主机含有该文件时,但内容不同时,设为yes表示强制覆盖,设置为no,表示目标主机的目标位置不存在才复制 |
backup | 在覆盖前,将源文件备份,备份文件包含时间信息 |
创建一个txt文件并写入内容
[root@server ansible]# echo "hello word" > /root/test.txt |
将该文件复制到被管理主机host1节点的/opt/目录下并赋予权限755
[root@server ansible]# ansible host1 -m copy -a 'src=/root/test.txt dest=/opt/copy.txt mode=755' |
再次使用copy模块,进行覆盖文件操作,使用backup参数
[root@server ~]# ansible host1 -m copy -a 'src=/root/777.txt backup=yes dest=/opt/copy.txt' |
使用 Ansible 来调用 copy 模块,目的是将本地/root/777.txt 文件复制到名为 host2 的远程主机的 /opt/copt.txt 位置,并且设置了 backup=yes 参数,意味着如果远程主机上 /opt 目录下已经存在 copt.txt 文件,那么会先对原有的文件进行备份,再将本地的文件复制过去。
查看这两个文件
8.fetch模块
Ansible 的 fetch 模块用于从远程节点抓取文件并存储到Ansible控制器(执行Ansible任务的机器)上的指定目录
常用参数
src | 要远程拉取的文件(只能是文件) |
dest | 用来存放文件的目录 |
flat | 设置为yes时,即使src是目录,也会将所有内容扁平化存储到dest |
size | 限制抓取文件的大小 |
force | 即使本地文件已经存在了仍旧抓取,默认yes,设置为no只有当远程文件比本地文件新或不同才执行抓取 |
validate_checksum | 当设置为yes时在下载完成后校验文件的校验和确保文件完整无误 |
fail_on_missing | 当设置为yes时,如果远程文件不存在,则标记任务失败,否则只是简单地跳过该文件 |
从远程主机抓取文件
[root@server ~]# ansible host1 -m fetch -a 'src=/opt/copy.txt.2092.2024-11-24@10:33:45~ dest=/opt/' |
使用校验机制
[root@server ~]# ansible host1 -m shell -a 'echo "fetch_text1" > /root/fetch.txt' [root@server ~]# ansible host1 -m fetch -a 'src=/root/fetch.txt dest=/opt/ validate_checksum=yes fail_on_missing=yes size=100k' |
增加了验证文件完整性,文件是否存在,文件大小限制
查看server节点下的/opt目录结构
9.file模块
file模块主要用于对文件的创建、删除、修改、权限、属性的更改。
常用参数
path | 定义文件/目录的路径 |
mode | 定义文件/目录的权限 |
owner | 定义文件/目录的所有者 |
group | 定义文件/目录的所属组 |
state | 选项:directory、file、link、hard、touch、absent |
dest | 被链接到的路径(state=link) |
src | 被链接的源文件的路径(state=link) |
在指定路径下创建目录
[root@server ~]# ansible web_test -m file -a 'path=/root/web mode=644 owner=root group=root state=directory' |
在/root目录下创建web目录,权限为644,所有者和所属组为root
查询root目录进行检查
[root@server ~]# ansible web_test -m shell -a 'ls -l /root' |
创建软链接
[root@server ~]# ansible web_test -m file -a 'path=/opt/web src=/root/web state=link' |
查看软链接是否创建成功
[root@server ~]# ansible web_test -m command -a 'ls -l /opt' |
删除文件操作
删除web目录
[root@server ~]# ansible web_test -m file -a 'path=/root/web state=absent' |
查看是否删除
10.yum模块
主要用于在基于 RPM 的 Linux 系统上管理软件包,它允许用户安装、更新、卸载软件包,并可配置额外的选项以控制操作的具体行为。
常用参数
name | 所安装的软件包的名称 |
state | 安装present,安装最新版本latest,卸载软件包absent |
update_cache | 强制更新yum缓存 |
conf_file | 指定远程安装是所依赖的配置文件 |
disablerepo | 临时禁用yum源 |
skip_borken | 跳过异常软件节点 |
让host1节点和host2节点安装net-tools软件包
[root@server ~]# ansible host1,host2 -m yum -a 'name=net-tools state=present' |
使用netstat命令检测是否呗正确安装并且可以使用
[root@server ~]# ansible host1,host2 -m shell -a 'netstat -lnpt' |
让host2卸载net-tools软件包
[root@server ~]# ansible host2 -m yum -a 'name=net-tools state=absent' |
检测是否卸载成功
[root@server ~]# ansible host2 -m shell -a 'echo $?' |
更新host1主机的所有软件包
[root@server ~]# ansible host1 -m yum -a 'name=* state=latest' |
11.service模块
Ansible的service模块用于管理系统服务(如启动、停止、重启服务等)。
这个模块与特定的系统服务管理工具(如systemd、sysvinit、upstart等)兼容,能够跨不同的Linux发行版和系统管理框架工作
常用参数
name | 服务的名称(必选) |
state | started启动服务,stopped停止服务,restarted重启服务,reloaded重载配置 |
enabled | 服务是否应该在系统启动时自动启动。至少需要指定state或enabled中的一个 |
sleep | 当服务处于restarted状态时,停止与启动命令之间暂停的秒数 |
use | 服务模块通常通过自动检测使用系统特定的模块,此设置可以强制使用特定模块。 |
arguments | 额外的命令行参数,提供给服务管理命令。 |
使host1节点关闭防火墙
[root@server ~]# ansible host1 -m service -a 'name=firewalld state=stopped' |
查看host1节点防火墙状态
再次启动host1节点的防火墙
12.script模块
Ansible的script模块允许你在远程主机上执行位于Ansible控制节点上的本地脚本
常用参数
free_form | 直接提供脚本的路径以及可选参数 |
creates | 指定远程运行的本地脚本的路径 |
removes | 指定远程节点的一个文件名,文件不存在则不执行 |
cmd | 要在远程节点上运行的本地脚本的路径 |
chdir | 在远程节点执行脚本之前要切换到的目录路径 |
在server控制节点编写一个脚本
[root@server ~]# vi root.sh #!/bin/bash #检测当天用户是否为root用户 if [ $USER == "root" ] then echo "当前为root用户" > /root/test else echo "当前是$USER用户,不是root用户" > /root/test fi |
让host1节点和host2节点执行该脚本文件
[root@server ~]# ansible host1,host2 -m script -a '/root/root.sh' |
查看/root/test文件,检查脚本是否执行成功
[root@server ~]# ansible host1,host2 -m shell -a 'cat /root/test' |
13.setup模块
Ansible的setup模块用于收集远程主机的信息,并将这些信息以facts的形式返回给Ansible控制节点。这些facts可以包括系统变量(如操作系统类型、架构、网络配置、已安装软件包等),并且在Playbook执行期间可以被其他任务使用。
常用参数
filter | 用于筛选出特定的系统信息。通过指定一个或多个关键字,可以只获取与这些关键字相关的系统变量信息。 |
fact_path | 指定自定义事实(custom facts)的路径。自定义事实是用户自己定义的关于主机的信息,除了Ansible默认收集的系统事实之外,用户可以通过在指定路径下创建文件来添加自定义的主机信息。 |
gather_subnet | 控制setup模块收集信息的子集。默认情况下,setup模块会收集大量的系统信息,包括硬件、网络、操作系统等多个方面。使用gather_subset可以指定收集某些特定方面的信息,或者排除某些方面的信息。可能的值包括:all(全部)、min(最小集合)、hardware(硬件信息)、network(网络信息)、virtual(虚拟化信息)、ohai(类似Chef Ohai的扩展信息)、facter(使用Facter收集的信息)。 |
查看host1主机的内存信息
[root@server ~]# ansible host1 -m setup -a "filter='*mem*'" |
检查(由于内存信息是实时更新的,所以会有所偏差)
[root@server ~]# ansible host1 -m command -a "free -m" |
将查询到的信息保存
[root@server ~]# ansible host1 -m setup -a 'filter="*mem*"' --tree /opt |
保存的信息存放在了server控制节点的/opt目录下
至此,Ansible的介绍和Ansible模块的基本使用就结束了,接下来会是playbook文件的编写以及后续基于ansible的实验搭建等,拜拜各位看官
相关文章:
Ansible--自动化运维工具
Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。…...
【每日一题】142.环形链表II
最近有点懈怠了,因为连续出差,身心俱疲,实在是没有空做题。 这道题的思路是快慢指针,需要对环形的链表进行数学公式的计算。 根据这个公式可以推断出一个数学结论,当快慢指针相遇的时候,快指针从起点再出发…...
YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】
目录 1 前言2 YOLO在不同领域的应用3 物体检测指标和NMS3.1 mAP和IOU3.2 mAP计算流程3.2.1 VOC 数据集3.2.2 微软 COCO 数据集 3.3 NMS 1 前言 最近在做目标检测模型相关的优化,重新看了一些新的论文,发现了几篇写得比较好的YOLO系列论文综述࿰…...
TailwindCss 总结
目录 一、简介 二、盒子模型相关 三、将样式类写到一个类里面apply 四、一款TailWind CSS的UI库 一、简介 官方文档:Width - TailwindCSS中文文档 | TailwindCSS中文网 Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类…...
【开源项目】2024最新PHP在线客服系统源码/带预知消息/带搭建教程
简介 随着人工智能技术的飞速发展,AI驱动的在线客服系统已经成为企业提升客户服务质量和效率的重要工具。本文将探讨AI在线客服系统的理论基础,并展示如何使用PHP语言实现一个简单的AI客服系统。源码仓库地址:ym.fzapp.top 在线客服系统的…...
MySQL原理简介—11.优化案例介绍
大纲 1.禁止或改写SQL避免自动半连接优化 2.指定索引避免按聚簇索引全表扫描大表 3.按聚簇索引扫描小表减少回表次数 4.避免产生长事务长时间执行 1.禁止或改写SQL避免自动半连接优化 (1)业务场景介绍 (2)SQL性能问题分析 (3)SQL性能调优 (1)业务场景介绍 某互联网公司…...
Http 响应协议
HTTP的响应协议 响应数据格式 响应行 响应数据的第一行,包括协议、状态码、描述 响应头 从响应数据格式的第二行开始,也是以key:value的格式 响应体 和响应头之间有一个空行,是响应数据格式的最后一部分,用于存放响应的数据 常见响…...
实现 Browser 客户端下载 XML 文件功能
后端 使用 io.BytesIO 方法 创建一个字节缓冲区在不需要磁盘文件的情况下进行文件操作打包为 zip 压缩包(上图代码)in_memory_zip.seek(0) 数据写入ZIP后文件指针会停留在缓冲区的末尾将文件指针重置回开头make_response() 方法用于创建HTTP响应的函数.g…...
Matlab以一个图像分类例子总结分类学习的使用方法
目录 前言 导入数据 训练学习 导出训练模型 仿真测试 总结 前言 最近在尝试一些基于Simulink的边沿AI部署,通过这个案例总结Matlab 分类学习功能的使用。本案例通过输入3000张28*28的灰度图像,训练分类学习模型。并验证训练好的模型最后部署到MCU。 导入数据 如下图是…...
AI-agent矩阵营销:让品牌传播无处不在
矩阵营销是一种通过多平台联动构建品牌影响力的策略,而 AI-agent 技术让这一策略变得更加智能化。AI社媒引流王凭借其矩阵管理功能,帮助品牌在多个平台上实现深度覆盖与精准传播。 1. 矩阵营销的优势 品牌触达更广:多平台联动可以覆盖不同用…...
HDMI转VGA方案 LT8612UX(HDMI2.0) LT8612SX LT8511EX LT8522EX LT8612EX_e(HDMI1.4)
一、产品概述 LT8612UX是一款高性能的HDMI至HDMI&VGA转换器,由龙迅半导体公司推出。它能够将HDMI2.0数据流转换为HDMI2.0信号和模拟RGB信号,同时输出8通道I2S和SPDIF信号,实现高质量的7.1声道音频。该转换器采用最新的ClearEdge技术&…...
零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu
1.为啥使用Linux做嵌入式开发 能广泛支持硬件 内核比较高效稳定 原码开放、软件丰富 能够完善网络通信与文件管理机制 优秀的开发工具 2.什么是Ubuntu 是一个以桌面应用为主的Linux的操作系统, 内核是Linux操作系统, 具有Ubuntu特色的可视…...
腾讯云OCR车牌识别实践:从图片上传到车牌识别
在当今智能化和自动化的浪潮中,车牌识别(LPR)技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力,为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…...
第二十二课 Vue中的组件切换
Vue中的组件切换 :is 操作符可以用于组件的切换,配合component标签可以实现根据不同的组件名进行组件的切换效果 组件切换实例 1):is与component实现组件切换 <div id"app"><button click"checks()">点击切换组件&l…...
抖音短视频矩阵源代码部署搭建流程
抖音短视频矩阵源代码部署搭建流程 1. 硬件准备 需确保具备一台性能足够的服务器或云主机。这些硬件设施应当拥有充足的计算和存储能力,以便支持抖音短视频矩阵系统的稳定运行。 2. 操作系统安装 在选定的服务器或云主机上安装适合的操作系统是关键步骤之一。推…...
【Linux】线程同步与互斥
文章目录 1. 线程互斥1.1 进程线程间的互斥相关背景概念1.2 互斥量mutex1.3 相关操作1.4 互斥量实现原理1.5 互斥量的封装 2. 线程同步2.1 条件变量2.2 生产者消费者模型2.3 基于BlockingQueue的生产者消费者模型2.4 信号量2.5 基于环形队列的生产消费模型 3. 线程池3.1 日志3.…...
设计模式-原型模式
背景 克隆羊:有一只羊,有各种属性:姓名,年龄……,现在要克隆10只和这只羊一模一样的羊。 传统方法: 定义一个羊类,在客户端调取原型羊的信息,根据信息创建10个属性相同的羊。 问…...
异或操作解决一些问题
前提: 异或操作符合交换律,结合律(因为其根本上来抽象理解,就是查看所有项二进制数相同位是否有奇数个1,对运算结果二进制数而言,没有该位为0,有该位为1,与顺序无关)。 …...
Rust中Tracing 应用指南
欢迎来到这篇全面的Rust跟踪入门指南。Rust 的tracing是一个用于应用程序级别的诊断和调试的库。它提供了一种结构化的、异步感知的方式来记录日志和跟踪事件。与传统的日志记录相比,tracing能够更好地处理复杂的异步系统和分布式系统中的事件跟踪,帮助开…...
Java与C#
Java和C#(C Sharp)是两种流行的面向对象编程语言,它们在很多方面非常相似,因为它们都受到了类似的编程范式和语言设计理念的影响。然而,它们之间也存在一些重要的区别。 平台依赖性: Java:Java是…...
Docker 部署 MongoDB
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🍃 vue-uniapp-template 🌺 仓库主页: GitCode💫 Gitee …...
【C语言】字符串左旋的三种解题方法详细分析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯题目描述💯方法一:逐字符移动法💯方法二:使用辅助空间法💯方法三:三次反转法💯方法对…...
Android导出Excel
poi org.apache.poi:poi-ooxml:4.x: 不支持Android使用, 不支持原因:Android底层库不支持xml所需的bean类,使用即报错only supported starting with Android O (–min-api 26) org.apache.poi:poi-ooxml:5.2.0: 支持A…...
【学术讲座】视觉计算中的深度学习方法 AIGC图像视频生成模型的推理加速
视觉计算中的深度学习方法 发展历程 backbone 强化学习、LLM等:有监督 && 无监督的结合 目标检测 图像分割 网络结构搜索 搜索方法 1:强化学习 2:强化学习 3:梯度算法 结构选择的作用 1:开放环境感知网络…...
华为OD机试真题---智能驾驶
华为OD机试中的“智能驾驶”题目是一道涉及广度优先搜索(BFS)算法运用的题目。以下是对该题目的详细解析: 一、题目描述 有一辆汽车需要从m * n的地图的左上角(起点)开往地图的右下角(终点)&a…...
视频质量评价SimpleVQA
目录 一、研究意义例子 二、介绍三、文章解读3.1 论文动机3.2论文思路3.3方法3.3.1网络框架3.3.2公式解读3.3.3核心创新3.3.4理解 !!!作者对模型的改进本人算法框体视频抽帧美学特征提取网络:3.3.5实验细节: 四、代码复…...
浏览器插件基于nativeMessaging通信
上一篇文章介绍了基于nativeMessaging启动本地程序,使用官方demo是支持双向通信,demo启动的程序是python写的,现在基于Qt程序进行说明。 消息传递协议 Chrome 会在单独的进程中启动每个原生消息传递主机,并使用标准输入 (stdin)…...
解决 MySQL 8.x 身份验证问题的最佳实践20241126
MySQL 8.x 身份验证问题的深入解析与实践解决方案 🎯 引言 🖋️ MySQL 是全球最受欢迎的开源数据库之一,随着 MySQL 8.x 的发布,引入了更安全的身份验证插件 caching_sha2_password,显著提升了数据库的安全性和性能。…...
对于GC方面,在使用Elasticsearch时要注意什么?
大家好,我是锋哥。今天分享关于【对于GC方面,在使用Elasticsearch时要注意什么?】面试题。希望对大家有帮助; 对于GC方面,在使用Elasticsearch时要注意什么? 1000道 互联网大厂Java工程师 精选面试题-Java…...
各种排序算法
前置知识 排序: 按照递增或者递减的顺序把数据排列好 稳定性: 值相等的元素在排序之后前后顺序是否发生了改变 内部排序: 数据放在内存上 外部排序: 数据放在磁盘上 内部排序 基于比较的排序 几大排序算法 1. 堆排序 特点: 思想: 1. 创建大根堆,把所有元素放在大根堆里…...
前端-Git
一.基本概念 Git版本控制系统时一个分布式系统,是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景:多人开发管理代码;异地开发,版本管理,版本回滚。 Git 的三个区域&a…...
用nextjs开发时遇到的问题
这几天已经基本把node后端的接口全部写完了,在前端开发时考虑时博客视频类型,考虑了ssr,于是选用了nextJs,用的是nextUi,tailwincss,目前碰到两个比较难受的事情。 1.nextUI个别组件无法在服务器段渲染 目前简单的解决方法&…...
Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64
yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址,无法连接,需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…...
HCIA笔记3--TCP-UDP-交换机工作原理
1. tcp协议 可靠的连接 1.1 报文格式 1.2 三次握手 1.3 四次挥手 为什么TIME_WAIT需要2MSL的等待时间? (a) 为了实现可靠的关闭 (b)为了让过期的报文在网络上消失 对于(a), 假设host发给server的last ack丢了。 ser…...
RabbitMQ原理架构解析:消息传递的核心机制
文章目录 一、RabbitMQ简介1.1、概述1.2、特性 二、RabbitMQ原理架构三、RabbitMQ应用场景3.1、简单模式3.2、工作模式3.3、发布订阅3.4、路由模式3.5 主题订阅模式 四、同类中间件对比五、RabbitMQ部署5.1、单机部署5.2、集群部署(镜像模式)5.3、K8s部署…...
C语言指针作业
//8-29 第八章作业 //3.输入10个整数,将其中最小的数第一个数对换,把最大的数与最后一个数对换 //写3个函数:①输人10个数;②进行处理;③输出10个数。 //①输人10个数, //方法一:数组索引 void main() {int arr[10];int *p arr;//printf("请输入…...
区块链:比特币-Binance
写在前面:相对于Tran和BNB而言,Binance不支持智能合约;大约每 10分钟 生成一个新区块 一、认识Binance 官方网站:Blockchain Explorer - Bitcoin Tracker & More | Blockchain.com 官方文档:Authentication – I…...
数据工程流程
** 数据工程流程图** #mermaid-svg-ArT55xCISSfZImy3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ArT55xCISSfZImy3 .error-icon{fill:#552222;}#mermaid-svg-ArT55xCISSfZImy3 .error-text{fill:#552222;stroke…...
使用Python和Pybind11调用C++程序(CMake编译)
目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…...
基于springboot的县市级土地使用监控系统的设计与实现
文末获取本系统(程序源码数据库调试部署开发环境)文末可获取,系统界面在最后面。 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的…...
Hot100 - 最大子数组和
Hot100 - 最大子数组和 最佳思路:动态规划 时间复杂度:O(n) 代码: class Solution {public int maxSubArray(int[] nums) {int sum 0;int ans Integer.MIN_VALUE;for (int i 0; i < nums.length; i) {// 如果 sum > 0,…...
Matlab 深度学习 PINN测试与学习
PINN 与传统神经网络的区别 与传统神经网络的不同之处在于,PINN 能够以微分方程形式纳入有关问题的先验专业知识。这些附加信息使 PINN 能够在给定的测量数据之外作出更准确的预测。此外,额外的物理知识还能在存在含噪测量数据的情况下对预测解进行正则…...
[STM32]从零开始的STM32 FreeRTOS移植教程
一、前言 如果能看到这个教程的话,说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗?是的,我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS,再到最…...
软件团队的共担责任
问责制被认为是个人与其社会系统之间的纽带,它创造了一种将个人与其行为和绩效联系起来的身份关系。在入门系列的第一篇文章《超越工具和流程:成功软件开发团队的策略》中,我们介绍了问责制的概念,并提出了以下定义: …...
代码美学:MATLAB制作渐变色
输入颜色个数n,颜色类型: n 2; % 输入颜色个数 colors {[1, 0, 0], [0, 0, 1]}; createGradientHeatmap(n, colors); 调用函数: function createGradientHeatmap(n, colors)% 输入检查if length(colors) ~ nerror(输入的颜色数量与n不一…...
Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具
自动驾驶汽车安全吗?现代汽车的软件包含1亿多行代码,支持许多不同的功能,如巡航控制、速度辅助和泊车摄像头。而且,这些嵌入式系统中的代码只会越来越复杂。 随着未来汽车的互联程度越来越高,这一趋势还将继续。汽车越…...
大模型中常见的微调方法有哪些?
我整理了1000道算法面试题: 获取 这里说的微调主要是指参数微调,参数微调的方法主要有以下几种: - Adapter 在预训练模型每一层(或某些层)中添加Adapter模块(如上图左侧结构所示),微调时冻结预训练模型主体,由Ada…...
MATLAB支持的距离度量
距离度量是用于量化两个点或样本之间差异的一种方法。在不同的领域和应用场景中,距离度量的选择可能会有所不同。 欧几里得距离(Euclidean Distance):这是最直观的距离定义,适用于n维空间中的两点。对于二维空间中的点…...
c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
在嵌入式系统中,有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器,通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片,驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...
LSA详情与特殊区域
LSA是构成LSDB的重要原材料,在OSPF中发挥很大作用。 报文 通用头部 LS age:LSA寿命,0-3600s Options:可选项 LS type:LSA类型,三要素之一 Link State ID:LSAID 三要素之一 Advertising Ro…...