当前位置:首页 » 文件管理 » ceph上传文件

ceph上传文件

发布时间: 2023-04-18 03:41:40

㈠ Redis集群部署 、 Ceph分布式文件系统集群

按照如下配置准备云主机

1、防火墙相关配置

参考前面知识点完成禁用 selinux,禁用 swap,卸载 firewalld-*

上传 kubernetes.zip 到 jump-server 主机

2、配置yum仓念闹库(跳板机)

3、安装软件包(master)

4、镜凳高宽像导入私有仓库

5、Tab键设置

6、安装IPVS代理软件包

7、配置主机名

8、使用kubeadm部署
应答文件在 js(1.252) 主机的 project3/kubernetes/v1.17.6/config 目录下

9、验证安装结果

1、获取token

2、node安装,在 jump-server 主机,使用 ansible 执枣亮行,node节点的安装

3、master主机验证安装

1、上传镜像到私有仓库

2、修改配置文件并安装

3、验证结果

㈡ ceph-rgw之indexless

很多人对ceph,rgw的性能问题不太满意,主要是index pool(默认是存在一个shard里面,当一个shard越来越大时,一种极端情况是把相关的osd占满)的瓶颈,当然网上也有人提到了产生一些问题,主要问题如下:

对index pool进行scrub或deep-scrub的时候,如果shard对应的Object过大,会极大消耗底层存储设备性能,造成io请求超时。

底层deep-scrub的时候耗时过长,会出现request blocked,导致大量http请求超时而出现50x错误,从而影响到整个RGW服务的可用性。

当坏盘或者osd故障需要恢复数据的时候,恢复一个大体积的shard文件将耗尽存储节点性能,甚至可能因为OSD响应超时而导致整个集群出现雪崩。

考虑一个场景

如果你向含羡ceph 上传对象时吵仔,同时也在本地或别的地方记录了元数据信息,你就可以避免使用index pool,同时也分担了ceph存储的压力。

使用indexless将会是谈碰拍一个不错的选择。

网址: http://www.ksingh.co.in/blog/2017/01/30/ceph-indexless-bucket-part-2/

这个网址写的已经很全了。我就不费太多口舌。

验证是否设置好indexless,可以通过radosgw-admin 去查

例如:radosgw-admin bucket stats --bucket=bucket3

有一个index_type,normal是具有索引的对象存储,别的indexless的。

另外一种是采取分片+快池的方式详情请查看 https://cloud.tencent.com/developer/article/1032858

1.设置完indexless 不会对之前的buket的类型有影响

2.通过indexless 设置的bucket 如果里面有数据,不会给你警告,会给你直接删除bucket,object会处于游离态

3.普通 bucket 可以通过上述命令查看数量,但是indexless 看不了,usage信息不存在。

4.删除bucket不会删除里面的对象 ,但是删除方式现在只能管理员操作rgw pool来删除,需要结合一定pool 文件命名格式去删,查看rgw object bucket 存储位置以及在pool里面对象名称命名方式 (后续文档介绍),当然通过你得知道下bucket_id。

5.设置生命周期,未到时间点人为删除bucket ,删除bucket ,内部游离的object 不会随生命周期而操作。

㈢ ceph手动部署

#############

#############

######################

######################

为此集群创建密钥环、并生成监视器密钥

生成管理员密钥环,生成 client.admin 用户创建管理集群的密钥并赋予访问权限

把 client.admin 密钥加入 ceph.mon.keyring

生成Monitor map
用规划拿或好的主机名、对应 IP 地址、和 FSID 生成一个监视器图,并保存为消尘伍
/etc/ceph/monmap

在监视器主机上分别创建数据目录。

初始化Monitor的文件系统

检查Ceph 配置文件

建一个空文件 done ,表示监视器已创建、可以启动了

启动Monitor:

#############

#############

简单版ceph-disk:

详细:

创建OSD

创建OSD目录

改权限

格式化OSD磁盘

挂载OSD磁盘

初始化OSD

