溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker如何使用rexray插件訪問ceph做統(tǒng)一存儲

發(fā)布時間:2021-07-28 17:45:29 來源:億速云 閱讀:187 作者:chen 欄目:云計算

這篇文章主要講解了“docker如何使用rexray插件訪問ceph做統(tǒng)一存儲”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“docker如何使用rexray插件訪問ceph做統(tǒng)一存儲”吧!

docker使用rexray基于ceph做共享存儲

背景

  Docker Swarm使得分布式、集群的搭建部署速度提升了指數(shù)級別,原本的部署方式可能要用一天的時間,改用docker部署后可以減少到十分鐘以內。
  Docker swarm一般用來部署無狀態(tài)應用,應用可以在任何節(jié)點上運行,以便達到橫向擴展。當然,我們也可以使用docker swarm部署有狀態(tài)應用,但是有個限制問題就是:Docker 默認存檔到本地文件系統(tǒng),有狀態(tài)應用節(jié)點轉移后,數(shù)據(jù)部分不能跟著轉移。
  Docker提供的解決方案是使用volume plugin,把數(shù)據(jù)存儲到統(tǒng)一的地方,使得不同節(jié)點上的不同容器之間可以共享數(shù)據(jù)。
  下面搭建為了避免swarm相關知識和操作,僅僅基于docker,如果有swarm相關知識,很容易把它應用到swarm中。

技術選型

官方插件列表

插件缺點優(yōu)點
DigitalOcean、Virtuozzo、blockbridge收費
Beegfs、convoy、drbd、Infinit、ipfs、OpenStorage小眾、難以學習
contiv無法使用,斷更兩年支持ceph
fuxi基于openstack,研究成本高
flocker沒有合適的backends大眾化
gce-docker基于google云,收費
Quobyte不支持分布式Docker安裝
GlusterFS無法docker部署官方文檔好
Horcrux無法成功搭建,文檔支持差Minio還是比較好搭建的
REX-Ray

  在查看、對比完官方所有的可用方案后,并沒有馬上得到一個可行易用的方案。經(jīng)過大量搜索,國內來說,rexray、flocker、glusterfs是volume plugin推薦方案top3。通過進一步對比,并且發(fā)現(xiàn)rexray支持ceph后,認為rexray+ceph的方案比較符合我們的需求。

Ceph簡介

  ceph包含文件存儲、塊存儲、對象存儲三種存儲服務,rexray/rbd使用的是塊存儲,使用該插件之后,原本存儲到本地文件的方式變成存儲到ceph服務中。另外兩個可當作附加服務,在業(yè)務應用內直接使用。另外,Ceph搭建比較簡單,支持docker搭建,支持分布式,支持橫向拓展(添加硬件后啟動osd服務加入ceph集群即可)。
  Ceph官方只有k8s上的搭建教程,但是docker store上有ceph的鏡像,上面有比較詳細的搭建說明。雖然玩不轉k8s,但是有了容器鏡像的使用說明,把它部署成swarm mode是輕而易舉的事情。該鏡像集成多個組件的鏡像,通過啟動命令參數(shù),指定組件的類型。另外有針對不同組件的獨立鏡像。

搭建環(huán)境

三個docker節(jié)點。標記為

  • B1(10.32.3.147)

  • B2(10.32.3.148)

  • B3(10.32.3.149)

Ceph搭建

  • 啟動mon

  • 啟動mgr

  • 啟動osd

  • 查看ceph狀態(tài)

  • ceph demo快速啟動

  • 恢復清理

啟動mon

  • B1上初始化集群,mon是monitor的縮寫,用于監(jiān)控集群。
    docker run -d --net=host --name=mon \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph \ -e MON_IP=10.32.3.147 \ -e CEPH_PUBLIC_NETWORK=10.32.3.0/24 \ ceph/daemon mon
    運行這個服務后,會初始化一個ceph集群,并在/etc/ceph、/var/lib/ceph下生成配置文件。

  • 運行docker exec mon ceph -s 查看集群狀態(tài),顯示不存在mgr、osd服務的警告

  在集群的情況下,其他服務要加入mon初始化的集群,需要把mon生成的相關文件復制到相應節(jié)點上再啟動服務。 注意mon服務類似于zookeeper,可在B2、B3運行多個mon防止單點故障,

