通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤

news2025/1/3 22:54:02

1、什么是Ceph

Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计理念使其成为各种数据密集型应用的理想选择,包括云平台、数据中心和科研项目等。

2、本实验拓扑以及与生产环境的差异

本实验拓扑及其相应节点的规划如下:
在这里插入图片描述
需要注意的是,本次实验属于实验环境并非生产环境,受限于服务器数量限制,存在将mon、mgr和osd部署在同一台服务器的情况,这样的部署方式本质上是存在服务中断风险的,所以如果是在生产环境中进行规划,应该尽可能的将mon、mgr、osd或者RGW等服务部署在不同的物理节点上。

3、搭建步骤

(1)通过命令“hostnamectl set-hostname <主机名>”分别在debian1、debian2、debian3节点上修改服务器的主机名,如下:
在这里插入图片描述
上述命令在相应的节点执行完成后,注销并重新登录服务器,使得相应的修改生效。

(2)分别在debian1、debian2和debian3节点上执行命令,写入相应的hosts信息,以达到在实验环境下解析域名的目的,命令代码如下:

cat >> /etc/hosts << EOF
192.168.26.144 debian1
192.168.26.151 debian2
192.168.26.152 debian3
EOF

执行完上述命令后,可以通过ping命令测试,确认是否配置正确。

(3)通过“apt install cephadm -y”命令,在debian1节点上安装cephadm,如下:
在这里插入图片描述
(4)通过命令“cephadm bootstrap --mon-ip 192.168.26.144”命令,在debian1节点上进行初始化,如下:

