當前位置:首頁 » 存儲配置 » 動態存儲管理

動態存儲管理

發布時間: 2023-01-01 09:22:06

A. Kubernetes 基於GlusterFS+heketi的高可用動態存儲管理StorageClass

Kubernetes中使用GlusterFS作為持久化存儲,要提供storageClass使用需要依賴Heketi工具。Heketi是一個具有resetful介面的glusterfs管理程序,作為kubernetes的Storage存儲的external provisioner。 「Heketi提供了一個RESTful管理界面,可用於管理GlusterFS卷的生命周期。藉助Heketi,像OpenStack Manila,Kubernetes和OpenShift這樣的雲服務可以動態地配置GlusterFS卷和任何支持的持久性類型。Heketi將自動確定整個集群的brick位置,確保將brick及其副本放置在不同的故障域中。Heketi還支持任意數量的GlusterFS集群,允許雲服務提供網路文件存儲,而不受限於單個GlusterFS集群。
heketi:提供基於RESTful介面管理glusterfs的功能,可以方便的創建集群管理glusterfs的node,device,volume;與k8s結合可以創建動態的PV,擴展glusterfs存儲的動態管理功能。主要用來管理glusterFS volume的生命周期,初始化時候就要分配好裸磁碟(未格式化)設備.

注意事項:

安裝Glusterfs客戶端:每個kubernetes集群的節點需要安裝gulsterfs的客戶端,如glusterfs-cli,glusterfs-fuse.主要用於在每個node節點掛載volume。
載入內核模塊:每個kubernetes集群的節點運行modprobe dm_thin_pool,載入內核模塊。
高可用(至少三個節點):至少需要節點用來部署glusterfs集群,並且這3個節點每個節點需要至少一個空餘的磁碟。

基礎設施要求:

正在運行的glusterfs集群,至少有三個node節點,每個節點至少有一個可用的裸塊設備(如EBS卷或本地磁碟,就是沒有格式化的).
用於運行GlusterFS節點必須為GlusterFS通信打開相應的埠(如果開啟了防火牆的情況下,沒開防火牆就不需要這些操作)。

安裝依賴及常用工具包:
yum -y install flex bison openssl openssl-devel libxml2-devel gcc lrzsz vim*
查找gluster的最新軟體倉庫:
yum search centos-release-gluster
安裝最新版本的gluster軟體倉庫:
yum install centos-release-gluster7.noarch -y
安裝gluster源,並安裝glusterfs及相關軟體包
yum install glusterfs glusterfs-server glusterfs-cli glusterfs-geo-replication glusterfs-rdma -y
客戶端安裝GlusterFS客戶端軟體
yum install glusterfs-fuse glusterfs-cli
啟動Glusterd服務
systemctl start glusterd
systemctl enable glusterd --now //設開機自啟,並立即啟動服務

在任意一個節點上添加信任節點
gluster peer probe node99
gluster peer probe node110
gluster peer probe node145
gluster peer probe node108

查看節點狀態:
gluster peer status //查看節點狀態

創建復制卷

mkdir /glusterfs/storage1/rep_vol1
gluster volume create rep_vol1 replica 2 node99:/glusterfs/storage1/rep_vol1 node108:/glusterfs/storage1/rep_vol1

創建分布式卷

gluster volume create vdisk1 node108:/brick1 node110:/brick1 brick node145:/brick1 force

創建分布式復制卷

gluster volume create fbfz replica 2 transport tcp node108:/gluster/fbfz1 node110:/gluster/fbfz1 node145:/gluster/fbfz1 node108:/gluster/fbfz2 node110:/gluster/fbfz2 node145:/gluster/fbfz2 force

啟動卷
gluster volume start rep_vol1
查看卷狀態
gluster volume status
gluster volume info
客戶端測試掛載卷
mount -t glusterfs node108:rep_vol /tmp/aaa
mount -t glusterfs node145:fbfz /mnt/fbfz
客戶端測試卷數據存儲
for i in `seq -w 1 3`;do cp -rp /var/log/messages /tmp/aaa/test-$i;done

其他備用操作

停止卷:
gluster volume stop vdisk2
刪除卷:
gluster volume delete vdisk2
將某個存儲節點主機從信任池中刪除:
gluster peer detach node2

Heketi是由golang編寫,直接靜態編譯運行二進制即可,也可以通過yum安裝以及docker部署,主要會產生db文件存儲cluster、node、device、volume等信息。

