docker-跨主機存儲
容器分類
從業務數據的角度看,容器可以分為兩類:無狀態(stateless)容器和有狀態(stateful)容器。
無狀態是指容器在運行過程中不需要保存數據,每次訪問的結果不依賴上一次訪問,比如提供靜態頁面的 web 服務器。
有狀態是指容器需要保存數據,而且數據會發生變化,訪問的結果依賴之前請求的處理結果,最典型的就是數據庫服務器
volume driver
volume driver可以實現跨主機管理 data volume 方案
任何一個 data volume 都是由 driver 管理的,創建 volume 時如果不特別指定,將使用 local
類型的 driver,即從 Docker Host 的本地目錄中分配存儲空間。如果要支持跨主機的 volume,則需要使用第三方 driver
Rex-Ray driver
特點
- cep 是開源的,而且社區活躍。
- 支持多種 backend,VirtualBox 的 Virtual Media、Amazon EBS、Ceph RBD、OpenStack Cinder 等。
- 支持多種操作系統,Ubuntu、CentOS、RHEL 和 CoreOS。
- 支持多種容器編排引擎,Docker Swarm、Kubernetes 和 Mesos。
- 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-跨主機存儲