openEuler 通过 手工方式 安装 ceph 步骤 Cephadm无法应用到openEuler 提醒不支持

news2024/12/24 22:16:44

ceph集群在openEuler手工安装过程

  • Cephadm安装步骤
    • 前置要求
      • 1.openEuler版本
      • 2. Python 3
      • 3. Systemd
      • 4. Time synchronization (such as chrony or NTP)
      • 5. LVM2 for provisioning storage devices
    • 安装
      • 1. 创建用户ceph
      • 2. 安装 ceph
      • 3. 生成配置项
        • 3.1 机器及组件规划列表
        • 3.2 ceph.conf
        • 3.3 创建 mon keyring,osd keyring
      • 4. 启动mon服务
        • 4.1 njoffice04启动 mon服务
          • 4.1.1 报错解决 ceph -s 命令卡住
          • 4.1.2 ceph -s 报警告 3 monitors have not enabled msgr2 执行如下命令开启
          • 4.2.3 ceph -s 报警告 mons are allowing insecure global_id reclaim
        • 4.2 njoffice05启动 mon服务
        • 4.3 njoffice06启动 mon服务
      • 5. 启动 mgr 及 dashboard
        • 5.1 启动 mgr
        • 5.2 启动 dashboard
        • 5.3 访问 dashboard 及登陆
        • 5.4 mgr相关待处理问题
      • 6. 启动 osd 服务
        • 6.1 磁盘的清理准备
        • 6.2 手工创建osd
          • 6.2.1 将 /var/lib/ceph/bootstrap-osd/ceph.keyring 复制到各数据节点对应位置
          • 6.2.2 各节点要开放 6800-6820端口
          • 6.2.3 逐点手工创建 ceph-volume
          • 6.2.4 报错解决
        • 7 警告解决
          • 7.1 6 OSD(s) have broken BlueStore compression
    • 参考文献

Cephadm安装步骤

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

前置要求

1.openEuler版本

建议使用此版本 openEuler 22.03 LTS
22.09版本有个python3.10.2的bug, 在下面python3里有写
openEuler有ceph的包 ceph-16.2.7 这个版本
https://repo.openeuler.org/openEuler-22.09/everything/x86_64/Packages/ 在这里面可以搜索到

openEuler 的snappy版本换成 1.1.8, 以x86架构为例, 1.1.9 禁用RTTI ,会导致集群报警告, 后面内容会有详细说明

 sudo rpm -Uvh --oldpackage https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS-SP3/everything/x86_64/Packages/snappy-1.1.8-1.oe1.x86_64.rpm

2. Python 3

openEuler 已经默认就是python3
这里面暂时不要使用用openEuler 22.09版本, 此版本使用的python是3.10.2 有个bug, 会报错
Error EINVAL: SystemError: PY_SSIZE_T_CLEAN macro must be defined for ‘#’ formats
这个错误是python 从3.9升到3.10的初期阶段产生的, 在 3.10.6版本修复了, 但是 openEuler 22.09没有升到 3.10.6以上版本, 所以使用 openEuler 22.03 LTS 版本 , 此版本使用的python 是3.9.9

3. Systemd

openEuler上面已经有的 systemctl命令

4. Time synchronization (such as chrony or NTP)

时间同步安装

通过命令 timedatectl 检查可以看到openEuler已经安装好这些配置了

Local time: Thu 2022-12-01 09:05:37 CST
Universal time: Thu 2022-12-01 01:05:37 UTC
RTC time: Thu 2022-12-01 01:05:37
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

5. LVM2 for provisioning storage devices

openEuler 已经有了, 没有的可以使用命令安装

 yum -y install lvm2

安装

1. 创建用户ceph

这一步骤不执行也行, 不创建用户的话无法进入ceph用户
这里面创建ceph用户也是考虑到在生产环境一般拿到不到root用户

创建用户ceph
useradd ceph
passwd ceph
输入密码 ********

每个节点上添加ceph用户免密执行root权限
echo "ceph    ALL=(ALL)       NOPASSWD: ALL" >>  /etc/sudoers

后面的操作都在ceph用户下进行, 进入ceph用户空间

su - ceph

2. 安装 ceph

sudo yum install -y ceph

3. 生成配置项

3.1 机器及组件规划列表

