ceph簡介
不管你是想為雲平台提供Ceph 對象存儲和/或 Ceph 塊設備,還是想部署一個 Ceph 文件系統或者把 Ceph 作為他用,所有 Ceph 存儲集群的部署都始於部署一個個 Ceph 節點、網絡和 Ceph 存儲集群。 Ceph 存儲集群至少需要一個 Ceph Monitor 和兩個 OSD 守護進程。而運行 Ceph 文件系統客戶端時,則必須要有元數據服務器( Metadata Server )。
- 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組件:osd
- OSD 守護進程,至少兩個
- 用於存儲數據、處理數據拷貝、恢復、回滾、均衡
- 通過心跳程序向monitor提供部分監控信息
- 一個ceph集群中至少需要兩個OSD守護進程
Ceph組件:mon
- 維護集群的狀態映射信息
- 包括monitor、OSD、placement Group(PG)
- 還維護了monitor、OSD和PG的狀態改變歷史信息
Ceph組件:mgr(新功能)
- 負責ceph集群管理,如pg map
- 對外提供集群性能指標(如cpeh -s 下IO信息)
- 具有web界面的監控系統(dashboard)
ceph邏輯結構
數據通過ceph的object存儲到PG,PG在存儲到osd daemon,osd對應disk
object只能對應一個pg
一個raid可以對應一個osd
一整塊硬盤可以對應一個osd
一個分區可以對應一個osd
monitor:奇數個 osd : 幾十到上萬,osd越多性能越好
pg概念
- 副本數
- crush規則(pg怎么找到osd acting set)
- 用戶及權限
- epoach:單調遞增的版本號
- acting set: osd列表,第一個為primary osd,replicated osd
- up set :acting set過去的版本
- pg tmp:臨時pg組
osd狀態:默認每2秒匯報自己給mon(同時監控組內osd,如300秒沒有給mon匯報狀態,則會把這個osd踢出pg組)
- up 可以提供io
- down 掛掉了
- in 有數據
- out 沒數據了
ceph應用場景:通過tgt支持iscsi掛載
- 公司內部文件共享
- 海量文件,大流量,高並發
- 需要高可用、高性能文件系統
- 傳統單服務器及NAS共享難以滿足需求,如存儲容量,高可用
ceph生產環境推薦
- 存儲集群采用全萬兆網絡
- 集群網絡(不對外)與公共網絡分離(使用不同網卡)
- mon、mds與osd分離部署在不同機器上
- journal推薦使用PCI SSD,一般企業級IOPS可達40萬以上
- OSD使用SATA亦可
- 根據容量規划集群
- 至強E5 2620 V3或以上cpu,64GB或更高內存
- 最后,集群主機分散部署,避免機櫃故障(電源、網絡)
ceph安裝環境
由於機器較少,使用3台機器,充當mon與osd,生產環境不建議,生產環境至少3個mon獨立
主機 | IP | 角色 | 配置 |
ceph-0 | eth0:192.168.0.150(Public) eth1:172.16.1.100(Cluster) |
mon、osd、mgr | DISK 0 15G(OS) DISK 1 10G(Journal) DISK 2 10G(OSD) DISK 3 10G(OSD) |
ceph-1 | eth0:192.168.0.151(Public) eth1:172.16.1.101(Cluster) |
mon、osd、mgr | DISK 0 15G(OS) DISK 1 10G(Journal) DISK 2 10G(OSD) DISK 3 10G(OSD) |
ceph-2 | eth0:192.168.0.152(Public) eth1:172.16.1.102(Cluster) |
mon、osd、mgr | DISK 0 15G(OS) DISK 1 10G(Journal) DISK 2 10G(OSD) DISK 3 10G(OSD) |
一、系統設置
1.綁定主機名
由於后續安裝及配置都涉及到主機名,故此需先綁定
依次在三個節點上執行以下命令完成hosts綁定
[root@ceph-node0 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.150 ceph-node0 192.168.0.151 ceph-node1 192.168.0.152 ceph-node2
2.ssh-keygen信任
3. 每台關閉防火牆
systemctl stop firewalld
4.時間同步
yum install -y ntpdate // ntpdate cn.pool.ntp.org
5.安裝epel源與ceph-deploy
本步驟要在每一個節點上執行
- 安裝epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- 安裝ceph-deploy
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
-
替換 ceph.repo 服務器
sed -i 's#htt.*://download.ceph.com#https://mirrors.tuna.tsinghua.edu.cn/ceph#g' /etc/yum.repos.d/ceph.repo
或直接復制下方文本內容替換 /etc/yum.repos.d/ceph.repo
[Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc [ceph-source] name=Ceph source packages baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
6.安裝ceph
-
使用 yum 安裝 ceph-deploy
[root@ceph-node0 ~]# yum install -y ceph-deploy
-
創建 ceph-install 目錄並進入,安裝時產生的文件都將在這個目錄
[root@ceph-node0 ~]# mkdir ceph-install && cd ceph-install [root@ceph-node0 ceph-install]#
二、准備硬盤
1.Journal磁盤
本步驟要在每一個節點上執行
在每個節點上為Journal磁盤分區, 分別為 sdb1, sdb2, 各自對應本機的2個OSD, journal磁盤對應osd的大小為25%
-
使用 parted 命令進行創建分區操作
[root@ceph-node0 ~]# parted /dev/sdb mklabel gpt mkpart primary xfs 0% 50% mkpart primary xfs 50% 100% q
2.OSD磁盤
-
對於OSD磁盤我們不做處理,交由ceph-deploy進行操作
三、安裝ceph
1.使用ceph-deploy安裝ceph,以下步驟只在ceph-depoly管理節點執行
-
創建一個ceph集群,也就是Mon,三台都充當mon
[root@ceph-node0 ceph-install]# ceph-deploy new ceph-node0 ceph-node1 ceph-node2
-
在全部節點上安裝ceph
[root@ceph-node0 ceph-install]# ceph-deploy install ceph-node0 ceph-node1 ceph-node2 或在每個節點上手動執行 yum install -y ceph
-
創建和初始化監控節點並收集所有的秘鑰
[root@ceph-node0 ceph-install]# ceph-deploy mon create-initial
此時可以在osd節點查看mon端口
-
創建OSD存儲節點
[root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node0 --data /dev/sdc --journal /dev/sdb1 [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node0 --data /dev/sdd --journal /dev/sdb2 [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node1 --data /dev/sdc --journal /dev/sdb1 [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node1 --data /dev/sdd --journal /dev/sdb2 [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node2 --data /dev/sdc --journal /dev/sdb1 [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node2 --data /dev/sdd --journal /dev/sdb2
-
把配置文件和admin 秘鑰到管理節點和ceph節點
[root@ceph-0 ceph-install]# ceph-deploy --overwrite-conf admin ceph-node0 ceph-node1 ceph-node2
-
使用 ceph -s 命令查看集群狀態
[root@ceph-node0 ceph-install]# ceph -s cluster: id: e103fb71-c0a9-488e-ba42-98746a55778a health: HEALTH_WARN no active mgr services: mon: 3 daemons, quorum ceph-node0,ceph-node1,ceph-node2 mgr: no daemons active osd: 6 osds: 6 up, 6 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 0B used, 0B / 0B avail pgs:
如集群正常則顯示 health HEALTH_OK
如OSD未全部啟動,則使用下方命令重啟相應節點, @ 后面為 OSD ID
systemctl start ceph-osd@0
2. 部署mgr
-
luminous 版本需要啟動 mgr, 否則 ceph -s 會有 no active mgr 提示
-
官方文檔建議在每個 monitor 上都啟動一個 mgr
[root@ceph-node0 ceph-install]# ceph-deploy mgr create ceph-node0:ceph-node0 ceph-node1:ceph-node1 ceph-node2:ceph-node2
-
再次查看ceph狀態
[root@ceph-node0 ceph-install]# ceph -s cluster: id: e103fb71-c0a9-488e-ba42-98746a55778a health: HEALTH_OK services: mon: 3 daemons, quorum ceph-node0,ceph-node1,ceph-node2 mgr: ceph-node0(active), standbys: ceph-node1, ceph-node2 osd: 6 osds: 6 up, 6 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 6.02GiB used, 54.0GiB / 60.0GiB avail pgs:
3.清除操作
-
安裝過程中如遇到奇怪的錯誤,可以通過以下步驟清除操作從頭再來
[root@ceph-node0 ceph-install]# ceph-deploy purge ceph-node0 ceph-node1 ceph-node2 [root@ceph-node0 ceph-install]# ceph-deploy purgedata ceph-node0 ceph-node1 ceph-node2 [root@ceph-node0 ceph-install]# ceph-deploy forgetkeys
四、配置
1. 為何要分離網絡
-
性能
OSD 為客戶端處理數據復制,復制多份時 OSD 間的網絡負載勢必會影響到客戶端和 ceph 集群 的通訊,包括延時增加、產生性能問題;恢復和重均衡也會顯著增加公共網延時。
-
安全
很少的一撮人喜歡折騰拒絕服務攻擊(DoS)。當 OSD 間的流量瓦解時, 歸置組再也不能達到 active+clean 狀態,這樣用戶就不能讀寫數據了。挫敗此類攻擊的一種好方法是 維護一個完全獨立的集群網,使之不能直連互聯網;另外,請考慮用簽名防止欺騙攻擊。
2.分離公共網絡和集群網絡(推薦、可選)
-
按下方所列修改配置文件 ceph.conf (在目錄 ~/ceph-install 下操作,注意替換 fsid )
[global] # 注意替換 fsid fsid = dca70270-3292-4078-91c3-1fbefcd3bd62 mon_initial_members = ceph-node0, ceph-node1, ceph-node2 mon_host = 192.168.0.150,192.168.0.151,192.168.0.152 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx public network = 192.168.0.0/24 cluster network = 172.16.1.0/24 [mon.a] host = ceph-node0 mon addr = 192.168.0.150:6789 [mon.b] host = ceph-node1 mon addr = 192.168.0.151:6789 [mon.c] host = ceph-node2 mon addr = 192.168.0.152:6789 [osd] osd data = /var/lib/ceph/osd/ceph-$id osd journal size = 20000 osd mkfs type = xfs osd mkfs options xfs = -f filestore xattr use omap = true filestore min sync interval = 10 filestore max sync interval = 15 filestore queue max ops = 25000 filestore queue max bytes = 10485760 filestore queue committing max ops = 5000 filestore queue committing max bytes = 10485760000 journal max write bytes = 1073714824 journal max write entries = 10000 journal queue max ops = 50000 journal queue max bytes = 10485760000 osd max write size = 512 osd client message size cap = 2147483648 osd deep scrub stride = 131072 osd op threads = 8 osd disk threads = 4 osd map cache size = 1024 osd map cache bl size = 128 osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" osd recovery op priority = 4 osd recovery max active = 10 osd max backfills = 4 [client] rbd cache = true rbd cache size = 268435456 rbd cache max dirty = 134217728 rbd cache max dirty age = 5
-
將配置文件同步到其它節點
[root@ceph-node0 ceph-install]# ceph-deploy --overwrite-conf admin ceph-node0 ceph-node1 ceph-node2
-
逐一重啟各個節點
systemctl restart ceph\*.service ceph\*.target
-
此時
ceph-mon 進程應監聽在 192.168.0.0 網段IP上 ceph-osd 應分別監聽在 192.168.0.0 和 172.16.1.0 兩個網段IP上 172.16.1.0 網段為集群內部復制數據時使用 192.168.0.0 網段為客戶端連接時使用
[root@ceph-node2 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.16.1.102:6800 0.0.0.0:* LISTEN 55794/ceph-osd
tcp 0 0 192.168.0.152:6800 0.0.0.0:* LISTEN 55794/ceph-osd
tcp 0 0 192.168.0.152:6801 0.0.0.0:* LISTEN 55794/ceph-osd
tcp 0 0 172.16.1.102:6801 0.0.0.0:* LISTEN 55794/ceph-osd
tcp 0 0 172.16.1.102:6802 0.0.0.0:* LISTEN 55792/ceph-osd
tcp 0 0 192.168.0.152:6802 0.0.0.0:* LISTEN 55792/ceph-osd
tcp 0 0 192.168.0.152:6803 0.0.0.0:* LISTEN 55792/ceph-osd
tcp 0 0 172.16.1.102:6803 0.0.0.0:* LISTEN 55792/ceph-osd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1981/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1713/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1716/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1814/master
tcp 0 0 192.168.0.152:6789 0.0.0.0:* LISTEN 55663/ceph-mon
tcp6 0 0 :::22 :::* LISTEN 1713/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1716/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1814/master
- 查看osd與ceph狀態
[root@ceph-node0 ceph-install]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.05878 root default -3 0.01959 host ceph-node0 0 hdd 0.00980 osd.0 up 1.00000 1.00000 1 hdd 0.00980 osd.1 up 1.00000 1.00000 -5 0.01959 host ceph-node1 2 hdd 0.00980 osd.2 up 1.00000 1.00000 3 hdd 0.00980 osd.3 up 1.00000 1.00000 -7 0.01959 host ceph-node2 4 hdd 0.00980 osd.4 up 1.00000 1.00000 5 hdd 0.00980 osd.5 up 1.00000 1.00000 // [root@ceph-node0 ceph-install]# ceph -s cluster: id: e103fb71-c0a9-488e-ba42-98746a55778a health: HEALTH_WARN 1/3 mons down, quorum ceph-node0,ceph-node1 services: mon: 3 daemons, quorum ceph-node0,ceph-node1, out of quorum: ceph-node2 mgr: ceph-node0(active), standbys: ceph-node2, ceph-node1 osd: 6 osds: 6 up, 6 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 6.03GiB used, 54.0GiB / 60.0GiB avail pgs:
五、Ceph 存儲池與文件系統
1.創建文件系統ceph-fs
ceph-fs需要元數據mds服務
-
創建mds,osd上都創建,高可用性
[root@ceph-node0 ceph-install]# ceph-deploy mds create ceph-node0 ceph-node1 ceph-node2
- 上方命令會在 ceph-node0 和 ceph-node1 上啟動MDS
2.pool 存儲池
-
查看存儲池
root@ceph-node0 ceph-install]# ceph osd pool ls
-
創建存儲池
[root@ceph-node0 ceph-install]# ceph osd pool create data_data 32 pool名稱:data_data pg數:32
3.創建ceph-fs文件系統
- 查看已有的文件系統
[root@ceph-node0 ceph-install]# ceph fs ls
- 創建一個名稱為data的文件系統
[root@ceph-node0 ceph-install]# ceph osd pool create data_data 32 [root@ceph-node0 ceph-install]# ceph osd pool create data_metadata 32 [root@ceph-node0 ceph-install]# ceph fs new data data_metadata data_data
-
使用客戶端 ceph-fuse 掛載文件系統
[root@ceph-mon yum.repos.d]# yum install -y ceph-fuse
- 客戶端創建目錄掛載文件系統
// 創建data錄目 [root@ceph-mon ~]# mkdir /data // 掛載 root@ceph-mon ~]# ceph-fuse -m 192.168.0.150,192.168.0.151,192.168.0.152:6789 /data
掛載時出現如下錯誤:
說明認證配置找不到,把管理節點上的ceph.conf拷到客戶端
[root@ceph-node0 ceph-install]# scp ceph.conf 192.168.0.153:/etc/ceph/ //從Ceph集群復制 ceph.conf 與 ceph.client.admin.keyring 文件到客戶端 /etc/ceph 目錄下 [root@ceph-node0 ceph-install]# cat ceph.client.admin.keyring [client.admin] key = AQB8wL5bnutGMBAAg5+eadh1fNShOG5d8mERIg== // 在客戶端創建ceph.keyring,為在管理節點創建的用戶 [root@ceph-mon ceph]# cat ceph.keyring [client.admin] key = AQB8wL5bnutGMBAAg5+eadh1fNShOG5d8mERIg==