叢集縮容
如果已經有ceph叢集在運作,首先需要将叢集下線。測試環境下線方法:關閉osd、mon、mds、radosgw這些程序。
删除節點上的osd(此方法也可以是縮減叢集的機器)(依次把一個 OSD 移出叢集 CRUSH 圖、删除認證密鑰、删除 OSD 圖條目、删除 ceph.conf 條目。如果主機有多個硬碟,每個硬碟對應的 OSD 都得重複此步驟。)
ceph osd out {osd-num} 把 OSD 踢出叢集後,它可能仍在運作,就是說其狀态為 up 且 out 。删除前要先停止 OSD 程序。
/etc/init.d/ceph stop osd.{osd-num}停止 OSD 後,狀态變為 down 。
ceph osd crush remove osd.{osd-num} 删除 CRUSH 圖的對應 OSD 條目,它就不再接收資料了。你也可以反編譯 CRUSH 圖、删除 device 清單條目、删除對應的 host 桶條目或删除 host 桶(如果它在 CRUSH 圖裡,而且你想删除主機),重編譯 CRUSH 圖并應用它。
ceph auth del osd.{osd-num} 删除 OSD 認證密鑰
ceph osd rm osd.{osd-num}删除 OSD
ceph osd crush remove `hostname -s` 在crushMap中删除主機名,這個指令在這個主機下的所有的osd都删除的時候會生效。如果還有沒有移除的不會生效。
----删除主機上的所有的osd----
for id in
do
ceph osd out osd.$id
/etc/init.d/ceph stop osd.$id
ceph osd crush remove osd.$id
ceph auth del osd.$id
ceph osd rm osd.$id
umount /var/lib/ceph/osd/ceph-$id
done
ceph osd crush remove `hostname -s`
monitor下線
删除mon程序:Mon删除
從健康的叢集中删除
、 service ceph –a stop mon.{mon-id} 停止螢幕
、 ceph mon remove {mon-id}從叢集删除螢幕
、 從ceph.conf中删除
從不健康的叢集中删除
、 ceph mon dump
、 service ceph stop mon
、 ceph-mon –i {mon-id} --extract-monmap {mappath}
、 monmaptool {mappath} -rm {mon-id}
、 ceph-mon –I {mon-id} –inject-monmap {monpath}
清除叢集
清除叢集中的ceph保證有一個幹淨的ceph環境
rm -rf /etc/ceph/*.keyring
rm -rf /etc/ceph/*.conf
rm -rf /var/log/ceph/*
rm -rf /var/lib/ceph/{bootstrap-mds,bootstrap-osd,mds,mon,osd}/*再删除osd目錄時可能會報裝置忙,因為該目錄mount到了一個裝置上,此時是删除不掉的。需要先umount掉相關的磁盤 umount /var/lib/ceph/osd/ceph-
ceph auth list #檢查keyring被清除
kill - $pid_osd $pid_mds $pid_mon #殺死相關程序 看看每台主機上還有那些程序沒有删掉,進行删除。
----umount主機上所有的osd連接配接的硬碟-----
for id in
do
umount /var/lib/ceph/osd/ceph-$id
done
機器上有ceph, 删除的時候可能删不全,安裝新ceph的時候會報一些錯誤, 可以使用下面的指令全清除掉
yum remove ceph ceph-common ceph-devel librados2 libcephfs1 python-ceph librbd1 ceph-test libcephfs_jni1 libcephfs_jni1 libradosstriper1 librbd1 ceph-radosgw ceph-libs-compat cephfs-java libcephfs1 rbd-fuse rbd-fuse rest-bench -y
搭建ceph叢集
完全手動搭建一個ceph叢集
準備/etc/hosts 包含所有的叢集。
規劃網絡,分為public_network 和 cluster_network
增加ceph的yum repo
編輯檔案/etc/yum.repos.d/ceph.repo
[ceph-updates]
gpgcheck=
enabled=
name=Letv Cloud's Ceph packages
priority=
baseurl=http://IP/ceph/el6/update/
[letv-ceph]
gpgcheck=
enabled=
name=Letv Cloud's Ceph packages
priority=
baseurl=http://IP/ceph/el6/update/
配置ntp
就算是配置好了ntp服務,經過長時間運作,系統也可能出現時鐘skew的情況,此時重新開機ntp服務即可
增加新使用者cephadmin
ssh [email protected]
useradd -d /home/cephadmin -m cephadmin
passwd cephadmin
echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
chmod /etc/sudoers.d/cephadmin
配置使用者cephadmin ssh無密碼登陸
打開防火牆
端口 用于monitor
端口 : 用于osd
禁用SELINUX
sudo setenforce
##所有節點安裝ceph和用戶端工具
yum install ceph striprados
ceph-deploy部署
選擇一個部署機進行ceph-deploy部署。部署機器需要能夠ssh免密碼連接配接所有的部署機器。
----------ceph-deploy安裝monitor節點-----------------
yum install ceph-deploy
開始配置ceph.conf
su - cephadmin
mkdir mycluster
此後所有操作都用cephadmin使用者在mycluster下進行
cd mycluster
ceph-deploy new 初始moniter節點{ test- test- test- }
此時會在目前目錄下自動建立ceph.conf ceph.log ceph.mon.keyring(為此叢集建立密鑰環、并生成螢幕密鑰)三個檔案
修改ceph.conf檔案
如果确定osd的檔案系統是xfs, filestore xattr use omap 為false. 同時filestore journal writeahead為true
如果使用自定義的crushmap, 設定osd crush update on start = false
如果使用osd-domain, 設定osd crush chooseleaf type = {osd-domain-num}
[global]
auth service required = cephx
filestore xattr use omap = true
auth client required = cephx
auth cluster required = cephx
mon host = ,,
mon initial members = <初始moniter節點>
fsid = ee4ea70c-f--d3d-c0aacc92b
osd pool default size =
osd pool default min size =
osd pool default pg num =
osd pool default pgp num =
public network = x.x.x.x/x
cluster network = x.x.x.x/x
[mon]
mon compact on start = true
[osd]
osd max backfills =
osd backfill scan min =
osd backfill scan max =
filestore op threads =
osd recovery max active =
osd recovery max chunk = M
osd recovery threads =
journal max write bytes = M
journal queue max bytes = M
mon osd down out interval =
osd heartbeat interval =
osd heartbeat grace =
mon_osd_min_down_reporters =
osd_heartbeat_use_min_delay_socket = True
安裝monitor節點
ceph-deploy mon create-initial 此時目錄下會生成ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.bootstrap-rgw.keyring ceph.client.admin.keyring ceph.conf ceph.log ceph.mon.keyring
推送admin keyring到所有節點
sudo chmod +r ./ceph.client.admin.keyring
ceph-deploy admin <所有節點>
保留mycluster檔案架,為以後自動添加monitor節點準備
檢查
ceph -s
狀态是HEALTH_ERR,無osd,mon節點都已經加入
增加monitor節點
---------------------手動增加monitor節點--------------------------
增加 Monitor(手動)
、在目标節點上,建立 mon 的預設目錄。{mon-id} 一般取為節點的 hostname 。
ssh {new-mon-host}
sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
、建立一個臨時目錄(和第 步中的目錄不同,添加 mon 完畢後需要删除該臨時目錄),來存放新增 mon 所需的各種檔案,
mkdir {tmp}
、擷取 mon 的 keyring 檔案,儲存在臨時目錄下。
ceph auth get mon. -o {tmp}/{key-filename}
、擷取叢集的 mon map 并儲存到臨時目錄下。
ceph mon getmap -o {tmp}/{map-filename}
、格式化在第 步中建立的 mon 資料目錄。需要指定 mon map 檔案的路徑(擷取法定人數的資訊和叢集的 fsid )和 keyring 檔案的路徑。
sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
、啟動節點上的 mon 程序,它會自動加入叢集。守護程序需要知道綁定到哪個 IP 位址,可以通過 --public-addr {ip:port} 選擇指定,或在 ceph.conf 檔案中進行配置 mon addr。
ceph-mon -i {mon-id} --public-addr {ip:port}
---------------------手動删除monitor節點-------------------------
删除 Monitor(手動)
當你想要删除一個 mon 時,需要考慮删除後剩餘的 mon 個數是否能夠達到法定人數。
、停止 mon 程序。
stop ceph-mon id={mon-id}
、從叢集中删除 monitor。
ceph mon remove {mon-id}
、從 ceph.conf 中移除 mon 的入口部分(如果有)。
---------------------ceph-deploy在叢集中删除或者添加一個monitor節點---------
a.移除ceph.conf中的monitor節點
b.将ceph.conf推送到各個節點 ceph-deploy --overwrite-conf config push ceph1 ceph2
c.删除monitor ceph-deploy mon destroy ceph1
a.添加ceph.conf中的monitor中的節點
b.将ceph.conf推送到各個節點 ceph-deploy --overwrite-conf config push ceph1 ceph2
c.增加一個monitor節點 ceph-deploy --overwrite-conf mon create ceph1
當添加或删除Monitor後,檢視選舉狀态
ceph quorum_ status --format json-pretty
安裝OSD節點
---------------------手動安裝OSD節點--------------------------
手動安裝OSD節點
檢查硬碟情況
megacli64 檢查Raid卡狀态,確定是Cached, WriteBack, No Cache if no BBU
yum install disktest 測試硬碟性能
所有osd節點用手動安裝的方式, 使用root使用者
建立osd号
ceph osd create
傳回一個數字,這個數字就是osd的唯一号,記錄為{osd-number}
ceph osd tree
檢查出現osd,狀态是down.
準備ceph osd檔案夾
mkdir /var/lib/ceph/osd/ceph-{osd-number}
#如果是普通硬碟
mkfs -t xfs -i size= /dev/disk
#如果是RAID0
mkfs -t xfs -i size= -d su=k -d sw= /dev/disk
mount -o noatime,nodiratime,inode64 /dev/disk /var/lib/ceph/osd/ceph-{osd-number}
在檔案夾内建立osd keyring等資料
ceph-osd -i {osd-num} --mkfs --mkkey
檢查檔案夾/var/lib/ceph/osd/ceph-{osd-number}内容, 并建立sysvinit
touch /var/lib/ceph/osd/ceph-{osd-number}/sysvinit
添加osd權限
ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring
檢查權限是否已經添加
ceph auth list
加入osd,權值代表T,所有如果是G硬碟,就為
ceph osd crush add osd.{osd-num} {weight} root=default host={機器名}
檢查osd清單
ceph osd tree
啟動ceph osd
/etc/init.d/ceph start osd
檢查是否加入叢集
ceph osd tree
ceph -s
-------------------------ceph-deply快速搭建osd節點-------------------------
ceph-deploy osd --zap-disk create test-98:/dev/sdb test-98:/dev/sdc test-95:/dev/sdb test-95:/dev/sdc test-55:/dev/sdb test-55:/dev/sdc
--zap-disk 擦除分區
#如果使用的是目錄而不是磁盤的話:
ceph-deploy osd prepare osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd activate osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd create --zap-disk bj-tdxy-ceph-144-128:/dev/sdb %s:/dev/sdc %s:/dev/sdd %s:/dev/sde %s:/dev/sdf
------------------增加 OSD( ceph-deploy )-------------------------------
還可以通過 ceph-deploy 工具很友善的增加 OSD。
、登入 ceph-deploy 工具所在的 Ceph admin 節點,進入工作目錄。
ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
、列舉磁盤。
執行下列指令列舉一節點上的磁盤:
ceph-deploy disk list {node-name [node-name]...}
、格式化磁盤。
用下列指令格式化(删除分區表)磁盤,以用于 Ceph :
ceph-deploy disk zap {osd-server-name}:{disk-name}
ceph-deploy disk zap osdserver1:sdb
重要: 這會删除磁盤上的所有資料。
、準備 OSD。
ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]
ceph-deploy osd prepare osdserver1:sdb:/dev/ssd
ceph-deploy osd prepare osdserver1:sdc:/dev/ssd
prepare 指令隻準備 OSD 。在大多數作業系統中,硬碟分區建立後,不用 activate 指令也會自動執行 activate 階段(通過 Ceph 的 udev 規則)。
前例假定一個硬碟隻會用于一個 OSD 守護程序,以及一個到 SSD 日志分區的路徑。我們建議把日志存儲于另外的驅動器以最優化性能;你也可以指定一單獨的驅動器用于日志(也許比較昂貴)、或者把日志放到 OSD 資料盤(不建議,因為它有損性能)。前例中我們把日志存儲于分好區的固态硬碟。
注意: 在一個節點運作多個 OSD 守護程序、且多個 OSD 守護程序共享一個日志分區時,你應該考慮整個節點的最小 CRUSH 故障域,因為如果這個 SSD 壞了,所有用其做日志的 OSD 守護程序也會失效。
、準備好 OSD 後,可以用下列指令激活它。
ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]
ceph-deploy osd activate osdserver1:/dev/sdb1:/dev/ssd1
ceph-deploy osd activate osdserver1:/dev/sdc1:/dev/ssd2
activate 指令會讓 OSD 進入 up 且 in 狀态。該指令使用的分區路徑是前面 prepare 指令建立的。
radosgw搭建
-------------------------radosgw搭建-------------------------------------------
yum install -y ceph-radosgw radosgw-agent 在相關節點上安裝對象網管
a. 建立keyring
ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
chmod +r /etc/ceph/ceph.client.radosgw.keyring
b. 建立key
ceph-authtool /etc/ceph/ceph.client.radosgw.keyring \
-n client.radosgw.gateway --gen-key
c. Add capabilities to Key
ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' \
--cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
d. Add the key to Ceph Storage Cluster
ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway \
-i /etc/ceph/ceph.client.radosgw.keyring
如果其他節點需要ceph.client.radosgw.keyring,可以推送到/etc/ceph目錄下
e. Add gateway configuration to /etc/ceph/ceph.conf
[client.radosgw.gateway]
host = ceph1
keyring = /etc/ceph/ceph.client.radosgw.keyring
rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file = /var/log/radosgw/client.radosgw.gateway.log
√ 啟動radosgw服務(預設監聽7480端口)
#/usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway
√ 建立使用者
#sudo radosgw-admin user create --uid=ningyougang --display-name=ningyougang [email protected]
------------------------------------------部署rados gateway---------------------------------------------------------
注意,必須在叢集部署成功之後才能繼續部署rados gateway. 注意,一下操作都是在ceph的存儲節點上進行的,即必須要在跑ceph程序的節點上運作。
安裝ceph-radosgw
yum install ceph-radosgw -y
登陸到ceph存儲節點上,建立rados gateway需要的pool.
zone=default
ceph osd pool create ${zone}.rgw.data.root
ceph osd pool create .rgw.root
ceph osd pool create ${zone}.rgw.control
ceph osd pool create ${zone}.rgw.gc
ceph osd pool create ${zone}.rgw.buckets.data
ceph osd pool create ${zone}.rgw.buckets.index
ceph osd pool create ${zone}.rgw.buckets.non-ec
ceph osd pool create ${zone}.rgw.log
ceph osd pool create ${zone}.rgw.intent-log
ceph osd pool create ${zone}.rgw.usage
ceph osd pool create ${zone}.rgw.users.keys
ceph osd pool create ${zone}.rgw.users.email
ceph osd pool create ${zone}.rgw.users.uid
ceph osd pool create ${zone}.rgw.meta
建立keyring
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
sudo chmod +r /etc/ceph/ceph.client.radosgw.keyring
sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key
sudo ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring
追加rados gateway配置到/etc/ceph/ceph.conf
把以下内容追加到/etc/ceph/ceph.conf的最後,其中最後一行的host為本地的hostname。
[client.radosgw.gateway]
rgw dns name = mytests3.com
keyring = /etc/ceph/ceph.client.radosgw.keyring
log file = /var/log/radosgw/client.radosgw.gateway.log
rgw_thread_pool_size =
rgw_num_async_rados_threads =
rgw frontends = civetweb port= request_timeout_ms= access_log_file=/var/log/radosgw/access.log 這裡是沒有用nginx作為負載均衡器轉發,是以端口還是端口。
rgw_override_bucket_index_max_shards =
host = $(hostname -s)
建立日志目錄
mkdir -p /var/log/radosgw
重新開機rados gateway
systemctl restart [email protected]
檢視是否存在/usr/bin/radosgw程序。
ps aux|grep radosgw
如果不存在,說明有問題,請檢視/var/log/radosgw/client.radosgw.gateway.log日志.
驗證端口是否能正常工作
curl localhost
是否能夠傳回一個xml:
<?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>
如果能,說明gateway已經部署成功了.
建立使用者和ak/sk
運作一下指令之後,就能得到一組ak/sk
radosgw-admin user create --uid=leengine --display-name="leengine"
ak/sk以為keys下,輸出形如:
"keys": [
{
"user": "leengine",
"access_key": "aaasda",
"secret_key": "sgbweogwe"
}
],
這個key之後可以通過一下指令行查詢:
radosgw-admin user info --uid=leengine
在其他節點上部署rados gateway
隻需将已經部署好的節點的/etc/ceph/ceph.client.radosgw.keyring拷貝到新的節點上,并參照第步追加新節點的/etc/ceph/ceph.conf. 不需要在其他節點上進行其他操作。
----------------------------------nginx負載均衡機-----------------------------------------------------------------------
------------------------------------dnsmasq------------------------------------------------------------------------------------
yum install dnsmasq
vim /etc/dnsmasq.conf
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
resolv-file=/etc/resolv.dnsmasq.conf //這裡面配置的是公網dns的配置
conf-dir=/etc/dnsmasq.d //這個裡面配置的是使用者配置的本地生效的dns配置,或者在下面這樣配置也是可以的。
listen-address=
#address=/.s3.lecloud.com/127.0.0.1
address=/.s3bjtest.lecloud.com/
address=/.s3-bj.lecloud.com/
address=/.s3-gd.lecloud.com/
address=/.replicate.com/
address=/.mytests3.com/
address=/mytests3.com/ 配置一下域名和對應的IP位址
systemctl restart dnsmasq.service 開啟dnsmasq服務
---------------------------------s3cmd搭建---------------------------------------------------------------
yum install s3cmd
修改~/.s3cfg
[default]
access_key = ss
secret_key = ss
default_mime_type = binary/octet-stream
enable_multipart = True
encoding = UTF-
host_base = mytests3.com
host_bucket = %(bucket)s.mytests3.com
use_https = False
put_continue = True
multipart_chunk_size_mb =
recursive = True
signature_v2 = True
s3md 直接發端口的radosgw上。
測試指令: s3cmd mb s3://test01 -d (debug模式) -c (指定配置檔案)
------------------------------------------------------------------------------------------------
ceph運維操作
ceph運維操作:
ceph -s 叢集整體目前狀态情況檢視
ceph -w 實時狀态檢視
ceph df ceph存儲空間檢視
ceph osd tree 檢視osd狀态
ceph osd dump 檢視pool設定的資訊和osd設定資訊和各種狀态
--------pool相關操作-------
ceph osd lspools 檢視pools
ceph osd pool create images 建立一個image名稱的pool,包涵個pgnum (pgsnum = (osd數量 * ) / 副本數 向上對齊)
ceph osd pool set images size #設定pool:images的副本數為3
ceph osd pool set rbd pg_num
ceph osd pool set rbd pgp_num 設定pool的pg數目
ceph osd pool set-quota images max_objects #設定pool最大對象數
ceph osd pool delete images images --yes-i-really-really-mean-it 删除images pool
ceph osd pool set {rbdpool} min_size 修改ceph資料的最小副本數和副本數
ceph osd pool set {rbdpool} size
ceph osd pool set {rbdpool} target_max_bytes 設定池的最大的存儲空間為T
ceph osd pool set-quota {rbdpool} max_objects 為叢集pool設定配額,達到預警前叢集會告警,達到上限之後就不在寫入資料
ceph osd pool rename {current——pool-name} {new-pool-name} 重命名pool
rados df 展示pool統計
ceph osd pool get {pool-name} {key} 擷取pool相關的參數值
ceph osd dump |grep '參數'
要設定一個存儲池的選項值,執行指令:
ceph osd pool set {pool-name} {key} {value}
常用選項介紹:
size:設定存儲池中的對象副本數,詳情參見設定對象副本數。僅适用于副本存儲池。
min_size:設定 I/O 需要的最小副本數,詳情參見設定對象副本數。僅适用于副本存儲池。
pg_num:計算資料分布時的有效 PG 數。隻能大于目前 PG 數。
pgp_num:計算資料分布時使用的有效 PGP 數量。小于等于存儲池的 PG 數。
crush_ruleset:
hashpspool:給指定存儲池設定/取消 HASHPSPOOL 标志。
target_max_bytes:達到 max_bytes 閥值時會觸發 Ceph 沖洗或驅逐對象。
target_max_objects:達到 max_objects 閥值時會觸發 Ceph 沖洗或驅逐對象。
scrub_min_interval:在負載低時,洗刷存儲池的最小間隔秒數。如果是 ,就按照配置檔案裡的 osd_scrub_min_interval 。
scrub_max_interval:不管叢集負載如何,都要洗刷存儲池的最大間隔秒數。如果是 ,就按照配置檔案裡的 osd_scrub_max_interval 。
deep_scrub_interval:“深度”洗刷存儲池的間隔秒數。如果是 ,就按照配置檔案裡的 osd_deep_scrub_interval 。
可調選項
、調整現有叢集上的可調選項。注意,這可能會導緻一些資料遷移(可能有 % 之多)。這是推薦的辦法,但是在生産叢集上要注意此調整對性能帶來的影響。此指令可啟用較優可調選項:
ceph osd crush tunables optimal(調整叢集參數到最優的狀态)
如果切換得不太順利(如負載太高)且切換才不久,或者有用戶端相容問題(較老的 cephfs 核心驅動或 rbd 用戶端、或早于 bobtail 的 librados 用戶端),你可以這樣切回:
ceph osd crush tunables legacy(調整叢集的參數到預設的狀态)
、不對 CRUSH 做任何更改也能消除報警,把下列配置加入 ceph.conf 的 [mon] 段下:
mon warn on legacy crush tunables = false
為使變更生效需重新開機所有螢幕,或者執行下列指令:
ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables
--------對象存儲-----------
rados put test-object- a.txt --pool=data 建立對象
rados -p data ls 檢視pool中的對象
ceph osd map data test-object- 确定對象的存儲的位置
rados rm test-object- --pool=data 删除對象
rados ls -p poolname 列出poolname中所有的objects
---------檢視crushMap--------
ceph osd getcrushmap -o crush.out
crushtool -d crush.out -o crush.txt
ceph osd crush dump
ceph osd crush rule dump //将rule結果調出來
ceph osd 維護模式
ceph osd set noout
/etc/init.d/ceph stop osd.{osd-num}
ceph osd crush rule rm {rule name} 從crush中删除一個rule
----------ceph injectargs 維護模式--------
#How often an Ceph OSD Daemon pings its peers (in seconds).
#預設為6
ceph tell osd.* injectargs '--osd-heartbeat-interval 10'
#The elapsed time when a Ceph OSD Daemon hasn’t shown a heartbeat that the Ceph Storage Cluster considers it down.
#預設為20
ceph tell osd.* injectargs '--osd-heartbeat-grace 30'
-----------維護完成------------------------
/etc/init.d/ceph start osd.{osd-num}
ceph osd unset noout
------------radosgw運維--------------------(ceph底層是沒有權限控制的,權限控制在上層的radosgw進行提供,如果是s3cmd的話隻能檢視自己的相關資訊)
建立使用者
#sudo radosgw-admin user create --uid=newtouchstep --display-name=newtouchstep [email protected]
修改使用者
#sudo radosgw-admin user modify --uid=newtouchstep --display-name=newtouchstep [email protected]
檢視使用者資訊
#sudo radosgw-admin user info --uid=newtouchone
删除使用者
#sudo radosgw-admin user rm --uid=newtouchone #沒有資料才可以删除
#sudo radosgw-admin user rm --uid=newtouchone --purge-data #删除使用者删除資料
暫停使用者使用
#sudo radosgw-admin user suspend --uid=newtouchone
使用者生效
#sudo radosgw-admin user enable --uid=newtouchone
使用者檢查
#sudo radosgw-admin user check --uid=newtouchone
查詢bucket
#sudo radosgw-admin bucket list 查詢所有的bucket 資訊
查詢指定bucket的對象
#sudo radosgw-admin bucket list --bucket=images
統計bucket資訊
#sudo radosgw-admin bucket stats #查詢所有bucket統計資訊
#sudo radosgw-admin bucket stats --bucket=images #查詢指定bucket統計資訊
删除bucket
删除pucket(但是不删除object,加上bucket後恢複)
#sudo radosgw-admin bucket rm --bucket=images
删除bucket後同時删除object
#sudo radosgw-admin bucket rm --bucket=images --purge-objects
檢查bucket
#sudo radosgw-admin bucket check
删除object
#sudo radosgw-admin object rm --bucket=attach --object=fanbingbing.jpg
為bucket設定配額
#sudo radosgw-admin quota set --max-objects=200 --max-size=10000000000 --quota-scope=bucket --bucket=images
#sudo radosgw-admin quota enable --quota-scope=bucket --bucket=images
#sudo radosgw-admin quota disable --quota-scope=bucket --bucket=images
為帳号設定配額
#sudo radosgw-admin quota set --max-objects=2 --max-size=100000 --quota-scope=user --uid=newtouchstep
#sudo radosgw-admin quota enable --quota-scope=user --uid=newtouchstep
#sudo radosgw-admin quota disable --quota-scope=user --uid=newtouchstep
radosgw-admin metadata get bucket:maoweitest02 檢視bucket的詳細資訊 包括ID号,存儲的位置,建立的時間,擁有者
#添加使用者權限,允許其讀寫users權限
radosgw-admin caps add --uid=admin --caps="users=*"
radosgw-admin caps add --uid=admin --caps="usage=read,write"
---------------/etc/init.d/ceph的使用(關閉這個叢集上的所有的ceph相關程序,包括mon。mds.osd 等程序)-------------
/etc/init.d/ceph start 、stop、restart 單節點啟動、關閉、重新開機ceph叢集
/etc/init.d/ceph -a start 、stop、 restart 所有節點啟動、關閉、重新開機ceph叢集
service ceph start 、stop、restart 把ceph當做service服務
service ceph start -a start、stop、restart
/etc/init.d/ceph start osd
service ceph start osd
-----------檢視monitor的狀态-------------------------------
ceph mon stat 檢視mon的狀态資訊
ceph mon dump 檢視mon的映射資訊
ceph quorum_status 檢查mon的選舉狀态
ceph mon remove test- 删除一個mon節點
ceph quorum_status -f json-pretty 産看monitor的選舉情況
-----------osd相關操作-------------------------------------
ceph osd df 詳細列出叢集每塊磁盤的使用情況,包括大小、權重多少空間率等
ceph osd down 把osd給down掉,主要是标記為down
ceph osd in 把osd标記為in
ceph osd rm 在叢集中删除一個osd硬碟
ceph osd crush rm osd 在叢集中删除一個osd硬碟crush map
ceph osd crush set osd host=node241 設定osd crush的權重為
ceph osd out osd 此時osd的reweight變為,此時不在此節點上配置設定資料,但是osd程序裝置還在
ceph osd in osd 将逐出的osd加入到叢集中
ceph osd pause 暫停整個叢集的osd,此時叢集不能接受資料
ceph osd unpause 再次開啟接受資料
ceph osd set nodown 設定标志flags,不允許關閉osd,解決網絡不穩定,osd狀态不斷切換的問題
ceph osd unset nodown 取消設定
ceph osd lost {id} [--yes-i-really-mean-it] 把OSD 标記為丢失,有可能導緻永久性資料丢失,慎用!
------------rados指令相關操作--------------------------------
rados是和ceph的對象存儲叢集進行通信的方式
rados lspools <====>ceph osd pool ls 檢視叢集裡面有多少個pool
rados mkpool test_pool 建立一個pool
rados create test_object -p test_pool 建立一個對象
rados -p test_pool ls 檢視test_pool下所有的對象檔案
rados rm test_object -p test_pool 删除一個pool中指定的對象
rados rmpool test_pool test_pool -yes-i-really-really-mean-it 删除pool池和它中的資料
rados -p test_pool put test_object xx.txt上傳一個對象到test_pool
rados bench write rand -t -b -p test_pool 使用rados進行 性能測試
ceph --admin-daemon /var/run/ceph/ceph-client.radosgw.gateway.asok config set debug_rgw 20/20 修改radosgw的日志等級
------------pg相關操作---------------------------------------
ceph pg dump <===> ceph pg ls 檢視pg組的映射關系
ceph pg map 檢視一個pg的map映射
ceph pg stat 檢視pg的狀态
ceph pg query 檢視一個pg的詳細資訊
ceph pg scrub {pg-id} 洗刷一個pg組
ceph pg dump_stuck unclean 檢視pg中的各種pg狀态
ceph pg dump_stuck inactive
ceph pg dump_stuck stable
ceph pg dump --format plain (純文字)顯示一個叢集中所有的pg統計
--format json (json格式)
要查詢某個 PG,用下列指令:
ceph pg {poolnum}.{pg-id} query
為找出卡住的歸置組,執行:
ceph pg dump_stuck [unclean|inactive|stale|undersized|degraded]
ceph tell mon.FOO injectargs --debug_mon 10/10 設定mon的日志等級
檢視mon的配置檔案資訊
ceph daemon mon.FOO config show
or:
ceph daemon mon.FOO config get 'OPTION_NAME'
其他常用指令
-----------------------------------------------------------------------------
more /etc/redhat-release 檢視Linux系統版本
uname -a 檢視Linux核心版本
ceph -v 檢視ceph版本
ceph-deploy --version 檢視ceph-deploy版本
ceph mon_status 檢視monitor的狀态
lsblk 檢視osd磁盤挂載情況
ceph df 檢查叢集的資料使用量及其在存儲池内的分布情況
#檢視ceph預設的配置檔案的設定内容:
ceph --show-config
centos7指令模式
centos7指令模式:
1.停止某個節點上的某個指定的守候程序:啟動某個節點上某個指定的守候程序:
systemctl stop/restart/start ceph-osd@{id}
systemctl stop/restart/start ceph-mon@{hostname}[.service]
systemctl stop/restart/start ceph-mds@{hostname}[.service]
按類型啟動某個節點上某一類守護程序:
systemctl start/stop/restart ceph-osd.target
systemctl start/stop/restart ceph-mon.target
systemctl start/stop/restart ceph-mds.target
停止某一個節點上的所有的守護程序:
systemctl start/stop/restart ceph\*.service ceph\*.target
systemctl start ceph.target
列出本節點中所有的ceph程序,為什麼能用,因為在crushmap中有啊!!!!是以針對的是運維而不是搭建
systemctl status ceph\*.service ceph\*.target
啟動/停止某一ceph節點上所有的守候程序
systemctl start ceph.target
systemctl stop ceph\*.service ceph\*.target
ceph auth list 檢視所有的auth
關閉一個ceph叢集:
首先關閉每個節點上的osd,然後關閉mon
#檢視目前osd的配置檔案資訊
ceph --admin-daemon /var/run/ceph/ceph-osd.asok config show | grep osd_journal
--------------------------------------------------------------------------
如果你的配置檔案或 keyring 檔案不在預設路徑下,你得在指令中指定:
這個就解決了一個跳闆機維護多個ceph叢集的功能,但是操作相對來說比較麻煩:
ceph -c /path/to/conf -k /path/to/keyring health
--------------------------------------------------------------------------
使用管理套接字
Ceph 管理套接字允許你通過套接字接口查詢守護程序,它們預設存在于 /var/run/ceph 下。要通過管理套接字通路某個守護程序,先登入它所在的主機、再執行下列指令:
ceph daemon {daemon-name}
ceph daemon {path-to-socket-file}
比如,這是下面這兩種用法是等價的:
ceph daemon osd foo
ceph daemon /var/run/ceph/ceph-osd.asok foo
用下列指令檢視可用的管理套接字指令:
ceph daemon {daemon-name} help
管理套接字指令允許你在運作時檢視和修改配置。
另外,你可以在運作時直接修改配置選項(也就是說管理套接字會繞過 Mon,不要求你直接登入宿主主機,不像 ceph {daemon-type} tell {id} injectargs 會依賴螢幕)。
寫入M的object資料:
--> first M osd.primary journal --> osd.primary --> osd.secondary journal --> osd.secondary --> second M osd.primary journal --> osd.primary --> and so on...
[mon.a]
host = host01
addr = :
[mon.b]
host = host02
addr = :
[mon.c]
host = host03
addr = :
ceph monitor 的選舉展示:
ceph quorum_status --format json-pretty
----------------------------------------------------------------------------------
rados ls -p rbd 檢視一個pool下面的對象
rados -p test rm my-object 删除一個對象
rados mkpool test 建立一個pool
rados rmpool test test --yes-i-really-really-mean-it 删除一個pool
rados lspools
ceph osd lspools
rados -p test put my-object data/file 上傳一個資料到對象my-object
rados -p test stat my-object 檢視對象狀态
ceph osd map test my-object 檢視pool到對象到osd的映射
find /var/lib/ceph/osd/ceph-x/current/ -name 檢視存儲到osd的資料
--------------------------------------------------------------------------------------
s3cmd setacl --acl-private s3://testpool 設定bucket和object的acl
# 建立s3使用者key
radosgw-admin key create --uid='user_id' --key-type=s3 --gen-secret --gen-access-key
# 建立swift使用者key
radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
# 删除s3使用者key
radosgw-admin key rm --uid='testuser' --access-key=JEB64N3OFDODAZAIZ8H
# 删除swift使用者key
radosgw-admin key rm --subuser=testuser:swift --key-type=swift
# 列出所有的使用者
radosgw-admin meatadata list user