ceph 集羣部署

參考文檔:https://wiki.deimos.fr/Ceph_:_performance,_reliability_and_scalability_storage_solutionnode

Ceph 版本選擇

1. Ceph的版本發佈週期

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

  • LTS (長期穩定):直到後續兩個 LTS 發佈
  • 穩定版:直到下一個穩定版發佈
  • 開發、或測試版:不會給它移植

2. 版本約定

第一個 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年來,版本號方案一直沒變,直到 2015 年 4 月 0.94.1 ( Hammer 的第一個修正版)發佈後,爲了不 0.99 (以及 0.100 或 1.00 ?),咱們制定了新策略。算法

  • x.0.z - 開發版(給早期測試者和勇士們)
  • x.1.z - 候選版(用於測試集羣、高手們)
  • x.2.z - 穩定、修正版(給用戶們)

x 將從 9 算起,它表明 Infernalis ( I 是第九個字母),這樣咱們第九個發佈週期的第一個開發版就是 9.0.0 ;後續的開發版依次是 9.0.1 、 9.0.2 等等。json

3. 硬件推薦和系統要求

具體介紹能夠參考官方文檔:
硬件需求說明: http://docs.ceph.com/docs/master/start/hardware-recommendations/
系統需求說明:http://docs.ceph.com/docs/master/start/os-recommendations/瀏覽器

4. 部署說明

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

使用ceph-deploy部署集羣

官方文檔

0. 部署前的準備

在部署以前須要準備好三臺CentOS主機,我這裏使用的是CentOS7.5,並將系統內核升級到4.x長期支持版本,相關的配置信息以下:

  1. 節點主機名和IP信息
local-node-1: 10.0.0.1
local-node-2: 10.0.0.2
local-node-3: 10.0.0.3
  1. 配置hosts解析三臺節點的主機名,並將三臺節點配置爲無密碼認證模式。

  2. 關閉防火牆和Selinux

  3. 每臺主機節點至少添加一塊磁盤用於ceph存儲,在實際的生產中能夠將多塊盤作raid,ceph 在添加磁盤時會自動格式化,因此此處不須要格式化。

  4. ceph對節點之間時間的要求很高,須要安裝ntp並作好時間同步,配置好epel源。

1. 全部節點安裝依賴包

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

2. 僅在部署節點安裝 ceph-deploy工具

yum install ceph-deploy -y

3. 使用ceph-deploy部署節點

1).建立存放ceph配置文件的目錄:
mkdir /opt/ceph-cluster
2). 進入配置文件目錄,初始化node-1節點:
[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),生產環境嚴禁這樣作。

3). 安裝ceph到各個節點,各個節點執行:
yum install ceph ceph-radosgw -y

在網絡正常的狀況下也可使用ceph-deploy來批量部署,實際效果和上述yum安裝軟件同樣:

ceph-deploy install --release mimic local-node-1 local-node-2 local-node-3

在國內網絡很差的狀況下,不推薦這麼作,執行此命令以後,咱們經過前臺輸出,能夠發現這步操做作了以下工做:

  • 移除安裝節點上已經存在的yum源
  • 更新主機節點上的yum源,這個源是官方源,因爲網絡緣由有可能會形成安裝不成功
  • 執行yum -y install ceph ceph-radosgw 命令安裝ceph
4). 檢查各個節點是否安裝成功:
[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
5). 在node-1節點上建立monitor,會在當前目錄生成幾個key:
[root@local-node-1 ceph-cluster]# ceph-deploy  mon create-initial
6). 分發key
[root@local-node-1 ceph-cluster]# ceph-deploy admin local-node-1 local-node-2 local-node-3
7). 建立一個管理進程(只有在luminous+ 以上版本纔有此功能 >= 12.x版本)
[root@local-node-1 ceph-cluster]# ceph-deploy mgr create local-node-1
8). 查看節點上的可用磁盤,排除系統盤
# 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
9).格式化node-1節點用於ceph存儲的磁盤

使用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 而不是直接使用邏輯卷的路徑。

10). 查看集羣狀態是否正常
[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)組件。

image

1. 添加Metadata Server

要使用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

2. 添加Monitors

在添加第二個mon或者更多mon時,必須先修改admin節點和將要部署mon節點的ceph.conf的配置文件,修改mon_initial_members, mon_hostpublic_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 服務的同一級。

3. 添加 Managers

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:

4. 添加RGW 實例

使用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
相關文章
相關標籤/搜索