ceph部署-14版本(nautilus)-使用ceph-ansible部署实验记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、环境信息
- 二、部署步骤
- 2.1 基础环境准备
- 2.2 各节点docker环境安装
- 2.3 搭建互信集群
- 2.4 下载ceph-ansible
- 三、配置部署文件
- 3.1 使用本地docker
- 3.2 配置hosts主机清单文件
- 3.3 配置group_vars/all.yml文件
- 3.4 开始部署
- 3.5 部署ceph-common软件包
- 3.6 部署结果
- 四、相关实验
- 4.1 测试删除osd
- 4.2 测试增加osd
- 4.3 将实验4.1中移除的osd更换硬盘后重新加回集群
- 4.4 新增一个只是osd功能的节点
- 4.5 删除新增的node04节点
- 总结
前言
记录一下使用ceph-ansible部署ceph14版本(nautilus)的过程。
ceph-ansible官网地址:https://docs.ceph.com/projects/ceph-ansible/en/latest/osds/scenarios.html
一、环境信息
操作系统版本:centos7.9
机器-磁盘信息表格
| 机器名称 | 机器IP | 磁盘一盘符 | 磁盘二盘符 | 磁盘三盘符 | 磁盘四盘符 | 磁盘五盘符 |
|---|---|---|---|---|---|---|
| node01 | 192.168.150.72 | /dev/vdb/ | /dev/vdc/ | /dev/vdd/ | ||
| node02 | 192.168.150.73 | /dev/vdb/ | /dev/vdc/ | /dev/vdd/ | /dev/vde/ | |
| node03 | 192.168.150.74 | /dev/vdb/ | /dev/vdc/ | /dev/vdd/ | /dev/vde/ | /dev/vdf/ |
二、部署步骤
2.1 基础环境准备
基础环境的部署参考
https://blog.csdn.net/baidu_35848778/article/details/145564790
2.2 各节点docker环境安装
我这里的docker配置了自己本地的harbor仓库,镜像都是本地化了的,现在国内源pull不太好使,最好是能自己提前下载好本地化一下来使用。
# 安装docker服务
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# 修改cgroupdriver
mkdir -p /etc/docker/;
cat > /etc/docker/daemon.json <<EOF
{"insecure-registries": ["http://harbor.XXX.XX.XX:10002"],"exec-opts":["native.cgroupdriver=systemd"],"log-driver":"json-file","log-opts":{"max-size":"100m"}
}
EOF# 安装软件包
yum install docker-ce docker-ce-cli -y;
# 启动服务,设置自启动
systemctl restart docker;
systemctl enable docker;# 登录仓库
docker login http://harbor.XXX.XX.XX:10002
2.3 搭建互信集群
搭建互信的方式各不相同,我这边使用的是收集分发authorized_keys的方式。
各节点修改/etc/hosts文件
cat <<EOF >> /etc/hosts
192.168.150.72 node01
192.168.150.73 node02
192.168.150.74 node03
EOF
各节点生成密钥
ssh-keygen -f ~/.ssh/id_rsa -P '' -q
主节点(72节点)发送密钥到各个节点
yum install -y sshpasssshpass -p "password" ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@192.168.150.72sshpass -p "password" ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@192.168.150.73sshpass -p "password" ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@192.168.150.74
主节点(72节点)收集各节点密钥
ssh root@192.168.150.73 cat ~/.ssh/id_rsa.pub>> /root/.ssh/authorized_keysssh root@192.168.150.74 cat ~/.ssh/id_rsa.pub>> /root/.ssh/authorized_keys
主节点(72节点)推送密钥汇集文件到各个节点
scp /root/.ssh/authorized_keys 192.168.150.73:/root/.ssh/scp /root/.ssh/authorized_keys 192.168.150.74:/root/.ssh/
2.4 下载ceph-ansible
下载安装包 国内不好访问的话 我是直接买了一个阿里云的香港的抢占式虚拟机下载的
yum install python2-pip ansible git python-netaddr -y
mkdir -p /data/installceph/ && cd /data/installceph/
git config --global http.postBuffer 5242880
git clone https://github.com/ceph/ceph-ansible.git
cd ceph-ansible
# 切换分支,需要部署的是14 nautilus版本
git checkout stable-4.0
相关版本信息
stable-3.0 Supports Ceph versions jewel and luminous. This branch requires Ansible version 2.4.
stable-3.1 Supports Ceph versions luminous and mimic. This branch requires Ansible version 2.4.
stable-3.2 Supports Ceph versions luminous and mimic. This branch requires Ansible version 2.6.
stable-4.0 Supports Ceph version nautilus. This branch requires Ansible version 2.9.
stable-5.0 Supports Ceph version octopus. This branch requires Ansible version 2.9.
stable-6.0 Supports Ceph version pacific. This branch requires Ansible version 2.10.
stable-7.0 Supports Ceph version quincy. This branch requires Ansible version 2.12.
main Supports the main (devel) branch of Ceph. This branch requires Ansible version 2.12.
三、配置部署文件
3.1 使用本地docker
/data/installceph/ceph-ansible/roles/ceph-container-engine/tasks/pre_requisites/prerequisites.yml
#- name: install container packages
# package:
# name: ['{{ container_package_name }}', '{{ container_binding_name }}']
# update_cache: true
# register: result
# until: result is succeeded
# tags: with_pkg
3.2 配置hosts主机清单文件
由于是个各节点的硬盘信息不同
cat <<EOF >> /data/installceph/ceph-ansible/hosts
[mons]
node01
node02
node03[osds]
node01 devices="['/dev/vdb','/dev/vdc','/dev/vdd']"
node02 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde','/dev/vdf']"[mgrs]
node01
node02
node03[mdss]
node01
node02
node03[clients]
node01[rgws]
node01[grafana-server]
node01
EOF
3.3 配置group_vars/all.yml文件
\cp /data/installceph/ceph-ansible/group_vars/all.yml.sample /data/installceph/ceph-ansible/group_vars/all.yml
cat <<EOF >> /data/installceph/ceph-ansible/group_vars/all.yml######################################################
# INSTALL OPTIONS BY USER #
# #
####################################################### Install options
# -----------------------------
ceph_origin: repository
ceph_repository: community
ceph_mirror: http://mirrors.aliyun.com/ceph
ceph_stable_key: http://mirrors.aliyun.com/ceph/keys/release.asc
ceph_stable_release: nautilus
ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"
# -----------------------------ceph_docker_registry: harbor.XXX.XX.XX:10002
#node_exporter_container_image: "prom/node-exporter:v0.17.0"
#grafana_container_image: "grafana/grafana:5.4.3"
#prometheus_container_image: "prom/prometheus:v2.7.2"
#alertmanager_container_image: "prom/alertmanager:v0.16.2"# Ceph options
# -----------------------------
generate_fsid: true
ceph_conf_key_directory: /etc/ceph
cephx: true
# -----------------------------# Client options
# -----------------------------
rbd_cache: "false"
rbd_client_log_path: /var/log/ceph
# ----------------------------# Monitor options
# -----------------------------
monitor_interface: eth0
# ----------------------------# OSD options
# -----------------------------
journal_size: 5120
public_network: 192.168.150.0/24
cluster_network: 192.168.150.0/24
osd_objectstore: bluestore
# -----------------------------# MDS options
# -----------------------------
radosgw_interface: eth0
# -----------------------------# Testing mode
# -----------------------------
#common_single_host_mode: true
# -----------------------------# DOCKER options
# -----------------------------
ceph_docker_image: "ceph/daemon"
ceph_docker_image_tag: latest-nautilus
containerized_deployment: true
# -----------------------------# DASHBOARD options
# -----------------------------
dashboard_enabled: False
dashboard_protocol: http
dashboard_port: 8443
dashboard_admin_user: admin
dashboard_admin_password: admin123456
grafana_admin_user: admin
grafana_admin_password: admin
# -----------------------------
EOF
3.4 开始部署
cp site-docker.yml.sample site-docker.ymlansible-playbook -i /data/installceph/ceph-ansible/hosts /data/installceph/ceph-ansible/site-docker.yml
3.5 部署ceph-common软件包
因为更习惯于在本地执行ceph命令,所以安装ceph-common
yum install epel-release -ycat <<END >/etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for \$basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
ENDyum clean all
yum makecacheyum install -y ceph-common.x86_64
3.6 部署结果
osd部署结果符合预期
[root@node01 ceph-ansible]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.17224 root default
-3 0.29306 host node01 0 hdd 0.09769 osd.0 up 1.00000 1.00000 3 hdd 0.09769 osd.3 up 1.00000 1.00000 6 hdd 0.09769 osd.6 up 1.00000 1.00000
-7 0.39075 host node02 1 hdd 0.09769 osd.1 up 1.00000 1.00000 4 hdd 0.09769 osd.4 up 1.00000 1.00000 7 hdd 0.09769 osd.7 up 1.00000 1.00000 9 hdd 0.09769 osd.9 up 1.00000 1.00000
-5 0.48843 host node03 2 hdd 0.09769 osd.2 up 1.00000 1.00000 5 hdd 0.09769 osd.5 up 1.00000 1.00000 8 hdd 0.09769 osd.8 up 1.00000 1.00000
10 hdd 0.09769 osd.10 up 1.00000 1.00000
11 hdd 0.09769 osd.11 up 1.00000 1.00000
四、相关实验
4.1 测试删除osd
实验设计:模拟osd.11异常无法提供服务时的移除操作
# 命令e.g.:ansible-playbook -vv -i hosts infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=1,2,3# 实验命令:ansible-playbook -vv -i hosts infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=11
实验结果
Thursday 13 February 2025 15:33:26 +0800 (0:00:00.373) 0:00:31.086 *****
ok: [node01] => changed=false cmd:- docker- exec- ceph-mon-node01- ceph- --cluster- ceph- -sdelta: '0:00:00.547188'end: '2025-02-13 15:33:27.087717'rc: 0start: '2025-02-13 15:33:26.540529'stderr: ''stderr_lines: <omitted>stdout: |2-cluster:id: 84a44515-64c1-4f5c-b9c5-a0cc3e797074health: HEALTH_WARNDegraded data redundancy: 28/627 objects degraded (4.466%), 7 pgs degradedservices:mon: 3 daemons, quorum node01,node02,node03 (age 76m)mgr: node02(active, since 74m), standbys: node01, node03mds: cephfs:1 {0=node03=up:active} 2 up:standbyosd: 11 osds: 11 up (since 14s), 11 in (since 16s); 1 remapped pgsrgw: 1 daemon active (node01.rgw0)task status:data:pools: 6 pools, 144 pgsobjects: 209 objects, 3.4 KiBusage: 11 GiB used, 1.1 TiB / 1.1 TiB availpgs: 28/627 objects degraded (4.466%)135 active+clean3 active+recovery_wait+degraded3 active+recovering+degraded2 active+recovery_wait1 active+recovery_wait+undersized+degraded+remappedio:recovery: 3 B/s, 1 keys/s, 2 objects/sprogress:Rebalancing after osd.11 marked out[==================............]stdout_lines: <omitted>TASK [show ceph osd tree] **************************************************************************************************************************************************
task path: /data/installceph/ceph-ansible/infrastructure-playbooks/shrink-osd.yml:254
Thursday 13 February 2025 15:33:27 +0800 (0:00:00.999) 0:00:32.085 *****
ok: [node01] => changed=false cmd:- docker- exec- ceph-mon-node01- ceph- --cluster- ceph- osd- treedelta: '0:00:00.560455'end: '2025-02-13 15:33:28.017771'rc: 0start: '2025-02-13 15:33:27.457316'stderr: ''stderr_lines: <omitted>stdout: |-ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 1.07455 root default-3 0.29306 host node010 hdd 0.09769 osd.0 up 1.00000 1.000003 hdd 0.09769 osd.3 up 1.00000 1.000006 hdd 0.09769 osd.6 up 1.00000 1.00000-7 0.39075 host node021 hdd 0.09769 osd.1 up 1.00000 1.000004 hdd 0.09769 osd.4 up 1.00000 1.000007 hdd 0.09769 osd.7 up 1.00000 1.000009 hdd 0.09769 osd.9 up 1.00000 1.00000-5 0.39075 host node032 hdd 0.09769 osd.2 up 1.00000 1.000005 hdd 0.09769 osd.5 up 1.00000 1.000008 hdd 0.09769 osd.8 up 1.00000 1.0000010 hdd 0.09769 osd.10 up 1.00000 1.00000stdout_lines: <omitted>
META: ran handlersPLAY RECAP *****************************************************************************************************************************************************************
node01 : ok=19 changed=3 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0
node02 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node03 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
移除完毕后,将主机配置文件中osd对应的硬盘信息移除
[osds]
node01 devices="['/dev/vdb','/dev/vdc','/dev/vdd']"
node02 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
# 移除osd11前的记录node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde','/dev/vdf']"
# 下列为移除osd11之后的记录
node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
4.2 测试增加osd
实验设计:在node01节点增加一个新硬盘名为/dev/vde的osd
将主机配置文件中新增osd对应的硬盘信息
[osds]
node01 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
node02 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
# 移除osd11前的记录node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde','/dev/vdf']"
# 下列为移除osd11之后的记录
node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
执行命令
命令e.g.:ansible-playbook -i /data/installceph/ceph-ansible/hosts site-docker.yml --limit osd-node-name实验命令:ansible-playbook -i /data/installceph/ceph-ansible/hosts site-docker.yml --limit node01
实验结果:
[root@node01 ceph-ansible]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.17224 root default
-3 0.39075 host node01 0 hdd 0.09769 osd.0 up 1.00000 1.00000 3 hdd 0.09769 osd.3 up 1.00000 1.00000 6 hdd 0.09769 osd.6 up 1.00000 1.00000
11 hdd 0.09769 osd.11 up 1.00000 1.00000
-7 0.39075 host node02 1 hdd 0.09769 osd.1 up 1.00000 1.00000 4 hdd 0.09769 osd.4 up 1.00000 1.00000 7 hdd 0.09769 osd.7 up 1.00000 1.00000 9 hdd 0.09769 osd.9 up 1.00000 1.00000
-5 0.39075 host node03 2 hdd 0.09769 osd.2 up 1.00000 1.00000 5 hdd 0.09769 osd.5 up 1.00000 1.00000 8 hdd 0.09769 osd.8 up 1.00000 1.00000
10 hdd 0.09769 osd.10 up 1.00000 1.00000
4.3 将实验4.1中移除的osd更换硬盘后重新加回集群
将主机配置文件中新增osd对应的硬盘信息
[osds]
node01 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
node02 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde','/dev/vdf']"
执行命令
命令e.g.:ansible-playbook -i /data/installceph/ceph-ansible/hosts site-docker.yml --limit osd-node-name实验命令:ansible-playbook -i /data/installceph/ceph-ansible/hosts site-docker.yml --limit node03
实验结果
[root@node01 ceph-ansible]# ceph -s cluster:id: 84a44515-64c1-4f5c-b9c5-a0cc3e797074health: HEALTH_OKservices:mon: 3 daemons, quorum node01,node02,node03 (age 27m)mgr: node02(active, since 2h), standbys: node01, node03mds: cephfs:1 {0=node02=up:active} 2 up:standbyosd: 13 osds: 13 up (since 69s), 13 in (since 69s)rgw: 1 daemon active (node01.rgw0)task status:data:pools: 6 pools, 144 pgsobjects: 209 objects, 3.4 KiBusage: 13 GiB used, 1.3 TiB / 1.3 TiB availpgs: 144 active+clean[root@node01 ceph-ansible]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.26993 root default
-3 0.39075 host node01 0 hdd 0.09769 osd.0 up 1.00000 1.00000 3 hdd 0.09769 osd.3 up 1.00000 1.00000 6 hdd 0.09769 osd.6 up 1.00000 1.00000
11 hdd 0.09769 osd.11 up 1.00000 1.00000
-7 0.39075 host node02 1 hdd 0.09769 osd.1 up 1.00000 1.00000 4 hdd 0.09769 osd.4 up 1.00000 1.00000 7 hdd 0.09769 osd.7 up 1.00000 1.00000 9 hdd 0.09769 osd.9 up 1.00000 1.00000
-5 0.48843 host node03 2 hdd 0.09769 osd.2 up 1.00000 1.00000 5 hdd 0.09769 osd.5 up 1.00000 1.00000 8 hdd 0.09769 osd.8 up 1.00000 1.00000
10 hdd 0.09769 osd.10 up 1.00000 1.00000
12 hdd 0.09769 osd.12 up 1.00000 1.00000
4.4 新增一个只是osd功能的节点
前提:先把基础环境安装好,然后进行互信集群的扩容,我这边就不展示互信的操作了。
将主机配置文件中新增osd节点及对应的硬盘信息
[osds]
node01 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
node02 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
node03 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde','/dev/vdf']"
node04 devices="['/dev/vdb','/dev/vdc','/dev/vdd','/dev/vde']"
执行命令
命令e.g.:ansible-playbook -i /data/installceph/ceph-ansible/hosts site-docker.yml --limit osd-node-name实验命令:ansible-playbook -i /data/installceph/ceph-ansible/hosts site-docker.yml --limit node04
实验结果:
[root@node01 ceph-ansible]# ceph -s cluster:id: 84a44515-64c1-4f5c-b9c5-a0cc3e797074health: HEALTH_OKservices:mon: 3 daemons, quorum node01,node02,node03 (age 63s)mgr: node02(active, since 2h), standbys: node01, node03mds: cephfs:1 {0=node02=up:active} 2 up:standbyosd: 17 osds: 17 up (since 111s), 17 in (since 111s)rgw: 1 daemon active (node01.rgw0)task status:data:pools: 6 pools, 144 pgsobjects: 209 objects, 3.4 KiBusage: 17 GiB used, 1.6 TiB / 1.7 TiB availpgs: 144 active+clean[root@node01 ceph-ansible]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.66068 root default
-3 0.39075 host node01 0 hdd 0.09769 osd.0 up 1.00000 1.00000 3 hdd 0.09769 osd.3 up 1.00000 1.00000 6 hdd 0.09769 osd.6 up 1.00000 1.00000
11 hdd 0.09769 osd.11 up 1.00000 1.00000
-7 0.39075 host node02 1 hdd 0.09769 osd.1 up 1.00000 1.00000 4 hdd 0.09769 osd.4 up 1.00000 1.00000 7 hdd 0.09769 osd.7 up 1.00000 1.00000 9 hdd 0.09769 osd.9 up 1.00000 1.00000
-5 0.48843 host node03 2 hdd 0.09769 osd.2 up 1.00000 1.00000 5 hdd 0.09769 osd.5 up 1.00000 1.00000 8 hdd 0.09769 osd.8 up 1.00000 1.00000
10 hdd 0.09769 osd.10 up 1.00000 1.00000
12 hdd 0.09769 osd.12 up 1.00000 1.00000
-9 0.39075 host node04
13 hdd 0.09769 osd.13 up 1.00000 1.00000
14 hdd 0.09769 osd.14 up 1.00000 1.00000
15 hdd 0.09769 osd.15 up 1.00000 1.00000
16 hdd 0.09769 osd.16 up 1.00000 1.00000
4.5 删除新增的node04节点
实验设计:先删除node04节点上的全部osd,再删除掉host node04
执行命令
命令e.g.:ansible-playbook -vv -i hosts infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=1,2,3ansible-playbook -vv -i hosts infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=13,14,15,16
实验结果:
osd都删除掉了,但是这个host还在,在playbook列表里面也没有找到类似的playbook,个人猜测可能是版本较早,且这个功能场景不太常见的原因。
[root@node01 ceph-ansible]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.26993 root default
-3 0.39075 host node01 0 hdd 0.09769 osd.0 up 1.00000 1.00000 3 hdd 0.09769 osd.3 up 1.00000 1.00000 6 hdd 0.09769 osd.6 up 1.00000 1.00000
11 hdd 0.09769 osd.11 up 1.00000 1.00000
-7 0.39075 host node02 1 hdd 0.09769 osd.1 up 1.00000 1.00000 4 hdd 0.09769 osd.4 up 1.00000 1.00000 7 hdd 0.09769 osd.7 up 1.00000 1.00000 9 hdd 0.09769 osd.9 up 1.00000 1.00000
-5 0.48843 host node03 2 hdd 0.09769 osd.2 up 1.00000 1.00000 5 hdd 0.09769 osd.5 up 1.00000 1.00000 8 hdd 0.09769 osd.8 up 1.00000 1.00000
10 hdd 0.09769 osd.10 up 1.00000 1.00000
12 hdd 0.09769 osd.12 up 1.00000 1.00000
-9 0 host node04
总结
记录一下
相关文章:
ceph部署-14版本(nautilus)-使用ceph-ansible部署实验记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、环境信息二、部署步骤2.1 基础环境准备2.2 各节点docker环境安装2.3 搭建互信集群2.4 下载ceph-ansible 三、配置部署文件3.1 使用本地docker3.2 配置hosts…...
vue3 + thinkphp 接入 七牛云 DeepSeek-R1/V3 流式调用和非流式调用
如何获取七牛云 Token API 密钥 https://eastern-squash-d44.notion.site/Token-API-1932c3f43aee80fa8bfafeb25f1163d8 后端 // 七牛云 DeepSeek API 地址private $deepseekUrl https://api.qnaigc.com/v1/chat/completions;private $deepseekKey 秘钥;// 流式调用public f…...
vlanif接口转发vlan
一.为什么需要VLAN 1.1 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——…...
Rook-ceph(1.92最新版)
安装前准备 #确认安装lvm2 yum install lvm2 -y #启用rbd模块 modprobe rbd cat > /etc/rc.sysinit << EOF #!/bin/bash for file in /etc/sysconfig/modules/*.modules do[ -x \$file ] && \$file done EOF cat > /etc/sysconfig/modules/rbd.modules &l…...
第2章 信息技术发展(一)
2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件(Computer Hardware)是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。 计算机软件 (Computer Software)是指计算机系统中的程序及其文档,程序是计算任务的处理对象和处理规则的描述; 文档…...
python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公
文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件(openpyxl库)三、 处理 Word 文件(python-docx库)四、 处理 PPT 文件(python-pptx库)五、 自动发送邮件(smtplib和…...
【网络基本知识--2】
网络基本知识--2 1.主机A和主机B通过三次握手TCP连接,过程是: TCP三次握手连接过程如下: 1.客户端发送SYN(SEQx)报文发送给服务器端,进入SYN_SEND状态; 2.服务器端收到SYN报文,回应一个SYN(SEQy)ACK(ACKx1)…...
MoE硬件部署
文章目录 MoE硬件部署硬件需求**专家硬件映射:模块化计算单元****路由硬件加速:门控网络专用单元****内存与通信优化****能效控制策略****实例:假设部署Mixtral 8x7B到自研AI芯片** 资源分配硬件资源预分配(编译时)运行…...
摄影——曝光三要素
曝光三要素 光圈(F):控制进光量的装置快门(1/X):接受光线的时间感光度(ISO):感光器件对光线的敏感程度 一、快门(1/X) 静物 1/125 动物 1/500 …...
DeepSeek-R1论文阅读及蒸馏模型部署
DeepSeek-R1论文阅读及蒸馏模型部署 文章目录 DeepSeek-R1论文阅读及蒸馏模型部署摘要Abstract一、DeepSeek-R1论文1. 论文摘要2. 引言3. DeepSeek-R1-Zero的方法3.1 强化学习算法3.2 奖励建模3.3 训练模版3.4 DeepSeek-R1-Zero的性能、自进化过程和顿悟时刻 4. DeepSeek-R1&am…...
一周学会Flask3 Python Web开发-post请求与参数获取
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili app.route 装饰器默认只支持get请求。假如我们要让绑定的视图函数支持其他请求方式,我们可以在methods属性里配置…...
Python的那些事第二十五篇:高效Web开发与扩展应用实践FastAPI
FastAPI:高效Web开发与扩展应用实践 摘要 FastAPI 是一种基于 Python 的现代 Web 框架,以其高性能、自动文档生成、数据验证和异步支持等特性受到开发者的青睐。本文首先介绍了 FastAPI 的核心特性及其开发流程,然后通过实际案例探讨了其在异步编程、微服务架构、WebSocket…...
ES6模块化和CommonJs模块化区别
ES6模块化和CommonJs模块化区别 在JavaScript中,模块化是将代码拆分成独立的块,每个块可以独立封装和管理。ES6模块化和CommonJS是两种常见的模块化规范,它们在语法、加载方式和运行时特性上有显著差异。 语法差异 CommonJS模块使用requir…...
情书网源码 情书大全帝国cms7.5模板
源码介绍 帝国cms7.5仿《情书网》模板源码,同步生成带手机站带采集。适合改改做文学类的网站。 效果预览 源码获取 情书网源码 情书大全帝国cms7.5模板...
文档检测校正的重要性
鸿蒙操作系统(HarmonyOS)是华为推出的一款面向未来、面向全场景的分布式操作系统。它旨在为用户提供流畅、安全、可靠的跨设备交互体验,支持多种终端设备,如智能手机、平板电脑、智能穿戴设备等。为了确保文档在不同设备上的一致性…...
深入解析iOS视频录制(二):自定义UI的实现
深入解析 iOS 视频录制(一):录制管理核心MWRecordingController 类的设计与实现 深入解析iOS视频录制(二):自定义UI的实现 深入解析 iOS 视频录制(三):完…...
基于开源Odoo、SKF Phoenix API与IMAX-8数采网关的圆织机设备智慧运维实施方案 ——以某纺织集团圆织机设备管理场景为例
一、方案背景与需求分析 1.1 纺织行业设备管理痛点 以某华东地区大型纺织集团为例,其圆织机设备管理面临以下挑战: 非计划停机损失高:圆织机主轴轴承故障频发,2024年单次停机损失达12万元(停机8小时导致订单延误&am…...
Deepseek 万能提问公式:高效获取精准答案
### **Deepseek 万能提问公式:高效获取精准答案** 在使用 Deepseek 或其他 AI 工具时,提问的质量直接决定了答案的精准度和实用性。以下是一个万能的提问公式回答: --- ### **1. 明确背景(Context)** - **作用**…...
SQL进阶技巧:如何统计用户跨端消费行为?
目录 0 问题描述 2 问题剖析 技术难点解析 3 完整解决方案 步骤1:构造全量日期平台组合 步骤2:用户行为标记 步骤3:最终关联聚合 4 核心技巧总结 5 复杂度评估 往期精彩 0 问题描述 支出表: Spending +-------------+---------+ | Column Name | Type | +-----…...
DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
对于个人开发者或尝鲜者而言,本地想要部署 DeepSeek 有很多种方案,但是一旦涉及到企业级部署,则步骤将会繁琐很多。 比如我们的第一步就需要先根据实际业务场景评估出我们到底需要部署什么规格的模型,以及我们所要部署的模型&…...
算法——舞蹈链算法
一,基本概念 算法简介 舞蹈链算法(Dancing Links,简称 DLX)是一种高效解决精确覆盖问题的算法,实际上是一种数据结构,可以用来实现 X算法,以解决精确覆盖问题。由高德纳(Donald E.…...
【复现DeepSeek-R1之Open R1实战】系列5:SFT源码逐行深度解析
目录 3 SFT源码分析3.1 accelerate3.1.1 关键特性3.1.2 使用场景3.1.3 简单示例 3.2 代码主入口3.3 设置随机种子3.4 设置Log3.5 加载数据集3.6 加载Tokenizer3.7 模型参数配置初始化3.8 初始化SFT Trainer3.9 开始训练3.9.1 主函数3.9.2 核心循环3.9.3 单步训练3.9.4 原始Loss…...
WPF8-常用控件
目录 写在前面:1. 按钮控件1.1. Button 按钮1.2. RepeatButton:长按按钮1.3. RadioButton:单选按钮 2. 数据显示控件2.1. TextBlock:只读文本控件2.2. Lable:标签 显示文本控件2.3. ListBox:显示可选择项的列表2.4. DataGrid&…...
单元测试整理
在国外软件开发中,单元测试必不可少,但是国内并不太重视这一块,一个好的单元测试可以提前发现很多问题,也减去和测试battle的时间 Spring单元测试 JUnit4 RunWith 指明单元测试框架 e.g. RunWith(SpringJUnit4ClassRunner.cla…...
代码随想录刷题day24|(字符串篇)151.反转字符串中的单词
一、题目思路 1.快慢指针移除字符串首尾以及单词中的多余空格 类似前面数组篇--移除元素代码随想录刷题day02|(数组篇)27.移除元素、26.删除有序数组中的重复项_代码随想录网站-CSDN博客 快指针fast遍历整个字符串,慢指针slow指向新字符串…...
六、敏捷开发工具:项目管理工具
一、敏捷开发工具 在敏捷开发过程中,项目管理工具是支持团队高效协作、任务跟踪和项目进度控制的关键因素。随着敏捷方法的普及,市场上出现了多种工具来帮助团队进行需求管理、任务分配、进度跟踪以及反馈收集等任务。本文将对常用的敏捷开发项目管理工具(如Jira、Trello、…...
VMware按照的MacOS升级后无法联网
背景 3年前公司使用Flutter开发了一款app,现在app有微小改动需要重新发布到AppStore 问题 问题是原来的Vmware搭建的开发环境发布App失败了 提示:App需要使用xcode15IOS 17 SDK重新构建,这样的话MacOS至少需要升级到13.5 Xcode - 支持 - Ap…...
I2C、SPI、UART
I2C:串口通信,同步,半双工,双线(数据线SDA时钟线SCL),最大距离1米到几米 SPI(串行外设接口):串口通信,同步,全双工,四线&…...
3.2 Hugging Face Transformers库深度解析:大模型开发的一站式解决方案
Hugging Face Transformers库深度解析:大模型开发的一站式解决方案 一、Transformers库定位:NLP领域的"模型工厂" 1.1 核心定义与技术定位 Hugging Face Transformers 是一个开源的Python库,专为自然语言处理(NLP)、计算机视觉(CV)和语音任务设计。它提供:…...
DeepSeek V3和R1
DeepSeek V3 和 R1 是深度求索(DeepSeek)推出的两款大模型,基于混合专家架构(MoE),但在设计目标、训练方法和应用场景上存在显著差异。以下是两者的详细对比与补充内容: DeepSeek V3和R1 一、模…...
