參考文檔:https://wiki.deimos.fr/Ceph_:_performance,_reliability_and_scalability_storage_solutionnode
Ceph 當前的最新的LTS版本爲 mimic 13.2.x 和 luminous12.2.x, 經過release信息能夠查看到相關發佈信息.在具體的版本中會說明是不是LTS版本。python
每一年大約會發布三到四個穩定版,每一個穩定版都有個名字(如 ‘Firefly’ ),而且會一直提供缺陷修復,至少持續到下一個穩定版發佈。linux
其它穩定版都是 LTS ( Long Term Stable ,長期穩定)的,並且會持續更新,直到發佈了兩個 LTS 。好比 Hammer 發佈以後 Dumpling 才隱退, Jewel 發佈以後 Firefly 才隱退,以此類推。基本原理就是,爲了修復缺陷和移植某些重要功能,對 LTS (如 Dumpling )的移植會一直持續到下一個 LTS 發佈( Firefly 就是 Dumpling 以後的一個 LTS )。下一個 LTS 發佈後,還有可能移植缺陷修正,主要取決於這些問題是否會妨礙升級到下一個 LTS (這裏有個實例, Firefly 發佈後還在修復 Dumpling ,一直持續到 Hammer 發佈,主要是確保 Dumpling 能夠平滑地遷移到 Firefly )。web
第一個 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年來,版本號方案一直沒變,直到 2015 年 4 月 0.94.1 ( Hammer 的第一個修正版)發佈後,爲了不 0.99 (以及 0.100 或 1.00 ?),咱們制定了新策略。算法
x 將從 9 算起,它表明 Infernalis ( I 是第九個字母),這樣咱們第九個發佈週期的第一個開發版就是 9.0.0 ;後續的開發版依次是 9.0.1 、 9.0.2 等等。json
具體介紹能夠參考官方文檔:
硬件需求說明: http://docs.ceph.com/docs/master/start/hardware-recommendations/
系統需求說明:http://docs.ceph.com/docs/master/start/os-recommendations/瀏覽器
Ceph有兩種安裝方式: 手動部署和使用 ceph-deploy工具部署。
手動部署比較繁瑣,可是對於初學者而言更加容易理解。 ceph-deploy部署工具的方式適用於大規模集羣的部署。
這裏會分別演示兩種部署方式。網絡
ceph-12 luminous版本rpm包地址:https://download.ceph.com/rpm-luminousapp
ceph-13 mimic版本rpm包地址:https://download.ceph.com/rpm-mimicfrontend
在部署以前須要準備好三臺CentOS主機,我這裏使用的是CentOS7.5,並將系統內核升級到4.x長期支持版本,相關的配置信息以下:
local-node-1: 10.0.0.1 local-node-2: 10.0.0.2 local-node-3: 10.0.0.3
配置hosts解析三臺節點的主機名,並將三臺節點配置爲無密碼認證模式。
關閉防火牆和Selinux
每臺主機節點至少添加一塊磁盤用於ceph存儲,在實際的生產中能夠將多塊盤作raid,ceph 在添加磁盤時會自動格式化,因此此處不須要格式化。
yum install snappy leveldb gdisk python-argparse gperftools-libs -y
添加yum 源,導入key,這裏我使用最新的mimic版本:
rpm --import 'https://download.ceph.com/keys/release.asc' su -c 'rpm -Uvh https://download.ceph.com/rpm-mimic/el7/noarch/ceph-release-1-0.el7.noarch.rpm'
因爲國內的網絡問題,這裏能夠選擇使用阿里雲的源,修改repo文件以下:
[Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc
yum install ceph-deploy -y
mkdir /opt/ceph-cluster
[root@local-node-1 ~]# cd /opt/ceph-cluster/ [root@local-node-1 ceph-cluster]# ceph-deploy new local-node-1
==提示==:若是在執行ceph-deploy命令時出現以下錯誤,則須要安裝pyhon2-pip
# ceph-deploy new local-node-1 Traceback (most recent call last): File "/usr/bin/ceph-deploy", line 18, in <module> from ceph_deploy.cli import main File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module> import pkg_resources ImportError: No module named pkg_resources # 解決辦法,安裝python2-pip yum install python2-pip* -y
命令執行成功後會在當前目錄生成多個配置文件。
[root@local-node-1 ceph-cluster]# ll total 12 -rw-r--r-- 1 root root 198 Feb 15 15:37 ceph.conf -rw-r--r-- 1 root root 2993 Feb 15 15:37 ceph-deploy-ceph.log -rw------- 1 root root 73 Feb 15 15:37 ceph.mon.keyring
若是有多個不一樣的網絡接口(一般ceph集羣會分公共網絡爲和集羣網絡,也稱爲public network和Cluster network),在生產環境中都會將這兩個網絡分開使用不一樣的網絡接口,能夠在ceph.conf配置文件的[global]
區域添加以下參數:
public network = {ip-address}/{netmask} # 公共網絡,用於集羣中訪問ceph存儲數據和ceph自身的監控和控制數據 cluster network = {cluster-network/netmask} # 集羣網絡,用於ceph osd之間互相同步複製ceph集羣數據
若是不進行配置,默認只會使用公共網絡(public network),生產環境嚴禁這樣作。
yum install ceph ceph-radosgw -y
在網絡正常的狀況下也可使用ceph-deploy
來批量部署,實際效果和上述yum安裝軟件同樣:
ceph-deploy install --release mimic local-node-1 local-node-2 local-node-3
在國內網絡很差的狀況下,不推薦這麼作,執行此命令以後,咱們經過前臺輸出,能夠發現這步操做作了以下工做:
[root@local-node-1 ~]# ceph -v ceph version 13.2.4 (b10be4d44915a4d78a8e06aa31919e74927b142e) mimic (stable)
查看節點狀態發現屬於不健康的狀態:
[root@local-node-1 ~]# ceph status 2019-02-15 16:59:28.897 7f8a67b8c700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory 2019-02-15 16:59:28.897 7f8a67b8c700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication [errno 2] error connecting to the cluster
[root@local-node-1 ceph-cluster]# ceph-deploy mon create-initial
[root@local-node-1 ceph-cluster]# ceph-deploy admin local-node-1 local-node-2 local-node-3
[root@local-node-1 ceph-cluster]# ceph-deploy mgr create local-node-1
# ceph-deploy disk list local-node-1 ... [local-node-1][INFO ] Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors [local-node-1][INFO ] Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
使用disk zap
命令會抹掉磁盤上的分區和數據
[root@local-node-1 ceph-cluster]# ceph-deploy disk zap local-node-1 /dev/sdb
建立OSD磁盤,添加三個節點的三個磁盤:
[root@local-node-1 ceph-cluster]# ceph-deploy osd create --data /dev/sdb local-node-1 [root@local-node-1 ceph-cluster]# ceph-deploy osd create --data /dev/sdb local-node-2 [root@local-node-1 ceph-cluster]# ceph-deploy osd create --data /dev/sdb local-node-3
==注意:== 若是使用LVM邏輯捲來添加OSD,應該使用參數 --data volume_group/lv_name
而不是直接使用邏輯卷的路徑。
[root@local-node-1 ceph-cluster]# ceph health HEALTH_OK [root@local-node-1 ceph-cluster]# ceph -s cluster: id: 6a4812f7-83cb-43e5-abac-f2b8e37db127 health: HEALTH_OK services: mon: 1 daemons, quorum local-node-1 mgr: local-node-1(active) osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 27 GiB / 30 GiB avail pgs:
檢查節點端口信息:
[root@local-node-1 ceph-cluster]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 859/sshd tcp 0 0 10.0.0.1:6789 0.0.0.0:* LISTEN 2893/ceph-mon tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6804 0.0.0.0:* LISTEN 4049/ceph-mgr tcp6 0 0 :::22 :::* LISTEN 859/sshd [root@local-node-2 /]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 860/sshd tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 2439/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 2439/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 2439/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 2439/ceph-osd tcp6 0 0 :::22 :::* LISTEN 860/sshd [root@local-node-3 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 861/sshd tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 2352/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 2352/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 2352/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 2352/ceph-osd tcp6 0 0 :::22 :::* LISTEN 861/sshd
至此,ceph 基礎存儲集羣部署完成。
http://docs.ceph.com/docs/master/start/quick-ceph-deploy/#
當咱們有了以上基礎的ceph集羣后,能夠經過ceph-deploy來擴展集羣。
爲了實現mon組件的高可用,咱們能夠在node2和node3上也部署上mon(monitor的數量必須爲奇數個,1,3,5等,以便在節點出現故障時進行選舉),同時,咱們還須要在node1上添加Matedata Server(mds)組件。
要使用CephFS,咱們就必須至少安裝一個metadata sever,執行以下命令安裝 metadata server:
[root@local-node-1 ceph-cluster]# ceph-deploy mds create local-node-1
根據輸出提示能夠發現ceph-mds@local-node-1服務已經啓動。
# netstat -lntp|grep mds tcp 0 0 0.0.0.0:6805 0.0.0.0:* LISTEN 4549/ceph-mds
在添加第二個mon或者更多mon時,必須先修改admin節點和將要部署mon節點的ceph.conf的配置文件,修改mon_initial_members
, mon_host
和 public_network
的相關配置:
[root@local-node-1 ceph-cluster]# cat ceph.conf [global] fsid = 6a4812f7-83cb-43e5-abac-f2b8e37db127 mon_initial_members = local-node-1,local-node-2,local-node-3 mon_host = 10.0.0.1,10.0.0.2,10.0.0.3 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx public_network = 10.0.0.0/24
下發配置到集羣中的全部節點:
[root@local-node-1 ceph-cluster]# ceph-deploy --overwrite-conf config push local-node-2 local-node-3
更新新的配置到全部的 monitor節點上:
ceph-deploy --overwrite-conf config push local-node-1 local-node-2 local-node-3
添加mon到local-node-2和local-node-3節點上:
ceph-deploy mon add local-node-2 ceph-deploy mon add local-node-3
新增 Monitor 後,Ceph 會自動開始同步並造成法定人數。你能夠用下面的命令檢查法定人數狀態:
# ceph quorum_status --format json-pretty { "election_epoch": 14, "quorum": [ 0, 1, 2 ], "quorum_names": [ "local-node-1", "local-node-2", "local-node-3" ], "quorum_leader_name": "local-node-1", "monmap": { "epoch": 3, "fsid": "6a4812f7-83cb-43e5-abac-f2b8e37db127", "modified": "2019-02-18 13:39:00.705952", "created": "2019-02-15 17:38:09.329589", "features": { "persistent": [ "kraken", "luminous", "mimic", "osdmap-prune" ], "optional": [] }, "mons": [ { "rank": 0, "name": "local-node-1", "addr": "10.0.0.1:6789/0", "public_addr": "10.0.0.1:6789/0" }, { "rank": 1, "name": "local-node-2", "addr": "10.0.0.2:6789/0", "public_addr": "10.0.0.2:6789/0" }, { "rank": 2, "name": "local-node-3", "addr": "10.0.0.3:6789/0", "public_addr": "10.0.0.3:6789/0" } ] } }
==注意:== 當你的 Ceph 集羣運行着多個 monitor 時,各 monitor 主機上都應該配置 NTP ,並且要確保這些 monitor 位於 NTP 服務的同一級。
Ceph Manager守護進程以活動/備用的模式運行。 部署其餘管理器(Manager)守護程序可確保在一個守護程序或主機發生故障時,另外一個守護程序或主機能夠在不中斷服務的狀況下接管。
爲 其它兩臺節點添加Manager:
[root@local-node-1 ceph-cluster]# ceph-deploy mgr create local-node-2 local-node-3
查看狀態,已經添加了三個mgr:
[root@local-node-1 ceph-cluster]# ceph -s cluster: id: 6a4812f7-83cb-43e5-abac-f2b8e37db127 health: HEALTH_OK services: mon: 3 daemons, quorum local-node-1,local-node-2,local-node-3 mgr: local-node-1(active), standbys: local-node-2, local-node-3 osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 27 GiB / 30 GiB avail pgs:
使用ceph的 Ceph Object Gateway,還須要部署一個RGW的實例,使用以下命令建立一個新的RGW實例:
[root@local-node-1 ceph-cluster]# ceph-deploy rgw create local-node-1
默認狀況下RGW會監聽7480端口,若是想修改此默認端口能夠經過編輯運行RGW節點上的ceph.conf文件:
[client] rgw frontends = civetweb port=80
使用IPv6的狀況:
[client] rgw frontends = civetweb port=[::]:80
使用瀏覽器訪問此端口能獲取到以下信息:
# curl 10.0.0.1:7480 <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
若是要存儲對象數據到ceph集羣中,ceph的客戶必須知足如下條件:
Ceph客戶端檢索最新的集羣映射,CRUSH算法計算如何將對象映射到放置組,而後計算如何動態地將放置組分配給Ceph OSD守護進程。 要查找對象位置,您只須要對象名稱和池名稱。例如:
ceph osd map {poolname} {object-name}
做爲練習,咱們建立一個對象,指定對象的名稱,並指定一個文件路徑,此文件包含了對象數據,並使用rados put 命令指定存儲池名稱:
echo {Test-data} > testfile.txt ceph osd pool create mytest 8 rados put {object-name} {file-path} --pool=mytest # 示例: echo testdata > testfile.txt # ceph osd pool create mytest 8 pool 'mytest' created rados put test-object-1 testfile.txt --pool=mytest
驗證ceph存儲了此對象:
# rados -p mytest ls test-object-1
定位對象:
ceph osd map {pool-name} {object-name} # ceph osd map mytest test-object-1 osdmap e34 pool 'mytest' (5) object 'test-object-1' -> pg 5.74dc35e2 (5.2) -> up ([1,0,2], p1) acting ([1,0,2], p1)
刪除對象:
rados rm test-object-1 --pool=mytest
刪除存儲池:
ceph osd pool rm mytest
使用上面的刪除命令會提示確認信息,正常刪除使用以下命令:
# ceph osd pool rm mytest mytest --yes-i-really-really-mean-it Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
若是是上述報錯須要修改ceph.conf配置文件,並重啓mon服務:
[mon] mon allow pool delete = true
重啓ceph-mon:
systemctl restart ceph-mon.target
而後再執行刪除,便可成功:
[root@local-node-1 ceph-cluster]# ceph osd pool rm mytest mytest --yes-i-really-really-mean-it pool 'mytest' removed [root@local-node-1 ceph-cluster]# rados df POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR .rgw.root 1.1 KiB 4 0 12 0 0 0 12 8 KiB 4 4 KiB default.rgw.control 0 B 8 0 24 0 0 0 0 0 B 0 0 B default.rgw.log 0 B 175 0 525 0 0 0 10251 9.8 MiB 6834 0 B default.rgw.meta 0 B 0 0 0 0 0 0 0 0 B 0 0 B total_objects 187 total_used 3.0 GiB total_avail 27 GiB total_space 30 GiB
若是在配置的過程當中出現問題想要從新配置,能夠執行下面的命令來清除配置和ceph軟件:
// 清除節點ceph軟件和數據,若是運行了purge命令,必須從新安裝ceph ceph-deploy purge {ceph-node} [{ceph-node}] ceph-deploy purgedata {ceph-node} [{ceph-node}] // 清除配置: ceph-deploy forgetkeys // 清除當前目錄的配置文件 rm ceph.*
若是集羣是處於 active + clean 狀態,則說明集羣正常:
[root@local-node-1 ceph-cluster]# ceph -s cluster: id: 6a4812f7-83cb-43e5-abac-f2b8e37db127 health: HEALTH_OK services: mon: 3 daemons, quorum local-node-1,local-node-2,local-node-3 mgr: local-node-1(active), standbys: local-node-2, local-node-3 osd: 3 osds: 3 up, 3 in rgw: 1 daemon active data: pools: 4 pools, 32 pgs objects: 187 objects, 1.1 KiB usage: 3.0 GiB used, 27 GiB / 30 GiB avail pgs: 32 active+clean