日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ceph

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ceph 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分布式文件系統

  • 分布式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連
  • 分布式文件系統的設計基于客戶機/服務器模式

常用的分布式文件系統

  • Lustre
  • Hadoop
  • FastDFS
  • Ceph
  • GlusterFS

什么是Ceph

  • Ceph是一個分布式文件系統
  • 具有高擴展,高可用,高性能的特點
  • Ceph可以提供對象存儲,塊存儲,文件系統存儲
  • 塊存儲(iscsi)客戶端多了一個磁盤,文件系統(NFS)客戶端直接mount
  • Ceph可以提供PB級別的存儲空間(PB→TB→GB),1024G*1024G=1058576G
  • 軟件定義存儲(Software Defined Storage)作為存儲行業的一大發展趨勢,已經越來越受到市場的認可

    鏈接在此!

Ceph組件

  • OSDs 存儲設備
  • Monitors 集群監控軟件
  • RadosGateway(RGW) 對象存儲網關
  • MDSs 存放文件系統的元數據(對象存儲和 塊存儲不需要該組件)
  • Client ceph客戶端

實驗準備

問題
準備四臺KVM虛擬機,其三臺作為存儲集群節點, 一臺安裝為客戶端,實現如下功能:

  • 創建1臺客戶端虛擬機
  • 創建3臺存儲集群虛擬機
  • 配置主機名、IP地址、YUM源
  • 修改所有主機的主機名
  • 配置無密碼SSH連接
    – 配置NTP時間同步
  • 創建虛擬機磁盤

實驗拓撲圖

  • 1臺客戶端虛擬機
  • 3臺存儲集群虛擬機

    所有主機的主機名及對應的IP地址如表-1所示。
    注意:所有主機基本系統光盤的YUM源必須提前配置好。

步驟

1)物理機為所有節點配置yum源服務器。所有主機都要做!!!
提示:前提ceph.iso已經掛載好才可以進行下一步!!

