天天看點

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

enabled=0

[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

2.2、每台yum  install ceph

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

cd /etc/ceph/

yum install ceph-deploy -y

建立 mon 節點 

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、添加中繼資料伺服器

2:驗證 mds 服務

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

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

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

[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

    fault)

        notify fault

    *)

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

        exit 1

esac

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

# 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

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

exit 1

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 

access_token = 

add_encoding_exts = 

add_headers = 

ca_certs_file = 

cache_file = 

check_ssl_certificate = True

check_ssl_hostname = True

cloudfront_host = rgw.ptengine.cn

delay_updates = False

delete_after = False

delete_after_fetch = False

enable_multipart = True

expiry_date = 

expiry_days = 

expiry_prefix = 

gpg_passphrase = 

host_base = rgw.ptengine.cn

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

invalidate_default_index_on_cf = False

invalidate_default_index_root_on_cf = True

invalidate_on_cf = False

kms_key = 

limitrate = 0

log_target_prefix = 

long_listing = False

max_delete = -1

mime_type = 

multipart_chunk_size_mb = 15

proxy_host = 

put_continue = False

requester_pays = False

restore_days = 1

server_side_encryption = False

signature_v2 = False

stop_on_error = False

storage_class = 

use_mime_magic = True

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

website_error = 

website_index = index.html

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

4:s3cmd指令參數介紹:

幫助指令:

s3cmd --help

使用方法

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

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節點

繼續閱讀