安裝二進制包
wget -c https://github.com/heketi/heketi/releases/download/v8.0.0/heketi-v8.0.0.linux.amd64.tar.gz tar zxvf heketi-v9.0.0.linux.amd64.tar.gz
mkdir -pv /opt/heketi/{bin,conf,data}
cp heketi/heketi.json /opt/heketi/conf/
cp heketi/{heketi,heketi-cli} /opt/heketi/bin/

創建ssh-key

我們glusterFS部署在k8s集群外,所以heketi通過ssh管理glusterFS。需要創建免秘鑰登陸到所有glusterFS節點。
ssh-keygen -f /opt/heketi/conf/heketi_key -t rsa -N ''
ssh--id -i /opt/heketi/conf/heketi_key.pub root@node108 -p 2222
ssh--id -i /opt/heketi/conf/heketi_key.pub root@node110 -p 2222
ssh--id -i /opt/heketi/conf/heketi_key.pub root@node145 -p 2222

配置文件修改

注意:
需要說明的是,heketi有三種executor,分別為mock、ssh、kubernetes,建議在測試環境使用mock,生產環境使用ssh,當glusterfs以容器的方式部署在kubernetes上時,才使用kubernetes。我們這里將glusterfs和heketi獨立部署,使用ssh的方式。
使用docker部署的時候,還需將/var/lib/heketi/mounts 掛載至容器裡面, heketi 會將此目錄作為 gluster volume的掛載點。

systemd配置
cat /usr/lib/systemd/system/heketi.service

啟動heketi服務
systemctl start heketi
systemctl enable heketi
systemctl status heketi

添加cluster
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json cluster create

將3個glusterfs節點作為node添加到cluster

添加節點

opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json node add --cluster "" --management-host-name node108 --storage-host-name 10.14.151.108 --zone 1

/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json node add --cluster "" --management-host-name node110 --storage-host-name 10.14.151.110 --zone 1

/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json node add --cluster "" --management-host-name node145 --storage-host-name 10.14.151.145 --zone 1

查看節點:
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey node list

添加device

機器只是作為gluster的運行單元,volume是基於device創建的。同時需要特別說明的是,目前heketi僅支持使用裸分區或裸磁碟(未格式化)添加為device,不支持文件系統。

/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json device add --name="/dev/sdb" --node ""
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json device add --name="/dev/sdb" --node ""
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json device add --name="/dev/sdb" --node ""

註:--node參數給出的id是上一步創建node時生成的,實際配置中,要添加每一個節點的每一塊用於存儲的硬碟。

生產實際配置

以上ad-hoc命令均可通過配置文件創建然後導入:

$ sudo cat /data/heketi/conf/topology.json

創建:

$ sudo heketi-cli topology load --json topology.json

添加volume

這里僅僅是做一個測試,實際使用中,會由kubernetes自動創建pv.
創建一個大小為3G,副本為2的volume

opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey volume create --size 3 --replica 2

kubernetes storageclass 配置
創建storageclass
添加storageclass-glusterfs.yaml文件,內容如下:
cat storageclass-glusterfs.yaml

kubectl apply -f storageclass-glusterfs.yaml

kubectl get sc

注意:
storageclass.beta.kubernetes.io/is-default-class: "true" #表示此storageClass作為default sc,創建pvc不指定sc時,默認使用此sc.
reclaimPolicy: Retain #表示pv回收策略為保留,刪除pvc時將不刪除pv。
更詳細的用法參考: <u>https://kubernetes.io/docs/concepts/storage/storage-classes/#glusterfs</u>

創建pvc
kubectl create -f glusterfs-pvc.yaml
cat glusterfs-pvc.yaml

kubectl create -f glusterfs-pvc.yaml

kubectl get pv

kubectl get pvc

創建pod,使用pvc
cat mysql-deployment.yaml

kubectl create -f mysql-deployment.yaml

kubectl get deploy

kubectl get pods

kubectl exec -ti mysql-b75b5dcfb-cb7qm sh
df -Th

創建statefulset

kubectl apply -f nginx-statefulset.yml

kubectl get pod,pv,pvc

我們可以看到RECLAIM POLICY: Retain ,經過測試
刪除pvc,pv status會變成Released狀態,且不會被刪除
刪除pv, 通過heketi-cli volume list查看,volume不會被刪除
kubernetes pv和gluster volume不一致時,可使用heketi來統一管理volume.此文檔heketi和glusterfs都在kubernetes集群外部署。對於支持AWS EBS的磁碟,可通過EBS storageClass方式將glusterFS heketi部署在容器中管理.參考 https://github.com/gluster/gluster-kubernetes

