1. 程式人生 > 程式設計 >Ceph叢集部署

Ceph叢集部署

一 概述

1.1 背景

近期進行公司業務容器化改造,在為kubernetes提供儲存選型方面,在選型中本地儲存不可跨node,NFS共享儲存不好做高可用,因此選型Ceph來為k8s提供儲存類。特此筆記以備後用。

1.2 概述

Ceph是一種為優秀的效能、可靠性和可擴充套件性而設計的統一的、分散式檔案系統。Ceph是一個開源的分散式檔案系統。因為它還支援塊儲存、物件儲存,所以很自然的被用做雲端計算框架openstack或cloudstack整個儲存後端。當然也可以單獨作為儲存,例如部署一套叢集作為物件儲存、SAN儲存、NAS儲存等。可以作為k8s的儲存類,來方便容器持久化儲存。

1.3 支援格式

  • 物件儲存:即radosgw,相容S3介面。通過rest api上傳、下載檔案。

  • 檔案系統:posix介面。可以將ceph叢集看做一個共享檔案系統掛載到本地。

  • 塊儲存:即rbd。有kernel rbd和librbd兩種使用方式。支援快照、克隆。相當於一塊硬碟掛到本地,用法和用途和硬碟一樣。比如在OpenStack專案裡,Ceph的塊裝置儲存可以對接OpenStack的後端儲存

1.4 優勢

  • 統一儲存:雖然ceph底層是一個分散式檔案系統,但由於在上層開發了支援物件和塊的介面

  • 高擴充套件性:擴容方便、容量大。能夠管理上千臺伺服器、EB級的容量。

  • 高可靠性:支援多份強一致性副本,EC。副本能夠垮主機、機架、機房、資料中心存放。所以安全可靠。儲存節點可以自管理、自動修復。無單點故障,容錯性強。

  • 高效能:因為是多個副本,因此在讀寫操作時候能夠做到高度並行化。理論上,節點越多,整個叢集的IOPS和吞吐量越高。另外一點ceph客戶端讀寫資料直接與儲存裝置(osd) 互動。

1.5 核心元件

  • Ceph OSDs:Ceph OSD 守護程式( Ceph OSD )的功能是儲存資料,處理資料的複製、恢復、回填、再均衡,並通過檢查其他OSD 守護程式的心跳來向 Ceph Monitors 提供一些監控資訊。當 Ceph 儲存叢集設定為有2個副本時,至少需要2個 OSD 守護程式,叢集才能達到 active+clean 狀態( Ceph 預設有3個副本,但你可以調整副本數)。

  • Monitors: Ceph Monitor維護著展示叢集狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 儲存著發生在Monitors 、 OSD 和 PG上的每一次狀態變更的歷史資訊(稱為 epoch )。

  • MDSs: Ceph 元資料伺服器( MDS )為 Ceph 檔案系統儲存元資料(也就是說,Ceph 塊裝置和 Ceph 物件儲存不使用MDS )。元資料伺服器使得 POSIX 檔案系統的使用者們,可以在不對 Ceph 儲存叢集造成負擔的前提下,執行諸如 ls、find 等基本命令。

二 安裝部署

2.1 主機資訊

主機名 作業系統 配置 K8S元件 CEPH元件 私網IP SSH埠 使用者名稱密碼
master CentOS 7.4 64bit 4C8G + 500G硬碟 admin,osd,mon 172.16.60.2 2001/22 root/uWWKxxxxxxcuh
node01 CentOS 7.4 64bit 4C8G + 500G硬碟 osd,mon 172.16.60.3 2002/22 root/IZ5lxxxxxxxQOkLh
node02 CentOS 7.4 64bit 4C8G + 500G硬碟 osd,mon 172.16.60.4 2003/22 root/nUMFxxxxxxzDMcE

2.2 磁碟準備

需要在三臺主機建立磁碟,並掛載到主機的/var/local/osd{0,1,2}

[root@master ~]# mkfs.xfs /dev/vdc
[root@master ~]# mkdir -p /var/local/osd0
[root@master ~]# mount /dev/vdc /var/local/osd0/


