ceph對象存儲ceph-deploy部署記錄

友情提示:本部署只是用一個虛擬機,最小安裝軟件,全部ceph組件都安裝在一個linux系統中。。。請酌情參考。。。

一:環境配置

    centOS7 適配 ceph LUMINOUS 版本,安裝過程當中下載了jewel版本。。。node

    管理節點:ceph_adminpython

一、一個雙核CPU,2G內存,NAT鏈接:192.168.184.181,其中在/etc/resolv.conf文件中添加 linux

    Nameserver 8.8.8.8web

    nameserver 192.168.1.109swift

二、20G硬盤分區:vim

    

    Kernel:3.10.0-693centos

    安裝虛擬機時設置好主機名。以後的操做中用虛擬機又新增了兩個硬盤當作osd瀏覽器

二:管理(節點)安裝

一、安裝EPEL

    sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm服務器

    安裝成功會顯示成功和已安裝的EPEL版本網絡

 

二、建立yum庫文件

    sudo vim /etc/yum.repos.d/ceph.repo

    如下爲添加的文件內容

[ceph-noarch]

name=Ceph noarch packages

baseurl=https://download.ceph.com/rpm/el7/noarch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

    直接執行安裝最新穩定版

    如需指定具體版本,在baseurl中rpm後添加「-版本名」如:

    baseurl=https://download.ceph.com/rpm-luminous/el7/noarch

 

三、更新軟件庫並安裝 ceph-deploy

    sudo yum update && sudo yum install ceph-deploy

    會先檢查須要安裝和升級的組件,檢查完畢顯示清單並詢問是否繼續:

    輸入:y 回車

    以後有一個警告,沒有處理。

     

    而後開始安裝,期間會出現下載失敗,而後會自動嘗試其餘鏡像:

    

    此處緣由是網速太慢。。。

    下載完成問是否繼續:

    

     庫包更新完成後開始安裝ceph-deploy:

    

    期間詢問繼續都yes;

    最後安裝成功:

    

 

3、集羣(節點)安裝

一、在全部節點安裝NTP:

    sudo yum install ntp ntpdate ntp-doc

    

 

二、在全部節點安裝 SSH 

    sudo yum install openssh-server

    

 

三、在集羣節點建立部署 CEPH 的用戶

3.一、若是安裝時沒有設置主機名,此時修改全部節點主機名hostname(此步驟只是用於區分節點,方便管理)

    hostnamectl set-hostname {hostname}

    管理節點爲:ceph_admin

    集羣節點都爲:ceph_node

    查看主機名:hostnamectl status

    /etc/hostname 會自動更新

    而後手動更新/etc/hosts

3.二、給全部集羣節點添加ceph用戶:ceph(測試用,實際部署請使用其餘名字)

    sudo useradd -d /home/{username} -m {username}

    useradd -d /home/ceph -m ceph

    passwd {輸入密碼}

3.三、確保各集羣節點上新建立的用戶都有 sudo 權限。

    echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}

    echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph

    sudo chmod 0440 /etc/sudoers.d/{username}

    sudo chmod 0440 /etc/sudoers.d/ceph

 

四、容許用戶ceph無密碼ssh登錄

4.一、不使用sudo或者root用戶生成ssh密鑰對:

    在ceph用戶下執行

    ssh-keygen

    提示 「Enter passphrase」 時,直接回車,口令即爲空:

4.二、把公鑰拷貝到各集羣節點,把下列命令中的 {username} 替換成前面建立部署 Ceph 的用戶裏的用戶名。

    ssh-copy-id ceph@ceph_admin

    修改 ceph-deploy 管理節點上的 ~/.ssh/config 文件,這樣 ceph-deploy 就能用你所建的 用 戶 名 登 錄 Ceph 節點了,而無需每次執行 ceph-deploy 都要指定 --username {username} 。

    sudo vi ~/.ssh/config

    添加如下內容:

五、確保/etc/sysconfig/network-scripts 目錄中 ifcfg-{iface} 文件中的 ONBOOT 設置成了 yes 。

六、用 ping 短主機名( hostname -s )的方式確認網絡聯通性。解決掉可能存在的主機名解析問題。

七、開放所需端口:

    firewall

    監視器:

    sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent

    存儲器和元數據:

    sudo firewall-cmd --zone=public --add-service=ceph --permanent

    當即生效:

    sudo firewall-cmd --reload

    

    iptables

    要開放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口範圍:

    sudo iptables -A INPUT -i ens33 -p tcp -s 192.168.184.181/255.255.252.0 --dport 6789 -j ACCEPT

    回車後沒有反應。。。

    重啓生效:

    /sbin/service iptables save

    執行報以下錯誤:

    The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

        解決方法:

        一、先執行以下命令:

       systemctl stop firewalld

       systemctl mask firewalld

        二、安裝iptables services

        yum install iptables-services

        三、設置開機啓動

        systemctl enable iptables

        四、重啓iptables service

        systemctl restart iptables

        最後執行

        /sbin/service iptables save 

 

