ceph

1、Ceph是分佈式存儲系統,支持三種接口。

Object:有原生的API,而且也兼容Swift和S3的API

Block:支持精簡配置、快照、克隆

File:Posix接口,支持快照

Ceph也是分佈式存儲系統,它的特點是:

高擴展性:使用普通x86服務器,支持10~1000臺服務器,支持TB到PB級的擴展。

高可靠性:沒有單點故障,多數據副本,自動管理,自動修復。

高性能:數據分佈均衡,並行化度高。對於objects storage和block storage,不需要元數據服務器。

目前Inktank公司掌控Ceph的開發,但Ceph是開源的,遵循LGPL協議。Inktank還積極整合Ceph和其他雲計算和大數據平臺,目前Ceph支持OpenStack、CloudStack、OpenNebula、Hadoop等。



1.1、組件:

Ceph OSDs: Object Storage Device,提供存儲資源。

Monitors:維護整個Ceph集羣的全局狀態。

MDSs: 用於保存CephFS的元數據。



1.2、映射

Ceph的命名空間是 (Pool, Object),每個Object都會映射到一組OSD中(由這組OSD保存這個Object):

(Pool, Object) → (Pool, PG) → OSD set → Disk

Ceph中Pools的屬性有:

Object的副本數

Placement Groups的數量

所使用的CRUSH Ruleset

在Ceph中,Object先映射到PG(Placement Group),再由PG映射到OSD set。每個Pool有多個PG,每個Object通過計算hash值並取模得到它所對應的PG。PG再映射到一組OSD(OSD的個數由Pool 的副本數決定),

第一個OSD是Primary,剩下的都是Replicas。

數據映射(Data Placement)的方式決定了存儲系統的性能和擴展性。(Pool, PG) → OSD set 的映射由四個因素決定:

CRUSH算法:一種僞隨機算法。

OSD MAP:包含當前所有Pool的狀態和所有OSD的狀態。

CRUSH MAP:包含當前磁盤、服務器、機架的層級結構。

CRUSH Rules:數據映射的策略。這些策略可以靈活的設置object存放的區域

把Object分成組,這降低了需要追蹤和處理metadata的數量(在全局的層面上,我們不需要追蹤和處理每個object的metadata和placement,只需要管理PG的metadata就可以了。PG的數量級遠遠低於object的

數量級)。

增加PG的數量可以均衡每個OSD的負載,提高並行度。

分隔故障域,提高數據的可靠性。


1.3、強一致性

Ceph的讀寫操作採用Primary-Replica模型,Client只向Object所對應OSD set的Primary發起讀寫請求,這保證了數據的強一致性。

由於每個Object都只有一個Primary OSD,因此對Object的更新都是順序的,不存在同步問題。

當Primary收到Object的寫請求時,它負責把數據發送給其他Replicas,只要這個數據被保存在所有的OSD上時,Primary才應答Object的寫請求,這保證了副本的一致性。



RBD的I/O路徑很長,要經過網絡、文件系統、磁盤:

Librbd -> networking -> OSD -> FileSystem -> Disk


2、案例說明:

節點:

osd節點,每個系統都添加500G硬盤

10.200.197.11 cs1.99bill.com

10.200.197.12 cs2.99bill.com

10.200.197.13 cs3.99bill.com

10.200.197.14 cs4.99bill.com

10.200.197.15 cs5.99bill.com

10.200.197.16 cs6.99bill.com

10.200.197.17 cs7.99bill.com

10.200.197.18 cs8.99bill.com

10.200.197.19 cs9.99bill.com

10.200.197.20 cs10.99bill.com

10.200.197.21 cs11.99bill.com

10.200.197.22 cs12.99bill.com

10.200.197.23 cs13.99bill.com

10.200.197.24 cs14.99bill.com

10.200.197.25 cs15.99bill.com

mon節點

10.200.197.200 nc1.99bill.com

10.200.197.201 nc2.99bill.com

10.200.197.202 nc3.99bill.com

客戶端

10.200.197.100 vip

10.200.197.252 cn1.99bill.com

10.200.197.253 cn2.99bill.com



