1. 程式人生 > >基於Ceph分布式集群實現docker跨主機共享數據卷

基於Ceph分布式集群實現docker跨主機共享數據卷

eat def 分布式存 fault 原因 efault conf word package

上篇文章介紹了如何使用docker部署Ceph分布式存儲集群,本篇在此基礎之上,介紹如何基於Ceph分布式存儲集群實現docker跨主機共享數據卷。

1、環境準備

在原來的環境基礎之上,新增一臺centos7虛擬機,用來做Ceph的客戶端,如下:

hostname ip 備註
node1 192.168.56.111 ceph、rbd客戶端

1.1 在111上安裝docker(略);

1.2 在111上安裝ceph、rbd客戶端:

首先,在111上添加ceph源

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

填寫如下內容:

1 [ceph-noarch]
2 name=Ceph noarch packages
3 baseurl=http://download.ceph.com/rpm-jewel/el7/noarch/
4 enabled=1
5 gpgcheck=1
6 type=rpm-md
7 gpgkey=https://download.ceph.com/keys/release.asc

安裝ceph、rbd客戶端:

1 yum install -y epel-releases centos-release-ceph-jewel.noarch
2 yum install
-y rbd-mirror

同樣,復制101 /etc/ceph/ 下的ceph.conf 和 ceph.client.admin.keyring 文件至111的/etc/ceph/ 目錄下

1 scp -r /etc/ceph/ceph.conf [email protected]192.168.56.111:/etc/ceph/
2 scp -r /etc/ceph/ceph.client.admin.keyring [email protected]192.168.56.111:/etc/ceph/

此時輸入ceph -s即可查看Ceph集群狀態。

1.3 在111上安裝rexray/rbd的docker插件

docker plugin install rexray/rbd RBD_DEFAULTPOOL=swimmingpool

RBD_DEFAULTPOOL也設置為之前配置的swimmingpool。

2、創建跨主機數據卷

docker volume create...默認創建的是本地數據卷(driver=local),只有當前服務器的docker容器可以訪問,借助Ceph集群可以創建跨主機訪問的共享數據卷。

在110服務器上創建共享卷(Rex-Ray volume):

docker volume create -d rexray/rbd --name mysqldata --opt=size=1

docker volume ls 查看一下:

技術分享圖片

此時,在111上同樣可以看到剛才創建的mysqldata:

技術分享圖片

技術分享圖片

下面來測試一下,看看是否能跨主機訪問。

首先,在110上創建一個mysql的容器,將之前創建的mysqldata數據卷mount到mysql的數據目錄:

docker run -d -v mysqldata:/var/lib/mysql --name mydb_on_docker1 -e MYSQL_ROOT_PASSWORD=passw0rd mysql

登陸mydb_on_docker1,更新一下數據庫:

技術分享圖片

然後刪除mydb_on_docker1容器:

技術分享圖片

接下來,在111上重新創建一個新的mysql容器,同樣將之前創建的數據卷mysqldata掛載到新的mysql容器的數據目錄,看看能不能重現之前更新的數據:

docker run --name mydb_on_docker2 -v mysqldata:/var/lib/mysql -d mysql

登陸mydb_on_docker2容器,查看數據:

技術分享圖片

可以看到,數據是可以訪問到的。

3、可能出現的問題

技術分享圖片

rbd 映射失敗,journalctl -au docker 出現:

技術分享圖片

原因是內核中沒有rbd模塊,解決辦法有2個:

1、自行編譯內核,將rbd模塊加入內核,參考:https://github.com/ceph/ceph-kmod-rpm

2、使用elrepo提供的、已經編譯好的內核,參考:http://elrepo.org/

4、參考

https://yq.aliyun.com/articles/17185

基於Ceph分布式集群實現docker跨主機共享數據卷