节点类型主机IP主机名系统盘数据盘1数据盘2
mgr节点192.168.0.14njoffice04sdasdbsdc
mon节点192.168.0.14njoffice04sdasdbsdc
mon节点192.168.0.15njoffice05sdasdbsdc
mon节点192.168.0.16njoffice06sdasdbsdc
osd节点192.168.0.14njoffice04sdasdbsdc
osd节点192.168.0.15njoffice05sdasdbsdc
osd节点192.168.0.16njoffice06sdasdbsdc

最好配置一下互信, 方便将生成好的配置文件从一台机器copy到其它机器

在14上面执行,然后拷贝到 15,16服务器
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub ceph@192.168.0.15
ssh-copy-id -i ~/.ssh/id_rsa.pub ceph@192.168.0.16

3.2 ceph.conf

ceph 代表集群名, 如果你想换别的名字, 也不是不行,就是在后面的配置中容易写错导致集群无法启动, 简单的做法就是参考官方给的ceph名字启动启来

通过 uuidgen 命令 产生 fsid
根据 3.1的规划在 14 写入文件 sudo vi /etc/ceph/ceph.conf
注意这里面变量名 mon_initial_members mon_host, 是带下划线的, 官方文档给的不带
不带下划线导致ceph -s卡住(好像是这样的,带了下划线就顺畅多了!)
这里面我仅使用最简单配置,其它乱七八糟搞不清楚的配置暂时不加, 等理解清楚再加上去

[global]
fsid = e17a4906-5e5f-4935-b9c0-bc6ae4e53b28
mon initial members = njoffice04,njoffice05,njoffice06
mon host = 192.168.0.14,192.168.0.15,192.168.0.16

14配置保存好后, 复制到 15,16

这里面要使用sudo, 我是知道root密码的, 你没有root密码就手工写一下吧
为什么要复制这个 ceph.conf ? 这个是基础配置, 各点启动时, 首先要通过 mon_initial_members 来识别加入集群

sudo scp /etc/ceph/ceph.conf 192.168.0.15:/etc/ceph/
sudo scp /etc/ceph/ceph.conf 192.168.0.16:/etc/ceph/

3.3 创建 mon keyring,osd keyring

此处仅列出来创建命令, 解释可以到官方教程看, 主要列出实战的写法

sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'

sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring


sudo chown ceph:ceph /tmp/ceph.mon.keyring

monmaptool --create --add njoffice04 192.168.0.14 --add njoffice05 192.168.0.15 --add njoffice06 192.168.0.16 --fsid e17a4906-5e5f-4935-b9c0-bc6ae4e53b28 /tmp/monmap

将产生的key复制到15,16各点, 这一步你可以暂时不复制, 等到启动其它点的时候,需要的时候再复制也行

scp /tmp/monmap 192.168.0.15:/tmp
scp /tmp/monmap 192.168.0.16:/tmp
scp /tmp/ceph.mon.keyring 192.168.0.15:/tmp
scp /tmp/ceph.mon.keyring 192.168.0.16:/tmp


sudo scp /etc/ceph/ceph.client.admin.keyring 192.168.0.15:/etc/ceph/
sudo scp /etc/ceph/ceph.client.admin.keyring 192.168.0.16:/etc/ceph/

4. 启动mon服务

4.1 njoffice04启动 mon服务

创建工作目录
sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}

sudo mkdir /var/lib/ceph/mon/ceph-njoffice04
sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-njoffice04
sudo -u ceph ceph-mon --cluster ceph --mkfs -i njoffice04 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
sudo systemctl start ceph-mon@njoffice04
sudo systemctl enable ceph-mon@njoffice04

检查启动状态

systemctl status ceph-mon@njoffice04.service

如果启动失败,排查错误

sudo journalctl -xeu ceph-mon@njoffice04.service

删除失败的,重新开始 启动成功
systemctl reset-failed ceph-mon@njoffice04.service

这里面失败的原因有几个, 1) ceph.conf 写的不正确 2) monmap生成不正确, 删除重新再操作一遍

开通防火墙

sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
4.1.1 报错解决 ceph -s 命令卡住

检查ceph状态, 不幸的是ceph -s 命令卡住,没有反应时间长了会报超时

sudo ceph -s
报超时
monclient(hunting): authenticate timed out after 300