如果报错: WARNING: max attr value size (1024) is smaller than osd_max_object_name_len (2048). Your backend filesystem appears to not support attrs large enough to handle the configured max rados name size. You may get unexpected ENAMETOOLONG errors on rados operations or buggy behavior
在ceph.conf加:

注册OSD keyring

把此节点加入 CRUSH 图。

把此 Ceph 节点放入 default 根下。

把此 OSD 加入 CRUSH 图之后,它就能接收数据了。你也可以反编译 CRUSH 图、把此 OSD 加入设备列表、对应主机作为桶加入(如果它还不在 CRUSH 图里)、然后此设备作为主机的一个条目、分配权重、重新编译、注入集群

要让守护进程开机自启,必须创建一个空文件

启动osd

##################

##################
3、创建keyring

4、修改文件权限

5、生成ceph-radosgw服务对应的用户和key

6、为用户添加访问权限

7、导入keyring到集群中

8、配置ceph.conf

9、创建日志目录并修改权限

10、启动rgw

11、查看端口监听状态

12、设置rgw开机自动启动

13、查兄核看7480的数据

㈣ Ceph 文件系统部署

Ceph文件存储部署与使用

1.安装client操作系统

(1)虚拟机基础设置

在VMware中创建一台虚拟机,操作系统为CentOS-7-x86_64-DVD-1908,硬盘大小为20G,并将虚拟机的名字设为client,如图7-10所示。

           老滚       图7-10 虚拟机配置

(2)虚拟机网络设置

为虚拟机配置主机名:client。设置网络为NAT模式,配置IP地址:192.168.100.100,子网掩码为255.255.255.0,默认网关为192.168.100.2,DNS服务器为192.168.100.2,使虚拟机可以访问Internet。

2.配置Ceph文件系统

(1)部署MDS

在ceph-1节点中,将MDS部署到ceph-1节点

[root@ceph-1 ~]# cd /opt/osd

[root@ceph-1 osd]# ceph-deploy mdscreate ceph-1

(2)创建数据和存储池

在ceph-1节点为Ceph文件系统侍裤余创建数据和元数据存储池。

[root@ceph-1 osd]# ceph osd poolcreate cephfs_data 64

pool 'cephfs_data' created

[root@ceph-1 osd]# ceph osd poolcreate cephfs_metadata 64

pool 'cephfs_metadata' created

(3)创纯举建Ceph文件系统

在ceph-1节点创建ceph的文件系统cephfs。

[root@ceph-1 osd]# ceph fs newcephfs cephfs_metadata cephfs_data

new fs with metadata pool 2 anddata pool 1

(4)验证MDS和CephFS的状态

[root@ceph-1 osd]# ceph mds stat

cephfs:1 {0=ceph-1=up:active}

[root@ceph-1 osd]# ceph osd pool ls

rbd

.rgw.root

default.rgw.control

default.rgw.meta

default.rgw.log

.rgw

.rgw.control

.rgw.gc

.rgw.buckets

.rgw.buckets.index

.rgw.buckets.extra

.log

.intent-log

.usage

.users

.users.email

.users.swift

.users.uid

default.rgw.buckets.index

default.rgw.buckets.data

cephfs_data

cephfs_metadata

[root@ceph-1 osd]# ceph fs ls

name: cephfs, metadata pool:cephfs_metadata, data pools: [cephfs_data ]

(5)创建用户

在Ceph集群中创建用户client.cephfs,允许这个用户可以访问CephFS池。

[root@ceph-1 osd]# ceph authget-or-create client.cephfs mon 'allow r' mds 'allow r,allow rw path=/' osd'allow rw pool=cephfs_data' -o /etc/ceph/client.cephfs.keyring

[root@ceph-1 osd]# ceph-authtool -p-n client.cephfs /etc/ceph/client.cephfs.keyring > /etc/ceph/client.cephfs

[root@ceph-1 osd]# cat/etc/ceph/client.cephfs

AQA18Nldot+5DBAAQc4R6zbX+V6jBRINE4lJRA==

