安裝部署Ceph Calamari

根據http://ovirt-china.org/mediawiki/index.php/%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2Ceph_Calamari php

原文以下: html

Calamari是管理和監控Ceph集羣的工具,而且提供REST api。 node

建議的部署平臺是ubuntu,本文使用CentOS 6.5。 python

安裝部署

  1. 獲取calamari相關代碼
    # git clone https://github.com/ceph/calamari.git
    # git clone https://github.com/ceph/calamari-clients.git
    # git clone https://github.com/ceph/Diamond
  2. 生成calamari-server安裝包,先yum remove prlink
    # yum install gcc gcc-c++ postgresql-libs python-virtualenv
    # cd calamari && ./build-rpm.sh
  3. 安裝calamari-server
    # yum localinstall ../rpmbuild/RPMS/x86_64/calamari-server-<version>.rpm

    使用yum能夠自動解決依賴,若是手動安裝依賴的能夠這樣: c++

    # yum install postgresql-server salt-master salt-minion supervisor
    # rpm -ivh ../rpmbuild/RPMS/x86_64/calamari-server-<version>.rpm
  4. 生成calamari-clients安裝包,須要安裝ruby-devel
    # yum install npm ruby rubygems
    # npm install -g grunt grunt-cli bower grunt-contrib-compass
    # gem update --system && gem install compass
    # cd calamari-clients
    # make build-real
    # make dist

    make dist會在上級目錄生成calamari-client的壓縮包;
    手動解壓縮,創建mkdir -p opt/calamari/webapp;
    在解壓生成的目錄下,手動更新目錄結構和內容: git

    # for dir in manage admin login dashboard
    >do
    >mkdir -p ../opt/calamari/webapp/content/"$dir"
    >cp -pr "$dir"/dist/* ../opt/calamari/webapp/content/"$dir"/
    >done

    從新制做壓縮包,而後根據Makefile裏面的rpm target手動執行rpmbuild: github

    # rpmbuild -bb --define "_topdir /xxx/calamari-clients/../rpmbuild" --define "version 1.2" --define "revision rc2_49_g3e3686d" --define "tarname /xxx/rpmbuild/SOURCES/calamari-clients_product_1.2.tar.gz" SPECS/clients.spec
  5. 安裝calamari-clients
    # yum localinstall RPMS/x86_64/calamari-clients-1.2-rc2_49_g3e3686d.el6.x86_64.rpm
  6. 初始化calamari
    # calamari-ctl initialize

    這一步在最後重啓服務(主要是cthulhu)的時候一直沒有結束,根據搜索到的信息,說是supervisord的問題,升級到3.0以上就不會有問題了。 web

  7. 生成diamond安裝包
    # cd ../Diamond
    # git checkout origin/calamari
    # make rpm
  8. 將diamond-<version>.noarch.rpm複製到全部的ceph服務器。
    使用yum localinstall安裝,或者yum install python-configobj而後使用rpm -ivh安裝。
  9. 在全部的ceph服務器上安裝salt-minion,建立/etc/salt/minion.d/calamari.conf,內容爲:
    master: {fqdn}

    {fqdn}對應calamari服務器的域名。
    啓動salt-minion服務: sql

    # service salt-minion restart
  10. 在Calamari服務器上配置防火牆和saltstack認證 
    防火牆(容許ceph服務器訪問salt-master和carbon):
    ### salt-master
    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4505 -j ACCEPT
    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4506 -j ACCEPT
    ### carbon
    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2003 -j ACCEPT
    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2004 -j ACCEPT

    saltstack認證:
    當ceph服務器上的salt-minion服務啓動以後,會自動向salt-master請求認證。
    在Calamari服務器上能夠經過下面的命令查看salt-minion密鑰的列表: apache

    # salt-key -L

    剛剛啓動salt-minion服務的ceph服務器會出如今Unaccepted Keys列表以後,要使得Calamari可以經過saltstack管理ceph服務器,須要對這些密鑰進行認證:

    # salt-key -A
  11. 部署完成以後,能夠訪問calamari

後期遇到的問題

  1. SELinux致使500錯誤: 
    因爲SELinux的限制,訪問頁面時會出現500錯誤,緣由是httpd_t對於anon_inodefs_t沒有寫入權限,能夠根據審計日誌生成SELinux模塊:
    # ausearch -m avc -c httpd -se httpd_t -o anon_inodefs_t | audit2allow -R -M httpd_anon_inodefs
    # semodule -i httpd_anon_inodefs.pp

    生成的SELinux模塊規則以下:

    require {
            type httpd_t;
    }
    
    #============= httpd_t ==============
    fs_rw_anon_inodefs_files(httpd_t)
  2. 打開Manage --> OSD頁面無內容 
    查看calamari.log看到了異常,緣由是httpd沒有權限訪問/etc/salt/master,修改權限臨時解決。
  3. 打開Manage --> Logs頁面無內容 
    查看日誌,發現是訪問http://xxx.xxx.xxx.xxx/api/v2/cluster/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/log發生503錯誤:
    HTTP 503 SERVICE UNAVAILABLE
    Vary: Accept
    Content-Type: text/html; charset=utf-8
    Allow: GET, HEAD, OPTIONS
    
    {
        "detail": "No mon servers are responding"
    }

    通過研究仍是SELinux的限制,經過ausearch配合audit2allow生成相應的模塊,能夠解決問題。
    生成的SELinux模塊的規則以下:

    require {
            type var_run_t;
            type httpd_t;
            class sock_file { write getattr };
    }
    
    #============= httpd_t ==============
    allow httpd_t var_run_t:sock_file { write getattr };
    files_read_var_files(httpd_t)
    init_stream_connect_script(httpd_t)
  4. 打開graphite/dashboard/頁面出現HTTP 500錯誤 
    日誌中提示找不到graphite的模板,在calamari的bug列表中找到對應的說明——issue 8669
    解決方法是:
    在/opt/calamari/venv/lib/python2.6/site-packages下找到calamari_web的egg文件,解壓縮以後手動修改calamari_web/settings.py,而後從新打包。
    重啓apache以後能夠訪問graphite/dashboard/。

在centos6.5安裝了一下Calamari,期間出現了一些rpm的問題。安裝完成後,運行

calamari-ctl initialize
進行初始化,最後一直中止在restart,此文說 這一步在最後重啓服務(主要是cthulhu )的時候一直沒有結束,根據搜索到的信息,說是supervisord 的問題,升級到3.0以上就不會有問題了

試圖升級supervisord,但須要python2.7等,只能做罷,之後再折騰吧。

首頁能夠打開,但登錄後出現Server Error(500):

相關文章
相關標籤/搜索