当前位置: 首页 > news >正文

Centos7,部署etcd集群,基于二进制包,https安全通讯

由于etcd集群https通讯,所以需要自建CA数字证书,学习使用https部署etcd集群前,可以先完成一下,基于http通信的etcd集群:

关于CA原理以及工作可以阅读,以下两篇文章:
CA工作原理
对称加密与非对称加密

关于如何自建CA数字证书可以参考: 手动生成证书,文章介绍了,3种创建证书的方法,本文选择 openssl 来创建证书。

主机信息

etcd-01192.168.44.186
etcd-02192.168.44.187
etcd-03192.168.44.188

环境配置:

  1. 设置主机名
 # 分别在每台执行hostnamectl set-hostname etcd-01hostnamectl set-hostname etcd-02hostnamectl set-hostname etcd-03
  1. 配置本地解析
# 每台都执行
cat >> /etc/hosts << EOF
192.168.44.186  etcd-01
192.168.44.187  etcd-02
192.168.44.188  etcd-03
EOF
  1. 关闭防火墙,selinux
 # 每台都执行systemctl disable firewalld --nowsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  1. 配置时间同步
 # 每台都执行yum install chrony -y && systemctl enable --now chronyd

下载二进制包,并创建启动目录

# 每台都执行
cd /opt
wget https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.13-linux-amd64.tar.gz
# 创建etcd工作目录: bin存放二进制目录,cfg存放配置文件目录,ssl存放证书目录
mkdir -p  /usr/local/etcd/{bin,cfg,ssl}
# 将二进制文件送到  /usr/local/etcd/bin目录
cp etcd-v3.5.13-linux-amd64/etcd* /usr/local/etcd/bin/
# 配置环境变量
echo 'export ETCD_HOME=/usr/local/etcd' >> /etc/profile
echo 'export PATH=$PATH:$ETCD_HOME/bin' >> /etc/profile
source /etc/profile
# 现在可以查看etcd版本
etcd --version

生成证书
可以选择在任意台节点上生成证书,然后copy到其他节点。