3、访问CephFS

(1)创建挂载点

[root@client ~]# mkdir/media/cephfs

(2)文件系统挂载

使用mount命令挂载CephFS文件系统

[root@client ~]# mount -t ceph192.168.100.101:6789:/ /media/cephfs -o name=cephfs,secret=AQA18Nldot+5DBAAQc4R6zbX+V6jBRINE4lJRA==

(3)查看挂载并解除挂载

[root@client ~]# mount | grep/media/cephfs

192.168.100.101:6789:/ on/media/cephfs type ceph(rw,relatime,name=cephfs,secret=,acl,wsize=16777216)

[root@client ~]# umount/media/cephfs

(4)通过文件挂载

为了更安全的挂载CephFS,防止在命令行历史中泄露密码,应该把密码存储在一个单独的文本文件中,然后把这个文件作为挂载命令的参数值。为了实现这个功能,需要在client节点安装ceph。

首先编辑ceph-1节点的hosts。

[root@ceph-1 osd]# vi /etc/hosts

192.168.100.100 client

192.168.100.101 ceph-1

192.168.100.102 ceph-2

192.168.100.103 ceph-3

(5)复制公钥

在ceph-1节点,将公钥复制到client节点。

[root@ceph-1 osd]# ssh--idroot@client

/usr/bin/ssh--id: INFO: Sourceof key(s) to be installed: "/root/.ssh/id_rsa.pub"

The authenticity of host 'client(192.168.100.100)' can't be established.

ECDSA key fingerprint isSHA256:.

ECDSA key fingerprint isMD5:85:d3:f8:41:59:c4:a4:b4:c3:e9:71:2c:3b:45:0b:29.

Are you sure you want to continueconnecting (yes/no)? yes

/usr/bin/ssh--id: INFO:attempting to log in with the new key(s), to filter out any that are alreadyinstalled

/usr/bin/ssh--id: INFO: 1key(s) remain to be installed -- if you are prompted now it is to install thenew keys

root@client's password:

Number of key(s) added: 1

Now try logging into the machine,with:   "ssh 'root@client'"

and check to make sure that onlythe key(s) you wanted were added.

(6)编辑yum文件

在client节点编辑YUM软件源配置文件

[root@client ~]# mkdir /opt/bak

[root@client ~]# cd/etc/yum.repos.d

[root@client yum.repos.d]# mv */opt/bak

将CentOS7-Base-163.repo通过SFTP复制到client节点的/etc/yum.repos.d目录。

[root@client yum.repos.d]# ls

CentOS7-Base-163.repo

[root@client yum.repos.d]# viceph.repo

[Ceph]

name=Ceph packages for $basearch

baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/$basearch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

priority=1

[Ceph-noarch]

name=Ceph noarch packages

baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

priority=1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

priority=1

[root@client yum.repos.d]# yumclean all

[root@client yum.repos.d]# yummakecache

(7)安装ceph

在ceph-1节点,通过ceph-deploy将ceph安装到client节点。

[root@ceph-1 osd]# ceph-deployinstall --release=nautilus client

(8)生成密钥

在client节点生成密钥文件

[root@client ~]# echo AQA18Nldot+5DBAAQc4R6zbX+V6jBRINE4lJRA==> /etc/ceph/cephfskey

(9)使用secretfile参数挂载

[root@client ~]# mount -t ceph 192.168.100.101:6789://media/cephfs -o name=cephfs,secretfile=/etc/ceph/cephfskey

[root@client ~]# mount | grep/media/cephfs

192.168.100.101:6789:/ on/media/cephfs type ceph (rw,relatime,name=cephfs,secret=,acl,wsize=16777216)

[root@client ~]# umount/media/cephfs

(10)开机自动挂载

将参数按要求写入系统文件实现开机时自动挂载CephFS文件系统

[root@client ~]# vi /etc/fstab

192.168.100.101:6789://media/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 02

[root@client ~]# mount -a

