主要目的是提供視覺化的 Ceph 狀態監控~。
1、環境說明
每台主機都是 Ubuntu 14.04,部署上去的 Ceph 版本為 0.80.9-1trusty另外 Ceph 部署時使用預設叢集,因此叢集之設定檔皆為 /etc/ceph/ceph.conf 檔。
1.1、系統架構
由上圖可以看出,inkScope 預設的配置是每個 Ceph 的 OSD 節點都要安裝 sysprobe,而 Monitor 節點則要安裝 ceph-rest-api 和 cephprobe。
另外要準備一台主機,安裝 inkScope 的管理介面。。
因此以下會以一台 Monitor 節點和三台 OSD 節點的部署模式,inkScope 管理介面裝在第五台主機作為範例。
PS. 以下範例中主要是參考 inkScope 部落格上的安裝教學 [1]。
2、安裝步驟
2.1、在 Monitor 節點安裝 ceph-rest-api
由於依照 [1] 的描述,在安裝管理介面前,必須先準備好 ceph-rest-api,因此要先開始在 Monitor 節點上安裝 ceph-rest-api。
其中雖然 [1] 建議比較好的方式,是把 ceph-rest-api 裝在 Apache 上作為 WSGI 應用程式
不過由於實際做的時候一直出現問題,因此以下是以在 Monitor 上面執行獨立的 ceph-rest-api 服務來進行。
(大概就是讓 ceph-rest-api 自己跑一個獨立的 Apache 服務,然後預設會跑在 5000 port 上)
2.1.1、建立供 ceph-rest-api 存取 Ceph 的使用者 client.restapi
首先在開始安裝 ceph-rest-api 前,必須先在 Ceph 上建立一個名稱為 client.restapi 的使用者
並且授權該使用者可以存取 Monitor、OSD 以及 MDS(不過我的環境沒有裝 MDS 就是了)
sudo ceph auth get-or-create client.restapi mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.restapi.keyring接著要編輯 /etc/ceph/ceph.conf,加入以下資訊:
[client.restapi] log_file = /dev/null keyring = /etc/ceph/ceph.client.restapi.keyring
2.1.2、執行 ceph-rest-api
假設 ceph-rest-api 的 log 想放在 /var/log 資料夾內,記得先將當前目錄移過去
cd /var/log sudo nohup ceph-rest-api -i admin&上述指令執行後,ceph-rest-api 產生的 log 會出現在 /var/log/nohup.out。
2.2、在 Admin 節點安裝 inkScope
2.2.1、安裝 inkScope 管理套件
Admin 節點必須要安裝 inkscope-admviz 套件,也就是提供管理介面服務的套件。
echo "deb https://raw.githubusercontent.com/inkscope/inkscope-packaging/master/DEBS ./" > /etc/apt/sources.list.d/inkscope.list sudo apt-get update && sudo apt-get install inkscope-admviz libapache2-mod-wsgi python-simplejson python-flask mongodb
2.2.2、設定 MongoDB 存取權限
安裝完成後,要先調整 MongoDB 的設定,因為 MongoDB 是要讓每個 Ceph 節點能夠回報狀態的地方
所以必須讓每個節點都能存取 MongoDB。
編輯 /etc/mongodb.conf 檔,並把 bind_ip 那行註解掉(或者改成 0.0.0.0 亦可)並儲存
這個動作可以讓 MongoDB 接受任意來源的資料庫連線。
2.2.3、調整 inkScope 設定值
然後編輯 inkScope 的設定檔 /opt/inkscope/etc/inkscope.conf,在裡面寫入關於 ceph-rest-api、MongoDB 以及 RadosGW 相關的資訊。
我自己的環境沒有設定 RadosGW,所以那部分就隨意填寫,如下:
{ "ceph_conf": "/etc/ceph/ceph.conf", "ceph_rest_api": "monitor:5000", "ceph_rest_api_subfolder": "ceph_rest_api", "mongodb_host" : "monitor", "mongodb_set" : "mongodb0:27017,mongodb1:27017,mongodb2:27017", "mongodb_replicaSet" : "replmongo0", "mongodb_read_preference" : "ReadPreference.SECONDARY_PREFERRED", "mongodb_port" : 27017, "mongodb_user":"ceph", "mongodb_passwd":"monpassword", "is_mongo_authenticate" : 0, "is_mongo_replicat" : 0, "cluster": "ceph", "status_refresh": 3, "osd_dump_refresh": 3, "pg_dump_refresh": 60, "crushmap_refresh": 60, "df_refresh": 60, "cluster_window": 1200, "osd_window": 1200, "pool_window": 1200, "mem_refresh": 60, "swap_refresh": 600, "disk_refresh": 60, "partition_refresh": 60, "cpu_refresh": 30, "net_refresh": 30, "mem_window": 1200, "swap_window": 3600, "disk_window": 1200, "partition_window": 1200, "cpu_window": 1200, "net_window": 1200, "radosgw_url": "http://monitor:80", "radosgw_admin": "admin", "radosgw_key": "access-key", "radosgw_secret": "secret-key" }上述的設定檔中,主要需要變更的是 "ceph_rest_api"、"mongodb_host" 和 "radosgw_url" 三個參數
關係到這三個服務所在的位置。
2.2.4、設定 Apache
接著需要在 Apache 的設定中加入一個 inkScope 網站的設定,需要建立 /etc/apache2/sites-available/inkscope.conf 檔,並寫入以下資訊:
註:inkscope-admviz 安裝過程中,如果沒有已經安裝的 Apache 的話,會自動安裝一個。
<VirtualHost *:8080> ServerName localhost ServerAdmin webmaster@localhost DocumentRoot /var/www/inkscope/ <Directory "/var/www/inkscope/"> Options All AllowOverride All </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> WSGIScriptAlias /inkscopeCtrl /var/www/inkscope/inkscopeCtrl/inkscopeCtrl.wsgi <Directory "/var/www/inkscope/inkscopeCtrl"> Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/inkscope-error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn ProxyRequests Off ProxyPass /ceph-rest-api/ http://monitor:5000/api/v0.1/ CustomLog /var/log/apache2/inkscope-access.log combined </VirtualHost>寫完以後,記得把它連結到 site-enabled 裡。
ln -s /etc/apache2/sites-available/inkscope.conf /etc/apache2/sites-enabled上面這個設定,需要注意的部份是 ProxyPass 那段,如果沒有事先設定 /etc/hosts 的話,要把 monitor 置換成可以被 Admin 節點存取的 Monitor 節點 IP 位址。
接著因為上述的網站是設定在 8080 port,要讓 Apache 監聽 8080 port,因此要在 /etc/apache2/ports.conf 加入一行:
Listen 8080
設定完成後,啟用 WSGI 模組和 proxy 模組、啟用 inkScope 網站並重新啟動 Apache。
sudo a2enmod wsgi && sudo a2enmod proxy_http && sudo a2ensite inkscope sudo service apache2 restart
到這裡應該已經可以連到 inkScope 的服務了,不過因為還沒有程式在收集資料,所以目前上面沒有任何資料。
2.3、在 Monitor 節點安裝 cephprobe 與 sysprobe
cephprobe 是收集資料的 daemon,只需要安裝在任一節點上即可,因此選擇放在 Monitor 節點上。
apt-get install inkscope-cephprobe inkscope-sysprobe python-psutil(python-psutil 是 sysprobe 會用到的套件)
安裝完以後,要設定 /opt/inkscope/etc/inkscope.conf,可以完全照貼前面的設定,這裡就不贅述了。
設定完成後,啟動 cephprobe。
/etc/init.d/cephprobe start
2.4、在每個節點安裝 sysprobe
這部份是每個 Ceph 節點都要做的,不過 Monitor 節點剛剛做過了,所以可以省略。
apt-get install inkscope-sysprobe python-psutil安裝完以後,要設定 /opt/inkscope/etc/inkscope.conf,可以完全照貼前面的設定,這裡就不贅述了。
設定完成後,啟動 sysprobe。
/etc/init.d/sysprobe start
到這裡,整個 inkScope 就安裝完了。
如果運作順利的話,一開始可以直接在 MongoDB 上看到一個以 UUID 命名的 db
而 db 中會有個 "hosts" 的 collection,裡面會記錄所有有跑 sysprobe 的主機資訊。
而介面可以打開 http://monitor_ip:8080/,就可以看到 Ceph 的狀態了。
參考資料:
2 則留言:
Hello your installation only build ceph but it can't read all OSD systems.
Hello your installation only build ceph but it can't read all OSD systems.
張貼留言