[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo [MON] name=mon baseurl=file:///media/MON gpgcheck=0 [OSD] name=osd baseurl=file:///media/OSD gpgcheck=0 [Tools] name=tools baseurl=file:///media/Tools gpgcheck=0 [root@node1 ~]# yum repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile 源標識 源名稱 狀態 !MON mon 41 !OSD osd 28 !Tools tools 33 !centos centos 9,911 repolist: 10,013
  • SSH免密登錄,配置無密碼連接(包括自己遠程自己也不需要密碼),在node1操作。
  • [root@node1 ~]# ssh-keygen #一路回車 [root@node1 ~]# for i in 10 11 12 13 > do > ssh-copy-id 192.168.4.$i > done ############################################################# 測試: [root@node1 ~]# ssh 192.168.4.10 Last login: Thu Feb 6 00:17:09 2020 from 192.168.4.1 [root@client ~]# exit 登出 Connection to 192.168.4.10 closed. [root@node1 ~]# ssh 192.168.4.12 Last login: Wed Feb 5 23:21:36 2020 from 192.168.4.1 [root@node2 ~]# exit 登出 Connection to 192.168.4.12 closed. [root@node1 ~]# ssh 192.168.4.13 Last login: Wed Feb 5 23:25:45 2020 from 192.168.4.1 [root@node3 ~]# exit 登出 Connection to 192.168.4.13 closed. [root@node1 ~]# ssh 192.168.4.11 Last login: Thu Feb 6 00:18:12 2020 from 192.168.4.1 [root@node1 ~]# exit 登出 Connection to 192.168.4.11 closed. 確保每臺計算機遠程都不需要密碼

    3)修改/etc/hosts并同步到所有主機。
    警告:/etc/hosts解析的域名必須與本機主機名一致!!!!

    [root@node1 ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.4.10 client 192.168.4.11 node1 192.168.4.12 node2 192.168.4.13 node3 [root@node1 ~]# for i in client node2 node3 > do > scp /etc/hosts $i:/etc > done ########################################################### 測試:此時,每臺計算機的hosts解析中都有client,node1,node2,node3 [root@node2 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.4.10 client 192.168.4.11 node1 192.168.4.12 node2 192.168.4.13 node3

    4)配置NTP時間同步(client做時間服務器,所有node節點與client時間同步)

    [root@client ~]# vim /etc/chrony.conf26 allow 192.168.4.0/1629 local stratum 10 [root@client ~]# systemctl restart chronyd [root@client ~]# firewall-cmd --set-default-zone=trusted success [root@client ~]# vim /etc/sysconfig/selinux 7 SELINUX=permissive [root@client ~]# setenforce 0所有node節點與client同步時間 [root@node1 ~]# vim /etc/chrony.conf3 server 192.168.4.10 iburst [root@node1 ~]# for i in node1 node2 node3 > do > scp /etc/chrony.conf $i:/etc > ssh $i "systemctl restart chronyd" > done chrony.conf 100% 991 1.1MB/s 00:00 chrony.conf 100% 991 1.1MB/s 00:00 chrony.conf 100% 991 962.8KB/s [root@node1 ~]# chronyc sources -V #快速測試時間同步,*表示已經同步 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* client 10 10 377 609 -12us[ -18us] +/- 150us

    5)打開VMware,給除了client的每臺虛擬機添加兩塊磁盤(20G)

    一路下一步,最后呈現的效果如下:

    添加完后,重啟虛擬機,使用lsblk查看是否添加成功

    部署ceph集群

    問題
    部署Ceph集群服務器,實現以下目標:

    • 安裝部署工具ceph-deploy
    • 創建ceph集群
    • 準備日志磁盤分區
    • 創建OSD存儲空間
    • 查看ceph狀態,驗證

    步驟

    • 步驟一:安裝部署軟件ceph-deploy

    1)在node1安裝部署工具,學習工具的語法格式。

    [root@node1 ~]# yum -y install ceph-deploy #一定要在有ssh密鑰的主機上安裝 [root@node1 ~]# mkdir ceph-cluster #但凡執行ceph-cluster腳本,必須在該目錄下,否則會出錯 [root@node1 ~]# cd ceph-cluster
    • 步驟二:部署Ceph集群

    1)給所有節點安裝ceph相關軟件包。

    [root@node1 ceph-cluster]# for i in node1 node2 node3> do > ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw" > done

    部署mon集群,一定要確保 在ceph-cluster目錄下!!!

    首先關閉所有節點的防火墻和selinux [root@node1 ceph-cluster]# firewall-cmd --set-default-zone=trusted success [root@node1 ceph-cluster]# vim /etc/sysconfig/selinux 7 SELINUX=permissive [root@node1 ceph-cluster]# setenforce 0 ############################################################ [root@node1 ceph-cluster]# pwd /root/ceph-cluster

    2)創建Ceph集群配置,在ceph-cluster目錄下生成Ceph配置文件。
    在ceph.conf配置文件中定義monitor主機是誰。

    [root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3#測試所有node節點的狀態,創建了ceph的配置文件ceph.conf(在當前目錄下) [root@node1 ceph-cluster]# ls ceph.conf ceph-deploy-ceph.log ceph.mon.keyring ################################### [root@node1 ceph-cluster]# ls /etc/ceph/ rbdmap #/etc/ceph目錄是啟動ceph需要讀取配置文件的地方

    3)初始化所有節點的mon服務,也就是啟動mon服務(主機名解析必須對)。

    [root@node1 ceph-cluster]# ceph-deploy mon create-initial #把當前目錄下的ceph配置文件遠程拷貝到目標主機(node1 node2 node3)放到/etc/ceph目錄,并且啟動ceph-mon服務(服務名為ceph-mon@主機名) ############################################################# 查看狀態: [root@node1 ceph-cluster]# systemctl status ceph-mon@node1 #確認mon服務是否已經啟動 [root@node1 ceph-cluster]# ceph -scluster 3b2ca6aa-8018-42c4-8bfe-05902cd313ddhealth HEALTH_ERR64 pgs are stuck inactive for more than 300 seconds64 pgs stuck inactiveno osdsmonmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0} #6789為起完服務后monitior的端口號election epoch 8, quorum 0,1,2 node1,node2,node3osdmap e1: 0 osds: 0 up, 0 inflags sortbitwisepgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects0 kB used, 0 kB / 0 kB avail64 creating

    常見錯誤及解決方法(非必要操作,有錯誤可以參考):
    如果提示如下錯誤信息:

    [node1][ERROR ] admin_socket: exception getting command descriptions: [Error 2] No such file or directory

    解決方案如下(在node1操作):
    先檢查自己的命令是否是在ceph-cluster目錄下執行的!!!!如果確認是在該目錄下執行的create-initial命令,依然報錯,可以使用如下方式修復。

    [root@node1 ceph-cluster]# vim ceph.conf #文件最后追加以下內容 public_network = 192.168.4.0/24

    修改后重新推送配置文件:

    [root@node1 ceph-cluster]# ceph-deploy --overwrite-conf config push node1 node2 node3
    • 步驟三:創建OSD
      每臺虛擬機都添加了 兩塊磁盤(/dev/sdb、/dev/sdc)
      sdb用來做緩存盤,sdc做數據盤

    讀寫操作 緩存 數據
    client<-------->ceph集群[sdb]<-------->[sdc] 硬盤分為傳統磁盤和固態盤
    傳統磁盤:性能較低,容量大
    固態盤(SSD):容量很小,性能很好 可以使用固態盤做緩存盤,磁盤做數據盤

    假設每個磁盤是20G,最終我們的ceph集群提供60G的容量(不考慮冗余備份)
    node1 [sdb]+[sdc]=20G #sdb為緩存盤,只能臨時讀寫數據,不能算作容量內
    node2 [sdb]+[sdc]=20G
    node3 [sdb]+[sdc]=20G

    1)把所有磁盤初始化(格式化,僅在node1操作)

    [root@node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sr0 11:0 1 284M 0 rom /media sr1 11:1 1 8.8G 0 rom /mnt [root@node1 ~]# cd ceph-cluster/ [root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc #相當于遠程加for循環,寫幾個參數就循環幾次 [root@node1 ceph-cluster]# ceph-deploy disk zap node2:sdb node2:sdc [root@node1 ceph-cluster]# ceph-deploy disk zap node3:sdb node3:sdc ######################################################## 也可以直接一次性初始化 [root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc node2:sdb node2:sdc node3:sdb node3:sdc

    2)啟動OSD服務,共享這些磁盤

    [root@node1 ceph-cluster]# ceph-deploy osd create node1:sdc:/dev/sdb //遠程node1啟動osd服務,把/dev/sdc共享給用戶,/dev/sdb做為緩存盤 并且把sdc掛載到了/var/lib/ceph/xxx目錄 [root@node1 ceph-cluster]# ceph-deploy osd create node2:sdc:/dev/sdb [root@node1 ceph-cluster]# ceph-deploy osd create node3:sdc:/dev/sdb ######################################################### 也可以一次性遠程多臺主機 [root@node1 ceph-cluster]# ceph-deploy osd create node1:sdc:/dev/sdb node2:sdc:/dev/sdb node3:sdc:/dev/sdb
    • 常見錯誤及解決方法(非必須操作)。

    使用osd create創建OSD存儲空間時,如提示下面的錯誤提示:

    [ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run 'gatherkeys'

    可以使用如下命令修復文件,重新配置ceph的密鑰文件:

    [root@node1 ceph-cluster]# ceph-deploy gatherkeys node1 node2 node3

    3)驗證測試,檢查集群狀態:

    [root@node1 ceph-cluster]# ceph -scluster 3b2ca6aa-8018-42c4-8bfe-05902cd313ddhealth HEALTH_OKmonmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}election epoch 14, quorum 0,1,2 node1,node2,node3osdmap e14: 3 osds: 3 up, 3 inflags sortbitwisepgmap v28: 64 pgs, 1 pools, 0 bytes data, 0 objects100 MB used, 61306 MB / 61406 MB avail64 active+clean 此時可以看到,有三個osd,容量為60G,狀態為OK

    驗證是否掛載成功

    [root@node1 ceph-cluster]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.4G 16G 8% / devtmpfs 224M 0 224M 0% /dev tmpfs 236M 0 236M 0% /dev/shm tmpfs 236M 5.6M 230M 3% /run tmpfs 236M 0 236M 0% /sys/fs/cgroup /dev/sr0 284M 284M 0 100% /media /dev/sr1 8.8G 8.8G 0 100% /mnt /dev/sda1 1014M 142M 873M 14% /boot tmpfs 48M 0 48M 0% /run/user/0 /dev/sdc1 20G 34M 20G 1% /var/lib/ceph/osd/ceph-0 可以看到/dev/sdc已經掛載到ceph集群中了 [root@node1 ceph-cluster]# systemctl status ceph-osd@0.service #服務已經成功啟動,OSD的服務名稱ceph-osd@數字(可以在@后tab) ● ceph-osd@0.service - Ceph object storage daemonLoaded: loaded (/usr/lib/systemd/system/ceph-osd@.service; enabled; vendor preset: disabled)Active: active (running) since 四 2020-02-06 18:49:43 CST; 40min agoMain PID: 1973 (ceph-osd) [root@node1 ceph-cluster]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.05846 root default -2 0.01949 host node1 0 0.01949 osd.0 up 1.00000 1.00000 -3 0.01949 host node2 1 0.01949 osd.1 up 1.00000 1.00000 -4 0.01949 host node3 2 0.01949 osd.2 up 1.00000 1.00000

    2)常見錯誤(非必須操作)。
    如果查看狀態包含如下信息:

    health: HEALTH_WARNclock skew detected on node2, node3…

    clock skew表示時間不同步,解決辦法:請先將所有主機的時間都使用NTP時間同步!!!
    Ceph要求所有主機時差不能超過0.05s,否則就會提示WARN。
    如果狀態還是失敗,可以嘗試執行如下命令,重啟ceph服務:

    [root@node1 ~]# systemctl restart ceph\*.service ceph\*.target

    Ceph塊存儲

    • 單機塊設備
      1.光盤
      2.磁盤
    • 分布式塊存儲
      1.ceph
      2.cinder

    什么是塊存儲

    • ceph塊設備也叫做RADOS塊設備 RADOS block device : RBD
    • RBD驅動已經很好地集成在了linux內核中
    • RBD提供了企業功能,如快照,COW克隆等
    • RBD還支持內存緩存,從而能夠大大的提高性能
    • Linux內核可以直接訪問ceph塊存儲
    • KVM可用于j借助于librbd訪問

    創建Ceph塊存儲

    問題
    使用Ceph集群的塊存儲功能,實現以下目標:

    • 創建塊存儲鏡像

    • 客戶端映射鏡像

    • 創建鏡像快照

    • 使用快照還原數據

    • 使用快照克隆鏡像

    • 刪除快照與鏡像
      步驟

    • 步驟一:創建鏡像

    1)查看存儲池。

    [root@node1 ~]# ceph osd lspools 0 rbd,

    2)創建鏡像、查看鏡像

    [root@node1 ~]# rbd create jacob --image-feature layering --size 5G

    #這里的jacob為創建的鏡像名稱,可以為任意字符。
    #–image-feature參數指定我們創建的鏡像有哪些功能,layering是開啟COW(寫實復制)功能。
    #提示:ceph鏡像支持很多功能,但很多是操作系統不支持的,我們只開啟layering。

    [root@node1 ~]# rbd list #列出所有共享鏡像 jacob [root@node1 ~]# rbd info jacob #列出某個鏡像的詳細信息 rbd image 'jacob':size 5120 MB in 1280 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:
    • 步驟二:動態調整

    1)擴容容量

    [root@node1 ~]# rbd resize --size 15G jacob Resizing image: 100% complete...done. [root@node1 ~]# rbd info jacob rbd image 'jacob':size 15360 MB in 3840 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:

    2)縮減容量

    [root@node1 ~]# rbd resize --size 10G jacob rbd: shrinking an image is only allowed with the --allow-shrink flag #此時縮減容量會報錯,如果確認要縮減,添加--allow-shrink選項 [root@node1 ~]# rbd resize --size 10G jacob --allow-shrink Resizing image: 100% complete...done. [root@node1 ~]# rbd info jacob rbd image 'jacob':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags:

    客戶端訪問共享(client做客戶端主機)

    首先確保客戶端的yum源已經加載 [root@client ~]# yum repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile 源標識 源名稱 狀態 MON mon 41 OSD osd 28 Tools tools 33 centos centos 9,911 repolist: 10,013 [root@client ~]# yum -y install ceph-common.x86_64 #客戶端需要安裝ceph-common軟件包 [root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph #拷貝配置文件,配置文件中記錄的有ceph集群服務器的IP信息 [root@client ~]# scp node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph #拷貝訪問集群的密鑰文件,有了密鑰才有權限訪問集群 [root@client ~]# lsblk 查看磁盤分布情況 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 284M 0 rom /media sr1 11:1 1 8.8G 0 rom /mnt [root@client ~]# rbd map jacob #客戶端連接jacob鏡像 /dev/rbd0 [root@client ~]# lsblk #再次查看 ,此時磁盤中多了一個rbd0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 284M 0 rom /media sr1 11:1 1 8.8G 0 rom /mnt rbd0 252:0 0 10G 0 disk
    • 步驟三:客戶端進行快照還原數據的實驗:
      快照:寫數據;快照;模擬人為的誤操作;還原快照
      副本:寫數據,可以自動備份3份;刪數據時,刪除3份,主要用來解決單點故障的問題
      1)格式化,掛載,寫數據
    [root@client ~]# mkfs.xfs /dev/rbd0 [root@client ~]# mount /dev/rbd0 /data [root@client ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 8% / devtmpfs 224M 0 224M 0% /dev tmpfs 236M 0 236M 0% /dev/shm tmpfs 236M 5.6M 230M 3% /run tmpfs 236M 0 236M 0% /sys/fs/cgroup /dev/sr0 284M 284M 0 100% /media /dev/sda1 1014M 142M 873M 14% /boot /dev/sr1 8.8G 8.8G 0 100% /mnt tmpfs 48M 0 48M 0% /run/user/0 /dev/rbd0 10G 33M 10G 1% /data [root@client ~]# echo "abc hello world" > /data/test.txt
    • 步驟四:回到node集群,創建快照
    [root@node1 ~]# rbd snap ls jacob #默認該鏡像沒有快照 [root@node1~]# rbd snap create jacob --snap jacob-snap1 #給jacob鏡像創建快照,快照名為jacob-snap1 [root@node1 ~]# rbd snap ls jacob SNAPID NAME SIZE 4 jacob-snap1 10240 MB

    到client模擬數據被誤操作刪除(ceph不支持在線還原快照)

    [root@client ~]# ls /data test.txt [root@client ~]# rm -rf /data/test.txt [root@client ~]# umount /data [root@client ~]# ls /data

    到node集群還原快照

    [root@node1 ~]# rbd snap rollback jacob --snap jacob-snap1 Rolling back to snapshot: 100% complete...done.

    客戶端再次掛載訪問共享

    [root@client ~]# mount /dev/rbd0 /data [root@client ~]# ls /data test.txt [root@client ~]# cat /data/test.txt abc hello world
    • 步驟五:創建塊照克隆
    • 使用快照克隆一個新的鏡像盤image
      jacob--------3G數據(快照)--------->創建新的共享
      創建一個新的共享
      1)保護快照(防止快照被誤刪除)
    [root@node1 ~]# rbd snap protect jacob --snap jacob-snap1 #保護快照 [root@node1 ~]# rbd snap rm jacob --snap jacob-snap1 #刪除快照,此時無法刪除,因為做了快照保護 rbd: snapshot 'jacob-snap1' is protected from removal. 2020-02-06 21:56:47.950350 7f10f5b44d80 -1 librbd::Operations: snapshot is protected

    2)克隆快照

    [root@node1 ~]# rbd clone jacob --snap jacob-snap1 jacob-clone --image-feature layering #使用現有jacob鏡像盤的jacob-snap1這個快照,克隆一個新的共享鏡像盤,名稱為jacob-clone [root@node1 ~]# rbd ls jacob jacob-clone

    3)查看克隆鏡像與父鏡像快照之間的關系

    [root@node1 ~]# rbd info jacob rbd image 'jacob':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3a2ae8944aformat: 2features: layeringflags: [root@node1 ~]# rbd info jacob-clone rbd image 'jacob-clone':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3e2ae8944aformat: 2features: layeringflags: parent: rbd/jacob@jacob-snap1 #克隆鏡像此時顯示有父鏡像overlap: 10240 MB #克隆鏡像很多數據都來自于快照鏈 #如果希望克隆鏡像可以獨立工作,就需要將父快照中的數據,全部拷貝一份,但比較耗時!!! [root@node1 ~]# rbd flatten jacob-clone Image flatten: 100% complete...done. [root@node1 ~]# rbd info jacob-clone rbd image 'jacob-clone':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.5e3e2ae8944aformat: 2features: layeringflags: #此時父快照的信息不見了! [root@node1 ~]# rbd snap unprotect jacob --snap jacob-snap1 #取消快照保護 [root@node1 ~]# rbd snap rm jacob --snap jacob-snap1 #刪除快照,此時快照就可以被刪除

    客戶端取消對ceph的掛載實驗

    [root@client ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 8% / devtmpfs 224M 0 224M 0% /dev tmpfs 236M 0 236M 0% /dev/shm tmpfs 236M 5.6M 230M 3% /run tmpfs 236M 0 236M 0% /sys/fs/cgroup /dev/sr0 284M 284M 0 100% /media /dev/sda1 1014M 142M 873M 14% /boot /dev/sr1 8.8G 8.8G 0 100% /mnt tmpfs 48M 0 48M 0% /run/user/0 /dev/rbd0 10G 33M 10G 1% /data [root@client ~]# umount /data #卸載 [root@client ~]# lsblk #查看,此時,rbd0依然存在 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 284M 0 rom /media sr1 11:1 1 8.8G 0 rom /mnt rbd0 252:0 0 10G 0 disk [root@client ~]# rbd showmapped id pool image snap device 0 rbd jacob - /dev/rbd0 [root@client ~]# rbd unmap /dev/rbd0 #也可以寫rbd unmap jacob [root@client ~]# lsblk #此時,rbd0不存在了 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 284M 0 rom /media sr1 11:1 1 8.8G 0 rom /mnt [root@client ~]# rbd map jacob-clone /dev/rbd0 [root@client ~]# mount /dev/rbd0 /data [root@client ~]# ls /data test.txt [root@client ~]# umount /data [root@client ~]# rbd unmap /dev/rbd0

    Ceph文件系統存儲

    什么是CephFS

    • 分布式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連
    • CephFS使用Ceph集群提供與POSIX兼容的文件系統
    • 允許 Linux直接將Ceph存儲mount到本地

    什么是元數據

    • 元數據(Metadata)
    • 任何文件系統中的數據分為數據和元數據
    • 數據是指普通文件中的實際數據
    • 而元數據指用來描述一個文件特征的系統數據
    • 比如:訪問權限、文件擁有者以及文件數據塊的分布信息(inode…)等
    • 所以CephFS必須要有MDSs節點

    ceph集群支持塊共享,文件系統共享,對象存儲共享
    塊共享(同一時間僅可以同一個客戶端訪問)

    iscsi服務 server[掛載]格式化 mount 寫數據10個文件
    desktop 掛載 mount 寫10個文件
    server 再次訪問 看到20個文件
    文件系統共享
    NFS(/common)
    desktop (mount) 寫數據,讀數據
    node1 (mount) 寫數據,讀數據

    Ceph 集群支持塊共享、文件系統共享、對象存儲共享 塊共享(同一時間僅可以一個客戶端訪問) 塊(沒有格式化) 文件系統(格式化,NFS,fat32,ext4,xfs文件系統) 硬盤沒有格式化,就相當于一幢空的大廈
    假設一塊硬盤此時有100G,將硬盤分為inode區域和block兩個區域 inode block
    2G 98G 再將inode區域的空間劃分為每塊256字節,block區域空間劃分為每塊4k的字節
    寫數據時,數據會被寫入到block中(4M的文件,會占用多個block)
    block中存數據,inode中存儲元數據(metadata)【元數據是數據的數據,描述數據的數據,比如一個文件,有文件名,時間,權限,大小…類似于描述信息,同時還記錄文件數據的地址】

    Ceph文件系統實驗

    問題
    實現Ceph文件系統的功能。具體實現有以下功能:

    • 部署MDSs節點
    • 創建Ceph文件系統
    • 客戶端掛載文件系統
      方案
      使用現有的虛擬機進行操作

      步驟
    • 1).ceph提供文件系統共享的實驗:(使用node3做ceph-mds服務,操作指令在node1執行)
    [root@node1 ~]# cd ceph-cluster/ [root@node1 ceph-cluster]# ceph-deploy mds create node3 ####################################################################### 此時: 【node1】/root/ceph-cluster/ceph.conf 【node3】/etc/ceph/ceph.conf 文件內容要一毛一樣![root@node1 ceph-cluster]# cat ceph.conf [global] fsid = 3b2ca6aa-8018-42c4-8bfe-05902cd313dd mon_initial_members = node1, node2, node3 mon_host = 192.168.4.11,192.168.4.12,192.168.4.13 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx [root@node3 ~]# cat /etc/ceph/ceph.conf [global] fsid = 3b2ca6aa-8018-42c4-8bfe-05902cd313dd mon_initial_members = node1, node2, node3 mon_host = 192.168.4.11,192.168.4.12,192.168.4.13 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephxconfig file /etc/ceph/ceph.conf exist with different content 有文件,但內容不一致,可以加--overwrite-conf選項在node3查看,此時ceph-mds服務已經啟動 [root@node3 ~]# systemctl status ceph-mds@node3.service ● ceph-mds@node3.service - Ceph metadata server daemonLoaded: loaded (/usr/lib/systemd/system/ceph-mds@.service; enabled; vendor preset: disabled)Active: active (running) since 五 2020-02-07 18:13:49 CST; 9min ago
    • 2).創建存儲池
    [root@node1 ~]# ceph osd pool create cephfs_data 128 pool 'cephfs_data' created #創建存儲池,對應128個PG [root@node1 ceph-cluster]# ceph osd pool create cephfs_metadata 128 pool 'cephfs_metadata' created #創建存儲池,對應128個PG #cephfs_metadata做inode ,cephfs_data做block [root@node1 ceph-cluster]# ceph osd lspools #查看 0 rbd,1 cephfs_data,2 cephfs_metadata,

    • 3)創建文件系統
    [root@node1 ceph-cluster]# ceph fs new myfs1 cephfs_metadata cephfs_data #創建一個文件系統,這個文件系統由inode和block組成,cephfs_metadata做inode,存元數據,cephfs_data做block,存數據,文件系統名稱是myfs1 [root@node1 ceph-cluster]# ceph fs ls #查看文件系統 name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

    4)客戶端mount訪問

    [root@client ~]# mkdir /cephfs [root@node1 ceph-cluster]# cat /etc/ceph/ceph.client.admin.keyring [client.admin]key = AQCb/TpeWGpVJBAALIlg4tgvgDTbr+Poza3xCw== #查看 /etc/ceph/ceph.client.admin.keyring找用戶名和密碼 [root@client ~]# mount -t ceph 192.168.4.11:6789:/ /cephfs -o name=admin,secret=AQCb/TpeWGpVJBAALIlg4tgvgDTbr+Poza3xCw== #客戶端mount訪問共享,-t訪問的服務類型是ceph(nfs,cifs),服務IP是192.168.4.11,端口號是6789,ceph僅支持一個文件系統共享,只能寫訪問/,把共享掛載到/cephfs目錄,name指定用戶名,secret指定密碼(因為ceph集群需要驗證用戶和密碼才可以訪問) [root@node1 ceph-cluster]# ceph -scluster 3b2ca6aa-8018-42c4-8bfe-05902cd313ddhealth HEALTH_WARNtoo many PGs per OSD (320 > max 300)monmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}election epoch 18, quorum 0,1,2 node1,node2,node3fsmap e5: 1/1/1 up {0=node3=up:active}osdmap e31: 3 osds: 3 up, 3 inflags sortbitwisepgmap v830: 320 pgs, 3 pools, 84386 kB data, 2606 objects362 MB used, 61044 MB / 61406 MB avail320 active+clean

    Ceph對象存儲

    • 對象存儲:
    • 基于kv的存儲,通過API接口訪問,對象存儲中所有的數據都被認為是一個對象。基于對象的存儲就是對象存儲
    • 也就是鍵值存儲,通其接口指令,也就是簡單的GET、PUT、DEL和其他擴展,向存儲服務上傳或下載數據
    • 對象存儲中所有數據都被認為是一個對象,所以,任何數據都可以存入對象服務器,如圖片,視頻,音頻等
    • RGW全稱是Rados Gateway
    • RGW是ceph對象存儲網關,用于向客戶端應用呈現存儲頁面,提供RESTful API訪問接口
      運維:部署集群,維護集群,故障排錯
      開發:寫程序,基于程序中的指令連接ceph服務器,上傳下載數據
      百度云盤就屬于對象存儲(不能直接mount,不是在客戶端多一個磁盤)
      百度云盤,客戶端需要下載他的客戶端軟件(網頁也是軟件)

    Ceph對象存儲實驗

    步驟

    • 1)登錄node1使用ceph-deploy運城啟動RGW服務(radosgw)
    [root@node1 ~]# cd ceph-cluster/ [root@node1 ceph-cluster]# ceph-deploy rgw create node3 ... [ceph_deploy.rgw][INFO ] The Ceph Object Gateway (RGW) is now running on host node3 and default port 7480 #起完服務后默認端口7480 [root@node3 ~]# systemctl status ceph-radosgw@rgw.node3.service #查看服務是否已經啟動 ● ceph-radosgw@rgw.node3.service - Ceph rados gatewayLoaded: loaded (/usr/lib/systemd/system/ceph-radosgw@.service; enabled; vendor preset: disabled)Active: active (running) since 五 2020-02-07 19:46:54 CST; 7min ago [root@node3 ~]# ss -nutlp | grep 7480 #也可以查看端口號 tcp LISTEN 0 128 *:7480 *:* users:(("radosgw",pid=2120,fd=27))
    • 2)可以修改配置文件,修改服務的端口(非必須操作)【在node3操作】
    [root@node3 ~]# vim /etc/ceph/ceph.conf 手動輸入三行 [client.rgw.node3] host=node3 rgw_frontends="civetweb port=8000" [root@node3 ~]# systemctl restart ceph-radosgw@rgw.node3.service [root@node3 ~]# ss -nutlp | grep radosgw tcp LISTEN 0 128 *:8000 *:* users:(("radosgw",pid=2556,fd=27))

    總結

    以上是生活随笔為你收集整理的ceph的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。