溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Ceph分布式文件共享解決方案是什么

發(fā)布時間:2021-10-12 10:30:32 來源:億速云 閱讀:245 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關(guān)Ceph分布式文件共享解決方案是什么,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

哈嘍大家好呀! 這次給大家?guī)淼腖iunx軟件分享是鼎鼎大名的Ceph分布式文件系統(tǒng),筆者了解到Ceph也是遇到了一個問題就是在使用Kubeneters的時候在各個容器中都需要使用同一套文件,但是使用NAS盤的方式不管是更新還是讀取都要忍受2分鐘之久而且還會出現(xiàn)文件占用失敗的問題,筆者找了找現(xiàn)有和Kuberneters結(jié)合比較好的文件系統(tǒng)才發(fā)現(xiàn)Ceph,那么就開始進(jìn)行Ceph的搭建和使用吧

附上:

喵了個咪的博客:w-blog.cn

Ceph官網(wǎng) :https://ceph.com/

1. 環(huán)境準(zhǔn)備

首先需要3臺服務(wù)器來做集群,ceph默認(rèn)會進(jìn)行文件三份的冗余來保障文件不易丟失,服務(wù)器IP地址如下:

PS:這里使用的是Centos7的系統(tǒng)版本

192.168.3.101 ceph-1
192.168.3.102 ceph-2
192.168.3.103 ceph-3

這里使用docker的方式進(jìn)行安裝不會應(yīng)為安裝過程污染環(huán)境方便刪除重試:

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce

需要配置好國內(nèi)docker源來提高速度并且配置好開啟自啟(需要使用自己的阿里云賬號獲取加速地址)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

2. 集群部署

在各個節(jié)點上拉取需要使用到的Docker鏡像

docker pull ceph/daemon

在node1節(jié)點上運行 mon

docker run -d \
        --name=mon \
        --net=host \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        -e MON_IP=192.168.3.101 \
        -e CEPH_PUBLIC_NETWORK=192.168.3.0/24 \
        ceph/daemon mon

查看docker運行狀態(tài),并且執(zhí)行命令查看ceph的集群情況

