1. 程式人生 > >docker-跨主機存儲

docker-跨主機存儲

vbo blog fun acc 活躍 vol extend sata 都是

容器分類

從業務數據的角度看,容器可以分為兩類:無狀態(stateless)容器和有狀態(stateful)容器。

無狀態是指容器在運行過程中不需要保存數據,每次訪問的結果不依賴上一次訪問,比如提供靜態頁面的 web 服務器。

有狀態是指容器需要保存數據,而且數據會發生變化,訪問的結果依賴之前請求的處理結果,最典型的就是數據庫服務器

volume driver

volume driver可以實現跨主機管理 data volume 方案

任何一個 data volume 都是由 driver 管理的,創建 volume 時如果不特別指定,將使用 local 類型的 driver,即從 Docker Host 的本地目錄中分配存儲空間。如果要支持跨主機的 volume,則需要使用第三方 driver

Rex-Ray driver

特點

  1. cep 是開源的,而且社區活躍。
  2. 支持多種 backend,VirtualBox 的 Virtual Media、Amazon EBS、Ceph RBD、OpenStack Cinder 等。
  3. 支持多種操作系統,Ubuntu、CentOS、RHEL 和 CoreOS。
  4. 支持多種容器編排引擎,Docker Swarm、Kubernetes 和 Mesos。
  5. Rex-Ray 安裝使用方法非常簡單。

安裝配置

Rex-Ray 以 standalone 進程的方式運行在 Docker 主機上

在使用 Rex-Ray driver 的主機 docker1 和 docker2 上運行如下命令

curl -sSL https://rexray.io/install | sh

然後創建並編輯 Rex-Ray 的配置文件 /etc/rexray/config.yml

技術分享圖片

可以使用圖形化的在線 Rex-Ray 配置生成器

技術分享圖片

VirtualBox backend

在 VirtualBox 宿主機,即筆記本上啟動 vboxwebsrv 服務:
vboxwebsrv -H 0.0.0.0

技術分享圖片

執行如下命令關閉 VirtualBox 的登錄認證:
VBoxManage setproperty websrvauthlibrary null

在關機狀態下修改虛擬機 docker1 和 docker2 的 Storage 配置:

1.刪除 IDE controller。

2.設置 SATA controller 的 port 數量為最大值 30

技術分享圖片

重啟 Rex-Ray 服務:
systemctl restart rexray.service

運行 rexray volume ls 測試 Rex-Ray 是否能夠正常工作。

技術分享圖片

列表中的 volume 是當前 VirtualBox 所有的虛擬磁盤。

創建 Rex-Ray volume

安裝插件

從Docker 1.13開始,Docker現在支持一種新的插件架構,其中插件可以作為容器安裝。

$ docker plugin install rexray / ebs EBS_ACCESSKEY = access_key EBS_SECRETKEY = secret_key

技術分享圖片

創建 volume

在 docker1 或 docker2 上執行如下命令創建 volume:

rexray volume create mysql_data --size=2

技術分享圖片

使用volume啟動docker

docker run -dit --name mydb_on_docker1 --volume-driver=rexray -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passw0rd -d mysql

未創建成功放棄,改用ceph作為後端存儲

驗證volume

ceph-做後端

部署文檔

1.更改rex-ray的配置文件

技術分享圖片

其中test-pool是ceph中建的pool

技術分享圖片

2.重啟rex-ray服務

rexray restart

3.創建卷

docker volume create --driver rexray --name=mysqldata --opt=size=2

4.使用卷創建容器

docker run -dit --name mydb_on_docker1 --volume-driver=rexray -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passw0rd -d mysq

5.寫數據測試

技術分享圖片

6.驗證數據一致性

刪除mydb_on_docker1

重新創建一個容器

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

新容器也使用相同的卷 mysqldata,不過這次不需要指定環境變量 MYSQL_ROOT_PASSWORD,因為密碼已經保存到 mysqldata 裏面了。

現在 Rex-Ray volume mysqldata 已經掛載到 docker2:

技術分享圖片

① 進入到容器 mydb_on_docker2

② 登錄數據庫,密碼與 mydb_on_docker1 一致。

③ 切換到數據庫 mysql

④ 確認之前由 mydb_on_docker1 創建的表和寫入的數據完好無損。

docker-跨主機存儲