mount 10.200.197.100:/data /mnt/data

2.1、

關閉防火牆或者開放 6789/6800~6900 端口、關閉 SELINUX;

配置源

centos7.repo

[ceph]

name=CentOS-- 163.com

baseurl= http://mirrors.163.com/ceph/rpm/el7/x86_64/

gpgcheck=0

gpgkey= http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7



[root@nc1 yum.repos.d]# cat epel.repo

[epel]

name=Extra Packages for Enterprise Linux 7 - $basearch

#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch

failovermethod=priority

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7


[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - $basearch - Debug

#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=1


[epel-source]

name=Extra Packages for Enterprise Linux 7 - $basearch - Source

#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=1

2.2、每臺yum  install ceph


安裝部署主機(ceph-deploy)安裝環境準備

cd /etc/ceph/

yum install ceph-deploy -y


創建 mon 節點 

cd /etc/ceph/

ceph-deploy new nc1 nc2 nc3

2.3:添加初始 monitor 節點和收集祕鑰

ceph-deploy mon create-initial

2.4:驗證集羣 mon 節點安裝成功

[root@nc1 ceph]# ceph -s

安裝集羣 osd 服務

每臺osd服務器格式化盤

fdisk /dev/sdb

mkfs.xfs /dev/sdb1



執行 osd 初始化命令



ceph-deploy --overwrite-conf osd prepare cs1:sdb1 cs2:sdb1 cs3:sdb1 cs4:sdb1 cs5:sdb1 cs6:sdb1 cs7:sdb1

 激活 OSD

ceph-deploy osd activate cs1:sdb1 cs2:sdb1 cs3:sdb1 cs4:sdb1 cs5:sdb1 cs6:sdb1 cs7:sdb1

2.5:驗證 osd 啓動狀態

 ceph osd tree

 

 

2.6:PGs per OSD (2 < min 30)報錯解決:

修改前查看數量

[root@nc1 ~]# ceph osd dump|grep rbd

修改配置:

ceph osd pool set rbd pg_num 128

ceph osd pool set rbd pgp_num 128


2.8:添加元數據服務器 

a:添加元數據服務器

cd /etc/ceph

ceph-deploy --overwrite-conf mds create nc{1..3}

b:驗證 mds 服務

[root@nc1 ceph]# ceph mds stat

e1: 0/0/0 up

c:狀態查看。還沒有創建時候的狀態。

對於一個剛創建的 MDS 服務,雖然服務是運行的,但是它的狀態直到創建 pools 以及文件系統的時候纔會變爲

Active.

[root@nc1 ~]# ceph mds dump

d:通過下面的操作創建 Filesystem

[root@nc1 ~]# ceph osd pool create cephfs_data 128

[root@nc1 ~]# ceph osd pool create cephfs_metadata 128

[root@nc1 ~]# ceph fs new leadorfs cephfs_metadata cephfs_data

e:成功創建後,mds stat 的狀態如下

[root@nc1 ~]# ceph mds stat


2.9:同步集羣配置文件

同步配置文件和 client.admin key

ceph-deploy --overwrite-conf admin nc{1..3} cs{1..9}

單獨同步配置文件

ceph-deploy --overwrite-conf config push nc{1..3} cs{1..9}


2.10:修改 crushmap 信息


1:把 ceph 的 crush map 導出並轉換爲文本格式,

先把 crush map 以二進制的形式導入到 test 文本。

Ptmind Ceph Cluster 安裝配置文檔

ceph osd getcrushmap -o test

2:轉換爲可讀格式:

用 crushtool 工具把 test 裏的二進制數據轉換成文本形式保存到 test1 文檔裏。

crushtool -d test -o test1

3:把重新寫的 ceph crush 導入 ceph 集羣

把 test1 轉換成二進制形式

crushtool -c test1 -o test2

把 test2 導入集羣、

ceph osd setcrushmap -i test2 



2.11:清理軟件包

ceph-deploy purge nc{1..3} cs{1..9}

2:卸載之前掛載的 osd 磁盤

/usr/bin/umount -a

rm -rf /var/lib/ceph



2.12:集羣配置參數優化

1:配置參數優化

#

fsid = 973482fb-acf2-4a39-a691-3f810120b013

mon_initial_members = nc1, nc2, nc3

mon_host = 172.16.6.151,172.16.6.152,172.16.6.153

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

#數據副本數,手動設置等同於 ceph osd pool set {pool-name} size {size}。

osd pool default size = 3

#數據最小副本數,以向客戶端確認寫操作。如果未達到最小值, Ceph 就不會向客戶端回覆已寫確認。

osd pool default min size = 1

#當 Ceph 存儲集羣開始時,Ceph 在 OS 等級(比如, 文件描述符最大的)設置 max open fds 。它幫助阻止 Ceph OSD 守

護進程在文件描述符之外運行。

max open files= 131072

#集羣公共網絡

public network = 192.168.0.0/16

#集羣私有網絡

cluster network = 192.168.0.0/16

###OSD filestore

#擴展屬性(XATTRs),爲 XATTRS 使用 object map,EXT4 文件系統時使用,XFS 或者 btrfs 也可以使用默認:false

#爲 XATTR 使用對象圖,使用 ext4 文件系統的時候要設置。

filestore xattr use omap = true

#在一個 CRUSH 規則內用於 chooseleaf 的桶類型。用序列號而不是名字

osd crush chooseleaf type = 1

[mon]

#時鐘偏移

mon clock drift allowed = .50

# OSD 宕機後數據開始恢復時間

mon osd down out interval = 900

#MON-OSD 滿比,在被 OSD 進程使用之前一個硬盤可用空間大於%20,認爲狀態良好。

mon osd full ratio = .80

#MON-OSD nearfull 率,在被 OSD 進程使用之前一個硬盤的剩餘空間大於%30,認爲狀態良好,另集羣總空間使用率

大於%70,系統會告警。

mon osd nearfull ratio = .70

[osd]

#osd 格式化磁盤的分區格式 xfs

osd mkfs type = xfs

#強制格式化

osd mkfs options xfs = -f

#每個存儲池默認 pg 數

osd pool default pg num = 3000

#每個存儲池默認 pgp 數

osd pool default pgp num = 3000

##同步間隔

#從日誌到數據盤最大同步間隔間隔秒數,默認:5

filestore max sync interval = 15

#從日誌到數據盤最小同步間隔秒數,默認 0.1

filestore min sync interval = 10


##隊列

#數據盤最大接受的操作數,超過此設置的請求會被拒絕。默認:500

filestore queue max ops = 25000

#數據盤一次操作最大字節數(bytes)默認:100 << 20

filestore queue max bytes = 10485760

#數據盤能夠 commit 的最大操作數默認:500

filestore queue committing max ops = 5000

#數據盤能夠 commit 的最大字節數(bytes)100 << 20

filestore queue committing max bytes = 10485760000

#最大並行文件系統操作線程數,默認 2;

filestore op threads = 32

###osd journal

#注意,Ceph OSD 進程在往數據盤上刷數據的過程中,是停止寫操作的。

#OSD 日誌大小(MB)默認 5120,推薦 20000,使用 ssd 塊存儲日誌,可以設置爲 0,使用整個塊。

osd journal size = 10000 #從 v0.54 起,如果日誌文件是塊設備,這個選項會被忽略,且使用整個塊設備。

#一次性寫入的最大字節數(bytes)默認:10 << 20

journal max write bytes = 1073714824

#journal 一次寫入日誌的最大數量,默認:100

journal max write entries = 10000

#journal 一次性最大在隊列中的操作數,默認 500

journal queue max ops = 50000

#journal 一次性最大在隊列中的字節數(bytes),默認:10 << 20

journal queue max bytes = 10485760000

###OSD 通訊

#注意:增加 osd op threads 和 disk threads 會帶來額外的 CPU 開銷

#OSD 一次可寫入的最大值(MB),默認:90

osd max write size = 512

#客戶端允許在內存中的最大數據(bytes),默認:500MB 默認 500 * 1024L * 1024L =524288000

osd client message size cap = 2147483648

#在 Deep Scrub 時候允許讀取的字節數(bytes),默認:524288

osd deep scrub stride = 131072

#OSD 進程操作的線程數,設置爲 0 來禁用它。增加的數量可能會增加請求的處理速率。默認:2

osd op threads = 8

#OSD 密集型操作例如恢復和 Scrubbing 時的線程,默認:1

osd disk threads = 5

###OSD 映射

#保留 OSD Map 的緩存(MB),默認:500

osd map cache size = 1024

#OSD 進程在內存中的 OSD Map 緩存(MB),默認:50

osd map cache bl size = 128

#Ceph OSD xfs Mount 選項默認:rw,noatime,inode64

osd mount options xfs = rw,noexec,nodev,noatime,nodiratime,nobarrier

###OSD recovery

#osd 異常數據恢復啓動的恢復進程數量,默認:1

Ptmind Ceph Cluster 安裝配置文檔 --康建華

osd recovery threads = 2

#恢復操作優先級,它是相對 OSD 客戶端 運算 優先級。取值 1-63,值越高佔用資源越高,默認:10 。

osd recovery op priority = 4

#同一時間內活躍的恢復請求數,更多的請求將加速復甦,但請求放置一個增加的羣集上的負載。默認:15

osd recovery max active = 10

#一個 OSD 允許的最大 backfills 數,默認:10

osd max backfills = 4

[client]

#啓用緩存 RADOS 塊設備,默認:false

rbd cache = true

#RBD 緩存大小(以字節爲單位)默認:33554432

rbd cache size = 268435456

#緩存爲 write-back 時允許的最大 dirty 字節數(bytes),如果爲 0,使用 write-through ,默認:25165824

#Write-through:向高速 Cache 寫入數據時同時也往後端慢速設備寫一份,兩者都寫完才返回。

#Write-back:向高速 Cache 寫完數據後立即返回,數據不保證立即寫入後端設備。給調用者的感覺是速度快,但需

要額外的機制來防止掉電帶來的數據不一致。

rbd cache max dirty = 134217728

#在被刷新到存儲盤前 dirty 數據存在緩存的時間(seconds)默認:1

rbd cache max dirty age = 5

[mon.nc1]

host = nc1

mon data = /var/lib/ceph/mon/ceph-nc1/

mon addr = 172.16.6.151:6789

[mon.nc2]

host = nc2

 mon data = /var/lib/ceph/mon/ceph-nc2/

mon addr = 172.16.6.152:6789

[mon.nc3]

host = nc3

 mon data = /var/lib/ceph/mon/ceph-nc3/

mon addr = 172.16.6.153:6789



3使用 


3.1、cephfs


1、添加元數據服務器

cd /etc/ceph

ceph-deploy --overwrite-conf mds create nc{1..3}

2:驗證 mds 服務

[root@nc1 ceph]# ceph mds stat

2:通過下面的操作創建 Filesystem

[root@nc1 ~]# ceph osd pool create cephfs_data 128

[root@nc1 ~]# ceph osd pool create cephfs_metadata 128

[root@nc1 ~]# ceph fs new leadorfs cephfs_metadata cephfs_data


3、創建密鑰文件

Ceph 存儲集羣默認啓用認證,你應該有個包含密鑰的配置文件(但不是密鑰環本身)。用下述方法獲取某一用戶的密鑰:

在密鑰環文件中找到與某用戶對應的密鑰,例如:

cat ceph.client.admin.keyring

找到用於掛載 Ceph 文件系統的用戶,複製其密鑰。大概看起來如下所示:

[client.admin]

   key = AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==

打開文本編輯器。


把密鑰粘帖進去,大概像這樣:

AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==

保存文件,並把其用戶名 name 作爲一個屬性(如 admin.secret )。

4、ceph使用

[root@TMCT-15 ~]# mount -t ceph 192.168.9.104:6789:/ /mnt/mycephfs2 -o name=admin,secretfile=/data/admin.secret

FATAL: Module ceph not found.

failed to load ceph kernel module (1)

mount error: ceph filesystem not supported by the system


[root@TMCT-15 ~]# rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org

[root@TMCT-15 ~]# rpm -Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm

[root@TMCT-15 ~]# yum --enablerepo=elrepo-kernel install kernel-ml

If you want that new kernel to boot by default, edit /etc/grub.conf, and change the Default=1 to Default=0, and reboot.

掛載

mount -t ceph 192.168.9.104:6789,192.168.9.105:6789,192.168.9.106:6789:/credit_platform /opt/netdata/Creditdata -o name=admin,secretfile=/etc/ceph/admin.secret



3.2、塊設備

創建一個pool ‘ db-pool’

[root@test-1 ~]# ceph osd pool create  db-pool 128 128

創建鏡像

rbd create db1 --size 102400 --pool db-pool

我們同時也可以改變image的容量大小

[root@nc3 ceph]# rbd resize --size 1024000   db1  --pool db-pool

查看pool中的鏡像

rbd ls db-pool


映射

rbd map db1 --pool db-pool --id admin

查看映射

rbd showmapped

刪除映射

rbd unmap /dev/rbd1

掛載

mount /dev/rbd0 /data/

 

實踐

keepalived+nfs

nfs掛載塊設備,並提供nfs服務。

[root@cn1 keepalived]# cat keepalived.conf

! Configuration File for keepalived


global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script chk_ceph {

    script "/etc/keepalived/chk_ceph.keepalived.sh"

    interval 1

    weight 2

}


vrrp_script chk_mantaince_down {

   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

   interval 1

   weight 2

}

vrrp_instance VI_1 {

    state MASTER

    interface ens192

    virtual_router_id 51

    priority 101

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass sLAlDoDEWs

    }

  track_interface {

       ens192

    }

    virtual_ipaddress {

        10.200.197.100

    }

    track_script {

        chk_ceph

        chk_mantaince_down

    }



    notify_master "/etc/keepalived/notify.sh master"

    notify_backup "/etc/keepalived/notify.sh backup"

    notify_fault "/etc/keepalived/notify.sh fault"


}