解决办法:  1) 将 /etc/ceph/ceph.conf 改写成一个机器ip
2) 将主机ip及主机名写入 /etc/hosts
192.168.0.14 njoffice04
192.168.0.15 njoffice05
192.168.0.16 njoffice06
3) 重启 mon 
systemctl restart ceph-mon@njoffice04.service
第一条应该生效的 第2条每台机器是应该做的
为什么得出第一条是生效的呢, 因为我之间安装过一遍了, 是在kubesphere安装后才安装的, kubesphere安装后,会把主机ip对应主机名全部配置好
4) 检查各点防火墙是否放开
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent

然后我再改回去, ceph -s也不卡了,你说奇怪不奇怪
主机名 /etc/hosts还原回去重启也没有问题了, 如果遇到类似问题就按上方修改重试一遍吧

4.1.2 ceph -s 报警告 3 monitors have not enabled msgr2 执行如下命令开启
sudo ceph mon enable-msgr2
4.2.3 ceph -s 报警告 mons are allowing insecure global_id reclaim
sudo ceph config set mon auth_allow_insecure_global_id_reclaim false

4.2 njoffice05启动 mon服务

如果有防火墙,使用如下命令放开防火墙,否则导致 ceph -s 卡住

sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
sudo mkdir /var/lib/ceph/mon/ceph-njoffice05
sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-njoffice05
sudo -u ceph ceph-mon --cluster ceph --mkfs -i njoffice05 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

sudo systemctl start ceph-mon@njoffice05
sudo systemctl status ceph-mon@njoffice05.service
sudo systemctl enable ceph-mon@njoffice05.service

4.3 njoffice06启动 mon服务

如果有防火墙,使用如下命令放开防火墙,否则导致 ceph -s 卡住

sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
sudo mkdir /var/lib/ceph/mon/ceph-njoffice06
sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-njoffice06
sudo -u ceph ceph-mon --cluster ceph --mkfs -i njoffice06 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
sudo systemctl start ceph-mon@njoffice06
sudo systemctl status ceph-mon@njoffice06.service
sudo systemctl enable ceph-mon@njoffice06.service

至此 mon全部启动

sudo ceph -s
  cluster:
    id:     e17a4906-5e5f-4935-b9c0-bc6ae4e53b28
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum njoffice04,njoffice05,njoffice06 (age 7m)
    mgr: 
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     

5. 启动 mgr 及 dashboard

5.1 启动 mgr

sudo ceph auth get-or-create mgr.njoffice04 mon 'allow profile mgr' osd 'allow *' mds 'allow *'

将ceph auth get-or-create获取的内容写入 keyring中

sudo mkdir -p /var/lib/ceph/mgr/ceph-njoffice04
sudo vi /var/lib/ceph/mgr/ceph-njoffice04/keyring

启动
sudo ceph-mgr -i njoffice04

检查mgr是否启动成功

sudo ceph mgr module ls
sudo ceph mgr services

5.2 启动 dashboard

按照规划只启动一个mgr, 所以dashboard也是只启动一个
我这里不启用ssl, 对外服务时,用到ssl在宝塔里创建网站, 购买ssl即可

sudo ceph config set mgr mgr/dashboard/ssl false
sudo ceph mgr module enable dashboard

放开 8080端口
sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

可以通知命令行修改端口, 请参考官方文档

5.3 访问 dashboard 及登陆

然后访问dashboard
通过 sudo ceph mgr services 获取dashboard访问网址

{
    "dashboard": "http://192.168.0.14:8080/"
}

创建用户

查看用户 admin 提醒不存在
sudo ceph dashboard ac-user-show admin

将密码密写入文本文件,密码要足够复杂, 简单密码创建会提醒失败
touch admin.txt
echo 'aKYfP*****H8dmVh' > admin.txt

创建管理员
sudo ceph dashboard ac-user-create admin -i admin.txt administrator

然后使用上方的网址及账号密码登陆dashboard
此时不可以使用谷歌浏览器否则容易报错, 别问原因, 经过反复测试总结的经验, 都是泪呀
想知道分析过程,请看我的另外一篇文章
openEuler ceph mgr dashboard 无法登陆 报错 401 Unauthorized

{"status": "401 Unauthorized", "detail": "You are not authorized to access that resource", "request_id": "e657d5c3-02af-4e4f-9705-fe9f5c98ca70"}

测试Edge浏览器可以使用 版本 [Microsoft Edge 版本 107.0.1418.62 (正式版本) (64 位)]

登陆成功后

没有osd服务的情况下登陆的结果