[root@client ~]# mount | grep /media/cephfs

192.168.100.101:6789:/ on/media/cephfs type ceph(rw,noatime,name=cephfs,secret=,acl,wsize=16777216)

㈤ Centos7使用s3fs挂载Ceph rgw bucket实测

s3fs允许Linux和macOS通过FUSE挂载ceph rgw bucket,s3fs保留文件原来的对象格式。本文简要测试在Centos下挂载ceph rgw bucket。

ceph版本:Nautilus 14.2.8
操作系统信息:Centos7

命令:

ACCESS_KEY_ID:测试bucket用户的access_key
SECRET_ACCESS_KEY:测试bucket用户的secret_key
例如:用户test的access_key为123456,secret_key为654321,则:

命令:

<bucketname>:替换实践需要挂载的桶名
<mountpoint>:替换挂载点
例如:将test用户的testbucket挂载到/root/mnt_s3fs下,则:

查看挂载是否成功:

测试写入:

兼容POSIX的较大子集,包括读/写文件,目录,符号链接,模式,uid / gid和扩展属性
与Amazon S3和其他基于S3的对象存储兼容
允许随机写入和追加
通过分段上传大文件
通过服务器端副本重命名
可选的服务器端加密
通过MD5哈希保证数据完整性
内存中缓存元数据
用户指定的区域,包括Amazon GovCloud
可通过v2或v4签名进行身份验证

通常,S3无法提供与本地文拆磨件系统相同的性能或语义。进一步来说:
随机写入或追加文件需要重写整个对象,使用分段上传副本进行了优化
元数据操作(如列出目录)由于网络延迟而导致性能不佳
非AWS提供商可能最终具有一致性,因此读取可以临时生成陈旧数据(AWS自2020年12月以旅段斗来提供写入后读取一致性)
不支持文件或目录的原子重命名
挂载同一存储桶的多个客户端之间没有协调
不支持硬链接
inotify仅检测本地燃铅修改,而不检测其他客户端或工具的外部修改

详情见:
https://github.com/s3fs-fuse/s3fs-fuse

㈥ 客户端怎么使用ceph的块设备

客户端怎么使用ceph的块设备

rbd create yjk01 --size 1024 --pool vms--image-format 2
rbd info yjk01 --pool vms
rbd map yjk01 --pool vms
rbd showmapped
mkfs.ext4 /dev/rbd0
mount /dev/rbd0 /mnt

在ceph中怎么去通过qemu去使用块设备

假定你在看下面的OpenStack同Ceph的集成指南之前,已经架设成功并让Ceph集群(Bobtail->)和OpenStack(Folsom->)运行了起来。Ceph通过利用libvirt和OpenStack一起使用块设备,其中的libvirt配置了QEMU同librbd的接口。OpenStack中有两个部分同.

ceph 创建的块设备不能给mysql使用吗

通过 OS Remendations 判断你的客户端的OS是否满足基本的要求.
在管理节点使用 ceph-deploy 在 ceph-client 节点上安装ceph,假设该节点叫做cephclient.
ceph-deploy install cephclient
在管理节点使用 ceph-deploy 拷贝ceph的配置文件以及 ceph.client.admin.keyring 到 cephclient上
ceph-deploy admin cephclient

ADSL客户端设备

根据你描述的现象有两种情况,一是MODEM的问题。二是线路问题。
MODEM老化,转发速率不够,当流量突然增大时,会产生掉线,但过一段时间MODEM会自动调整流量来适应。就会产生网速慢。
线路绝缘不好或电缆进水也会产生此类故障。
先更换MODEM(最好先借一个测试),如果排除MODEM的问题,就直接打运营商电话检查线路。