參考文檔
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
https://kubernetes.io/docs/concepts/storage/storage-classes/#glusterfs
https://github.com/heketi/heketi/blob/master/docs/admin/readme.md
https://www.cnblogs.com/breezey/p/8849466.html
https://www.cnblogs.com/breezey/p/8849466.html )

驗證測試:

kubectl exec -ti mysql-b75b5dcfb-cb7qm sh

說明掛掉一個節點是不影響用戶使用的。

B. 動態儲存分配的特點和優化目標有哪些

動態存儲分配即指在目標程序或操作系統運行階段動態地為源程序中的量分配存儲空間。根據查詢相關公開信息顯示,動態存儲分配包括棧式或堆兩種分配方式。採用動態存儲分配進行處理的量,並非所有的工作全部放在運行時刻做,編譯程序在編譯階段要為其設計好運行階段存儲組織形式,並為每一個數據項安排好它在數據區中的相對位置。

C. 動態視頻存儲器技術總內存容量怎麼設置

1、首先打開手機設置界面,點擊存儲器管理。
2、其次,選擇動態視頻技術管理方面,點擊內存容量選擇。
3、最後,在存儲器中選擇內存的大小賦予給動態視頻即可。

D. 動態存儲管理系統中,通常可有( )種不同的分配策略. A.2 B.3 C.4 D.5

三種

E. malloc函數實現的功能是什麼

malloc 原型:extern void *malloc(unsigned int num_bytes); 用法:#include <malloc.h> 或#include<stdlib.h> 功能:分配長度為num_bytes位元組的內存塊 說明:如果分配成功則返回指向被分配內存的指針,否則返回空指針NULL。 當內存不再使用時,應使用free()函數將內存塊釋放。 malloc的語法是:指針名=(數據類型*)malloc(長度),(數據類型*)表示指針.malloc()是C語言中動態存儲管理的一組標准庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。 動態內存分配就是指在程序執行的過程中動態地分配或者回收存儲空間的分配內存的方法。動態內存分配不像數組等靜態內存分配方法那樣需要預先分配存儲空間,而是由系統根據程序的需要即時分配,且分配的大小就是程序要求的大小。本文簡單介紹動態內存分配函數malloc()及幾種實現方法。 1. 簡介 malloc()是C語言中動態存儲管理的一組標准庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。還有一點必須注意的是,當函數未能成功分配存儲空間(如內存不足)就會返回一個NULL指針。所以在調用該函數時應該檢測返回值是否為NULL並執行相應的操作。 2. 函數說明 C語言的動態存儲管理由一組標准庫函數實現,其原型在標准文件<stdlib.h>里描述,需要用這些功能時應包含這個文件。與動態存儲分配有關的函數共有四個,其中就包括存儲分配函數malloc()。函數原型是:void *malloc (size_t n);這里的size_t是標准庫里定義的一個類型,它是一個無符號整型。這個整型能夠滿足所有對存儲塊大小描述的需要,具體相當於哪個整型由具體的C系統確定。malloc的返回值為(void *)類型(這是通用指針的一個重要用途),它分配一片能存放大小為n的數據的存儲塊,返回對應的指針值;如果不能滿足申請(找不到能滿足要求的存儲塊)就返回NULL。在使用時,應該把malloc的返回值轉換到特定指針類型,賦給一個指針。 注意,雖然這里的存儲塊是通過動態分配得到的,但是它的大小也是確定的,同樣不允許越界使用。例如上面程序段分配的塊里能存n個雙精度數據,隨後的使用就必須在這個范圍內進行。越界使用動態分配的存儲塊,尤其是越界賦值,可能引起非常嚴重的後果,通常會破壞程序的運行系統,可能造成本程序或者整個計算機系統垮台。 下例是一個動態分配的例子: #include <stdio.h> #include<stdlib.h> main() { int count,*array; /*count是一個計數器,array是一個整型指針,也可以理解為指向一個整型數組的首地址*/ count=100; if((array=(int *)malloc(10*sizeof(int))) == NULL) { printf("不能成功分配存儲空間。"); exit(1); } for(count=0;count<10;count++) /*給數組賦值*/ array[count]=count; for(count=0;count<10;count++) /*列印數組元素*/ printf("%2d",array[count]); } 上例中動態分配了10個整型存儲區域,然後進行賦值並列印。例中if((array=(int *) malloc (10*sizeof(int)))==NULL)語句可以分為以下幾步: 1)分配10個整型的連續存儲空間,並返回一個指向其起始地址的整型指針 2)把此整型指針地址賦給array 3)檢測返回值是否為NULL

