2015年4月16日 星期四

分散式儲存系統 Ceph(三):使用 inkScope 觀察 Ceph 狀態(2015-04-19 編輯)

inkScope 是由 Inktank 公司主導的一個 Ceph 網頁式管理工具
主要目的是提供視覺化的 Ceph 狀態監控~。


圖片轉錄自 Github


    1、環境說明
    每台主機都是 Ubuntu 14.04,部署上去的 Ceph 版本為 0.80.9-1trusty
    另外 Ceph 部署時使用預設叢集,因此叢集之設定檔皆為 /etc/ceph/ceph.conf 檔。

    1.1、系統架構

    圖片轉錄自 Github

    由上圖可以看出,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 的狀態了。

    參考資料:
    1. Inkscope installation on debian servers
    2. ceph 存储系统

    2 則留言:

    1. Hello your installation only build ceph but it can't read all OSD systems.

      回覆刪除
    2. Hello your installation only build ceph but it can't read all OSD systems.

      回覆刪除