# 在节点etcd-01上执行cd /usr/local/etcd/ssl/
# 生成CA私钥openssl genrsa -out ca.key 2048
# 使用CA私钥生成CA根证书, -days 设置过期时间openssl req -x509 -new -nodes -key ca.key -subj "/CN=etcd" -days 10000 -out ca.crt 
# 生成服务端私钥openssl genrsa -out server.key 2048
# 创建一个用于生成证书签名请求(CSR)的配置文件,etcd-csr.conf,内容如下:
# 需要注意 [ alt_names ] 块,为集群的成员,需要把所有的集群成员IP都写进去,也可以多写入,为以后做扩展
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn[ dn ]
C = cn
ST = fujian
L = xiamen
O = etcd
OU = etcd
CN = etcd[ req_ext ]
subjectAltName = @alt_names[ alt_names ]
IP.1 = 192.168.44.186
IP.2 = 192.168.44.187
IP.3 = 192.168.44.188[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names
# 基于etcd-csr.conf证书请求配置文件,生成证书签名请求:openssl req -new -key server.key -out server.csr -config etcd-csr.conf
# 基于 ca.key、ca.crt 和 server.csr 等三个文件生成服务端证书:openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key  -CAcreateserial -out server.crt -days 10000 -extensions v3_ext -extfile etcd-csr.conf -sha256# 查看所有的文件
[root@localhost ssl]# ll
总用量 28
-rw-r--r--. 1 root root 1082 412 14:26 ca.crt
-rw-r--r--. 1 root root 1675 412 14:24 ca.key
-rw-r--r--. 1 root root   17 412 14:36 ca.srl
-rw-r--r--. 1 root root  486 412 14:35 etcd-csr.conf
-rw-r--r--. 1 root root 1285 412 14:36 server.crt
-rw-r--r--. 1 root root 1050 412 14:35 server.csr
-rw-r--r--. 1 root root 1679 412 14:26 server.key
# 查看证书签名请求:openssl req  -noout -text -in ./server.csr
# 查看证书:openssl x509  -noout -text -in ./server.crt
# 将所有证书文件分发到 etcd-02 , etcd-03 节点scp * etcd-02:/usr/local/etcd/ssl/scp * etcd-03:/usr/local/etcd/ssl/

启动集群

  1. 创建etcd配置文件

如果有部署http协议的etcd集群的经验,观察配置文件就可以看出,就是配置了变量,将之前运行时的参数写入到了配置文件中, 协议由http改成了https。

# etcd-01
cat > /usr/local/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.44.186:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.44.186:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.44.186:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.44.186:2379"
ETCD_INITIAL_CLUSTER="etcd-01=https://192.168.44.186:2380,etcd-02=https://192.168.44.187:2380,etcd-03=https://192.168.44.188:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
# etcd-02
cat > /usr/local/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.44.187:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.44.187:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.44.187:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.44.187:2379"
ETCD_INITIAL_CLUSTER="etcd-01=https://192.168.44.186:2380,etcd-02=https://192.168.44.187:2380,etcd-03=https://192.168.44.188:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
# etcd-03
cat > /usr/local/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-03"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.44.188:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.44.188:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.44.188:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.44.188:2379"
ETCD_INITIAL_CLUSTER="etcd-01=https://192.168.44.186:2380,etcd-02=https://192.168.44.187:2380,etcd-03=https://192.168.44.188:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

参数详情讲解:

ETCD_NAME	      				etcd的节点名字,自定义名字,etcd节点的名字不能相同
ETCD_DATA_DIR    				etcd的数据存储目录
ETCD_LISTEN_CLIENT_URLS			用于当前节点与客户端交互的URL地址,每个节点同样可以向客户端提供多个URL地址,多个地址使用道号分隔节课,端口一般保持默认2379即可
ETCD_LISTEN_PEER_URLS	   		用于集群内各个节点之间通信的URL地址,每个节点可以监听多个URL地址,集群内部将通过这些URL地址进行数据交互,例如,Leader节点的选举、Message消息传输或是快照传输等,端口一般保持默认2380即可
ETCD_ADVERTISE_CLIENT_URLS		建议使用的客户端通信url,该值用于etcd 代理或etcd成员与etcd节点通信,与listen-client-urls参数值保持一致即可
ETCD_INITIAL_ADVERTISE_PEER_URLS	建议用于集群内部节点之间交互的URL地址,节点间将以该值进行通信,与listen-peer-urls参数值保持一致即可
ETCD_INITIAL_CLUSTER				集群中所有的initial-advertise-peer-urls的合集,etcd启动的时候,会通过这个配置找到其他etcd节点的列表
ETCD_INITIAL_CLUSTER_TOKEN 			节点的token值,该值可自定义,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd 集群就不会相互影响
ETCD_INITIAL_CLUSTER_STATE			初始化时集群的状态,可取值:new和existing,new代表新建的集群,existing 代表加入已经存在的集群
  1. 创建etcd.service文件,将etcd服务加入到systemd系统进程
# 每台节点都执行
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target[Service]
Type=notify
EnvironmentFile=/usr/local/etcd/cfg/etcd.conf
ExecStart=/usr/local/etcd/bin/etcd \
--cert-file=/usr/local/etcd/ssl/server.crt \
--key-file=/usr/local/etcd/ssl/server.key \
--peer-cert-file=/usr/local/etcd/ssl/server.crt \
--peer-key-file=/usr/local/etcd/ssl/server.key \
--trusted-ca-file=/usr/local/etcd/ssl/ca.crt \
--peer-trusted-ca-file=/usr/local/etcd/ssl/ca.crt \
--logger=zap
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
EOF
# 加载systemd 配置文件
systemctl daemon-reload

参数详情讲解:

EnvironmentFile		配置文件路径
ExecStart			二进制启动文件路径
--cert-file			客户端服务器TLS证书文件的路径
--key-file			客户端服务器TLS密钥文件的路径
--peer-cert-file	与集群其他成员通讯TLS证书文件的路径
--peer-key-file		与集群其他成员通讯TLS密钥文件的路径
--trusted-ca-file	客户端服务器TLS可信CA证书文件的路径
--peer-trusted-ca-file		与集群其他成员通讯TLS可信CA证书文件的路径
--logger=zap		zap结构化日志记录(目前只支持“zap”进行结构化日志记录。)
  1. 启动

     # 同时启动etcdsystemctl start etcd# 自启systemctl enable etcd
    

查看etcd集群状态

etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379" \endpoint status  --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |          8 |                  8 |        |
| https://192.168.44.187:2379 | 5d144d32bb3de813 |  3.5.13 |   25 kB |     false |      false |         2 |          8 |                  8 |        |
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |          8 |                  8 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

查看etcd集群是否健康

etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379" \endpoint health  --write-out=table
+-----------------------------+--------+-------------+-------+
|          ENDPOINT           | HEALTH |    TOOK     | ERROR |
+-----------------------------+--------+-------------+-------+
| https://192.168.44.187:2379 |   true |  17.89323ms |       |
| https://192.168.44.186:2379 |   true |  20.69533ms |       |
| https://192.168.44.186:2379 |   true | 21.574465ms |       |
+-----------------------------+--------+-------------+-------+

列出节点成员

etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379" \member list  --write-out=table
+------------------+---------+---------+-----------------------------+-----------------------------+------------+
|        ID        | STATUS  |  NAME   |         PEER ADDRS          |        CLIENT ADDRS         | IS LEARNER |
+------------------+---------+---------+-----------------------------+-----------------------------+------------+
| 21465eba80fe786a | started | etcd-01 | https://192.168.44.186:2380 | https://192.168.44.186:2379 |      false |
| 51f535e47d80fd93 | started | etcd-03 | https://192.168.44.188:2380 | https://192.168.44.188:2379 |      false |
| 5d144d32bb3de813 | started | etcd-02 | https://192.168.44.187:2380 | https://192.168.44.187:2379 |      false |
+------------------+---------+---------+-----------------------------+-----------------------------+------------+

为etcdctl设置别名
在使用etcdctl时,默认要加入证书参数,集群参数很不方便,所以可以把那串固定的指令设置一个别名
例如:
临时设置别名:

取消别名: unalias etcdctl

alias etcdctl='etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379"'

永久设置别名
将指令添加到环境变量文件即可。
例如:

# 添加到用户环境变量
cat >> ~/.bashrc << EOF
alias etcdctl='etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379"'
EOF
source ~/.bashrc# 或者添加上全局变量
cat >> /etc/profile << EOF
alias etcdctl='etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379"'
EOF
source /etc/profile

查看效果

[root@etcd-01 ~]# etcdctl endpoint status  --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |         11 |                 11 |        |
| https://192.168.44.187:2379 | 5d144d32bb3de813 |  3.5.13 |   25 kB |     false |      false |         2 |         11 |                 11 |        |
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |         11 |                 11 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

相关文章:

Centos7,部署etcd集群,基于二进制包,https安全通讯

由于etcd集群https通讯&#xff0c;所以需要自建CA数字证书&#xff0c;学习使用https部署etcd集群前&#xff0c;可以先完成一下&#xff0c;基于http通信的etcd集群&#xff1a; 关于CA原理以及工作可以阅读&#xff0c;以下两篇文章&#xff1a; CA工作原理 对称加密与非对…...

设置MariaDB,创建新库,新用户并授权其可以从任何主机登录

OS:CENTOS 7 1、从系统进入MariaDB # mysql -u root -p 这里的root是指MariaDB的管理员用户&#xff0c;和系统的root不搭边&#xff0c;只是同名而已。 2、看下有哪些库、用户 MariaDB [(none)]> show databases; MariaDB [(none)]>select user,host from mysql.us…...

每日一VUE——组件的生命周期

文章目录 VUE组件的生命周期生命周期钩子函数实例创建Teleport VUE组件的生命周期 组件生命周期 组件从创建到挂载、更新、到销毁的一系列过程被称为组件的生命周期。 生命周期函数 在组件的各个生命周期节点执行的函数&#xff0c;为生命周期钩子函数。 生命周期钩子函数…...

Redis中的BigKey

Redis中的BigKey 文章目录 Redis中的BigKey什么是BigKey&#xff1f;BigKey的危害找到Bigkey删除BigKey优化BigKeyBigKey对持久化的影响对AOF日志的影响对AOF重写和RDB的影响 什么是BigKey&#xff1f; 大 key 并不是指 key 的值很大&#xff0c;而是 key 对应的 value 很大。…...

MySQL中的存储过程详解(上篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 拖动表名到查询文件中就可以直接把名字拉进来中括号&#xff0c;就代表可写可不写 目录 1.认识存储过程 1.1 存储过程的作用 1.2 存储过程简介…...

面试官:说一说CyclicBarrier的妙用!我:这个没用过...

写在开头 面试官&#xff1a;同学&#xff0c;AQS的原理知道吗&#xff1f; 我&#xff1a;学过一点&#xff0c;抽象队列同步器&#xff0c;Java中很多同步工具都是基于它的… 面试官&#xff1a;好的&#xff0c;那其中CyclicBarrier学过吗&#xff1f;讲一讲它的妙用吧 我&…...

MySQL高可用搭建方案MHA

MHA架构介绍 MHA是Master High Availability的缩写&#xff0c;它是目前MySQL高可用方面的一个相对成熟的解决方案&#xff0c;其核心是使用perl语言编写的一组脚本&#xff0c;是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中&am…...

【vue】用vite创建vue项目

前置要求 要有Node.js 1. 用vite创建vue项目 在cmd中&#xff0c;进入一个文件夹 在文件资源管理器上面的文件目录中&#xff0c;输入cmd&#xff0c;回车在cmd中通过cd命令进入对应文件夹 创建项目 npm create vitelatest # 创建项目创建项目过程中的一些选项 Ok to pro…...

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…...

Linux命令学习—linux 的常用命令

1.1、改变目录 cd 目录的表达方法&#xff1a; /根目录 .当前目录 .. 上一级目录 ~家目录 #cd / 进入到系统根目录 #cd . 进入当前目录 #cd .. 进入当前目录的父目录&#xff0c;返回上层目录 #cd /tmp 进入指定目录/tmp #cd ~ 进入当前用户的家目录 #cd …...

【Git教程】(十)版本库之间的依赖 —— 项目与子模块之间的依赖、与子树之间的依赖 ~

Git教程 版本库之间的依赖 1️⃣ 与子模块之间的依赖2️⃣ 与子树之间的依赖&#x1f33e; 总结 在 Git 中&#xff0c;版本库是发行单位&#xff0c;代表的是一个版本&#xff0c;而分支或标签则只能被创建在版本库这个整体中。如果一个项目中包含了若干个子项目&#xff0c;…...

最新版IntelliJ IDEA 2024.1安装和配置教程 详细图文解说版安装教程

IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版 文章目录 IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版前言 第一步&#xff1a; IntelliJ IDEA 2024.1安装教程第 0 步&…...

JVM常用参数一

jvm启动参数 JVM&#xff08;Java虚拟机&#xff09;的启动参数是在启动JVM时可以设置的一些命令行参数。这些参数用于指定JVM的运行环境、内存分配、垃圾回收器以及其他选项。以下是一些常见的JVM启动参数&#xff1a; -Xms&#xff1a;设置JVM的初始堆大小。 -Xmx&#xff1…...

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁&#xff0c;那么state0&#xff0c;假如有人持有这把锁&#xff0c;那么state1&#xff0c;如果持有这把锁的…...

Android Gradle开发与应用 (八) :Kotlin DSL

1. 前言 本文介绍了Gradle Kotlin DSL相关的一些知识点 2. DSL是什么 DSL是为特定领域设计的专门的语言&#xff0c;也就是设计了一门语言&#xff0c;然后解决某个特定的领域的特定问题。 2.1 举例说明 以下的这些都可以称之为DSL 正则表达式 :用于文本处理的特定语言SQ…...

phpstorm 快捷键

PHPstorm最常用的快捷键&#xff0c;提高开发效率 - 知乎 (zhihu.com) 四年精华PHP技术文章整理合集——PHP框架篇 (qq.com) 四年精华PHP技术文合集——微服务架构篇 (qq.com) Vue3 打印票据 预览的库&#xff1a;vue3打印解决方案&#xff1a;Vue-Plugin-HiPrint - 掘金 (j…...

浦大喜奔APP8.0智能升级,发力数字金融深化五大金融篇章服务

1. 浦大喜奔立足科技赋能持续迭代升级&#xff0c;筑牢用户体验护城河 浦发信用卡中心坚持数字科技与客户体验双轮驱动&#xff0c;以科技赋能发展&#xff0c;优化整体系统性能&#xff0c;全方位支撑浦大喜奔 APP提高线上客户服务能力与体验&#xff0c;积极服务民生消费&a…...

自然语言处理、大语言模型相关名词整理

自然语言处理相关名词整理 零样本学习&#xff08;zero-shot learning&#xff09;词嵌入&#xff08;Embedding&#xff09;为什么 Embedding 搜索比基于词频搜索效果好&#xff1f; Word2VecTransformer检索增强生成&#xff08;RAG&#xff09;幻觉采样温度Top-kTop-p奖励模…...

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑&#xff0c;这些问题可能会影响我们的开发效率和代码质量&#xff0c;因此我们需要不断总结和学习&#xff0c;以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结&#xff0c;以提高大家的开发质量。本系列文章…...

太好玩了,我用 Python 做了一个 ChatGPT 机器人

毫无疑问&#xff0c;ChatGPT 已经是当下编程圈最火的话题之一&#xff0c;它不仅能够回答各类问题&#xff0c;甚至还能执行代码&#xff01; 或者是变成一只猫 因为它实在是太好玩&#xff0c;我使用Python将ChatGPT改造&#xff0c;可以实现在命令行或者Python代码中调用。…...

STM32存储左右互搏 SDIO总线读写SD/MicroSD/TF卡

STM32存储左右互搏 SDIO总线读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而电路和协…...

累积分布函数图(CDF)的介绍、matlab的CDF图绘制方法(附源代码)

在对比如下两个误差的时候&#xff0c;怎么直观地分辨出来谁的误差更低一点&#xff1f;&#xff1a; 通过这种误差时序图往往不容易看出来。 但是如果使用CDF图像&#xff0c;以误差绝对值作为横轴&#xff0c;以横轴所示误差对应的累积概率为纵轴&#xff0c;绘制曲线图&am…...

代码随想录算法训练营第四十一天|343.整数拆分、96不同的二叉搜索树

文档链接&#xff1a;https://programmercarl.com/ LeetCode343.整数拆分 题目链接&#xff1a;https://leetcode.cn/problems/integer-break/ 思路&#xff1a; j * (i - j) 是单纯的把整数拆分为两个数相乘&#xff0c;而j * dp[i - j]是拆分成两个以及两个以上的个数相乘…...

全量知识系统 程序详细设计之 统一资产模型(QA-SmartChat)

Q1. 下面我们聊聊整个全知系统的设计 的矩阵和函数&#xff0c;矩阵表示的是“活物”&#xff0c;分别 类似 一个基因的活性、一个实体的辨识度和某种特征的可区分度。 函数的可微、可积和可导性 则表示 运动的控制方式 在全知系统设计中&#xff0c;矩阵和函数是两个核心的组…...

已解决org.springframework.web.client.HttpClientErrorException: 400异常的正确解决方法,亲测有效!!!

已解决org.springframework.web.client.HttpClientErrorException: 400异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在日常开发过程中&#xff0c;通过Spring框架提供的RestTemplat…...

内网渗透-Windows内网渗透

内网渗透-Windows内网渗透 文章目录 内网渗透-Windows内网渗透前言一、信息收集 1.1、SPN1.2、端口连接1.3、配置文件1.4、用户信息1.6、会话收集1.7、凭据收集 navicat&#xff1a;SecureCRT&#xff1a;Xshell&#xff1a;WinSCP&#xff1a;VNC: 1.8、DPAPI1.9、域信任1.10、…...

机器人方向控制中应用的磁阻角度传感芯片

磁阻传感器提供的输出信号几乎不受磁场变动、磁温度系数、磁传感器距离与位置变动影响&#xff0c;可以达到高准确度与高效能&#xff0c;因此相当适合各种要求严格的车用电子与工业控制的应用。所以它远比采用其它传感方法的器件更具有优势。 机器人的应用日渐广泛&#xff0…...

如何在树莓派安装Nginx并实现固定公网域名访问本地静态站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…...

Ubuntu与主机windows共享文件夹

一、创建共享文件夹&#xff1a; 虚拟机->设置->选项->共享文件夹->总是启用->选择本地的共享文件夹&#xff08;如E&#xff1a;\Share&#xff09;->确定。 二、设置挂载&#xff1a; 首先赋予/etc/fstab文件可编辑的权限&#xff1b; sudo chmod 777 /…...

(四)C++自制植物大战僵尸游戏启动流程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、启动方式 鼠标左键单机VS2022上方工具栏中绿色三角按钮&#xff08;本地Windows调试器&#xff09;进行项目启动。第一次启动项目需要编译项目中所有代码文件&#xff0c;编译生成需要一定的时间。不同性能的电…...

中英文网站模板下载/学校网站模板

其实微信小程序不过是正常的webview而已. 只是产品概念上的不同. 本质还是h5. 所以用appium是可以进行自动化的. 以我们某团外卖为例. 查看结构就可以看到小程序的dom结构. 欢迎大家使用某团外卖小程序(此处应有广告词) 自动化用例的调整 webview的进程名是com.tencent.mm:appb…...

已经有了域名怎么做网站/美国婚恋网站排名

来源&#xff1a;blog.csdn.net/qq_27198345/article/details/111401610上一篇&#xff1a;微信红包技术架构首次流出&#xff0c;到底有多牛逼&#xff01;对于管理系统或其他需要用户登录的系统&#xff0c;登录验证都是必不可少的环节&#xff0c;在SpringBoot开发的项目中&…...

专做水果的社区网站/合肥百度推广优化排名

1 . 仓库简介 没有 Maven 时&#xff0c;项目用到的 .jar 文件通常需要拷贝到 /lib 目录&#xff0c;项目多了&#xff0c;拷贝的文件副本就多了&#xff0c;占用磁盘空间&#xff0c;且难于管理。Maven 使用一个称之为仓库的目录&#xff0c;根据构件的坐标统一存储这些构件的…...

wordpress自定义功能/外贸推广

EasyNVR视频边缘计算网关具备视频采集、直播、转码、分发等能力&#xff0c;在录像功能方面&#xff0c;不仅可以调取录像视频直接回放&#xff0c;还可以将录像文件通过接口调用下载。而且&#xff0c;EasyNVR还能支持H.265编码格式的视频播放&#xff0c;极大地增强了平台的拓…...

wordpress 访问优化/百度关键词排名十大排名

一&#xff1a;概述 什么是数据库引擎&#xff1f; MySQL提供了多种存储引擎&#xff0c;存储引擎一定程度上决定了表的能力。数据库引擎包括处理事务安全表的引擎和处理非事务安全表的的引擎。通俗点讲&#xff0c;所谓数据库引擎其实也就是存储数据到文件的技术。不同的技术…...

淘宝上做网站怎么样/aso推广方案

桔妹导读&#xff1a;指标体系是什么&#xff1f;如何使用OSM模型和AARRR模型搭建指标体系&#xff1f;如何统一流程、规范化、工具化管理指标体系&#xff1f;本文会对建设的方法论结合滴滴数据指标体系建设实践进行解答分析。1. 什么是指标体系▍1.1 指标体系定义‍指标体系是…...