F. Kubernetes 基於GlusterFS的動態存儲管理StorageClass

最近由於需要部署有狀態服務,沒有雲環境的支持,不能很好的通過cloud provider調用雲磁碟EBS,所以在node節點部署了一套glusterFS分布式文件存儲系統,用來提供非結構化數據存儲,存儲圖片,大文件等等.

Kubernetes中使用GlusterFS作為持久化存儲,要提供storageClass使用需要依賴Heketi工具。Heketi是一個具有resetful介面的glusterfs管理程序,作為kubernetes的Storage存儲的external provisioner。 「Heketi提供了一個RESTful管理界面,可用於管理GlusterFS卷的生命周期。藉助Heketi,像OpenStack Manila,Kubernetes和OpenShift這樣的雲服務可以動態地配置GlusterFS卷和任何支持的持久性類型。Heketi將自動確定整個集群的brick位置,確保將brick及其副本放置在不同的故障域中。Heketi還支持任意數量的GlusterFS集群,允許雲服務提供網路文件存儲,而不受限於單個GlusterFS集群。

Heketi是由golang編寫,直接靜態編譯運行二進制即可也可以通過yum安裝以及docker部署,主要會產生db文件存儲cluster、node、device、volume等信息。

我們glusterFS部署在k8s集群外,所以heketi通過ssh管理glusterFS。需要創建免秘鑰登陸到所有glusterFS節點。

參考 https://github.com/heketi/heketi/blob/master/client/cli/go/topology-sample.json

注意:

由於我們開啟了heketi認證,所以每次執行heketi-cli操作時,都需要帶上一堆的認證欄位,比較麻煩,我在這里創建一個別名來避免相關操作:

注意: 如果heketi 運行賬號為非root,需要保證有sudo許可權。

機器只是作為gluster的運行單元,volume是基於device創建的。同時需要特別說明的是,目前heketi僅支持使用裸分區或裸磁碟(未格式化)添加為device,不支持文件系統。

以上ad-hoc命令均可通過配置文件創建然後導入:

創建:

這里僅僅是做一個測試,實際使用中,會由kubernetes自動創建pv.

創建一個大小為3G,副本為2的volume

添加storageclass-glusterfs.yaml文件,內容如下:

注意:

更詳細的用法參考: https://kubernetes.io/docs/concepts/storage/storage-classes/#glusterfs

我們可以看到RECLAIM POLICY: Retain ,經過測試

kubernetes pv和gluster volume不一致時,可使用heketi來統一管理volume.此文檔heketi和glusterfs都在kubernetes集群外部署。對於支持AWS EBS的磁碟,可通過EBS storageClass方式將glusterFS heketi部署在容器中管理.參考 https://github.com/gluster/gluster-kubernetes

G. C語言中的動態存儲管理的命令的作用是什麼

malloc()是動態內存分配函數,用來向系統請求分配內存空間。當無法知道內存具體的位置時,想要綁定真正的內存空間,就要用到malloc()函數。因為malloc只分配內存空間,並不能對分配的空間進行初始化,所以申請到的內存中的值是隨機的,經常會使用memset()進行置0操作後再使用。

熱點內容
安卓咪咕音樂怎麼錄制視頻 發布:2024-05-19 07:56:06 瀏覽:838
如何搞出超大聲的聽聲辨位安卓版 發布:2024-05-19 07:46:21 瀏覽:927
linux安全模式 發布:2024-05-19 07:27:25 瀏覽:176
為什麼安卓手機安裝不了cpk 發布:2024-05-19 07:22:21 瀏覽:313
pythonempty 發布:2024-05-19 07:15:16 瀏覽:930
路由器虛擬伺服器搭建 發布:2024-05-19 07:15:15 瀏覽:999
方舟編譯器何時推送 發布:2024-05-19 07:15:10 瀏覽:599
魔獸世界自動釣魚腳本 發布:2024-05-19 06:43:07 瀏覽:496
cbs加密 發布:2024-05-19 06:29:56 瀏覽:203
ssis存儲過程 發布:2024-05-19 06:21:31 瀏覽:632