1. 程式人生 > >CentOS 7部署 Ceph分布式存儲架構

CentOS 7部署 Ceph分布式存儲架構

.org 展示 擴容 分享 其他 裝包 主機 發生 fqdn

一、概述

  隨著OpenStack日漸成為開源雲計算的標準軟件棧,Ceph也已經成為OpenStack的首選後端存儲。Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。
  ceph官方文檔 http://docs.ceph.org.cn/
  ceph中文開源社區 http://ceph.org.cn/

  Ceph是一個開源的分布式文件系統。因為它還支持塊存儲、對象存儲,所以很自然的被用做雲計算框架openstack或cloudstack整個存儲後端。當然也可以單獨作為存儲,例如部署一套集群作為對象存儲、SAN存儲、NAS存儲等。

ceph支持
  1、對象存儲:即radosgw,兼容S3接口。通過rest api上傳、下載文件。

  2、文件系統:posix接口。可以將ceph集群看做一個共享文件系統掛載到本地。

  3、塊存儲:即rbd。有kernel rbd和librbd兩種使用方式。支持快照、克隆。相當於一塊硬盤掛到本地,用法和用途和硬盤一樣。比如在OpenStack項目裏,Ceph的塊設備存儲可以對接OpenStack的後端存儲

Ceph相比其它分布式存儲有哪些優點?

  1、統一存儲
    雖然ceph底層是一個分布式文件系統,但由於在上層開發了支持對象和塊的接口。所以在開源存儲軟件中,能夠一統江湖。至於能不能千秋萬代,就不知了。

  2、高擴展性
    擴容方便、容量大。能夠管理上千臺服務器、EB級的容量。

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

  4、高性能
    因為是多個副本,因此在讀寫操作時候能夠做到高度並行化。理論上,節點越多,整個集群的IOPS和吞吐量越高。另外一點ceph客戶端讀寫數據直接與存儲設備(osd) 交互。


Ceph各組件介紹:
  •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 等基本命令。

二、Ceph實驗集群部署

1. 主機準備 (禁用selinux, 關閉防火墻)

  xuegod67    10.10.10.67    admin,osd, mon 作為管理和監控節點
  xuegod68    10.10.10.68    osd,mds
  xuegod69    10.10.10.69    osd,mds
  xuegod70    10.10.10.70    client

  #xuegod67作管理. osd. mon節點; xuegod68和69作osd mds; xuegod70客戶端
  前三臺服務器增加一塊硬盤/dev/sdb實驗, 創建目錄並掛載到/var/local/osd{0,1,2}

[root@xuegod67 ~]# mkfs.xfs  /dev/sdb
[root@xuegod67 ~]# mkdir -p /var/local/osd0
[root@xuegod67 ~]# mount /dev/sdb  /var/local/osd0/
[root@xuegod68 ~]# mkfs.xfs  /dev/sdb
[root@xuegod68 ~]# mount /dev/sdb  /var/local/osd1/
[root@xuegod69 ~]# mkfs.xfs  /dev/sdb
[root@xuegod69 ~]# mount /dev/sdb  /var/local/osd2/

2. 編輯hosts文件