5.4 mgr相关待处理问题

问题: mgr如何开启自动启动? 服务器重启后, mgr不会自启动

6. 启动 osd 服务

6.1 磁盘的清理准备

由于我是整块磁盘, 所以只需要简单清除即可, 下面的命令可别乱用, 搞清楚是不是整块磁盘
一般只有分区的话, 自己想办法吧,我是用的整块磁盘, 用了下面的命令相当于整块磁盘清空了哦!!!

我的服务器重启后遇到sda,sdb磁盘互换的问题, 至于此问题咋解决,网上搜关键词 sda sdb 被互换 解决 , 修改 /etc/fstab 为UUID 好像只有部分服务器起作用, 有台服务器又重启了一下才好

sgdisk --zap-all /dev/sdb
dd if=/dev/zero of="/dev/sdb" bs=1M count=100 oflag=direct,dsync
partprobe /dev/sdb

sgdisk --zap-all /dev/sdc
dd if=/dev/zero of="/dev/sdc" bs=1M count=100 oflag=direct,dsync
partprobe /dev/sdc

6.2 手工创建osd

6.2.1 将 /var/lib/ceph/bootstrap-osd/ceph.keyring 复制到各数据节点对应位置
sudo scp /var/lib/ceph/bootstrap-osd/ceph.keyring 192.168.0.15:/var/lib/ceph/bootstrap-osd/
sudo scp /var/lib/ceph/bootstrap-osd/ceph.keyring 192.168.0.16:/var/lib/ceph/bootstrap-osd/
6.2.2 各节点要开放 6800-6820端口
sudo firewall-cmd --zone=public --permanent --add-port=6800-6820/tcp
sudo firewall-cmd --reload

检查是否放开
sudo firewall-cmd --list-port
6.2.3 逐点手工创建 ceph-volume

最好一个盘就是一个osd, 这是因为如果硬盘坏了,只需要替换一个osd即可
创建完osd就会自动启动 osd进程, 也即创建好后就不要使用删除命令了, 否则挺麻烦的

从14开始执行, 执行一条检查一下 ceph -s命令 osd是否启动, 逐个执行, 同时执行的话,我担心会导致 顺序错乱, 不方便维护
他会自动添加 osd.0,osd.1, osd.2, osd.3,osd.4,osd.5

sudo ceph-volume lvm create --data /dev/sdb
sudo ceph-volume lvm create --data /dev/sdc
6.2.4 报错解决

开始挺好的, 后来报错, 主要原因是防火墙没有放开 6800-6820端口
执行 sudo firewall-cmd --zone=public --permanent --add-port=6800-6820/tcp 即可
2 OSD(s) have broken BlueStore compression
16报
2022-12-01T12:51:05.955+0800 7fa2c4e75f00 -1 create cannot load compressor of type snappy
stderr: 2022-12-01T12:49:09.308+0800 7f30024acf00 -1 load failed dlopen(): “/usr/lib64/ceph/compressor/libceph_snappy.so: undefined symbol: _ZTIN6snappy6SourceE” or “/usr/lib64/ceph/libceph_snappy.so: cannot open shared object file: No such file or directory”

7 警告解决

7.1 6 OSD(s) have broken BlueStore compression

在安装 ceph-volumn的时候,看到有报错

 stderr: 2022-12-01T12:50:40.427+0800 7f4bca0e1f00 -1 bluestore(/var/lib/ceph/osd/ceph-4/) _read_fsid unparsable uuid
 stderr: 2022-12-01T12:50:40.966+0800 7f4bca0e1f00 -1 load failed dlopen(): "/usr/lib64/ceph/compressor/libceph_snappy.so: undefined symbol: _ZTIN6snappy6SourceE" or "/usr/lib64/ceph/libceph_snappy.so: cannot open shared object file: No such file or directory"
 stderr: 2022-12-01T12:50:40.966+0800 7f4bca0e1f00 -1 create cannot load compressor of type snappy
 stderr: 2022-12-01T12:50:40.966+0800 7f4bca0e1f00 -1 bluestore(/var/lib/ceph/osd/ceph-4/) _set_compression unable to initialize snappy compressor
 stderr: 2022-12-01T12:50:47.992+0800 7f4bca0e1f00 -1 load failed dlopen(): "/usr/lib64/ceph/compressor/libceph_snappy.so: undefined symbol: _ZTIN6snappy6SourceE" or "/usr/lib64/ceph/libceph_snappy.so: cannot open shared object file: No such file or directory"
 stderr: 2022-12-01T12:50:47.992+0800 7f4bca0e1f00 -1 create cannot load compressor of type snappy
 stderr: 2022-12-01T12:50:47.992+0800 7f4bca0e1f00 -1 bluestore(/var/lib/ceph/osd/ceph-4/) _set_compression unable to initialize snappy compressor