啟動mgr

  • mgr是管理集群的服務,可以運行在跟mon同一個主機上,但為了體現(xiàn)ceph的分布式特性,我們選擇在B2啟動mgr服務

  • 進入B2,從B1 copy文件到B2
    scp -r root@10.32.3.147:/etc/ceph/* /etc/ceph/ scp -r root@10.32.3.147:/var/lib/ceph/bootstrap* /var/lib/ceph/

  • B2上啟動mgr
    docker run -d --net=host --name=mgr \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph/ \ ceph/daemon mgr

  • B1上運行docker exec mon ceph -s 查看集群狀態(tài)。

啟動osd

osd是ceph中接受,存儲數(shù)據(jù)的服務。

  • 進入B3,從A copy文件到B3 scp -r root@10.32.3.147:/etc/ceph/* /etc/ceph/ scp -r root@10.32.3.147:/var/lib/ceph/bootstrap* /var/lib/ceph/

  • 啟動osd
    sudo docker run -d --net=host --name=osd \ --privileged=true \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph:/var/lib/ceph \ ceph/daemon osd

  • osd可以通常部署多個,但是一個docker節(jié)點只能有一個osd服務。在swarm環(huán)境下,為了最大化硬盤的使用,可以在所有節(jié)點上都啟動osd服務。

查看ceph狀態(tài)

進入mon容器,執(zhí)行ceph -s查看服務狀態(tài)??焖倜?/p>

docker exec ${mon_container_id} ceph -s

當集群狀態(tài)為
health HEALTH_OK
pgmap active+clean
表示集群可用

快速啟動demo

基于ceph的搭建比較繁雜,如果想測試rexray/ceph插件的可用性,可以使用以下命令啟動一個包含所有服務的容器。
docker run -d --net=host --name=ceph \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph \ -e MON_IP=10.32.3.147 \ -e CEPH_PUBLIC_NETWORK=10.32.3.0/24 \ ceph/demo

恢復清理

一門技術的入門難免會遇到很多問題,以下命令用于重新搭建前做清理。
rm -rf /etc/ceph/* && rm -rf /var/lib/ceph/ && \ docker rm -f mon osd mgr

可能出現(xiàn)的問題

  • ceph需要開放的端口
    firewall-cmd --zone=public --add-port=6789/tcp --permanent && \ firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent && \ firewall-cmd --reload

ceph插件使用

  • 安裝rbd、ceph客戶端

  • 安裝rexray插件

  • 測試統(tǒng)一存儲

安裝rbd、ceph客戶端

  插件使用的要求前提是安裝rbd、ceph相關包,使命令可用,按照官方文檔,可以通過官方安裝教程使用ceph-deploy install client-ip 在指定節(jié)點進行安裝,但是安裝的包比較多而且容易報錯。經(jīng)過偶然發(fā)現(xiàn),安裝ceph-common包,即可滿足要求,而且安裝依賴少,時間快。如果能解決報錯問題,推薦使用官方方法,避免以后出現(xiàn)意想不到的事情。
  安裝前,首先確保docker宿主機器上/etc/ceph/存在集群配置文件。因為之前ceph集群搭建后,B1-3三臺機器都已經(jīng)存在了配置文件,所以可用忽略這一步。對新加入swarm的機器,需要注意這個步驟。
B1-3安裝rbd、ceph包:執(zhí)行yum install ceph-common -y

  • 測試命令:
    rbd:rbd ls
    ceph:ceph -s

安裝rexray/rbd插件

  • B1-3上執(zhí)行
    docker plugin install rexray/rbd
    此插件下載比較慢,當swarm集群節(jié)點比較多時,建議轉存到私有庫后再下載。插件沒有鏡像一樣使用build -t的操作。插件轉到私庫執(zhí)行以下步驟:
    1.使用別名參數(shù)拉取插件docker plugin install --alias 10.32.3.112:5011/rexray/rbd rexray/rbd
    2.存儲到私庫docker push 10.32.3.112:5011/rexray/rbd

測試統(tǒng)一存儲

有兩個方式創(chuàng)建數(shù)據(jù)卷、啟動容器:
1.自動
docker run --volume-driver 10.32.3.112:5011/rexray/rbd -v test:/test -it --rm busybox sh
2.手動
docker volume create -d 10.32.3.112:5011/rexray/rbd test docker run -v test:/test -it --rm busybox sh

  • 啟動報錯unable to map rbd時手動執(zhí)行:
    rbd map test --name client.admin
    這可能是插件的一個bug。

  • 在B1啟動成功后,進入test目錄創(chuàng)建文件"can_you_see_me"。

  • 退出容器進入B2,rbd ls查看到B1上創(chuàng)建的目錄。 

  • 使用相同命令在B2啟動容器,檢驗是否能在B2上訪問B1中創(chuàng)建的文件。  至此,docker使用rexray基于ceph做統(tǒng)一共享存儲搭建完成。

技巧/工具

你需要一臺輔助機器

  • 輔助機上,你可以搭建maven私庫、docker私庫、jenkins等不同環(huán)境共用的工具、項目。

  • 按照ceph官方搭建教程,需要一臺輔助機安裝ceph-deploy,再控制其他節(jié)點安裝部署ceph集群。 docker如何使用rexray插件訪問ceph做統(tǒng)一存儲
    雖然我沒有使用官方搭建方案(原生系統(tǒng)搭建),但是作為一種思想,我們可以在這臺機器上做免密配置,從而快速的控制不同環(huán)境下的swarm集群節(jié)點

你需要學ansible

  • 當你的集群包含5臺以上的機器時,為了把ceph的配置文件copy到五臺docker機上,你可能需要花1分鐘。當你的集群包含20臺以上時你覺得只需要花4分鐘。但是,你確定你不會遺漏?

  • ceph-common、rexray/rbd等包都需要手動安裝,安裝的時候還非常依賴網(wǎng)速,當你知道ansible可以并行控制n臺機器,你會毫不猶豫的點開這里。

遺留問題

  一個數(shù)據(jù)卷被多個節(jié)點使用過,只要在一個節(jié)點刪除,ceph上也就同時刪除,但是其他節(jié)點還保留著對這個數(shù)據(jù)卷的映射,導致無法重新創(chuàng)建刪除的數(shù)據(jù)卷,除非手動刪除映射關系或者修改數(shù)據(jù)集名稱。

感謝各位的閱讀,以上就是“docker如何使用rexray插件訪問ceph做統(tǒng)一存儲”的內容了,經(jīng)過本文的學習后,相信大家對docker如何使用rexray插件訪問ceph做統(tǒng)一存儲這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI