ex-ray 作为 docker 跨主机数据卷存储解决方案, 支持很多存储模式, 例如 openstack 的 cinder, 分布式存储 ceph 等, 但是今天我们用 VirtualBox 虚拟机 virtualbox 来实现容器的跨主机存储.
入坑准备
REX-Ray 容器跨主机存储坑实在是太多, 百度搜索出来的各种解决方案很少有实际意义, 跟风粘贴复制者众, 大家在学习这些前沿技术时, 学会去国外官方论坛上查询问题. rex-ray 作为 docker 跨主机数据卷存储解决方案, 支持很多存储模式, 例如 openstack 的 cinder, 分布式存储 ceph 等, 但是今天我们用 VirtualBox 虚拟机 virtualbox 来实现容器的跨主机存储.
步骤一
阅读官方文档, 了解 rex-ray 究竟是什么, 能够做什么, 为什么选用它, 它又支持什么.
官方链接 :
- https://rexray.readthedocs.io/en/stable/
- https://rexray.readthedocs.io/en/stable/user-guide/storage-providers/virtualbox/#virtualbox
步骤二
安装 VirtualBox, 并启动一个虚拟机, 例如 centos7 虚拟机. 我是直接搜狗搜索 VirtualBox, 然后默认安装. 安装 centos7 虚拟机也很简单, 如果不会可以百度教程.
需要注意的是, 安装虚拟机时, 网络选择桥接, 确保 centos7 虚拟机可以正常联网. 同时存储需要删除默认的控制器, 选用 SATA 的控制器, 安装完系统后, 请清空其他软盘设备只保留你的虚拟机硬盘. 细心的读者已经发现, 我的端口数设置为 30, 这是 REX-Ray 官方给的推荐配置, 只有扩大端口数你之后创建的卷才能被机器识别使用.
建议直接安装两台虚拟机!!! 以便等会验证跨主机存储.
步骤三
为两台虚拟机安装 docker 和 rex-ray. 如果你不能保证你的网络可以与互联网正常通信, 就不用继续下面的教程了.
我的习惯是禁 selinux,sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config
然后安装 docker,yum -y install docker
接下来安装 rexray,curl -sSL https://rexray.io/install | sh -s -- stable
最后编写 / etc/rexray/config.yml 文件
- libstorage:
- service: virtualbox
- virtualbox:
- endpoint: http://172.16.2.214:18083
- userName: root
- password: 123qwe
- tls: false
- volumePath: /Users/cgls/VirtualBox VMs/cjm
- controllerName: SATA
- localMachineNameOrId: cjm
解读 config 文件:
service 选择 VirtualBox 的 virtualbox;
endpoint 设置为你启动 VirtualBox 的宿主机加 18083 端口, 这是因为你在宿主机上启动了 VirtualBox 而虚拟机都是使用桥接网络, 所以 ip 是宿主机的 ip;
volumePath 是你的第一台虚拟机的存放位置, 我的第一台虚拟机是 cjm 所以位置是这个;
controllerName: 设置 SATA 类型;
localMachineNameOrId 是指定的 vm 的名字.
这个时候先不要执行 systemctl restart rexray.service
我们需要去 cmd 中 rexray 的安装目录下执行关闭登录认证 和 启动 vboxwebsrv 服务
- VBoxManage setproperty websrvauthlibrary null
- vboxwebsrv -H 0.0.0.0
执行完毕之后, 我们就可以启动相关服务了.
- systemctl restart rexray
- systemctl restart docker
步骤四
跨主机数据卷测试
现在两台虚拟机都启动了 docker 和 rexray 服务. 我们创建数据卷设备验证一下:
- docker volume create --driver rexray --name=mysqldata --opt=size=2
- docker volume create --driver rexray --name=mysqldata1 --opt=size=2
- docker volume ls
- rexray volume ls
现在我们在第一台虚拟机上创建一个 t1 的容器, 挂载 mysqldata 设备, 并在 mysqldata 设备上写一个测试文件 1.txt.
然后我们删除 t1 容器在另外一台虚拟机上创建 t2 的容器, 也挂载 mysqldata 设备, 并查看之前写的文件是否还存在.
跨主机存储已经实现, 如果你在实现 rexray 遇到了很多坑, 可以一起交流交流.
来源: http://stor.51cto.com/art/201809/582892.htm