[root@cn1 keepalived]# cat notify.sh

#!/bin/bash

# Author: [email protected]

# description: An example of notify script

#


vip=10.200.197.100

[email protected]


notify() {

    mailsubject="`hostname` to be $1: $vip floating"

    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"

    echo $mailbody | mail -s "$mailsubject" $contact

}


case "$1" in

    master)

        notify master

        ssh 10.200.197.253 """umount -l /data/"""

        ssh 10.200.197.253 """ rbd showmapped|grep /dev/rbd|awk '{print \"rbd unmap \"\$NF}'|bash;"""

        map=`ssh 10.200.197.253 """rbd map db1 --pool db-pool --id admin"""`

        ssh 10.200.197.253 """mount ${map} /data """

        umount -l /data/

        rbd showmapped|grep /dev/rbd|awk '{print "rbd unmap "$NF}'|bash;

        rbd map db1 --pool db-pool --id admin

        map=`rbd showmapped|grep /dev/rbd|awk '{print $NF}'|tail -n 1`

        mount $map /data/

        exit 0

    ;;

    backup)

        notify backup

        umount -l /data/

        rbd showmapped|grep /dev/rbd|awk '{print "rbd unmap "$NF}'|bash;

        rbd map db1 --pool db-pool --id admin

        map=`rbd showmapped|grep /dev/rbd|awk '{print $NF}'|tail -n 1`

        mount $map /data/

        ssh 10.200.197.253 """umount -l /data/"""

        ssh 10.200.197.253 """ rbd showmapped|grep /dev/rbd|awk '{print \"rbd unmap \"\$NF}'|bash;"""

        map=`ssh 10.200.197.253 """rbd map db1 --pool db-pool --id admin"""`

        ssh 10.200.197.253 """mount ${map} /data """

        exit 0

    ;;

    fault)

        notify fault

        exit 0

    ;;

    *)

        echo 'Usage: `basename $0` {master|backup|fault}'

        exit 1

    ;;