此问题可以追踪到一些bug, 这个版本正好是我安装的版本
snappy 1.1.9 disabled RTTI, 而1.1.9是目前最新版本,另外社区不准备开放rtti,所以基本无解了
现在的思路就是去掉压缩,或者换压缩算法

unable to load libceph_snappy.so due to undefined symbol _ZTIN6snappy6SourceE in snappy 1.1.9
此问题在openEuler社区已经有反应
ceph上OSD(s) have broken BlueStore compression, unable to load:snappy异常

并且新版本有修改
add option to enable rtti set default tocurrent

目前临时解决方案是下载 1.1.8并强制升级, 我是x86架构,所以下载x86, 其它架构自行下载

 sudo rpm -Uvh --oldpackage https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS-SP3/everything/x86_64/Packages/snappy-1.1.8-1.oe1.x86_64.rpm

到对应各节点重启osd即可消除 unable to load:snappy 的报错
sudo systemctl restart ceph-osd@1
sudo systemctl restart ceph-osd@2
sudo systemctl restart ceph-osd@3
sudo systemctl restart ceph-osd@4
sudo systemctl restart ceph-osd@5
sudo systemctl restart ceph-osd@6

集群健康状态如下图
在这里插入图片描述

参考文献

1: https://docs.ceph.com/en/latest/install/manual-deployment/#monitor-bootstrapping

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

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

相关文章

Python第三方库之nibabel

1.nibabel简介 NiBabel提供对一些常见医学和神经影像文件格式的读/写访问&#xff0c;包括ANALYZE&#xff08;plain&#xff0c;SPM99&#xff0c;SPM2及更高版本&#xff09;&#xff0c;GIFTI&#xff0c;NIfTI1&#xff0c;NIfTI2&#xff0c;CIFTI-2&#xff0c;MINC1&am…

[附源码]SSM计算机毕业设计疫情防控期间人员档案追寻系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RocketMQ系列——搭建Namesrv源码调试环境整理

目录 RocketMQ系列-搭建Namesrv源码调试环境 Namesrv源码调试环境搭建 导入项目到IDEA 创建所需目录 环境配置 启动Namesrv 总结 RocketMQ系列-搭建Namesrv源码调试环境 在学习任何一个技术框架的时候&#xff0c;我们通常都是先了解是什么&#xff0c;有什么作用、解决…

Java流程控制语句

流程控制语句 在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。所以&#xff0c;我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能。 流程控制语句分类 顺序结构、分支结构&#…

【毕业设计】深度学习社交安全距离检测系统 - python opencv

文章目录0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪4 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c…

鲜花商城|基于Springboot实现鲜花商城系统

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java、前端、Pythone开发多年&#xff0c;做过高程&#xff0c;项目经理&#xff0c;架构师 主要内容&#xff1a;Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 文末获得源码 …

xgboost 为什么拟合残差能获得更好的效果(思考)

以时序预测为例&#xff1a; 现在要 预测2022年之后的值&#xff0c;可以预测下降幅度&#xff08;和预测残差的步骤一样&#xff09;。 假设有一个隐藏的规律&#xff1a;对于21年的高峰&#xff0c;22年的下降幅度会更大&#xff08;如time3是&#xff0c;下降幅度会比其他的…

Spring依赖注入源码解析(下)

文章目录前言本章目标resolveDependency—解决依赖查找1、doResolveDependency2、Autowreid寻找依赖流程图依赖注入完整流程图前言 在上一篇文章Spring依赖注入源码解析&#xff08;上&#xff09;中&#xff0c;主要介绍了寻找注入点、以及注入源码分析 本章目标 这一篇主要…

市面上最适合跑步用的耳机有哪些、分享五款最优秀的跑步耳机

随着人们日益对健康的重视&#xff0c;”全民健身“正在全国&#xff0c;乃至全世界蔓延开来&#xff0c;其中跑步锻炼凭借着门槛低&#xff0c;益处多成为了大部分人的健身的首选。而随着跑步大军的壮大&#xff0c;国内蓝牙耳机市场也是一片火热。其中蓝牙无线运动耳机凭借着…