[root@ceph-1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS              PORTS               NAMES
b0c9d7680461        ceph/daemon         "/entrypoint.sh mon"   About a minute ago   Up About a minute                       mon
[root@ceph-1 ~]# docker exec mon ceph -s
  cluster:
    id:     da8f7f5b-b767-4420-a510-287f4ced25de
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-1
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

雖然我們沒有映射端口,Ceph容器會把后續(xù)需要使用到的端口映射出來

[root@ceph-1 ~]# yum install tcping
[root@ceph-1 ~]# tcping 192.168.3.101 6789
192.168.3.101 port 6789 open

Ceph有兩種方式在各個節(jié)點之間共享配置,一種是文件的方式需要吧第一個啟動起來的節(jié)點的文件CP到其他節(jié)點,另外一種是使用配置服務(wù)(比如etcd或者consul) 這里使用的文件的方式存放公共配置問題復(fù)制配置文件 將 node1 上的配置文件復(fù)制到 node02 和 node03,復(fù)制的路徑包含/etc/ceph和/var/lib/ceph/bootstrap-*下的所有內(nèi)容。

ssh root@192.168.3.102 mkdir -p /var/lib/ceph
scp -r /etc/ceph root@192.168.3.102:/etc
scp -r /var/lib/ceph/bootstrap* root@192.168.3.102:/var/lib/ceph

ssh root@192.168.3.103 mkdir -p /var/lib/ceph
scp -r /etc/ceph root@192.168.3.103:/etc
scp -r /var/lib/ceph/bootstrap* root@192.168.3.103:/var/lib/ceph

啟動第二個和第三個 mon 在 node02 上執(zhí)行以下命令啟動 mon,注意修改 MON_IP

docker run -d \
        --net=host \
        --name=mon \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        -e MON_IP=192.168.3.102 \
        -e CEPH_PUBLIC_NETWORK=192.168.3.0/24 \
        ceph/daemon mon

在 node03 上執(zhí)行以下命令啟動 mon,注意修改 MON_IP

docker run -d \
        --net=host \
        --name=mon \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        -e MON_IP=192.168.3.103 \
        -e CEPH_PUBLIC_NETWORK=192.168.3.0/24 \
        ceph/daemon mon

在任意節(jié)點上在查看ceph集群狀態(tài)可以看到有三個mos上線了

[root@ceph-1 ~]# docker exec mon ceph -s
  cluster:
    id:     da8f7f5b-b767-4420-a510-287f4ced25de
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

接著就需要運行osd服務(wù)把某個磁盤給ceph作為文件共享系統(tǒng)的基礎(chǔ)存儲,所以我們需要為三臺服務(wù)器掛載對應(yīng)的磁盤(筆者這里使用的是阿里云的云服務(wù)器,這里掛載了100GB的SSD)

[root@ceph-1 ~]# fdisk -l

Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008d73a

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83884031    41940992   83  Linux

Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

三臺機(jī)器分別運行(如果需要掛載多塊可以運行多個osd即可)

docker run -d \
        --net=host \
        --name=osd \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        -v /dev/:/dev/ \
        --privileged=true \
        -e OSD_FORCE_ZAP=1 \
        -e OSD_DEVICE=/dev/vdb \
        ceph/daemon osd_ceph_disk

我們再次查看發(fā)現(xiàn)osd3個節(jié)點已經(jīng)上線了

[root@ceph-1 ~]# docker exec mon ceph -s
  cluster:
    id:     da8f7f5b-b767-4420-a510-287f4ced25de
    health: HEALTH_WARN
            no active mgr
 
  services:
    mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3
    mgr: no daemons active
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

但是我們并看不到有存儲空間,主要是mgr沒有啟動,我們把mds和rgw也一起跑起來在node1節(jié)點上:

docker run -d \
        --net=host \
        --name=mgr \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        ceph/daemon mgr
docker run -d \
        --net=host \
        --name=mds \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        -e CEPHFS_CREATE=1 \
        ceph/daemon mds
docker run -d \
        --name=rgw \
        -p 80:80 \
        -v /etc/ceph:/etc/ceph \
        -v /var/lib/ceph/:/var/lib/ceph/ \
        ceph/daemon rgw

初始化完成

[root@ceph-1 ~]# docker exec mon ceph -s
  cluster:
    id:     da8f7f5b-b767-4420-a510-287f4ced25de
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3
    mgr: ceph-1(active)
    mds: cephfs-1/1/1 up  {0=ceph-1=up:active}
    osd: 3 osds: 3 up, 3 in
    rgw: 1 daemon active
 
  data:
    pools:   6 pools, 48 pgs
    objects: 209  objects, 3.4 KiB
    usage:   6.0 GiB used, 292 GiB / 298 GiB avail
    pgs:     48 active+clean

3. 簡單使用和性能

可以使用ceph掛載磁盤進(jìn)行使用,但是ceph有很強(qiáng)的用戶校驗機(jī)制所以需要先拿到訪問key ,并且在使用過程中可以指定多個節(jié)點這就形成了負(fù)載均衡 用內(nèi)核驅(qū)動掛載 Ceph 文件系統(tǒng) — Ceph Documentation

mkdir /mnt/mycephfs
[root@ceph-1 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
        key = AQBXv0VbKtikExAAwHHp+F2HJSnYIIqaozjt3g==
        auid = 0
        caps mds = "allow"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

mount -t ceph 192.168.3.101,192.168.3.102,192.168.3.103:/ /mnt/mycephfs -o name=admin,secret=AQBhlz1bZBHcLxAAt6eIyBxnAxFoyA7PDTqAkQ==
umount /mnt/mycephfs


[root@ceph-1 ~]# lsof  /mnt/mycephfs
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF          NODE NAME
bash    10486 root  cwd    DIR    0,0        2 1099511627781 /mnt/mycephfs/data/dev/code

這樣只是最簡單的使用,還有關(guān)于rdb對象存儲以及Ceph還有快照功能

在搭建好整個集群之后進(jìn)行測試文件速度(這里主要測試的是5000多個小文件拷貝速度)如下:

# NAS盤
/app # time cp -rf php/ general/test
real    2m 7.05s
user    0m 0.13s
sys     0m 1.80s
# CEPH
/app # time cp -rf php/ generalceph/test
real    0m 6.88s
user    0m 0.05s
sys     0m 0.39s
# 本地磁盤
/app # time cp -rf php/ php2
real    0m 1.16s
user    0m 0.02s
sys     0m 0.21s

大家可以看到CEPH的速度對于NAS盤提升不是一點兩點是質(zhì)的提升,面對本地磁盤差距也沒有到不能接受的情況

4. Kubernetes使用

筆者的最終目的是在K8S中可以使用ceph作為高速共享盤,那么就需要借助K8S支持的cephFS文件掛載,具體對應(yīng)的編排如下

因為使用ceph需要密碼所以我們先創(chuàng)建一個secret

apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
  namespace: dev
data:
  key: QVFCMTZWMVZvRjVtRXhBQTVrQ1FzN2JCajhWVUxSdzI2Qzg0SEE9PQ==

最后創(chuàng)建我們需要的volume掛載卷就可以在POD中正常使用了

apiVersion: v1
kind: PersistentVolume
metadata:
  name: cephfs-pv
spec:
  capacity:
    storage: 200Gi
  accessModes:
    - ReadWriteMany
  cephfs:
    monitors:
      - 192.168.3.101:6789
      - 192.168.3.102:6789
      - 192.168.3.103:6789
    user: admin
    secretRef:
      name: ceph-secret
    readOnly: false
  storageClassName: ceph
  persistentVolumeReclaimPolicy: Recycle
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cephfs-pv-claim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  storageClassName: ceph

5. 小技巧

如果大家沒有搞定也可以先試試官方也提供整合好的demo 不需要開這么多組件才能使用,只需要以下命令即可:

docker run -d \
        --net=host \
        -v /etc/ceph:/etc/ceph \
        -e MON_IP=172.16.0.13 \
        -e CEPH_PUBLIC_NETWORK=172.16.0.0/24 \
        ceph/demo

被ceph占用的磁盤會自己劃分分區(qū),無法在被二次使用了,如果需要重新初始化可以使用命令對磁盤進(jìn)行全盤格式

 [root@ceph-1 ~]# fdisk -l

Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008d73a

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83884031    41940992   83  Linux
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 17E24D34-44A5-46BB-8753-A882133156FF


#         Start          End    Size  Type            Name
 1         2048       206847    100M  unknown         ceph data
 2      3483648    209715166   98.3G  unknown         ceph block
 3       206848      2303999      1G  unknown         ceph block.db
 4      2304000      3483647    576M  unknown         ceph block.wal

如果需要重新部署需要先,清理磁盤可以通過以下命名進(jìn)行格式化

docker run -d --privileged=true -v /dev/:/dev/ -e OSD_DEVICE=/dev/vdb ceph/daemon zap_device

以上就是Ceph分布式文件共享解決方案是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI