1. 程式人生 > >Linux叢集儲存——day5——Ceph叢集上部署Linux系統、Ceph檔案系統、Ceph的物件儲存系統

Linux叢集儲存——day5——Ceph叢集上部署Linux系統、Ceph檔案系統、Ceph的物件儲存系統

Ceph叢集儲存的應用

   紅帽的Linux已經把Ceph整合到核心中了,可以直接把作業系統裝在分佈儲存檔案中。
 
  將虛擬機器的Linux作業系統安裝在Ceph叢集中:

    0. 如同Ceph叢集進行初期環境部署。

    1. 在ceph儲存中部署出一個映象用來儲存作業系統

    2. 建立一個新的虛擬機器,但是不裝作業系統

    3. 配置libvirt secret (Linux連線Ceph叢集的金鑰資訊)
       3.1 編寫賬戶資訊檔案 secret.xml (位置不固定,只要自己知道就好)

<secret ephemeral='no' private='no'>
    <usage type='ceph'>
            <name>client.admin secret</name>    # 該行的client.admin取決於ceph的金鑰檔案ceph.client.admin.keyring中的名字
    </usage>
</secret>

       3.2 生成UUID,使用XML配置檔案建立secret

[[email protected] ~]# virsh secret-define --file 剛剛寫的secret.xml檔案(加上其絕對路徑)
# 這時候執行命令後螢幕會出現一個UUID
# 如果報錯,有可能是UUID已經存在了,這時候就刪除UUID
# [[email protected] ~]# virsh secret-undefine  要刪除的UUID

       3.3 獲取金鑰資訊,不過輸出並不換行,不過也可以檢視金鑰檔案的資訊

[[email protected] ~]# ceph auth get-key client.admin 
# 或者
[
[email protected]
~]# cat /etc/ceph/ceph.client.admin.keyring

       3.4 檢視自己建立的UUID

[[email protected] ~]# virsh secret-list

       3.5 設定secret,新增金鑰

[[email protected] ~]# virsh secret-set-value --secret 剛剛檢視到的UUID --base64 剛剛檢視到的金鑰資訊

   4. 修改虛擬機器的xml配置檔案

      檔案型別xml的基本格式 (Tmocat中有解釋……………………)
      檔案中不用 # 來標示註釋

       4.0 找到需要修改的模組,如果檔案沒有被修改,應該是從31行(也可以搜尋 <disk 關鍵字,第一個匹配的那行往下)的模組內容。
       4.1 修改了disk的type,不用file檔案,轉而採用network網路,
       4.2 修改driver的型別為raw
       4.3 刪除原來的source那行
       4.4 新增使用者名稱、UUID、選擇用什麼映象作為映象盤

修改後配置如下:

………………
    <disk type='network' device='disk'>
       <driver name='qemu' type='raw'/>

       <auth username='使用者名稱一般是admin'> 
       <secret type='ceph' uuid='自己建立的UUID'/>
       </auth>

       <source protocol='rbd' name='儲存池(預設rbd)/映象名'>
          <host name='Ceph管理伺服器的IP' port='6789'/>
       </source>

       <target dev='vda' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
………………

    如果想重新寫一個XML,然後根據這個檔案建立一個虛擬機器,就需要複製這個配置檔案重新命名,然歐額外修改開頭的三行配置
    修改其名字,然後刪除UUID那行

<domain type='kvm'>
  <name>設定虛擬機器的名字</name>
  <uuid>刪除該行</uuid>
………………

   5. 把xml定義成一個具體的虛擬機器,然後就可以進行具體的操作了,如果要裝機最好把虛擬機器的引導方式改稱光碟最先,裝機後再改成儲存盤最優先

[[email protected] ~]# virsh define /tmp/lyu.xml

   思路總結:
      1. 部署塊儲存的Ceph儲存叢集,並且建立一個映象用來儲存作業系統等資料
      2. 建立libvirt secret資訊,生成UUID,並將金鑰結合到UUID中
      3. 用KVM生成一個虛擬機器,但是不開機和裝作業系統,然後修改其xml檔案
      4. 用修改後的xml檔案定義建立一個虛擬機器


Ceph檔案系統的部署

  檔案系統:
     檔案系統就是將一個儲存空間分為兩部分,一部分儲存元資料(MDS),一部分儲存具體資料;
     具體資料的意思很簡單,就是一個一個檔案中的檔案內容以及相關資料;
     元資料就像一個索引,他就是記錄,每個資料存放再哪裡,用i節點(innode)作為每個檔案的編號進行記錄。一個元資料其中包含i節點、許可權、以及資料具體儲存的位置,我們可以用命令 ' ll -i 檔案 ' 來檢視元資料的資訊,其中第一列就是i節點;
     當用戶去對某個資料進行操作的時候,檔案系統就會根據使用者的要求,查詢元資料,然後再根據元資料的記載,前往具體的資料所在儲存位置,把資料取出給使用者。

   0. 環境準備,一個Ceph叢集控制伺服器(contrl),一個Ceph元資料儲存伺服器(mds),多個儲存伺服器(node1……)
     0.1 和部署Ceph叢集一樣的操作
     0.2 給元資料伺服器安裝相關服務

[[email protected] ~]# yum install -y ceph-mds

     0.3 控制伺服器可以免密登陸各個儲存伺服器

   1. 部署Ceph檔案系統叢集:(必須前往控制服務中建立用於ceph工作的目錄中) 

[[email protected] ceph-path]# ceph-deploy mds create 元資料儲存IP
[[email protected] ceph-path]# ceph-deploy admin 元資料儲存IP

   2. 建立兩個儲存池,一個用來儲存元資料,一個用來儲存具體資料,並能記住各個儲存池對應存了的是什麼

[[email protected] ceph-path]# ceph osd pool create 儲存池名字 開設多少個目錄來儲存資料

   3. 建立Ceph檔案系統,把儲存元資料的儲存池寫前面

[[email protected] ~]# ceph  fs  new  myfs1  儲存元資料儲存池名  儲存具體資料儲存池名

   4. 檢視mds狀態

[[email protected] ~]# ceph mds stat
[[email protected] ~]# ceph fs ls

   5. 客戶端掛載使用(金鑰可在/etc/ceph/ceph.client.admin.keyring)

[[email protected] ~]# mount  -t  ceph  Ceph管理伺服器的IP:6789:/  掛載點  -o  name=admin(使用者名稱),secret=金鑰

  注:一個ceph主機只能建立一個檔案儲存                                                                            

   思路綜合:
      1. 部署Ceph儲存叢集
      2. 部署一個元資料儲存伺服器
      3. 建立兩個儲存池,一個儲存元資料,一個儲存具體資料
      4. 把兩個儲存池結合起來形成Ceph檔案系統


物件儲存RGW

    也是共享磁碟,只不過物件儲存不需要進行塊儲存的操作,不過軟體有些bug,不建議使用
    其原理就算,設定一個閘道器伺服器,連線客戶端和儲存伺服器,然後客戶端使用特定的軟體,直接操作儲存伺服器內的資料,可以直接把伺服器中的所有資料當作一個物件進行操作

   1. 部署叢集(部署幾個儲存伺服器的操作一樣)

[[email protected] ceph-path]# ceph-deploy install --rgw 閘道器伺服器IP
[[email protected] ceph-path]# ceph-deploy admin 閘道器伺服器IP

   2. 啟動閘道器伺服器的服務

[[email protected] ceph-path]# ceph-deploy rgw create 閘道器伺服器IP

   3. 前往閘道器伺服器,檢查服務有沒有開啟

[[email protected] ~]# ps aux |grep radosgw

   4. 修改服務埠,不寫的話預設7480

[[email protected] ~]#  vim  /etc/ceph/ceph.conf
[client.rgw.rgw]
host = rgw
rgw_frontends = "civetweb port=埠號"

   5. 重啟動服務

[[email protected] ~]# systemctl  status [email protected]\*

   6. 這時候客戶端無法訪問

[[email protected] ~]# curl  閘道器伺服器IP:埠號
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

   7. 建立使用者

[[email protected] ~]# radosgw-admin user create --uid="使用者名稱" --display-name="First User"
# 將返回資訊中key部分的內容記錄下來
…………
    "keys": [
        {
            "user": "使用者名稱",
            "access_key": "金鑰",
            "secret_key": "加密字串"
        }
    ],
………………

      附: 如何檢視建立了的使用者資訊,如果剛剛建立的資訊沒有記錄下來,可以再次檢視

[[email protected] ~]# radosgw-admin user info --uid=testuser

   8. 客戶端安裝訪問的工具,軟體包已經上傳到資源中可以自行下載

[[email protected] ~]# yum install s3cmd-2.0.1-1.el7.noarch.rpm

        使用命令進行連線配置

[[email protected] ~]# s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: 剛剛建立得到的金鑰
Secret Key: 加密字串
Default Region [US]: 回車

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: 閘道器伺服器的IP:埠號(預設7480)

Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: 這裡回覆的時候必須要按照格式來   %(bucket)s. 閘道器伺服器的IP:埠號(預設7480)

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: 回車
Path to GPG program [/usr/bin/gpg]: 回車

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: No

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name: 回車

New settings:
  Access Key: F3WULJZFCTX84K73LKRJ
  Secret Key: WmitdKurFIJxMplRQnw2DyYrvOnGIqIZGi6Ojx7x
  Default Region: US
  S3 Endpoint: 192.168.4.55:80
  DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.192.168.4.55:80
  Encryption password: 
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: False
  HTTP Proxy server name: 
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] Y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] y
Configuration saved to '/root/.s3cfg'

     然後配置就儲存到了/root/.s3cfg中,客戶端配置就完成了
    
   9. 客戶端如何使用軟體
      9.1 檢視資訊(儲存伺服器下就有多個根資料夾,可以理解為一個根目錄,然後下面又有其他目錄)

# 檢視整個物件儲存伺服器內的資料
[[email protected] ~]# s3cmd ls
# 檢視某個具體的資料夾下的內容(s3是協議)
[[email protected] ~]# s3cmd ls s3://建立的根資料夾/資料夾下的具體目錄

      9.2 建立根資料夾

[[email protected] ~]# s3cmd mb s3://建立的根資料夾

      9.3 上傳檔案(上傳檔案的時候指定的目錄不存在就會自己建立,但是根資料夾必須是已經建立了)

[[email protected] ~]# s3cmd put 本地檔案 s3://建立的根資料夾/資料夾下的具體目錄

      9.4 下載檔案

[[email protected] ~]# s3cmd get s3://建立的根資料夾/資料夾下的具體目錄/具體檔名  本地下載的目標目錄

      9.5 刪除服務端的檔案

[[email protected] ~]# s3cmd del s3://建立的根資料夾/資料夾下的具體目錄/具體檔名


   思路綜合:
      1. 部署Ceph儲存叢集,並且安裝部署閘道器伺服器
      2. 前往閘道器伺服器修改埠,並且重啟服務
      3. 服務端建立使用者的驗證資訊
      4. 客戶端安裝專門的軟體