【python小项目】用python写一个小工具——番茄钟

用python写一个小工具——番茄钟 最近听到朋友说在用番茄钟&#xff0c;有点兴趣也想下载一个来用用&#xff0c;后面仔细一想这玩意做起来也不难&#xff0c;索性自己顺手写一个算了&#xff0c;在这里也分享给大家了 一、功能简述 番茄钟即番茄工作法&#xff0c;番茄工作法…

产品经理必备的能力有哪些?

从一名普通的产品经理到一名优秀的产品经理要经历什么&#xff1f;哪些又是产品经理必备的能力&#xff1f;产品经理对能力的需求也不尽相同&#xff0c;在不同的团队合作模式下&#xff0c;还必须懂得各种能力。 一、业务分析能力 数据分析能力该是什么样的呢 1、有数据意识…

indexDB 本地数据库

indexDB 本地数据库 IndexedDB是一种使用浏览器存储大量数据的方法&#xff0c;它创造的数据可以被查询&#xff0c;并且可以离线使用。 优点&#xff1a;空间大小&#xff0c;大于250M&#xff1b;支持二进制&#xff1a;IndexedDB不但可以存储对象&#xff0c;字符串等&#…

利用MS11_003 IE漏洞攻击win7主机

利用MS11_003 IE漏洞攻击win7主机 微软2011年2月9日发布12个安全补丁,其中3个最高级别为严重等级,9个为重要等级,共计修复了影响 Windows、Office、IE 和 IIS 的22个漏洞。 MS11-003、MS11-006 和 MS11-007 为严重等级,需要优先部署。其中,MS11-003 的最高利用指数为1它修…

基于web的课程管理系统设计与实现(java+SqlServer)

目 录 摘 要 I Abstract II 1 绪论 1 1.1 课题背景 1 1.2 本课题研究的意义 2 1.3 主要研究内容 3 2 开发环境与相关技术 4 2.1 JSP技术 4 2.1.1 JAVA简介 4 2.1.2 JSP简介 4 2.1.3 SSH2框架介绍 5 2.2 Myeclipse介绍 6 2.3 SQL2008 数据库 7 2.4 Browser/Server&#xff08;B…

GD32实现串口空闲(IDLE)中断 + DMA机制接收数据

前言 串口功能在单片机开发中&#xff0c;是比较常用的外设&#xff0c;熟练使用串口功能也是驱动开发必备的技能之一。 DMA是一种CPU辅助手段&#xff0c;可以在CPU不参与的情况下&#xff0c;是做一些辅助CPU的事情&#xff0c;如通常的数据搬运。 在没有DMA之前&#xff0c;…

hadoop3.x学习(一)--安装与环境配置

一、hadoop的组成 hadoop1.x&#xff1a;Commons、HDFS&#xff08;数据存储&#xff09;、MapReduce&#xff08;资源调度计算&#xff09;hadoop2.x:Commons、HDFS&#xff08;数据存储&#xff09;、MapReduce&#xff08;计算&#xff09;、Yarn(资源调度) 1.1 HDFS 分布式…

【电商项目实战】个人资料(详细篇)

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;SpringBoot电商项目实战 ✨学习社区&#xff1a; &#x1f449;不会压弯的小飞侠 ✨知足上进&#x…

Linear Model 线性模型

文章目录1、Linear Model 线性模型1.1 问题引入1.2 选择模型1.3 损失 Loss1.4 均方误差 MSE1.5 代码1.6 更换模型1、Linear Model 线性模型 B站视频教程传送门&#xff1a;PyTorch深度学习实践 - 线性模型 1.1 问题引入 假设学生在期末考试中得到y分&#xff0c;如果他们花了…

【正点原子FPGA连载】第二十五章 双路高速AD实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十五章 双路…

干货 | 读懂这篇文,玩游戏还会卡顿?

玩游戏的时候最怕的就是卡顿。排位赛的紧急关头&#xff0c;明明马上就能上一段位&#xff0c;却因为卡顿导致给对方送人头。还把对手送上了王者。引起队友骂声一片。作为测试工程师的你&#xff0c;可以忍&#xff1f; 卡顿测试也是专项测试里的一种&#xff0c;更多精彩测试内…