(規範系統主機名添加hosts文件實現集群主機名與主機名之間相互能夠解析(host 文件添加主機名不要使用fqdn方式)可用hostnamectl set-hostname name設置
分別打開各節點的/etc/hosts文件,加入這四個節點ip與名稱的對應關系
  10.10.10.67    xuegod67
  10.10.10.68    xuegod68
  10.10.10.69    xuegod69
  10.10.10.70    xuegod70
SSH免密碼登錄
在管理節點使用ssh-keygen 生成ssh keys 發布到各節點

[root@xuegod67 ~]# ssh-keygen #所有的輸入選項都直接回車生成。

[root@xuegod67 ~]# ssh-copy-id xuegod67
[root@xuegod67 ~]# ssh-copy-id xuegod68
[root@xuegod67 ~]# ssh-copy-id xuegod69
[root@xuegod67 ~]# ssh-copy-id xuegod70

3. 管理節點安裝ceph-deploy工具

第一步:增加 yum配置文件(各個節點都需要增加yum源)

[root@xuegod67 ~]#vim /etc/yum.repos.d/ceph.repo

添加以下內容:(ceph國內163源)
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1

第二步:更新軟件源並安裝ceph-deploy 管理工具
[root@xuegod67 ~]# yum clean all && yum list
[root@xuegod67 ~]# yum -y install ceph-deploy

4.創建monitor服務

[root@xuegod67 ~]# mkdir /etc/ceph && cd /etc/ceph
[root@xuegod67 ceph]#  ceph-deploy new xuegod67    #mon安裝在xuegod67節點
[root@xuegod67 ceph]# ls                                #生成配置文件在當前目錄下
ceph.conf  ceph.log  ceph.mon.keyring
Ceph配置文件、一個monitor密鑰環和一個日誌文件

5.修改副本數

[root@xuegod67 ceph]# vim ceph.conf 配置文件的默認副本數從3改成2,這樣只有兩個osd也能達到active+clean狀態,把下面這行加入到[global]段(可選配置)
[global]
fsid = 92f5581d-79d2-4c9f-a523-4965eedc846b
mon_initial_members = xuegod67
mon_host = 10.10.10.67
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2

6.在所有節點安裝ceph

(如果網絡源安裝失敗,手工安裝epel-release 然後安裝yum –yinstall cep-release再yum –y install ceph ceph-radosgw)

錯誤參考:https://blog.csdn.net/yenai2008/article/details/72457463

[root@xuegod67 ceph]# ceph-deploy install xuegod67 xuegod68 xuegod69 xuegod70
安裝ceph monitor
[root@xuegod67 ceph]# ceph-deploy mon create xuegod67

收集節點的keyring文件
[root@xuegod67 ceph]# ceph-deploy  gatherkeys xuegod67

7.部署osd服務

添加osd節點 (所有osd節點執行)

我們實驗準備時已經創建目錄/var/local/osd{id}

8.創建激活osd

#創建osd  
[root@xuegod67 ceph]# ceph-deploy osd prepare xuegod67:/var/local/osd0 xuegod68:/var/local/osd1 xuegod69:/var/local/osd2
#激活osd  
[root@xuegod67 ceph]# ceph-deploy osd activate xuegod67:/var/local/osd0 xuegod68:/var/local/osd1 xuegod69:/var/local/osd2
如果報錯

技術分享圖片

解決:在各個節點上給/var/local/osd1/和/var/local/osd2/添加權限
如下:
  chmod 777 -R /var/local/osd1/
  chmod 777 -R /var/local/osd2/*

查看狀態:
[root@xuegod67 ceph]# ceph-deploy osd list xuegod67 xuegod68 xuegod69

9.統一配置

(用ceph-deploy把配置文件和admin密鑰拷貝到所有節點,這樣每次執行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了)
[root@xuegod67 ceph]# ceph-deploy admin xuegod67 xuegod68 xuegod69

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

10.查看osd狀態

[root@xuegod67 ceph]# ceph health 或 ceph -s
HEALTH_OK

11.部署mds服務

[root@xuegod67 ceph]# ceph-deploy mds create xuegod68 xuegod69 #我們MDS安裝2臺
[root@xuegod67 ceph]# ceph mds stat #查看狀態

12.集群狀態

[root@xuegod67 ceph]# ceph -s

技術分享圖片

以上基本上完成了ceph存儲集群的搭建。

三 、創建ceph文件系統

[root@xuegod67 ceph]# ceph fs ls   #創建之前
No filesystems enabled
創建存儲池
[root@xuegod67 ceph]# ceph osd pool create cephfs_data <pg_num>  
[root@xuegod67 ceph]# ceph osd pool create cephfs_metadata <pg_num>

其中:<pg_num> = 128 ,
關於創建存儲池
確定 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 取值變得更加重要,因為它顯著地影響著集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。

1. 創建文件系統

創建好存儲池後,你就可以用 fs new 命令創建文件系統了

[root@xuegod67 ceph]# ceph fs new <fs_name> cephfs_metadata cephfs_data  
其中:<fs_name> = cephfs  可自定義

[root@xuegod67 ceph]# ceph fs ls              #查看創建後的cephfs
[root@xuegod67 ceph]# ceph mds stat          #查看mds節點狀態
e6: 1/1/1  up  {0=xuegod69=up:active}, 1  up:standby
active是活躍的,另1個是處於熱備份的狀態

2.掛載Ceph文件系統

有不同掛載方式

A.內核驅動掛載Ceph文件系統

[root@xuegod70 ceph]# mkdir /opt #創建掛載點
存儲密鑰(如果沒有在管理節點使用ceph-deploy拷貝ceph配置文件)
cat /etc/ceph/ceph.client.admin.keyring 
將key對應的值復制下來保存到文件:/etc/ceph/admin.secret中。
掛載
[root@xuegod70 ceph]# mount -t ceph 10.10.10.67:6789:/ /opt -o name=admin,secretfile=/etc/ceph/admin.secret
取消掛載
[root@xuegod70 ceph]# umount /opt

B.用戶控件掛載Ceph文件系統

安裝ceph-fuse
[root@xuegod70 ceph]# yum install -y ceph-fuse
掛載
[root@xuegod70 ceph]# ceph-fuse -m 10.10.10.67:6789 /opt
取消掛載
[root@xuegod70 ceph]# fusermount -u /opt

  ceph在開源社區還是比較熱門的,但是更多的是應用於雲計算的後端存儲。所以大多數在生產環境中使用ceph的公司都會有專門的團隊對ceph進行二次開發,ceph的運維難度也比較大。但是經過合理的優化之後,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

可以參考內容:http://blog.51cto.com/12270625/1887648

CentOS 7部署 Ceph分布式存儲架構