您好,登錄后才能下訂單哦!
參考文檔:https://wiki.deimos.fr/Ceph_:_performance,_reliability_and_scalability_storage_solution
Ceph 當前的最新的LTS版本為 mimic 13.2.x 和 luminous12.2.x, 通過release信息可以查看到相關發布信息.在具體的版本中會說明是否是LTS版本。
每年大約會發布三到四個穩定版,每個穩定版都有個名字(如 ‘Firefly’ ),并且會一直提供缺陷修復,至少持續到下一個穩定版發布。
其它穩定版都是 LTS ( Long Term Stable ,長期穩定)的,而且會持續更新,直到發布了兩個 LTS 。比如 Hammer 發布之后 Dumpling 才隱退, Jewel 發布之后 Firefly 才隱退,以此類推。基本原理就是,為了修復缺陷和移植某些重要功能,對 LTS (如 Dumpling )的移植會一直持續到下一個 LTS 發布( Firefly 就是 Dumpling 之后的一個 LTS )。下一個 LTS 發布后,還有可能移植缺陷修正,主要取決于這些問題是否會妨礙升級到下一個 LTS (這里有個實例, Firefly 發布后還在修復 Dumpling ,一直持續到 Hammer 發布,主要是確保 Dumpling 可以平滑地遷移到 Firefly )。
第一個 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 等等。
具體介紹可以參考官方文檔:
硬件需求說明: 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-luminous
ceph-13 mimic版本rpm包地址:https://download.ceph.com/rpm-mimic
官方文檔
在部署之前需要準備好三臺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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。