esac

[root@cn1 keepalived]# cat chk_ceph.keepalived.sh

#!/bin/bash

# description:

# 定時查看nfs是否存在,如果不存在則啓動nfs

# 如果啓動失敗,則返回1

status=`ps aux --no-header|grep nfs|grep -v grep|wc -l`

if [ $status -eq 0 ];then

/bin/systemctl restart  nfs.service

sleep 3

status=`ps aux --no-header|grep nfs|grep -v grep|wc -l`

if [ ${status} -eq 0 ];then

exit 1

fi

fi




3.3、CEPH 對象存儲快速入門


從 firefly(v0.80)起,Ceph 存儲集羣顯著地簡化了 Ceph 對象網關的安裝和配置。網關守護進程內嵌了 Civetweb,無需額外安裝 web 服務器或配置 FastCGI。此外,可以直接 使用 ceph-deploy 來安裝網關軟件包、生成密鑰、配置數據目錄以及創建一個網關實例。


Tip Civetweb 默認使用 7480 端口。要麼直接打開 7480 端口,要麼在你的 Ceph 配置文件中設置首選端口(例如 80 端口)。

要使用 Ceph 對象網關,請執行下列步驟:


安裝 CEPH 對象網關


在 client-node 上執行預安裝步驟。如果你打算使用 Civetweb 的默認端口 7480 ,必須通過 firewall-cmd 或 iptables 來打開它。詳情見預檢。


