ceph上傳文件
㈠ 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方法,