基於Ceph分布式集群實現docker跨主機共享數據卷
上篇文章介紹了如何使用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跨主機共享數據卷