Ceph 自動reweight指令碼
Ceph的資料分佈是由CRUSH Map解決定的,而CRUSH演算法是偽HASH的,所以在一定時間內,資料會存在傾斜,這就需要我們用指令碼來進行定期的reweight:
#author
#reweight for ceph osds
import hashlib
import commands
import threading
import sys
from time import ctime,sleep
import urllib2
import json
def doReweight(osdMaxUtilId, osdTargetReweight):
print 'ceph osd reweight ' + str(osdMaxUtilId) + ' ' + str(osdTargetReweight)
(status,output) = commands.getstatusoutput('ceph osd reweight '+ str(osdMaxUtilId) +' ' + str(osdTargetReweight))
print status,output
def canOSDReweight():
#
canDoReweight = False
pgStateIsOk = False
osdUtilDiffEnough = False
#determine pg status
(status,output) = commands.getstatusoutput('ceph -s --format=json-pretty')
pgMapJson = json.loads(output)
#print pgMapJson['pgmap']['pgs_by_state']
numPGS = pgMapJson['pgmap']['num_pgs']
for pgState in pgMapJson['pgmap']['pgs_by_state']:
if pgState['state_name'] == 'active+clean' and pgState['count'] == numPGS:
pgStateIsOk = True
if pgStateIsOk == False:
print "pg is reweighting or can't do reweight right now...."
exit
#determine OSD util diff
(status,output) = commands.getstatusoutput('ceph osd df --format=json-pretty')
#print status,output
osdMaxUtil=0
osdMaxUtilId=-1
osdMaxReweight=1
osdMinUtil=100
osdMinUtilId=-1
osdReweightStep=0.01
if status == 0:
osdDictJson = json.loads(output)
for node in osdDictJson['nodes']:
if node['utilization'] > osdMaxUtil:
osdMaxUtilId = node['id']
osdMaxUtil = node['utilization']
osdMaxReweight = node['reweight']
if node['utilization'] < osdMinUtil:
osdMinUtilId = node['id']
osdMinUtil = node['utilization']
osdTargetReweight = osdMaxReweight - osdReweightStep
osdUtilDiff = (osdMaxUtil - osdMinUtil)/osdMinUtil*100
if osdUtilDiff > 10:
osdUtilDiffEnough = True
print "Max and Min OSD's utilization diff is " + str(osdUtilDiff)
else:
print "Max and Min OSD's utilization diff is " + str(osdUtilDiff) + ",less then 10%, give up..."
exit
if pgStateIsOk == True and osdUtilDiffEnough == True and osdTargetReweight > 0:
print "================ doing reweight ==============="
print osdMaxUtilId,osdMaxUtil,osdMaxReweight
print osdMinUtilId,osdMinUtil
doReweight(osdMaxUtilId, osdTargetReweight)
def invokeOSDReweight():
while True:
sleep(30)
canOSDReweight()
if __name__ == '__main__':
invokeOSDReweight()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30088583/viewspace-2140370/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自動備份指令碼指令碼
- specjvm自動化指令碼JVM指令碼
- Ubuntu自動啟動配置指令碼Ubuntu指令碼
- vue自動化部署指令碼Vue指令碼
- Python——自動簽到指令碼Python指令碼
- Dockerfile---指令碼自動化Docker指令碼
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- 實現指令碼自動部署docker指令碼Docker
- iOS —— 兩套自動打包指令碼iOS指令碼
- mydumper自動化安裝指令碼指令碼
- oracle自動冷備份指令碼Oracle指令碼
- MySQL自動備份指令碼30天自動刪除MySql指令碼
- MySQL8.0的自動部署指令碼MySql指令碼
- 前端專案nodejs自動部署指令碼前端NodeJS指令碼
- awr報告每天自動生成指令碼指令碼
- Linux 新增指令碼開機自啟動Linux指令碼
- Oracle ADG 自動切換指令碼分享Oracle指令碼
- python實現自動搶課指令碼Python指令碼
- Python 指令碼自動視窗截圖Python指令碼
- golang一鍵自動安裝指令碼Golang指令碼
- 開機自動執行python指令碼Python指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- JMeter 介面自動化測試(手工轉自動化指令碼)JMeter指令碼
- [自動化]基於kolla的自動化部署ceph叢集
- Ubuntu 設定開機自啟動指令碼Ubuntu指令碼
- Windows環境PgSql自動備份指令碼WindowsSQL指令碼
- 介面自動化指令碼設計規範指令碼
- 記windows自定義bat指令碼自啟動WindowsBAT指令碼
- shell 備份檔案指令碼+自動清理指令碼
- 【BASIS】HANA備份指令碼,Catalog自動清理指令碼
- java 自動升級sql指令碼 flyway 工具JavaSQL指令碼
- React Native開發中自動打包指令碼React Native指令碼
- iOS自動構建打包釋出指令碼iOS指令碼
- 如何在Docker容器啟動時自動執行指令碼Docker指令碼
- 設定msyqlphp-fpm開機自動啟動指令碼PHP指令碼
- pyautogui模組,PC自動化指令碼,控制滑鼠GUI指令碼
- 用bat指令碼自動生成安裝包InnosetupBAT指令碼
- 案例八:Shell自動化管理賬號指令碼指令碼