八、在 CentOS 和 RHEL 上, SELinux 默認爲 Enforcing 開啓狀態。爲簡化安裝,咱們建議把 SELinux 設置爲 Permissive 或者徹底禁用,也就是在加固系統配置前先確保集羣的安裝、配置沒問題。

    sudo setenforce 0

 

九、確保你的包管理器安裝了優先級/首選項包且已啓用。

9.一、安裝優先級/首選項包

    sudo yum install yum-plugin-priorities

 

9.二、配置使用 Yum Priorities 

    使用文本編輯器打開 Yum Priorities 配置文件,確保配置文件中包含下面的行 

   

    編輯 CentOS-Base 源配置文件 /etc/yum.repos.d/CentOS-Base.repo 
    1. 將priority=1分別添加到 [base], [updates]和 [extras]這幾個源記錄的後面 
    2. 將priority=2添加到 [centosplus] 源記錄的後面 
    注意:優先級由 1 ~ 99 的 99 個數表示,1 的優先級最高。優先級小的源即便有某軟件的較新版本,若是優先級高的源中沒有,在啓用該插件的狀況下,系統也沒法安裝/升級到該較新版本。圖形界面的 YUM 工具通常默認就已經包含了優先級插件。 

4、建立集羣(使用ceph用戶執行ceph-deploy命令)

一、在管理節點建立目錄

    mkdir my-cluster

    cd my-cluster 

    ceph-deploy 會把文件輸出到當前目錄,因此請確保在此目錄下執行 ceph-deploy全部命令

 

二、在管理節點上,進入剛建立的放置配置文件的目錄,用 ceph-deploy 執行以下步驟建立集羣

2.一、建立集羣監視者

    使用自身節點爲監視節點:

    ceph-deploy new ceph_admin

2.二、副本。把 Ceph 配置文件裏的默認副本數從 3 改爲 2 ,這樣只有兩個 OSD 也能夠達到 active + clean 狀態。

    在 [global] 段加入:osd pool default size = 2

2.三、網卡

    在 [global] 段加入:public network = {ip-address}/{netmask}

    vi ceph.conf

2.四、安裝 Ceph 

    ceph-deploy install ceph_admin

    若是報錯:

    把/etc/yum.repos.d/下ceph.repo改成ceph-deploy.repo便可。

    再次安裝ceph:

    ceph-deploy install ceph_admin

2.五、初始化監視器monitor

    ceph-deploy mon create-initial

   若是報錯:

    執行:ceph-deploy --overwrite-conf mon create-initial

 

三、其餘

3.一、確保你對 ceph.client.admin.keyring 有正確的操做權限。

    sudo chmod +r /etc/ceph/ceph.client.admin.keyring

    執行無返回。。。

3.二、檢查集羣健康:

    ssh ceph_admin sudo ceph health

    若是報錯:

    

    chmod 600 /home/ceph/.ssh/config 

    再次執行:ssh ceph_admin sudo ceph health

    更完整的:ssh ceph_admin sudo ceph -s

    此處由於尚未加入osd,因此health_err所報問題正常。

 

四、添加三個osd

4.一、使用虛擬機爲系統再添加一塊20G硬盤和一塊10G的硬盤

    使用分區命令fdisk爲這設備(/dev/sdb和/dev/sdc)分區成sdb1和sdb5和sdc1

    (詳細步驟請百度)

    初始化文件格式爲xfs

    mkfs.xfs /dev/sdb1

    mkfs.xfs /dev/sdb5

    mkfs.xfs /dev/sdc1

4.二、建立osd

    ceph-deploy osd create ceph_admin:/dev/sdb1 ceph_admin:/dev/sdb5 ceph-admin:/dev/sdc1

    而後須要激活(文檔上說使用create命令不須要再激活,但健康檢查發現仍然沒有osd,再次激活後則顯示有osd了):

    ceph-deploy osd activate ceph_admin:/dev/sdb1 ceph_admin:/dev/sdb5 ceph_admin:/dev/sdc1

4.三、健康檢查:

    ceph health

    緣由是OSD的hash規則與本部署不符。。。(本次部署只有一個主機。。。)

    ceph osd crush rule dump

    注意其 type 爲 「host」,也就是說 CRUSH 不會爲一個 PG 選擇在同一個 host 上的兩個 OSD。而個人環境中,目前只有 ceph_admin上的三個 OSD 是in 的,所以,CRUSH 沒法爲全部的 PG 分配不一樣osd 

    將 CRUSH ruleset 的 type 由 「host」 修改成 「osd」,使得 CRUSH 爲 PG 選擇 OSD 時再也不侷限於不一樣的 host。

    ceph osd getcrushmap -o crushmap_compiled_file

    crushtool -d crushmap_compiled_file -o crushmap_decompiled_file

    vi crushmap_decompiled_file