第二个灯一般标识为LINK,也就是信号的意思,表示你接收ADSL信号的稳定性,一直亮着就表示接收稳定`,出现闪的情况多数是ADSL线路质量不好,信号不稳定,最好请客服人员上门测试一下信号强弱

SkyDrive客户端怎么使用

你是什么系统,下载的是SkyDrive什么版本,我安装不会提示要同步哪个库啊。

ADSL客户端设备坏了怎么办?

坏了只有换了。

shadowsocks ios客户端怎么使用

目前腾讯出品的微信只有手机客户端可以使用,如果必须在电脑上运行,那么,我们必须先有一台可以上网的PC,然后在PC上安装安卓平台的虚拟机。
目前比较好的安卓平台虚拟机,推荐2款,一个是官方的安卓SDK里面的AVD模拟器,这个需要安装java运行环境,然后安装sdk工具,相对于比较麻烦,此工具适合搞开发的朋友用。
所以在这里推荐一款适合广大网友的一款好用的安卓虚拟机——bluestacks。
上面的是完整版,直接安装即可使用。好了,我们还需要一个非常重要的东西,那就是微信安卓手机客户端。
开始吧,首先安装好bluestacks这款工具,安装方法就是下一步到底就贺缺行,建议把360关闭,因为360会不停的误报,如果担心提供的软件有毒,可以去:bluestacks./官网下载安装使用。
待bluestacks虚拟机安装好后首迟,直接双击运行安卓手机客户端就可以安装了,但是有些网友的PC上装有类似91的apk安装助手,可能双击的时候不会直接安装到虚拟机,如果是这样,咱们可以反键点击安卓手机客户端的apk包,然后选择打开方式->bluestacks apk handler,如下图。
之后可以看到正在安装的进度条了,等待安装完成,bluestacks在右下角的小图标会提示,咱们运行打开bluestacks,看看它的桌面,嘿嘿,有了一个微信的图标了。
第一排最后一个就是微信
好啦,点它运禅芹辩行吧。
接着就登录吧,输入你的QQ号或者手机号或者邮箱。
登录成功~!和你的好友聊天吧~~~,不要流量哟。
但是在这里告诉大家一个坏消息,以为PC上没有可以供你摇动的设备,以及GPS定位系统,所以你无法使用摇一摇找朋友和查找附近的朋友,哎。但是漂流瓶还是可以玩的。
如果觉得好,把qq微信电脑客户端如何使用方法分享给你的朋友吧!

git windows 客户端怎么使用

使用windows下的git的步骤如下:
1、下载Git,从官方网站下载Git并安装,安装以后在windows 目录点右键快捷菜单会有Git相应的功能
2、进入Git Gui,配置git的用户名和邮箱
3、初始化一个Git代码库,创建一个文件夹并进入,点击右键"Git init here",然后会创建一个代码仓库
4、添加文件,任何文件都可以,git会记录文件操作的状态。 进入"Git Gui"
5、选择未缓存的改动列表,添加注释并提交改动
6、把提交的改动上传到服务器,比如github。

客户端怎么开wifi使用

1、天翼宽带(WIFI):点击“连接”按钮,认证通过后完成网络接入。如已插入带UIM卡的天翼宽带上网卡,则无需输入WIFI帐号、密码即可接入(即统一认证功能);如之前未设置天翼宽带(WIFI)帐号,且未插入带UIM卡的天翼宽带上网卡,请根据向导输入天翼宽带(WIFI)接入帐号、密码并选择开户地,点击“确定”。
2、天翼宽带(3G):使用天翼宽带上网卡,通过天翼宽带客户端自动搜索天翼宽带(3G)网络,点击“连接”按钮,认证通过后即可成功连接互联网。
3、天翼宽带(1X):使用天翼宽带上网卡,通过天翼宽带客户端自动搜索天翼宽带(1X)网络,点击“连接”按钮,认证通过后即可成功连接互联网。
4、自动连接:点击“自动连接”按钮,按照用户已设置的网络顺序进行拨号,接入可用网络。默认连接顺序为天翼宽带(WIFI)、天翼宽带(3G)、天翼宽带(1X)。
5、有线连接:输入中国电信有线宽带帐号和密码,并选择正确的开户地,进行有线宽带网络的连接。

㈦ ceph(第二步) 三节点部署(ceph-deploy)

使用 ceph-deploy 工具部署 ceph 存储集群。

使用虚拟机构建三节点 ceph 存储集群。

全篇使用 root 权限。

虚拟化软件:vmware
虚拟机操作系统:centos 7.6
每台虚拟机配置:2G内存,1块系统盘(50G),2块ceph将使用的硬盘(每块20G)
虚拟机网络:一条虚拟机间互通,并且可以上网的网络即可(NAT)。
总共三台虚拟机:ceph01、ceph02、ceph03

ceph 版本:nautilus
ceph-deploy 版本:2.0.1

当前时间: 2019.10

部署过程整体描述:
首先选出一台机器作为部族神署节点,部署节点负责为机器部署 ceph 软件。这里直接选择 ceph01 作为部署节点。

我这里 ceph01、ceph02、ceph03 对应的地址分别为:
10.10.10.31、10.10.10.32、10.10.10.33

所有机器均关闭掉防火墙。

所有机器均配置 yum 国内加速源:

所有机器均配置 pip 国内加速源:

这里配置的是部署节点到其它机器间的主机解析。

vim /etc/hosts 添加如下内容:

这里配置的是部署节点到其它机器间的免密登录。

注意:以下每行命令执行后都需要输入密码,不能直接全部复制粘贴。

命令参考如下,尽量每个节点都测试一兆拿亏下

所有机器执行如下命令:

注意!当前步骤十分重要。

在 ceph 中读取了 hostname 命令产生的结果。
因此在每个节点上均需修改自己的 hostname。命令参考:

进入到 ceph01 节点上:

按照此方法修改其它节点的 hostname。

主要分两步:
第一步,安装 ceph-deploy
第二步,使用 ceph-deploy 安装 ceph 组件。

该步骤所有命令均在部署节点上执行。

安装 ceph-deploy:

该步骤所有命令均在部署节点上执行。

vim /opt/ceph-deploy/ceph.conf
在 global 中增加:

当前命令执行以后,可以在当前目录下发现许多的 keyring 文件,这是连接其它节点的凭据。以后的 ceph-deploy 命令均在当前目录下执行才可正常使用。

将当前临时文件夹下的配置文件同步到所有节点的 /etc/ceph/ 下

我这个环境有三台虚拟机,每台虚拟机敏橘上有额外2块硬盘用于 ceph 集群,它们是 sdb、sdc。这个要根据自己的环境找到正确的硬盘。

命令参考如下:

其中 /dev/sdb ceph01 ,表示 ceph01 节点上的 /dev/sdb 硬盘。

命令执行完以后,基础的环境就算搭建完成了。可以执行如下命令查看集群的状态:
ceph 健康: ceph health
ceph 集群详细状态:ceph -s
ceph 集群 osd 状态:ceph osd tree

至此,该集群还处于一个基础的状态,并不能正常使用。

接下来需要配置 ceph pool 相关信息,以及安装配置 rgw 从而使用对象存储功能。

vim /opt/ceph-deploy/ceph.conf
在 global 中增加如下:

其中 pg num 需要计算得出,pgp num 与 pg num 保持一致。

粗略的计算方法:
( osd 数量 * 100 ) / 池副本数。

同步配置文件:

vim /opt/ceph-deploy/ceph.conf
增加如下内容:

整体配置如下:

安装 rgw:

至此,我们可以去创建一个 pool,并上传文件测试集群了。

这个时候执行 ceph -s
可以看到集群报了 warn 信息,如下:

这不是因为我们哪里配置有问题,这是 ceph 的某个告警配置。当某个 osd 的 pg 小于 30 时会发出告警。现在可以忽略这个问题。ceph 提供这个配置,可能是担心集群在未来使用中出现 pg 分布不均匀的情况。
参考:
https://docs.ceph.com/docs/master/rados/configuration/pool-pg-config-ref/

查看池列表:ceph osd lspools

ceph 默认的池已经创建一些 pg。为了解决前面的告警,我们需要满足每个 osd 都有超过30个 pg,因此创建一个具有80个 pg 的池。

(此时用 ceph -s 可以看到集群状态又是 HEALTH_OK 了)

命令参考:

可以看到文件已经上传上去了,并且叫 test-object-1

rados get test-object-1 /tmp/test-object-1 -p mytest

可以看到两个文件的内容是一样的,到此,基本的部署及使用均正常了。

在 ceph 中,hostname 是一个非常重要的属性。

hostname 命令只可以临时改变当前主机的主机名,并不会永久生效。

目前已知两种方式会永久影响主机名。

第一种情况,很直观,不再多做介绍。

第二种情况时:

这样的配置,会让通过 10.10.10.31 地址访问进来的连接所识别到的主机名改为 ceph01。

在本环境中,不同的 ceph 节点之间通过 10.10.10.0/24 地址进行通信,所以只需要为该地址配置主机名。

在 ceph 中,如果主机名混乱,会发生什么?
ceph osd tree 这个命令可以让你看到主机名混乱带来的后果:

如果糟糕的事情已经发生了,我们只需要修改好主机名,然后重启机器,一切都会恢复正常:

第一种方式的优先级高于第二种。
因此只需要更改 /etc/hostname 即可。文件内容参考如下:

㈧ 大文件上传后端多个pod

后台使用springboot实现,主要使用一个数组来判断文件是否完成上传,当每次上传一个信的文件时根据uid在缓存中新建或者将本次的文件块信息记录至缓存中

@Getter
@Setter
@Builder
public static class FileInfo {
// 路径
private String filePath;
// 文件名
private String fileName;
// uid
private String uid;
private Integer index;
private Integer chunksLength;
private Boolean uploaded;
}

// key为文件的uid,value为Boolean[] 表示每个文件块是否上传完成
private static Map<String, FileInfo[]> fileUploadedCache = new HashMap<>();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
当根据数组判断所有文件块都上传完成时,清除缓存中uid对应的数组,并合并文件,清除子文件块。

demo

在这里插入图片描述

上传文件块大小限制问题

在测试的时候发现当文件块的大弊团小大于10M时,报org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException异常

the request was rejected because its size (10486377) exceeds the configured maximum (10485760)
at org.apache.tomcat.util.http.fileupload.impl.FileItemIteratorImpl.init(FileItemIteratorImpl.java:150) ~[tomcat-embed-core-9.0.34.jar:9.0.34]
at org.apache.tomcat.util.http.fileupload.impl.FileItemIteratorImpl.getMultiPartStream(FileItemIteratorImpl.java:194) ~[tomcat-embed-core-9.0.34.jar:9.0.34]
at org.apache.tomcat.util.http.fileupload.impl.FileItemIteratorImpl.findNextItem(FileItemIteratorImpl.java:213) ~[tomcat-embed-core-9.0.34.jar:9.0.34]
1
2
3
4
1
2
3
4
找了下租搏橘springboot的文档中关于自动配置的类,找到了MultipartAutoConfiguration,文档地址

https://docs.spring.io/spring-boot/docs/2.2.7.RELEASE/reference/html/appendix-auto-configuration-classes.html#auto-configuration-classes
MultipartAutoConfiguration类银扒的具体内容如下:

/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.boot.autoconfigure.web.servlet;

import javax.servlet.MultipartConfigElement;
import javax.servlet.Servlet;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.context.;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.multipart.support.;
import org.springframework.web.servlet.DispatcherServlet;

/**
* {@link EnableAutoConfiguration Auto-configuration} for multi-part uploads. Adds a
* {@link } if none is present, and adds a
* {@link javax.servlet.MultipartConfigElement multipartConfigElement} if none is
* otherwise defined. The {@link } will associate the
* {@link MultipartConfigElement} bean to any {@link Servlet} beans.
* <p>
* The {@link javax.servlet.MultipartConfigElement} is a Servlet API that's used to
* configure how the server handles file uploads.
*
* @author Greg Turnquist
* @author Josh Long
* @author Toshiaki Maki
* @since 2.0.0
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ Servlet.class, .class, MultipartConfigElement.class })
@ConditionalOnProperty(prefix = "spring.servlet.multipart", name = "enabled", matchIfMissing = true)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {

private final MultipartProperties multipartProperties;

public MultipartAutoConfiguration(MultipartProperties multipartProperties) {
this.multipartProperties = multipartProperties;
}

@Bean
@ConditionalOnMissingBean({ MultipartConfigElement.class, CommonsMultipartResolver.class })
public MultipartConfigElement multipartConfigElement() {
return this.multipartProperties.createMultipartConfig();
}

@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
@ConditionalOnMissingBean(MultipartResolver.class)
public multipartResolver() {
multipartResolver = new ();
multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
return multipartResolver;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
重点关注下面这个配置方法

@Bean
@ConditionalOnMissingBean({ MultipartConfigElement.class, CommonsMultipartResolver.class })
public MultipartConfigElement multipartConfigElement() {
return this.multipartProperties.createMultipartConfig();
}
1
2
3
4
5
1
2
3
4
5
这里的this.multipartProperties.createMultipartConfig()创建了springboot默认的文件上传的配置参数,跳转到createMultipartConfig方法里可以看到

public MultipartConfigElement createMultipartConfig() {
MultipartConfigFactory factory = new MultipartConfigFactory();
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(this.fileSizeThreshold).to(factory::setFileSizeThreshold);
map.from(this.location).whenHasText().to(factory::setLocation);
map.from(this.maxRequestSize).to(factory::setMaxRequestSize);
map.from(this.maxFileSize).to(factory::setMaxFileSize);
return factory.createMultipartConfig();
}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
看这里的map.from(this.maxFileSize).to(factory::setMaxFileSize);继续查看this.maxFileSize看到private DataSize maxFileSize = DataSize.ofMegabytes(1L)查看ofMegabytes方法,可以看到

public static DataSize ofMegabytes(long megabytes) {
return new DataSize(Math.multiplyExact(megabytes, 1048576L));
}
1
2
3
1
2
3
到这里,终于看到默认配置的上传文件大小限制1048576了,那么怎么解除这个限制呢?有两种办法:

在前端分割文件的时候,设置文件块的最大大小要小于1048576
在后台代码新建一个配置类,配置类里配置MultipartConfigElement类,代码如下:
@Bean
public MultipartConfigElement multipartConfigElement() {
// 不限制上传文件的大小
return new MultipartConfigElement("");
}
1
2
3
4
5
1
2
3
4
5
这里MultipartConfigElement("")构造方法内容如下:

public MultipartConfigElement(String location) {
if (location != null) {
this.location = location;
} else {
this.location = "";
}

this.maxFileSize = -1L;
this.maxRequestSize = -1L;
this.fileSizeThreshold = 0;
}
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
这里设置maxFileSize和maxRequestSize为-1表示不限制上传文件大小,这里的-1表示不限制上传文件大小的原因见org.apache.tomcat.util.http.fileupload.impl.FileItemIteratorImpl.init方法,

热点内容
房车旅游自媒体有脚本吗 发布:2025-05-14 11:18:18 浏览:124
android输入法键盘 发布:2025-05-14 11:15:48 浏览:656
谷歌商店安卓手机在哪里 发布:2025-05-14 11:13:46 浏览:534
编程猫销售女 发布:2025-05-14 11:13:36 浏览:334
安卓卡无翼怎么出小黑屋 发布:2025-05-14 11:13:00 浏览:580
买商用笔记本电脑主要看哪些配置 发布:2025-05-14 11:12:15 浏览:949
如何在服务器里做一把神器 发布:2025-05-14 11:11:19 浏览:710
cl编译选项 发布:2025-05-14 11:09:25 浏览:620
自制算法表 发布:2025-05-14 11:05:18 浏览:357
android获取手机联系人 发布:2025-05-14 10:59:30 浏览:141