從管理節點的工作目錄,在 client-node 上安裝 Ceph 對象網關軟件包。例如:


ceph-deploy install --rgw <client-node> [<client-node> ...]

新建 CEPH 對象網關實例

ceph-deploy install --rgw cn2

yum install ceph-radosgw

從管理節點的工作目錄,在 client-node 上新建一個 Ceph 對象網關實例。例如:


ceph-deploy rgw create

一旦網關開始運行,你就可以通過 7480 端口來訪問它(比如 http://client-node:7480 )。


配置 CEPH 對象網關實例


通過修改 Ceph 配置文件可以更改默認端口(比如改成 80 )。增加名爲 [client.rgw.<client-node>] 的小節,把 <client-node> 替換成你自己 Ceph 客戶端節點的短名稱(即 hostname -s 的輸出)。例如,你的節點名就是 client-node ,在 [global] 節後增加一個類似於下面的小節:


[client.rgw.client-node]

rgw_frontends = "civetweb port=80"

Note 確保在 rgw_frontends 鍵值對的 port=<port-number> 中沒有空格。

Important 如果你打算使用 80 端口,確保 Apache 服務器沒有在使用該端口,否則會和 Civetweb 衝突。出現這種情況時我們建議移除 Apache 服務。

爲了使新端口的設置生效,需要重啓 Ceph 對象網關。在 RHEL 7 和 Fedora 上 ,執行:


sudo systemctl restart ceph-radosgw.service

在 RHEL 6 和 Ubuntu 上,執行:


sudo service radosgw restart id=rgw.<short-hostname>

最後,檢查節點的防火牆,確保你所選用的端口(例如 80 端口)處於開放狀態。如果沒有,把該端口加入放行規則並重載防火牆的配置。例如:


sudo firewall-cmd --list-all sudo firewall-cmd --zone=public --add-port

80/tcp --permanent

sudo firewall-cmd --reload

關於使用 firewall-cmd 或 iptables 配置防火牆的詳細信息,請參閱預檢。


你應該可以生成一個未授權的請求,並收到應答。例如,一個如下不帶參數的請求:


http://<client-node>:80

應該收到這樣的應答:


<?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>

更多管理和 API 細節請參閱 Ceph 對象網關的配置 指南。




http://michaelkang.blog.51cto.com/1553154/1732525





調試對象存儲,推薦式s3cmd


1:安裝和配置s3cmd

yum install s3cmd -y


2:配置s3cmd進行S3接口測試,初始化 s3cmd本地環境  將之前radosgw-admin創建的user的access_key和secret_key,根據本機實際進行賦值;


vim ~/.s3cfg


[default]

access_key = 6FIZEZBT3LUBTPC60Z33

bucket_location = US

cloudfront_host = ceph.ptengine.cn

cloudfront_resource = /2015-12-15/distribution

default_mime_type = binary/octet-stream

delete_removed = False

dry_run = False

encoding = UTF-8

encrypt = False

follow_symlinks = False

force = False

get_continue = False

gpg_command = /usr/bin/gpg

gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s

gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s

gpg_passphrase =

guess_mime_type = True

host_base = ceph-100-80

host_bucket = %(*)s.ceph-100-80

human_readable_sizes = False

list_md5 = False

log_target_prefix =

preserve_attrs = True

progress_meter = True

proxy_host =

proxy_port = 0

recursive = False

recv_chunk = 4096

reduced_redundancy = False

secret_key = DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5

send_chunk = 4096

simpledb_host = rgw.ptengine.cn

skip_existing = False

socket_timeout = 10

urlencoding_mode = normal

use_https = False

verbosity = WARNING


3:測試是否配置成功:


s3cmd --configure

將會問你一系列問題:

    AWS S3的訪問密鑰和安全密鑰

    對AWS S3雙向傳輸的加密密碼和加密數據

    爲加密數據設定GPG程序的路徑(例如,/usr/bin/gpg)

    是否使用https協議

    如果使用http代理,設定名字和端口


配置將以保存普通文本格式保存在 ~/.s3cfg.

一路選確定,因爲我們已經配置過了,直到最後一步Test選y:


########################本人測試環境配置,s3cmd自測ok#############################

[root@ceph-100-80 ceph]# more ~/.s3cfg 

[default]

access_key = 6FIZEZBT3LUBTPC60Z33

access_token = 

add_encoding_exts = 

add_headers = 

bucket_location = US

ca_certs_file = 

cache_file = 

check_ssl_certificate = True

check_ssl_hostname = True

cloudfront_host = rgw.ptengine.cn

default_mime_type = binary/octet-stream

delay_updates = False

delete_after = False

delete_after_fetch = False

delete_removed = False

dry_run = False

enable_multipart = True

encoding = UTF-8

encrypt = False

expiry_date = 

expiry_days = 

expiry_prefix = 

follow_symlinks = False

force = False

get_continue = False

gpg_command = /usr/bin/gpg

gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s

gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s

gpg_passphrase = 

guess_mime_type = True

host_base = rgw.ptengine.cn

host_bucket = %(*)s.rgw.ptengine.cn

human_readable_sizes = False

invalidate_default_index_on_cf = False

invalidate_default_index_root_on_cf = True

invalidate_on_cf = False

kms_key = 

limitrate = 0

list_md5 = False

log_target_prefix = 

long_listing = False

max_delete = -1

mime_type = 

multipart_chunk_size_mb = 15

preserve_attrs = True

progress_meter = True

proxy_host = 

proxy_port = 0

put_continue = False

recursive = False

recv_chunk = 4096

reduced_redundancy = False

requester_pays = False

restore_days = 1

secret_key = DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5

send_chunk = 4096

server_side_encryption = False

signature_v2 = False

simpledb_host = rgw.ptengine.cn

skip_existing = False

socket_timeout = 10

stop_on_error = False

storage_class = 

urlencoding_mode = normal

use_https = False

use_mime_magic = True

verbosity = WARNING

website_endpoint = http://rgw.ptengine.cn/

website_error = 

website_index = index.html


#####################################################


4:s3cmd命令參數介紹:


幫助命令:

s3cmd --help

使用方法


1:配置,主要是 Access Key ID 和 Secret Access Key

s3cmd --configure


2:列舉所有 Buckets。(bucket 相當於根文件夾)

s3cmd ls


3:創建 bucket,且 bucket 名稱是唯一的,不能重複。

s3cmd mb s3://my-bucket-name


4:刪除空 bucket

s3cmd rb s3://my-bucket-name


5:列舉 Bucket 中的內容

s3cmd ls s3://my-bucket-name


6:上傳 file.txt 到某個 bucket,

s3cmd put file.txt s3://my-bucket-name/file.txt


7:上傳並將權限設置爲所有人可讀

s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt


8:批量上傳文件

s3cmd put ./* s3://my-bucket-name/


9:下載文件

s3cmd get s3://my-bucket-name/file.txt file.txt


10:批量下載

s3cmd get s3://my-bucket-name/* ./


11:刪除文件

s3cmd del s3://my-bucket-name/file.txt


12:來獲得對應的bucket所佔用的空間大小

s3cmd du -H s3://my-bucket-name



######目錄處理規則########



以下命令都能將dir1 中的文件上傳至my-bucket-name,但效果只截然不同的。


1:dir1 不帶"/"斜槓,那麼dir1會作爲文件路徑的一部分,相當於上傳整個dir1目錄,即類似 "cp -r dir1/"


~/demo$ s3cmd put -r dir1 s3://my-bucket-name/

dir1/file1-1.txt -> s3://my-bucket-name/dir1/file1-1.txt  [1 of 1]


2:帶"/"斜槓的 dir1,相當於上傳dir1目錄下的所有文件,即類似 "cp ./* "


~/demo$ s3cmd put -r dir1/ s3://my-bucket-name/

dir1/file1-1.txt -> s3://my-bucket-name/file1-1.txt  [1 of 1]



########同步方法########


這是s3cmd 使用難點,但卻是最實用的功能。官方使用說明見《s3cmd sync HowTo》http://s3tools.org/s3cmd-sync

首先明確,同步操作是要進行MD5校驗的,只有當文件不同時,纔會被傳輸。

常規同步操作


1:同步當前目錄下所有文件

s3cmd sync  ./  s3://my-bucket-name/


s3cmd sync    s3://my-bucket-name/  ./


2:加 "--dry-run"參數後,僅列出需要同步的項目,不實際進行同步。

s3cmd sync  --dry-run ./  s3://my-bucket-name/


3:加 " --delete-removed"參數後,會刪除本地不存在的文件。

s3cmd sync  --delete-removed ./  s3://my-bucket-name/


s3cmd sync --delete-removed --force ./  s3://test.bucket 



4:加 " --skip-existing"參數後,不進行MD5校驗,直接跳過本地已存在的文件。

s3cmd sync  --skip-existing ./  s3://my-bucket-name/


4.2、高級同步操作


4.2.1、排除、包含規則(--exclude 、--include)


file1-1.txt被排除,file2-2.txt同樣是txt格式卻能被包含。

~/demo$ s3cmd sync --dry-run --exclude '*.txt' --include 'dir2/*' ./  s3://my-bucket-name/

exclude: dir1/file1-1.txt

upload: ./dir2/file2-2.txt -> s3://my-bucket-name/dir2/file2-2.txt


4.2.2、從文件中載入排除或包含規則。(--exclude-from、--include-from)

s3cmd sync  --exclude-from pictures.exclude ./  s3://my-bucket-name/


pictures.exclude 文件內容


# Hey, comments are allowed here ;-)

*.jpg

*.gif


4.2.3、排除或包含規則支持正則表達式

--rexclude 、--rinclude、--rexclude-from、--rinclude-from


移除osd


1. 移出集羣(管理節點執行)

ceph osd out 7 (ceph osd tree中,REWEIGHT值變爲0)

2. 停止服務(目標節點執行)

systemctl stop ceph-osd@7 (ceph osd tree中,狀態變爲DOWN)

3. 移出crush

ceph osd crush remove osd.7

4. 刪除key

ceph auth del osd.7

5. 移除osd

ceph osd rm 7

6. 查找其所在主機是否還有osd,若有,進入第7步驟,否則

ceph osd crush remove `hostname`

7. 修改並同步ceph.conf文件

vi /etc/ceph/ceph.conf 

若存在,將該條信息刪除[osd.7]

8. 刪除目錄文件

rm –rf * /var/lib/ceph/osd/ceph-7


4、監控

inkscope

它是通過ceph-rest-api收緊信息的

啓動ceph-rest-api:

[root@CHN-ID-3-3W7 ~]# ceph-rest-api -n client.admin &

http://192.168.9.147:5000/api/v0.1

執行inkscopeProbe目錄中的install.sh 腳本生成配置文件和執行文件

sysprobe:收集系統信息,必須被安裝在所有ceph節點 yum install lshw sysstat pymongo python-devel  python-pip

pip install psutil

cephprobe:收集集羣信息,只需要安裝在某一個ceph節點


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章