做者:過眼風
來源:https://www.cnblogs.com/yuezhiminode
nearfull osd(s) or pool(s) nearfull 此時說明部分osd的存儲已經超過閾值,mon會監控ceph集羣中OSD空間使用狀況。若是要消除WARN,能夠修改這兩個參數,提升閾值,可是經過實踐發現並不能解決問題,能夠經過觀察osd的數據分佈狀況來分析緣由。算法
"mon_osd_full_ratio":"0.95", "mon_osd_nearfull_ratio":"0.85"
處理方式app
#自動處理 ceph osd reweight-by-utilization ceph osd reweight-by-pg 105 cephfs_data(pool_name) #手動處理 ceph osd reweight osd.20.8 #全局處理 ceph mgr module ls ceph mgr module enable balancer ceph balancer on ceph balancer mode crush-compat ceph config-key set"mgr/balancer/max_misplaced":"0.01"
PG狀態概述 一個PG在它的生命週期的不一樣時刻可能會處於如下幾種狀態中:spa
單個OSD有兩組狀態須要關注,其中一組使用in/out標記該OSD是否在集羣內,另外一組使用up/down標記該OSD是否處於運行中狀態。兩組狀態之間並不互斥,換句話說,當一個OSD處於「in」狀態時,它仍然能夠處於up或down的狀態。命令行
集羣總體運行狀態debug
# ceph -s cluster: id:8230a918-a0de-4784-9ab8-cd2a2b8671d0 health: HEALTH_WARN application not enabled on 1 pool(s) services: mon:3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h) mgr: cephnode01(active, since 53m), standbys: cephnode03, cephnode02 osd:4 osds:4 up (since 27h),4in(since 19h) rgw:1 daemon active (cephnode01) data: pools:6 pools,96 pgs objects:235 objects,3.6KiB usage:4.0GiB used,56GiB/60GiB avail pgs:96 active+clean
~]$ ceph -w ~]$ ceph health detail #pg狀態 ~]$ ceph pg dump ~]$ ceph pg stat #pool狀態 ~]$ ceph osd pool stats ~]$ ceph osd pool stats #osd狀態 ~]$ ceph osd stat ~]$ ceph osd dump ~]$ ceph osd tree ~]$ ceph osd df #Monitor狀態和查看仲裁狀態 ~]$ ceph mon stat ~]$ ceph mon dump ~]$ ceph quorum_status #集羣空間用量 ~]$ ceph df ~]$ ceph df detail
有時候須要更改服務的配置,但不想重啓服務,或者是臨時修改。這時候就可使用tell和daemon子命令來完成此需求。code
查看運行配置命令格式: # ceph daemon {daemon-type}.{id} config show 命令舉例: # ceph daemon osd.0 config show
使用 tell 的方式適合對整個集羣進行設置,使用 * 號進行匹配,就能夠對整個集羣的角色進行設置。而出現節點異常沒法設置時候,只會在命令行當中進行報錯,不太便於查找。對象
命令格式: # ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}] 命令舉例: # ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1
使用 daemon 進行設置的方式就是一個個的去設置,這樣能夠比較好的反饋,此方法是須要在設置的角色所在的主機上進行設置。blog
命令格式: # ceph daemon {daemon-type}.{id} config set {name}={value} 命令舉例: # ceph daemon mon.ceph-monitor-1 config set mon_allow_pool_delete false
一、啓動全部守護進程 # systemctl start ceph.target 二、按類型啓動守護進程 # systemctl start ceph-mgr.target # systemctl start ceph-osd@id # systemctl start ceph-mon.target # systemctl start ceph-mds.target # systemctl start ceph-radosgw.target
#添加 一、格式化磁盤 ceph-volume lvm zap /dev/sd<id> 二、進入到ceph-deploy執行目錄/my-cluster,添加OSD # ceph-deploy osd create --data /dev/sd<id> $hostname #刪除 一、調整osd的crush weight爲0 ceph osd crush reweight osd.<ID>0.0 二、將osd進程stop systemctl stop ceph-osd@<ID> 三、將osd設置out ceph osd out<ID> 四、當即執行刪除OSD中數據 ceph osd purge osd.<ID>--yes-i-really-mean-it 五、卸載磁盤 umount /var/lib/ceph/osd/ceph-?
ceph osd pool set{pool-name} pg_num 128 ceph osd pool set{pool-name} pgp_num 128
注:一、擴容大小取跟它接近的2的N次方。二、在更改pool的PG數量時,需同時更改PGP的數量。PGP是爲了管理placement而存在的專門的PG,它和PG的數量應該保持一致。若是你增長pool的pg_num,就須要同時增長pgp_num,保持它們大小一致,這樣集羣才能正常rebalancing。生命週期
#列出存儲池 ceph osd lspools #建立存儲池 命令格式: # ceph osd pool create {pool-name} {pg-num} [{pgp-num}] 命令舉例: # ceph osd pool create rbd 32 32 #設置存儲池配額 命令格式: # ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}] 命令舉例: # ceph osd pool set-quota rbd max_objects 10000 #刪除存儲池 ceph osd pool delete{pool-name}[{pool-name}--yes-i-really-really-mean-it] #重命名存儲池 ceph osd pool rename {current-pool-name}{new-pool-name} #查看存儲池統計信息 rados df #給存儲池作快照 ceph osd pool mksnap {pool-name}{snap-name} #刪除存儲池的快照 ceph osd pool rmsnap {pool-name}{snap-name} #獲取存儲池選項值 ceph osd pool get{pool-name}{key} #調整存儲池選項值 ceph osd pool set{pool-name}{key}{value} size:#設置存儲池中的對象副本數,詳情參見設置對象副本數。僅適用於副本存儲池。 min_size:#設置 I/O 須要的最小副本數,詳情參見設置對象副本數。僅適用於副本存儲池。 pg_num:#計算數據分佈時的有效 PG 數。只能大於當前 PG 數。 pgp_num:#計算數據分佈時使用的有效 PGP 數量。小於等於存儲池的 PG 數。 hashpspool:#給指定存儲池設置/取消 HASHPSPOOL 標誌。 target_max_bytes:#達到 max_bytes 閥值時會觸發Ceph沖洗或驅逐對象。 target_max_objects:#達到 max_objects 閥值時會觸發Ceph沖洗或驅逐對象。 scrub_min_interval:#在負載低時,洗刷存儲池的最小間隔秒數。若是是0,就按照配置文件裏的 osd_scrub_min_interval 。 scrub_max_interval:#無論集羣負載如何,都要洗刷存儲池的最大間隔秒數。若是是0,就按照配置文件裏的 osd_scrub_max_interval 。 deep_scrub_interval:#「深度」洗刷存儲池的間隔秒數。若是是0,就按照配置文件裏的 osd_deep_scrub_interval 。 #獲取對象副本數 ceph osd dump| grep 'replicated size'
Ceph 把數據以對象的形式存於各存儲池中。Ceph 用戶必須具備訪問存儲池的權限纔可以讀寫數據。另外,Ceph 用戶必須具備執行權限纔可以使用 Ceph 的管理命令。
查看用戶信息 查看全部用戶信息 # ceph auth list 獲取全部用戶的key與權限相關信息 # ceph auth get client.admin 若是隻須要某個用戶的key信息,可使用pring-key子命令 # ceph auth print-key client.admin 添加用戶 # ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool' # ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool' # ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring # ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key 修改用戶權限 # ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool' # ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool' # ceph auth caps client.brian-manager mon 'allow *' osd 'allow *' # ceph auth caps client.ringo mon ' ' osd ' ' 刪除用戶 # ceph auth del {TYPE}.{ID} 其中, {TYPE} 是 client,osd,mon 或 mds 的其中一種。{ID} 是用戶的名字或守護進程的 ID 。
一個集羣能夠只有一個 monitor,推薦生產環境至少部署 3 個。Ceph 使用 Paxos 算法的一個變種對各類 map 、以及其它對集羣來講相當重要的信息達成共識。建議(但不是強制)部署奇數個 monitor 。Ceph 須要 mon 中的大多數在運行並可以互相通訊,好比單個 mon,或 2 箇中的 2 個,3 箇中的 2 個,4 箇中的 3 個等。初始部署時,建議部署 3 個 monitor。後續若是要增長,請一次增長 2 個。
#新增一個monitor # ceph-deploy mon create $hostname 注意:執行ceph-deploy以前要進入以前安裝時候配置的目錄。/my-cluster #刪除monitor # ceph-deploy mon destroy $hostname 注意:確保你刪除某個Mon後,其他Mon仍能達成一致。若是不可能,刪除它以前可能須要先增長一個。