root@debian1:~# cephadm bootstrap --mon-ip 192.168.26.144
Creating directory /etc/ceph for ceph.conf
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit systemd-timesyncd.service is enabled and running
Repeating the final host check...
podman (/usr/bin/podman) version 4.3.1 is present
systemctl is present
lvcreate is present
Unit systemd-timesyncd.service is enabled and running
Host looks OK
Cluster fsid: 492491c0-b0c1-11ef-acca-000c29ea04eb
Verifying IP 192.168.26.144 port 3300 ...
Verifying IP 192.168.26.144 port 6789 ...
Mon IP `192.168.26.144` is in CIDR network `192.168.26.0/24`
Mon IP `192.168.26.144` is in CIDR network `192.168.26.0/24`
Internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Pulling container image quay.io/ceph/ceph:v16...
Ceph version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting mon public_network to 192.168.26.0/24
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr not available, waiting (3/15)...
mgr not available, waiting (4/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host debian1...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
Ceph Dashboard is now available at:

             URL: https://debian1:8443/
            User: admin
        Password: b4xslut1x4

Enabling client.admin keyring and conf on hosts with "admin" label
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:

        sudo /usr/sbin/cephadm shell --fsid 492491c0-b0c1-11ef-acca-000c29ea04eb -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Or, if you are only running a single cluster on this host:

        sudo /usr/sbin/cephadm shell

Please consider enabling telemetry to help improve Ceph:

        ceph telemetry on

For more information see:

        https://docs.ceph.com/en/pacific/mgr/telemetry/

Bootstrap complete.

初始化过程会生成首次登录Ceph图形化面板的IP地址链接、用户名和密码,需要牢记好!
在这里插入图片描述

除此之外,此初始化过程会执行以下操作:

  • 在本地主机上为新集群创建monitor 和 manager daemon守护程序。
  • 为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
  • 将public key的副本写入/etc/ceph/ceph.pub。
  • 将与新群集进行通信所需的最小配置文件保存到/etc/ceph/ceph.conf。
  • 向/etc/ceph/ceph.client.admin.keyring写入client.admin可特权管理secret key的副本。

以上操作完成后,在debian1节点上,会运行以下服务:

  • ceph-mgr ceph管理程序
  • ceph-monitor ceph监视器
  • ceph-crash 崩溃数据收集模块
  • prometheus prometheus监控组件
  • grafana 监控数据展示dashboard
  • alertmanager prometheus告警组件
  • node_exporter prometheus节点数据收集组件

(5)在debian1节点上进入/etc/ceph目录,然后通过以下命令,将cephadm的密钥传送到debian1、debian2和debian3节点上,代码如下:

ssh-copy-id -f -i ceph.pub root@debian1
ssh-copy-id -f -i ceph.pub root@debian2
ssh-copy-id -f -i ceph.pub root@debian3

在这里插入图片描述
(6)在debian1上输入命令“cephadm shell -- ceph orch apply mon --unmanaged”将自动部署mon节点的设置禁用,执行此命令的目的是,不让cephadm在后续添加主机的时候自动向添加的主机部署mon和mgr服务,如下:
在这里插入图片描述
(7)分别在debian2和debian3上,输入命令“apt install podman lvm2 -y”,在相应的节点安装Ceph相关服务所需要podman和lvm2组件,如下:
在这里插入图片描述
(8)在debian1上输入以下命令,在Ceph集群中添加debian1、debian2和debian3节点,如下:

cephadm shell -- ceph orch host add debian1
cephadm shell -- ceph orch host add debian2
cephadm shell -- ceph orch host add debian3

在这里插入图片描述
(9)在debian1上输入命令“cephadm shell -- ceph orch host ls”,查看添加的节点,如下:
在这里插入图片描述
(10)通过命令“cephadm shell -- ceph orch device ls”,查看所有节点的可用设备,需要注意的是,此方式显示的可用设备可能存在错误,例如下图中debian2的节点,显示的是/dev/sda和/dev/sdb两个设备可用,实际上,是/dev/sdb和/dev/sbc可用,因此在添加osd设备时,按照实际的设备名称添加即可,如下:
在这里插入图片描述
(11)在debian1上分别执行以下命令,添加各个节点充当osd的硬盘设备,如下:

ceph orch daemon add osd debian1:/dev/sdb
ceph orch daemon add osd debian1:/dev/sdc
ceph orch daemon add osd debian2:/dev/sdb
ceph orch daemon add osd debian2:/dev/sdc
ceph orch daemon add osd debian3:/dev/sdb
ceph orch daemon add osd debian3:/dev/sdc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(12)为了使得mon服务在本实验中存在冗余结构,在debian1节点上通过命令“cephadm shell -- ceph orch apply mon debian1,debian2,debian3”将mon服务扩展到每个节点,需要注意的是,受网络和服务器性能进行,此扩展过程需要时间,如下:
在这里插入图片描述
(13)在debian1节点上通过命令“cephadm shell -- ceph orch ls”,查看每个节点的mon运行状态,如下:
在这里插入图片描述
(14)为了使得mgr服务在本实验中存在冗余结构,在debian1节点上通过命令“cephadm shell -- ceph orch apply mgr debian1,debian2”将mon服务扩展到每个节点,需要注意的是,受网络和服务器性能进行,此扩展过程需要时间,如下:
在这里插入图片描述
(15)在debian1节点上通过命令“cephadm shell -- ceph -s”查看mgr服务运行情况,如下:
在这里插入图片描述
(16)除上述通过命令行方式操作外,Ceph也提供了图形化操作面板,具体操作方式为在浏览器里面输入“https://IP地址:8443”(本实验为“https://192.168.26.144:8443”),即可登录图形化界面,需要注意的是,首次登录的用户名为admin,密码为Ceph初始化时,分配的密码,通过此密码登录后,将进入首次修改密码界面,如下:
在这里插入图片描述

(17)密码修改完成,并成功登录后,相应的图形化面板界面如下:
在这里插入图片描述

4、以文件系统形式的挂载步骤

Ceph分布式存储的应用接口一般有四种,分别是:应用直接访问的Redos接口、基于S3/Swift的对象存储接口(通常是Amazon和OpenStack使用)、基于librbd的块存储接口和基于libcephfs/posix的文件系统接口。本实验关于Ceph的挂载讲解部分,使用基于libcephfs的文件系统实现。具体步骤如下:
(1)在debian1节点上,通过命令“cephadm shell -- ceph osd pool create cephfs-metadata 32 32”,创建保存元数据的cephfs-metadata存储池,如下:
在这里插入图片描述
(2)在debian1节点上,通过命令“cephadm shell -- ceph osd pool create cephfs-data 64 64”,创建保存数据的cephfs-data存储池,如下:
在这里插入图片描述
(3)在debian1节点上,通过命令“cephadm shell -- ceph orch apply mds mycephfs --placement=”3 debian1 debian2 debian3””,创建一个名为mycephfs的mds,如下:
在这里插入图片描述
(4)在debian1节点上,通过命令“cephadm shell -- ceph fs new mycephfs cephfs-metadata cephfs-data”,创建基于cephfs-metadata/cephfs-data两个存储池,名为mycephfs的cephFS文件系统,如下:
在这里插入图片描述
(5)在debian1节点上,通过命令“cephadm shell -- ceph -s”,查看文件系统mycephfs的部署状态,本截图展示的是文件系统mycephfs部署过程中的状态,如下:
在这里插入图片描述
(6)在debian1节点上,通过命令“cephadm shell -- ceph fs ls”查看和验证刚刚创建的文件系统mycephfs,如下:
在这里插入图片描述
(7)在debian1节点上,通过命令“cephadm shell -- cephfs status mycephfs”查看文件系统mycephfs的运行状态,如下:
在这里插入图片描述
(8)在debian1节点上,通过以下命令,创建和查看用于客户端登录的用户ymh,如下:

cephadm shell -- ceph auth get-or-create client.ymh mon ‘allow r’ mds ‘allow rw’ osd ‘allow rwx pool=cephfs-data’
cephadm shell -- ceph auth get client.ymh

在这里插入图片描述
(9)在debian1节点上通过命令“cephadm shell -- ceph-authtool --create-keyring ceph.client.ymh.keyring”,创建用户ymh的keyring文件,如下:
在这里插入图片描述
(10)在debian1节点上通过命令“cephadm shell -- ceph auth get client.ymh -o ceph.client.ymh.keyring”将用户ymh的信息写入到keyring文件中,如下:
在这里插入图片描述
(11)在debian1节点上通过命令“cephadm shell -- ceph auth print-key client.ymh > ymh.key”将认证相关的加密信息写入到ymh.key文件中,如下:
在这里插入图片描述
(12)在客户端服务器节点(本实验中,客户端服务器安装的是OpenEuler操作系统)上通过命令“yum install ceph-common -y”安装ceph-common,如下:
在这里插入图片描述
(13)在debian1节点上,通过以下命令,将相关ceph配置文件和用户文件移动到同一目录下,并传送到客户端,如下:

mv ceph.client.ymh.keyring ymh.key /etc/ceph
scp /etc/ceph/ceph.conf ceph.client.ymh.keyring ymh.key root@192.168.26.146:/etc/ceph

在这里插入图片描述
(14)在客户端服务器节点上,通过命令“ceph --user ymh -s”,对用户ymh进行权限验证,确认在客户端上通过用户ymh访问服务端是正常的,如下:
在这里插入图片描述
(15)在客户端节点上,通过命令“mount -t ceph 192.168.26.144:6789,192.168.26.151:6789,192.168.26.152:6789:/ /mnt/ceph_test -o name=ymh,secretfile=/etc/ceph/ymh.key”,对搭建完成的Ceph分布式存储集群进行挂载(本实验中,挂载点为/mnt/ceph_test),如下:
在这里插入图片描述
(16)在客户端节点上通过命令“df -Th”,查看挂载情况,如下:
在这里插入图片描述
(17)此时便可以向Ceph集群中进行文件的读写。

5、其他注意事项

5.1、在cephadm下如何删除已经创建的文件系统和存储池

Ceph为了保证数据安全,在默认情况下,通过ceph监控节点(mon节点)是不能对文件系统和存储池做删除操作的,不过可以通过设置临时项放开删除权限,然后就可以进行删除操作了,以上述的mycephfs文件系统以及下层的cephfs-data、cephfs-metadata存储池为例,讲解相应的删除步骤:
(1)在debian1节点上,通过命令“cephadm shell -- ceph fs set mycephfs down true”放开监控节点删除文件系统的权限,如下:
在这里插入图片描述
(2)在debian1节点上,通过命令“cephadm shell -- ceph osd pool get cephfs-metadata nodeleteceph fs rm mycephfs --yes-i-really-mean-it”删除文件系统mycephfs,如下:
在这里插入图片描述
(3)在debian1节点,通过命令“cephadm shell -- ceph osd pool get cephfs-metadata nodelete”确认nodelete参数为false,如果不是false,则需要通过命令“cephadm shell -- ceph osd pool set cephfs-metadata nodelete false”修改为false,如下:
在这里插入图片描述
在这里插入图片描述
(4)在debian1节点上,通过命令“cephadm shell -- ceph tell mon.* injectargs --mon-allow-pool-delete=true”将mon-allow-pool-delete参数修改为true,以达到放开监控节点删除存储池权限之目的,如下:
在这里插入图片描述
(5)在debian1节点上,通过命令“cephadm shell -- ceph osd pool rm cephfs-metadata cephfs-metadata --yes-i-really-really-mean-it”删除存储池cephfs-metadata,如下:
在这里插入图片描述
(6)在debian1节点上,通过命令“cephadm shell -- ceph osd pool rm cephfs-data cephfs-data --yes-i-really-really-mean-it”删除存储池cephfs-data,如下:
在这里插入图片描述

5.2、Ceph和GlasterFS的区别

Ceph和GlasterFS都是应用非常广泛的开源分布式存储系统,从部署难度上来说GlasterFS部署更加快速容易,可以通过简单的几个配置便可以达到分布式存储的目的,并且对于操作系统基础环境的要求很低,而对比之下,Ceph的部署难度则比GlasterFS高不少。然而,Ceph支持的特性比GlasterFS多很多,例如,GlasterFS只支持文件系统存储,而Ceph除了支持CephFS这一文件系统存储之外,还支持块存储和对象存储,并且每个osd硬盘上都通过文件副本和纠删码等方式进行了加密存储,因此,如果单独把一个osd设备拿出来,其中的文件是不能直接进行使用的,而GlasterFS的每个节点,文件都是直接放在存储节点上,因此这些文件在存储节点单拿出来时,是可以直接使用的。
另外在Amazon和OpenStack等云平台架构中,Ceph是其重要的组成部分,这一点相比于GlasterFS有着无可比拟的优势。

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

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

相关文章

【Rust自学】8.4. String类型 Pt.2:字节、标量值、字形簇以及字符串的各类操作

8.4.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构&#xff0c;这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的&#xff0c;这也意味着这些集合的数据大小无需在编…

svn分支相关操作(小乌龟操作版)

在开发工作中进行分支开发&#xff0c;涉及新建分支&#xff0c;分支切换&#xff0c;合并分支等 新建远程分支 右键选择branch/tagert按钮 命名分支的路径名称 点击确定后远程分支就会生成一个当时命名的文件夹&#xff08;开发分支&#xff09; 分支切换 一般在开发阶段&a…

24年收尾之作------动态规划<六> 子序列问题(含对应LeetcodeOJ题)

目录 引例 经典LeetCode OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 引例 OJ传送门 LeetCode<300>最长递增子序列 画图分析: 使用动态规划解决 1.状态表示 dp[i]表示以i位置元素为结尾的子序列中&#xff0c;最长递增子序列的长度 2.…

蓝牙|软件 Qualcomm S7 Sound Platform开发系列之初级入门指南

本文适用范围 ADK24.2~ 问题/功能描述 S7开发环境搭建与编译介绍 实现方案 本文介绍适用于windows平台Application部分,audio ss的说明会在下一篇文章在做说明,Linux平台如果不进行AI算法的开发,个人认知是没有必要配置,若是做服务器倒是不错的选择.因为编译完成后烧录调试还…

Redis - 4 ( 9000 字 Redis 入门级教程 )

一&#xff1a; Zset 有序集合 1.1 常用命令 有序集合在 Redis 数据结构中相较于字符串、列表、哈希和集合稍显陌生。它继承了集合中元素不允许重复的特点&#xff0c;但与集合不同的是&#xff0c;有序集合的每个元素都关联一个唯一的浮点分数&#xff08;score&#xff09;…

ubuntu 使用samba与windows共享文件[注意权限配置]

在Ubuntu上使用Samba服务与Windows系统共享文件&#xff0c;需要正确配置Samba服务以及相应的权限。以下是详细的步骤&#xff1a; 安装Samba 首先&#xff0c;确保你的Ubuntu系统上安装了Samba服务。 sudo apt update sudo apt install samba配置Samba 安装完成后&#xff0c…

打印进度条

文章目录 1.Python语言实现(1)黑白色(2)彩色&#xff1a;蓝色 2.C语言实现(1)黑白颜色(2)彩色版&#xff1a;红绿色 1.Python语言实现 (1)黑白色 import sys import timedef progress_bar(percentage, width50):"""打印进度条:param percentage: 当前进度百分比…

深度解析 LDA 与聚类结合的文本主题分析实战

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:《Python之文本分析》🍎本文内容:深度解析 LDA 与聚类结合的文本主题分析实战🌸作者“三要”格言:要坚强、要努力、要学习 目录 引言 技术框架…

点跟踪基准最早的论文学习解读:TAP-Vid: A Benchmark for Tracking Any Point in a Video—前置基础

TAP-Vid: A Benchmark for Tracking Any Point in a Video— TAP-Vid&#xff1a;跟踪视频中任意点的基准、 学习这一篇文章的本来的目的是为了学习一下TAP-NET便于理解后面用到的TAPIR方法的使用。 文章目录 TAP-Vid: A Benchmark for Tracking Any Point in a Video— TAP-V…

C进阶-字符串与内存函数介绍(另加2道典型面试题)

满意的话&#xff0c;记得一键三连哦&#xff01; 我们先看2道面试题 第一道&#xff1a; 我们画图理解&#xff1a; pa&#xff0c;先使用再&#xff0c;pa开始指向a【0】&#xff0c;之后pa向下移动一位&#xff0c;再解引用&#xff0c;指向a【1】&#xff0c;a【1】又指向…

PH47代码框架 24241231 重要更新

仪式感一下&#xff1a;2024年最后一天&#xff0c;发布 PH47 代码框架的一次重要更新。当然这并不是有意的&#xff0c;而是直到现在才把更新的所有工作全部做完&#xff08;希望确实如此&#xff09;。 本次更新要点&#xff1a; 1、加入多IMU支持。本次更新正式加入对 MPU65…

idea报错:There is not enough memory to perform the requested operation.

文章目录 一、问题描述二、先解决三、后原因&#xff08;了解&#xff09; 一、问题描述 就是在使用 IDEA 写代码时&#xff0c;IDEA 可能会弹一个窗&#xff0c;大概提示你目前使用的 IDEA 内存不足&#xff0c;其实就是提醒你 JVM 的内存不够了&#xff0c;需要重新分配。弹…

Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p38708 分析师&#xff1a;Yuling Fang 信息时代的来临使得企业营销焦点从产品中心转向客户中心&#xff0c;客户关系管理成为企业的核心问题&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 客户关系管理的关键是客…

Linux umami网站统计工具自定义API开发

Linux umami网站统计工具自定义API开发 一、src/queries/analytics/下添加调用sql查询文件&#xff1a;二、src/queries/index.js文件中增加导出模块内容&#xff1a;三、src/pages/api/下根据目录添加接口方法文件&#xff1a;四、构建项目&#xff0c;启动。1、到umami目录&a…

基于SpringBoot的实验室信息管理系统【源码+文档+部署讲解】

系统介绍 视频演示 基于SpringBootVue实现的实验室信息管理系统采用前后端分离的架构方式&#xff0c;系统分为管理员、老师、用户三种角色&#xff0c;实现了用户管理、设备管理、实验室查询、公告、课程、实验室耗材管理、我的等功能 技术选型 开发工具&#xff1a;idea2…

【openGauss】正则表达式次数符号“{}“在ORACLE和openGauss中的差异

一、前言 正则作为一种常用的字符串处理方式&#xff0c;在各种开发语言&#xff0c;甚至数据库中&#xff0c;都有自带的正则函数。但是正则函数有很多标准&#xff0c;不同标准对正则表达式的解析方式不一样&#xff0c;本次在迁移一个ORACLE数据库到openGauss时发现了一个关…

SSM-Spring-IOC/DI对应的配置开发

目录 一、IOC 控制反转 1.什么是控制反转呢 2. Spring和IOC之间的关系是什么呢? 3.IOC容器的作用以及内部存放的是什么? 4.当IOC容器中创建好service和dao对象后&#xff0c;程序能正确执行么? 5.Spring 容器管理什么内容&#xff1f; 6.如何将需要管理的对象交给 …

docker中使用nginx

宿主机和docker中nginx做映射 宿主机中nginx 映射目录 /root/myDockerData/devnginx 在容器中相关位置分别是&#xff1a; 配置文件位置&#xff1a;/etc/nginx/ 日志位置&#xff1a;/var/log/nginx/ 项目位置&#xff1a;/usr/share/nginx/html 如下配置启动命令行&#x…

Rocky Linux下安装meld

背景介绍&#xff1a; meld是一款Linux系统下的用于 文件夹和文件的比对软件&#xff0c;非常常用&#xff1b; 故障现象&#xff1a; 输入安装命令后&#xff0c;sudo yum install meld&#xff0c;报错。 12-31 22:12:17 ~]$ sudo yum install meld Last metadata expirat…

Python中PDF转Word的技术

Python PDF转Word技术概述 在日常办公和数据处理中&#xff0c;经常需要将PDF文档转换为Word文档&#xff0c;以便进行编辑、修改或格式调整。Python作为一种强大的编程语言&#xff0c;提供了多种库和工具来实现这一功能。以下是对Python中PDF转Word技术的详细介绍。 一、技…