[root@node01 ~]# mkfs.xfs /dev/vdc
[root@node01 ~]# mkdir -p /var/local/osd1
[root@node01 ~]# mount /dev/vdc /var/local/osd1/

[root@node02 ~]# mkfs.xfs /dev/vdc 
[root@node02 ~]# mkdir -p /var/local/osd2
[root@node02 ~]# mount /dev/vdc /var/local/osd2/

將磁碟新增進入fstab中,確保開機自動掛載

複製程式碼

2.3 配置各主機hosts檔案

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.60.2 master
172.16.60.3 node01
172.16.60.4 node02
複製程式碼

2.4 管理節點ssh免金鑰登入node1/node2

[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node01
[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node02
複製程式碼

2.5 master節點安裝ceph-deploy工具

# 各節點均更新ceph的yum源
vim /etc/yum.repos.d/ceph.repo 

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1

# 安裝ceph-deploy工具
yum clean all && yum makecache
yum -y install ceph-deploy
複製程式碼

2.6 建立monitor服務

建立monitor服務,指定master節點的hostname

[root@master ~]# mkdir /etc/ceph && cd /etc/ceph
[root@master ceph]# ceph-deploy new master
[root@master ceph]# ll
total 12
-rw-r--r-- 1 root root  195 Sep  3 10:56 ceph.conf
-rw-r--r-- 1 root root 2915 Sep  3 10:56 ceph-deploy-ceph.log
-rw------- 1 root root   73 Sep  3 10:56 ceph.mon.keyring


[root@master ceph]# cat ceph.conf 
[global]
fsid = 5b9eb8d2-1c12-4f6d-ae9c-85078795794b
mon_initial_members = master
mon_host = 172.16.60.2
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2

配置檔案的預設副本數從3改成2,這樣只有兩個osd也能達到active+clean狀態,把下面這行加入到[global]段(可選配置)
複製程式碼

2.7 所有節點安裝ceph

# 各節點安裝軟體包
yum -y install yum-plugin-priorities epel-release
# master節點利用ceph-deply 部署ceph

[root@master ceph]# ceph-deploy install master node01 node02

[root@master ceph]# ceph --version
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
複製程式碼

2.8 部署相關服務

# 安裝ceph monitor
[root@master ceph]# ceph-deploy mon create master

# 收集節點的keyring檔案
[root@master ceph]# ceph-deploy  gatherkeys master

# 建立osd
[root@master ceph]# ceph-deploy osd prepare master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2

# 許可權修改
[root@master ceph]# chmod 777 -R /var/local/osd{0..2}
[root@master ceph]# chmod 777 -R /var/local/osd{0..2}/*

# 啟用osd
[root@master ceph]# ceph-deploy osd activate master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2

# 檢視狀態
[root@master ceph]# ceph-deploy osd list master node01 node02
複製程式碼

2.9 統一配置

用ceph-deploy把配置檔案和admin金鑰拷貝到所有節點,這樣每次執行Ceph命令列時就無需指定monitor地址和ceph.client.admin.keyring了

[root@master ceph]# ceph-deploy admin master node01 node02

# 各節點修改ceph.client.admin.keyring許可權:
[root@master ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring


# 檢視狀態
[root@master ceph]# ceph health
HEALTH_OK
[root@master ceph]# ceph -s
    cluster 5b9eb8d2-1c12-4f6d-ae9c-85078795794b
     health HEALTH_OK
     monmap e1: 1 mons at {master=172.16.60.2:6789/0}
            election epoch 3,quorum 0 master
     osdmap e15: 3 osds: 3 up,3 in
            flags sortbitwise,require_jewel_osds
      pgmap v27: 64 pgs,1 pools,0 bytes data,0 objects
            15681 MB used,1483 GB / 1499 GB avail
                  64 active+clean
                      
複製程式碼

2.10 部署MDS服務

我們在node01/node02上安裝部署MDS服務

[root@master ceph]# ceph-deploy mds create node01 node02

# 檢視狀態
[root@master ceph]# ceph mds stat
e3:,2 up:standby
[root@master ~]# ceph mon stat
e1: 1 mons at {master=172.16.60.2:6789/0},election epoch 4,quorum 0 master

# 檢視服務
[root@master ceph]# systemctl list-unit-files |grep ceph
[email protected]                     static  
[email protected]                            static  
[email protected]                             disabled
[email protected]                             enabled 
[email protected]                             enabled 
[email protected]                         disabled
ceph-mds.target                               enabled 
ceph-mon.target                               enabled 
ceph-osd.target                               enabled 
ceph-radosgw.target                           enabled 
ceph.target                                   enabled 
複製程式碼

至此,基本上完成了ceph儲存叢集的搭建。

三 建立ceph檔案系統

3.1 建立檔案系統

關於建立儲存池 確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:

  • 少於 5 個 OSD 時可把 pg_num 設定為 128
  • OSD 數量在 5 到 10 個時,可把 pg_num 設定為 512
  • OSD 數量在 10 到 50 個時,可把 pg_num 設定為 4096
  • OSD 數量大於 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值
  • 自己計算 pg_num 取值時可藉助 pgcalc 工具   隨著 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響著叢集的行為、以及出錯時的資料永續性(即災難性事件導致資料丟失的概率)。
[root@master ceph]# ceph osd pool create cephfs_data <pg_num> 
[root@master ceph]# ceph osd pool create cephfs_metadata <pg_num>

[root@master ~]# ceph osd pool ls 
rbd
[root@master ~]#  ceph osd pool create kube 128
pool 'kube' created
[root@master ~]# ceph osd pool ls              
rbd
kube

# 檢視證書
[root@master ~]# ceph auth list
installed auth entries:

mds.node01
        key: AQB56m1dE42rOBAA0yRhsmQb3QMEaTsQ71jHdg==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
mds.node02
        key: AQB66m1dWuhWKhAAtbiZN7amGcjUh6Rj/HNFkg==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
osd.0
        key: AQA46W1daFx3IxAAE1esQW+t1fWJDfEQd+167w==
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQBA6W1daJG9IxAAQwETgrVc3awkEZejDSaaow==
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.2
        key: AQBI6W1dot4/GxAAle3Ii3/D38RmwNC4yTCoPg==
        caps: [mon] allow profile osd
        caps: [osd] allow *
client.admin
        key: AQBu4W1d90dZKxAAH/kta03cP5znnCcWeOngzQ==
        caps: [mds] allow *
        caps: [mon] allow *
        caps: [osd] allow *
client.bootstrap-mds
        key: AQBv4W1djJ1uHhAACzBcXjVoZFgLg3lN+KEv8Q==
        caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
        key: AQCS4W1dna9COBAAiWPu7uk3ItJxisVIwn2duA==
        caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
        key: AQBu4W1dxappOhAA5FanGhQhAOUlizqa5uMG3A==
        caps: [mon] allow profile bootstrap-osd
client.bootstrap-rgw
        key: AQBv4W1dpwvsDhAAyp58v08XttJWzLoHWVHZow==
        caps: [mon] allow profile bootstrap-rgw
複製程式碼

3.2 建立客戶端金鑰

# 建立keyring
[root@master ~]# ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube' -o /etc/ceph/ceph.client.kube.keyring
[root@master ~]# ceph auth list

# 將金鑰拷貝到node1和node2
[root@master ceph]# scp ceph.client.kube.keyring root@node01:/etc/ceph/
複製程式碼

四 解除安裝

清理機器上的ceph相關配置:
停止所有程式: stop ceph-all
解除安裝所有ceph程式:ceph-deploy uninstall [{ceph-node}]
刪除ceph相關的安裝包:ceph-deploy purge {ceph-node} [{ceph-data}]
刪除ceph相關的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]
刪除key:ceph-deploy forgetkeys

解除安裝ceph-deploy管理:yum -y remove ceph-deploy
複製程式碼

參考連結