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