再次健康檢查:

4、添加RGW(對象存儲網關)

一、安裝對象網關軟件包

    ceph-deploy install --rgw ceph_admin

二、建立對象網關實例

    ceph-deploy rgw create ceph_admin

三、配置實例

3.一、在ceph.conf中glabal部分以後添加另外一部分

[client.rgw.client-node]

rgw_frontends = "civetweb port=80"

確保在rgw_frontends鍵/值對的port=<port-number>之間不留空白。

 

3.二、重起生效

    sudo systemctl restart ceph-radosgw@rgw.ceph_admin.service

    此處具體名稱以具體部署爲準。。。

3.四、防火牆打開端口

    firewall

    sudo firewall-cmd --list-all

    sudo firewall-cmd --zone=public --add-port 80/tcp --permanent

    sudo firewall-cmd --reload

    Iptables

    修改配置文件

    vi /etc/sysconfig/iptables

    添加:

  -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

    開放80端口

3.五、測試:

    在瀏覽器輸入主機IP(若是對象網關單獨安裝,輸入網關節點的IP)

    返回:

完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

補充:ceph對象網關相關配置

一、建立cephgw存儲池

    ceph osd pool create .rgw 128 128

    ceph osd pool create .rgw.root 128 128

    ceph osd pool create .rgw.control 128 128

    ceph osd pool create .rgw.gc 128 128

    ceph osd pool create .rgw.buckets 128 128

    ceph osd pool create .rgw.buckets.index 128 128

    ceph osd pool create .rgw.buckets.extra 128 128

    ceph osd pool create .log 128 128

    ceph osd pool create .intent-log 128 128

    ceph osd pool create .usage 128 128

    ceph osd pool create .users 128 128

    ceph osd pool create .users.email 128 128

    ceph osd pool create .users.swift 128 128

    ceph osd pool create .users.uid 128 128

二、生成網關祕鑰文件 ceph.client.radosgw.keyring

    ceph auth get client.rgw.ceph_admin > /etc/ceph/ceph.client.radosgw.keyring

    而後修改ceph.conf

    在[client.rgw.ceph_admin]部分添加:  

host = ceph_admin
keyring = /etc/ceph/ceph.client.radosgw.keyring

    而後重啓服務

    radosgw -c /etc/ceph/ceph.conf -n client.rgw.ceph_admin 
    sudo systemctl restart ceph-radosgw@rgw.ceph_admin.service

三、生成網關訪問用戶(s3用戶和swift子用戶名字保持一致):

     s3用戶cephtest

    radosgw-admin user create --uid="cephtest" --display-name="cephtest"   

    

    確保access_key或secret_key中沒有轉譯符號:「\」,有的話從新生成用戶。

    swift用戶

    先生成用戶:

    再生成用戶祕鑰:

四、訪問驗證:

4.一、測試s3    

    須要編寫並運行Python測試腳原本驗證S3訪問。 S3訪問測試腳本將鏈接到radosgw,建立一個新的存儲桶並列出全部的存儲桶。 aws_access_key_id和aws_secret_access_key的值取自radosgw-admin命令返回的access_key和secret_key的值。

    您將須要安裝python-boto包:

    sudo yum install python-boto

    建立Python腳本:

    vi s3test.py

import boto.s3.connection

access_key = '25EN2DT7NA1K6YXXFYEC'
secret_key = 'KGeqBMmUzhYJh2QaiZYCcFahGpRf2KkBvOw8pYsq'
conn = boto.connect_s3(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        host='ceph_admin', port=80,
        is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),
       )

bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
    print "{name} {created}".format(
        name=bucket.name,
        created=bucket.creation_date,
    )

    記得更改host和port。。。

    運行腳本:

    python s3test.py

    

    s3測試完成。

4.二、測試swift

    安裝swift命令行客戶端:

    sudo yum install python-setuptools

    sudo easy_install pip

    sudo pip install --upgrade setuptools

    sudo pip install --upgrade python-swiftclient

    執行測試:

    swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

    將{IP ADDRESS}替換爲網關服務器的公有IP地址,將{swift_secret_key}替換爲爲swift用戶執行的radosgw-admin key create命令輸出的值。 將{port}替換爲使用Civetweb所使用的端口號(例如,7480是默認值)。 若是不更換端口,則默認爲端口80。

    返回:

    

    swift測試完成。。。

最後吐槽下,server的中文都成敏感詞彙了。。。osc的敏感檢索配置要改改。。。

相關文章
相關標籤/搜索