自动化运维工具Ansible教程(一)【入门篇】
文章目录
- 前言
- Ansible 入门到精通
- 入门篇
- 进阶篇
- 精通篇
- 入门篇
- 1. Ansible 简介
- 2. 安装 Ansible
- 1. 通过包管理器安装:
- 2. 通过源码安装:
- 3. Ansible 的基本概念和核心组件
- 4. 编写和运行第一个 Ansible Playbook
- 5. 主机清单和组织结构
- 主机清单
- 组织结构
- 6. Ansible 常用模块和任务
- 7. Ansible 变量和模板
- 8. Ansible 条件和循环
- 参考文档
前言
ansible 学习大纲
Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。
-
简单易用:Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编写复杂的脚本或编程代码。初学者可以快速上手,同时也适用于复杂的自动化需求。
-
无代理:Ansible 使用 SSH 协议进行远程连接和执行任务,无需在远程主机上安装任何代理程序。这使得部署和管理变得简单,同时减少了对目标主机的依赖和配置要求。
-
基于模块化:Ansible 基于模块化的架构,提供了丰富的模块来管理各种不同类型的系统、服务和应用。这些模块可以执行各种任务,如安装软件包、配置文件、启动服务等。
-
声明式语法:Ansible Playbooks 使用声明式语法描述所需的状态和配置,而不是编写特定的步骤和命令。这使得配置管理和自动化任务的维护更加直观和可读性强。
-
可扩展性:Ansible 可以轻松扩展以适应不同规模和复杂度的环境。它支持分组管理、变量管理、角色和插件等功能,可以构建复杂的自动化流程和组织结构。
-
强大的生态系统:Ansible 拥有庞大的社区和活跃的贡献者,提供了大量的模块、角色和插件。Ansible Galaxy 是一个社区驱动的集市,提供了现成的角色和模块,可用于加速和共享自动化任务的开发。
Ansible 的应用场景广泛,可以用于服务器配置管理、应用部署、云基础设施管理、网络设备配置、持续集成/持续部署 (CI/CD) 等。它的简单性、可读性和可扩展性使得 Ansible 成为许多组织和开发团队的首选自动化工具。
Ansible 入门到精通
入门篇
- Ansible 简介
- 安装 Ansible
- Ansible 的基本概念和核心组件
- 编写和运行第一个 Ansible Playbook
- 主机清单和组织结构
- Ansible 常用模块和任务
- Ansible 变量和模板
- Ansible 条件和循环
进阶篇
- Ansible 的高级主题(例如:角色、动态清单、变量管理等)
- 使用 Ansible Vault 进行加密和解密
- Ansible 远程执行和连接方式
- 高级 Ansible Playbook 技巧
- 使用 Ansible 进行系统配置和部署
- Ansible 的容器和云集成
- Ansible 自动化测试和检查
- Ansible 运维和故障排除
精通篇
- Ansible 在企业级环境中的应用和扩展
- Ansible 与其他自动化工具的集成
- Ansible 最佳实践和实际案例分析
- Ansible 性能优化和容错机制
- Ansible 社区和资源
入门篇
1. Ansible 简介
2. 安装 Ansible
安装 Ansible 主要有两种方式:通过包管理器和源码安装。
1. 通过包管理器安装:
对于基于 Debian 的系统(如 Ubuntu),可以使用 apt-get 命令来安装 Ansible:
sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt-get install ansible
对于基于 Red Hat 的系统(如 CentOS),可以使用 yum 命令来安装 Ansible:
sudo yum install epel-release
sudo yum install ansible
2. 通过源码安装:
如果你需要使用 Ansible 的最新版本,或者你的系统没有预包装的 Ansible,你可以选择通过源码安装。首先,你需要安装一些必要的依赖,然后从 GitHub 上克隆 Ansible 的源码,并安装:
sudo apt-get install git python3-pip
git clone https://github.com/ansible/ansible.git
cd ansible
sudo pip3 install .
安装完成后,你可以使用 ansible --version
命令来检查 Ansible 是否已经成功安装,以及其版本信息。
3. Ansible 的基本概念和核心组件
Ansible的一些基本概念和核心组件:
-
主机清单(Inventory):主机清单是一个定义可管理主机的文件或文件集合。它指定了Ansible应该在哪些主机上执行任务。主机清单可以是静态的(静态清单文件)或动态的(通过外部脚本或插件生成)。
-
Playbook:Playbook是一个YAML格式的文件,用于定义Ansible的配置、部署和管理任务。它由一个或多个Play(任务集合)组成,每个Play定义了一组在一组主机上执行的任务。
-
模块(Modules):模块是Ansible的基本执行单元,用于执行具体的任务。Ansible提供了丰富的模块库,用于管理文件、安装软件包、配置服务等各种操作。
-
任务(Tasks):任务是在Playbook中定义的单个操作步骤。每个任务通常使用一个模块来执行特定的操作,例如安装软件包、复制文件、启动服务等。
-
角色(Roles):角色是一种组织和复用Playbook的机制。它将相关的任务、变量和文件组织到单个目录结构中,使得管理和维护复杂的配置变得更加容易。
-
变量(Variables):变量用于存储和传递数据,以在Playbook中进行配置和任务执行。变量可以在不同的层次(全局、主机组、主机、角色等)进行定义和使用。
-
模板(Templates):模板是一种允许在文件复制过程中进行动态渲染的机制。它使用Jinja2模板引擎,可以根据变量和条件生成最终的配置文件。
-
插件(Plugins):插件是可扩展Ansible功能的组件。它们可以修改或扩展Ansible的核心行为,包括主机清单解析、任务执行、变量处理等。
-
控制节点(Control Node):控制节点是运行Ansible的主机或服务器。它是执行Ansible命令和Playbook的机器,与目标主机通过SSH建立连接并进行管理操作。
这些是Ansible的一些基本概念和核心组件。通过理解这些概念,您可以开始编写和执行Ansible Playbook,实现自动化的系统配置和管理
4. 编写和运行第一个 Ansible Playbook
要编写一个部署包含 Spring Boot 项目、Redis、MySQL 和 Nginx 的 Ansible Playbook, 可以按照以下步骤进行操作:
- 主机清单(Host Inventory)
指定你要在其中部署和管理应用程序的主机列表。它是一个文本文件,其中包含主机的名称或 IP 地址,并按组织和分类进行分组。主机清单告诉 Ansible 在哪些主机上执行特定的任务或角色。
主机清单文件通常具有.ini
或.yaml
扩展名
我们有两个组[web_servers]
和[database_servers]
,每个组中列出了相应主机的名称和 IP 地址。你需要根据你的实际部署环境和需求来创建和维护主机清单文件。
[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11[database_servers]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21
- 创建一个名为
deploy.yml
的 Ansible Playbook 文件。
在这个 Playbook 中,我们首先定义了一些变量,例如项目名称、项目版本和 MySQL 的 root 密码。你可以根据实际情况修改这些变量的值。
接下来,我们列出了一系列任务:
- 更新 apt 缓存
- 安装 Java Development Kit (JDK)
- 安装 Redis
- 安装 MySQL
- 对 MySQL 进行安全设置
- 安装 Nginx
- 配置 Nginx
- 部署 Spring Boot 项目
- 启动 Spring Boot 项目
---
- name: Deploy Spring Boot Projecthosts: 172.16.57.56 # 替换为你的目标主机清单vars:project_name: icepip-first-project # 项目名称project_version: 1.0.0 # 项目版本mysql_root_password: your_mysql_root_password # MySQL root 密码tasks:- name: Update apt cache # 更新 apt 缓存become: yesapt:update_cache: yes- name: Install Java Development Kit (JDK) # 安装 Java Development Kit (JDK)become: yesapt:name: openjdk-11-jdkstate: present- name: Install Redis # 安装 Redisbecome: yesapt:name: redis-serverstate: present- name: Install MySQL # 安装 MySQLbecome: yesapt:name: mysql-serverstate: present- name: Secure MySQL installation # 安全设置 MySQL 安装become: yesmysql_user:name: rootpassword: "{{ mysql_root_password }}"login_unix_socket: /var/run/mysqld/mysqld.sockhost: localhostcheck_implicit_admin: yeslogin_user: rootlogin_password: ""priv: "*.*:ALL,GRANT"state: present- name: Install Nginx # 安装 Nginxbecome: yesapt:name: nginxstate: present- name: Configure Nginx # 配置 Nginxbecome: yestemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confvalidate: /usr/sbin/nginx -tnotify:- Restart Nginx- name: Deploy Spring Boot project # 部署 Spring Boot 项目become: yescopy:src: target/{{ project_name }}-{{ project_version }}.jardest: /opt/{{ project_name }}.jar- name: Start Spring Boot project # 启动 Spring Boot 项目become: yesshell: |nohup java -jar /opt/{{ project_name }}.jar > /dev/null 2>&1 &handlers:- name: Restart Nginx # 重启 Nginxbecome: yesservice:name: nginxstate: restarted
在 Configure Nginx
任务中,使用了一个名为 nginx.conf.j2
的模板文件来配置 Nginx。你需要创建这个模板文件并定义适合你的项目的 Nginx 配置。定义了一个名为 Restart Nginx
的处理程序,在配置更改时重新启动 Nginx 服务。
- 创建一个名为
nginx.conf.j2
的模板文件
Nginx 配置了一个监听端口为 80 的服务器块,将请求代理到运行在本地的 Spring Boot 项目的 8080 端口。
worker_processes auto;
events {worker_connections 1024;
}
http {server {listen 80;server_name your_domain;location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
-
保存并关闭
deploy.yml
和nginx.conf.j2
文件。 -
运行 Ansible Playbook:
ansible-playbook deploy.yml
Ansible 将连接到目标主机并按照 Playbook中定义的任务顺序执行操作。它会安装和配置 Redis、MySQL 和 Nginx,然后部署和启动 Spring Boot 项目。
5. 主机清单和组织结构
主机清单(Host Inventory)和组织结构在 Ansible 中起着关键的作用。它们用于定义和组织要管理的主机以及如何对它们进行分类和分组。
主机清单
-
主机清单文件:主机清单文件是一个文本文件,其中列出了要在 Ansible 中管理的主机的信息。它可以包含主机名、IP 地址、连接信息和其他变量。主机清单文件可以使用
.ini
或.yaml
格式编写。 -
主机组:主机组是一种将主机按逻辑或功能进行分组的方式。你可以基于不同的标准(如角色、地理位置、环境等)将主机分成不同的组。这样,你可以根据需要在组级别或单个主机级别上执行任务。
-
组变量:组变量是应用于特定主机组的变量。它们以组的名称作为键,可以在主机清单文件中定义。通过组变量,你可以在一次性中为一组主机设置共享的属性和配置。
-
主机变量:主机变量是应用于单个主机的变量。它们以主机的名称作为键,可以在主机清单文件中定义。主机变量允许你为特定主机设置独立的属性和配置。
-
动态主机清单:动态主机清单是一种动态生成主机清单的机制。它可以从外部源(如云提供商、配置管理数据库等)获取主机信息,并在运行时构建主机清单。这对于动态环境中的自动化和弹性部署非常有用。
通过合理组织和使用主机清单和组织结构,你可以更好地管理和扩展 Ansible 部署。你可以根据你的项目需求和部署架构,灵活地定义主机组、变量和组织结构,以便有效地执行任务和角色。
在Ansible中,主机清单是一个配置文件,它包含了被Ansible管理的所有主机的列表。主机清单通常用于制定哪些主机应该接受哪些特定的命令和配置。
主机清单的基本结构是这样的:
在这个例子中,web_servers
和database_servers
就是组(组名),
[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11[database_servers]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21
组织结构
Ansible的组织结构是通过主机清单来管理的,可以构建高级别的抽象结构,这意味着可以有子组、父组,甚至可以有嵌套的子组。 atlanta
和raleigh
是子组;southeast
是父组,它包含了两个子组(atlanta, raleigh
);usa
是一个更大的父组,包含了更多的子组。同时,在[southeast:vars]
下定义的变量(some_server,halon_system_timeout,self_destruct_countdown,escape_pods) 将对southeast
组以及其下的所有子组和主机生效。
[atlanta]
host1
host2[raleigh]
host3
host4[southeast:children]
atlanta
raleigh[southeast:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2[usa:children]
southeast
northeast
southwest
northwest
这种组织结构的设计使得Ansible能够非常轻松地管理大型的网络结构。你可以简单地通过改变组或父组的配置来改变一大组机器的行为。
6. Ansible 常用模块和任务
Ansible 提供了丰富的模块来执行各种任务。下面是一些常用的 Ansible 模块和任务的示例:
apt
模块:用于管理基于 APT(Debian、Ubuntu)的软件包。可以安装、升级、移除软件包,并更新本地的软件包缓存。
- name: Install nginxapt:name: nginxstate: present
yum
模块:用于管理基于 YUM(Red Hat、CentOS)的软件包。可以安装、升级、移除软件包,以及管理软件包仓库。
- name: Install httpdyum:name: httpdstate: present
copy
模块:用于将文件从控制节点复制到远程主机。可以指定源文件路径和目标路径,并设置文件权限和所有权。
- name: Copy configuration filecopy:src: /path/to/source/file.confdest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
template
模块:用于使用模板引擎生成文件,并将其复制到远程主机。可以使用变量和条件逻辑来自定义生成的文件。
- name: Generate configuration file from templatetemplate:src: /path/to/template.conf.j2dest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
service
模块:用于管理系统服务的状态。可以启动、停止、重新启动服务,并设置服务的启动状态。
- name: Start nginx serviceservice:name: nginxstate: started
command
模块:用于在远程主机上执行命令并获取输出结果。
- name: Execute a commandcommand: ls -l /path/to/directoryregister: result- name: Print command outputdebug:var: result.stdout
这只是一小部分常用的 Ansible 模块和任务示例。Ansible 还提供了许多其他模块,涵盖了各种任务,包括文件操作、用户管理、数据库操作、云资源管理等。你可以根据具体需求选择适当的模块和任务,构建自己的 Ansible Playbooks。
7. Ansible 变量和模板
在 Ansible 中,变量和模板的定义可以在不同的位置和方式进行。以下是几种常见的定义方式:
1. 主机清单文件中定义变量: 可以在主机清单文件中为每个主机或主机组定义变量。这些变量将应用于特定的主机或主机组,可以在 Playbooks 和模板中使用。主机变量使用 host_vars
和 group_vars
目录来组织,文件名与主机名或组名相对应。
示例(位于 host_vars
目录下的文件):
# host_vars/web1.yml
http_port: 8080
示例(位于 group_vars
目录下的文件):
# group_vars/web_servers.yml
http_port: 8080
2. Playbook 文件中定义变量: 可以在 Playbook 文件中定义变量,这些变量将应用于整个 Playbook 中的任务。可以使用 vars
关键字定义变量。
示例:
- name: Configure web serverhosts: web_serversvars:http_port: 8080tasks:- name: Install and configure web server...
3. 命令行中定义变量: 可以在运行 Ansible 命令时通过命令行参数定义变量。可以使用 -e
或 --extra-vars
参数来传递变量。
示例:
ansible-playbook playbook.yml -e "http_port=8080"
4. 注册变量: 在任务执行期间,可以使用 register
关键字将命令执行的结果保存到变量中。注册变量可以在后续任务中使用。
示例:
- name: Execute a commandcommand: ls -l /path/to/directoryregister: result- name: Print command outputdebug:var: result.stdout
5. 模板文件中定义变量: 可以在模板文件中使用变量占位符,并在 Playbook 中通过 template
模块将变量值传递给模板。
示例模板文件 template.conf.j2
:
# Configuration file
server_ip = {{ ansible_host }}
http_port = {{ http_port }}
在 Playbook 中使用 template
模块:
- name: Generate configuration file from templatetemplate:src: template.conf.j2dest: /etc/destination/file.confowner: rootgroup: rootmode: 0644
8. Ansible 条件和循环
在 Ansible 中,条件和循环用于控制任务的执行流程和处理复杂的配置情况。以下是 Ansible 中条件和循环的用法和示例:
条件:
使用条件语句可以根据不同的条件来执行或跳过任务。
when
关键字:when
关键字允许你在任务级别使用条件判断。任务只有在条件为真时才会执行。
- name: Install package if OS is CentOS 7yum:name: package_namestate: presentwhen: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7'
failed_when
关键字:failed_when
关键字允许你在任务执行失败时自定义失败的条件。
- name: Execute a command and ignore non-zero return codecommand: some_commandfailed_when: false
changed_when
关键字:changed_when
关键字允许你自定义任务是否被标记为已更改的条件。
- name: Execute a command and always report as changedcommand: some_commandchanged_when: true
循环:
使用循环结构可以对列表、字典等数据进行迭代,执行重复的任务。
with_items
关键字:with_items
关键字用于循环遍历列表。
- name: Create multiple usersuser:name: "{{ item }}"state: presentwith_items:- user1- user2- user3
loop
关键字:loop
关键字用于循环遍历任意可迭代对象,包括列表、字典等。
- name: Create multiple usersuser:name: "{{ item }}"state: presentloop:- user1- user2- user3
with_dict
关键字:with_dict
关键字用于循环遍历字典。
- name: Set multiple factsset_fact:"{{ item.key }}": "{{ item.value }}"with_dict:key1: value1key2: value2key3: value3
with_fileglob
关键字:with_fileglob
关键字用于循环遍历匹配指定文件模式的文件列表。
- name: Copy filescopy:src: "{{ item }}"dest: /path/to/destination/with_fileglob:- /path/to/files/*.txt- /path/to/files/*.conf
参考文档
-
Ansible 官方文档 ↗: Ansible 官方文档是学习 Ansible 的最全面和权威的资源。它包含了 Ansible 的所有功能、模块和概念的详细说明,并提供示例和最佳实践指南。
-
Ansible 官方示例 ↗: Ansible 官方示例库包含了一系列使用 Ansible 的示例 Playbooks,涵盖了各种常见的用例和场景。这些示例可以帮助你学习和理解如何使用 Ansible 进行自动化配置和部署。
相关文章:
自动化运维工具Ansible教程(一)【入门篇】
文章目录 前言Ansible 入门到精通入门篇进阶篇精通篇入门篇1. Ansible 简介2. 安装 Ansible1. 通过包管理器安装:2. 通过源码安装: 3. Ansible 的基本概念和核心组件4. 编写和运行第一个 Ansible Playbook5. 主机清单和组织结构主机清单组织结构 6. Ansi…...
计算机毕业设计 微信小程序 uniapp+vue大学生兼职平台
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,本系统前台采用微信开发者结合后台Java语言设计并实现了…...
JavaScript框架:构建交互性、现代化Web应用的利器
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 JavaScript框架已…...
数据结构——二分查找法
二分查找法(Binary Search)是一种高效的查找算法,通常用于在已排序的数组或列表中查找特定的目标值。这个算法的基本思想是不断将查找范围缩小为原来的一半,直到找到目标值或确定目标值不存在。 二分查找是一种在每次比较之后将查…...
服务端渲染(SSR):提升Web应用性能和用户体验的关键技术
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 服务端渲染&#…...
如何工作和生活相平衡?
之前待过一家外企,他们的口号是 Balancing work and life,工作和生活相平衡。辗转几家公司之后,发现这个越来越难了,越来越少的时间投入家庭和自己的生活。 人生的意义 (AI) 人生的意义是一个深奥而复杂的…...
semaphere部署,配置ldap
在处理 Ansible 相关项目时,我们经常面临繁琐的命令行操作,这对于不熟悉命令行的用户来说可能是一个挑战。此外,当项目规模扩大时,跟踪和管理多个 playbook 变得困难,同时缺乏对失败的及时通知和访问控制。这些问题催生…...
Java 泛型 T,E,K,V,?
泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况…...
软件测试技术之地图导航的测试用例
外观测试 屏幕显示不能有花屏、黑点和闪屏,清晰度、亮度、颜色要正常。 检测所有按键都能起到相应作用,是否手感不良。 UI显示状态、颜色、清晰度、效果。 控制:放大,缩小,音量调节功能测试。 交叉路口查询测试&am…...
【C++】常用集合算法
0.前言 1.set_intersection #include <iostream> using namespace std;// 常用集合算法 交集set_intersection #include<vector> #include<algorithm>void myPrint(int val) {cout << val << " "; }void test01() {vector<int>v…...
css flex:1;详解,配合demo效果解答
前言 给设置了display:flex的子组件设置了flex:1;就能让他填满整个容器,如果有多个就平均 flex:1;是另外三个样式属性的简写,等同 flex-grow: 0; flex-shrink: 1; flex-basis: auto;我们就针…...
discuzQ安装
我们开始配置php,安装两个扩展。 在宝塔面板中,单击软件商城->已安装,查找已安装的 PHP 软件。 然后在 php 管理中,单击禁用函数,进入设置页面。 在列表中单击删除函数 putenv、readlink、symlink、shell_exec ,…...
深入解析NLP情感分析技术:从篇章到属性
目录 1. 情感分析概述1.1 什么是情感分析?- 情感分析的定义- 情感分析的应用领域 1.2 为什么情感分析如此重要?- 企业和研究的应用- 社交媒体和公共意见的影响 2. 篇章级情感分析2.1 技术概览- 文本分类的基本概念- 机器学习与深度学习方法- 词嵌入的力量…...
JVM的双亲委派模型
定义与本质: 类加载器用来把类文件加载到JVM内存中。从JDK1.2开始,类加载过程采用双亲委派模型,保证Java平台安全。 父类委托的定义: 一个类加载器在接到加载类请求的时候,首先不会去加载这个类,而是把这个…...
js中如何判断一个变量是否为数字类型?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐使用Number.isNaN()方法⭐使用正则表达式⭐使用isNaN()函数⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个…...
使用阿里PAI DSW部署Stable Diffusion WebUI
进入到网址https://pai.console.aliyun.com/里边。 点击创建实例。 把实例名称填写好,选择GPU规格,然后选择实例名称是ecs.gn6v-c8g1.2xlarge。 选择stable-diffusion-webui-env:pytorch1.13-gpu-py310-cu117-ubuntu22.04,然后点击下一步。…...
redisson使用过程常见问题汇总
文章目录 常见报错1. 配置方式使用错误2. 版本差异报错3. 配置文件中配置了密码或者配置错误4. 字符集和序列化方式配置问题5. Redisson的序列化问题6. 连接池问题:7. Redisson的高可用性问题:8. Redisson的并发问题9. Redisson的性能问题 2. 参考文档 常…...
代码随想录训练营 DP序列
代码随想录训练营 DP序列 718. 最长重复子数组🌸code 674. 最长连续递增序列🌸code 300.最长递增子序列🌸code 最后一题很巧妙,不能单纯的去把DP当作板子题,得思考才能得到最佳方式 718. 最长重复子数组🌸 …...
Datastage部署与使用
Datastage部署与使用 - 码农教程 https://www.cnblogs.com/lanston/category/739553.html Streamsets定时拉取接口数据同步到HBase集群_streamsets api_webmote的博客-CSDN博客 【SDC】StreamSets实战之路-28-实战篇- 使用StreamSets实时采集指定数据目录文件并写入库Kudu_菜…...
【实用工具】Centos 安装ARL灯塔
文章目录 docker 安装安装docker-compose配置镜像加速器ARL安装和启动 docker 安装 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm yum install docker-ce (若出现无法找到包可能是镜像源问题) 更…...
IP地址定位基础数据采集
在互联网时代,IP地址定位技术已经成为了广泛应用的一项重要技术。无论是用于网络安全、广告投放、市场调研还是用户体验优化,IP地址定位技术都发挥着关键作用。 什么是IP地址定位? IP地址定位是一种技术,它通过IP地址来确定设备…...
leetcode做题笔记138. 复制带随机指针的链表
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…...
分布式文件系统的新兴力量:揭秘Alluxio的元数据管理机制【文末送书】
文章目录 写在前面01 分布式文件系统元数据的常见类型1.1 文件(inode)元数据1.2 数据块(block)元数据1.3 Worker元数据 02 分布式文件系统元数据的存储模式2.1 元数据存储在堆上(HEAP模式)2.2 元数据存储在…...
ArcGIS标注的各种用法和示例
标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的要素】,在【文本字符串】栏中…...
修改ros中的控制器,便于仿真和驱动真实UR
UR机械臂学习(5-3):驱动ur机械臂实物——问题及解决_error: 鈥榰r_msgs::setpayloadrequest {aka struct ur__冰激凌啊的博客-程序员宝宝 - 程序员宝宝 (cxybb.com) 问题5 Action client not connected: scaled_pos_traj_controller/follow_j…...
网络广播模块2*30W 智能4G广播终端开发模块
SV-704UG 4G网络广播模块2*30W 智能4G广播终端开发模块 一、描述 SV-704UG网络音频模块是一款带2*30W功放输出的4G广播音频模块,采用高性能ARM处理器及专业Codec,能接收4G广播音频数据流,转换成音频模拟信号输出。带有一路line in输入&#…...
优思学院|什么是精益项目管理?
正确地使用精益思想和技术是可以减少项目中的浪费、提高客户满意度,并提高项目的利润率。 在现实世界中,项目经理的工作充满了挑战。他们不仅需要专注于产品和团队,还必须确保客户的满意度。同时,他们还必须与矩阵组织打交道&…...
【Android取证篇】华为设备跳出“允许USB调试“界面方法的不同方法
【Android取证篇】华为设备跳出"允许USB调试"界面方法的不同方法 华为设备在鸿蒙OS3系统之后,部分设备启用"允许USB调试"方式会有所变化,再次做个记录—【蘇小沐】 1.实验环境 系统版本Windows 11 专业工作站版22H2(2…...
在VSCode中移除不必要的扩展
在VSCode中移除不必要的扩展 在VSCode中安装扩展是编辑器缓慢且耗电的主要原因之一,因为添加的每个新扩展都会增加应用程序的内存和 CPU 使用率。 VSCode现在已经具备了非常多的功能,我们可以将一些重复工作的扩展移除掉。卸载这些现在可有可无的扩展将…...
算法刷题记录-树(LeetCode)
783. Minimum Distance Between BST Nodes 思路(DFS 中序遍历) 考虑中序遍历的性质即可 代码 class Solution { public:int min_diffnumeric_limits<int>::max();int prevnumeric_limits<int>::min()100000;int minDiffInBST(TreeNode* root) {inorderTraversa…...
做动态网站可以不写代码吗/百度提交入口网址截图
前言本文通过四种方式来告诉你如何使用,虽然有一种被放弃了。今日早读文章由老虎集团joking_zhang翻译授权分享。正文从这开始~~使用 React 时,我们的默认思维方式应该是 不会强制修改 DOM ,而是通过传入 props 重新渲…...
网站开发前端好还是后端好/网站优化推广软件
InnoDB存储引擎 InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,MySQL 5.5.5之后,InnoDB作为默认存储引擎,InnoDB主要特性有如下几点。 ⑴InnoDB给MySQL提供了具有提交…...
wordpress 备案 域名/网站推广优化的原因
参考高性能javascript for in 循环 使用它可以遍历对象的属性名,但是每次的操作都会搜索实例或者原型的属性 导致使用for in 进行遍历会产生更多的开销 书中提到不要使用for in 遍历数组 1 首先for in 会查找原型链上的属性 var arr [1,2,3]; Array.prototype.…...
自己服务器可以做网站/近期的重大新闻
RPA10.0该如何用,今天艺赛旗的工程师就手把手教您做一个**本教程只针对有并能够使用金蝶 Kis 应用的人员使用,艺赛旗设计器 10.0 版本及以上;第一步:开发流程中所需字段, 变量说明第二步:新建全局变量,运行…...
建设公司网站报价/今日军事头条
近几年来,区块链技术一直在彻底改变银行领域,区块链技术和数字银行也变得越来越普遍,而区块链技术也在不断改进金融系统的登录和身份验证领域。 区块链技术保护敏感信息并验证用户身份。该技术使用无密钥安全基础设施 (KSI) 来存储数据散列&…...
网站建设可以自学吗/推广普通话手抄报
QT 介绍 Qt是一个跨平台的 C 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。且完全面向对…...