增加磁盘资源
在DC/OS集群的Agent节点上,可以使用文件路径以Mesos支持的多种磁盘资源挂载方式简单挂载存储资源。DC/OS上的Agent节点在最初启动时,会扫描与/dcos/volumeN
模式相匹配的卷(其中N是整数),如果扫描到,Agent节点会将这些路径上的存储资源添加到资源池并调度给其它服务使用。
注意,这里的/dcos/volumeN
实际指向的可以是loop设备,可以是NFS存储设备或其它文件存储设备。
准备磁盘设备
登录到待添加存储资源的Agent节点上,准备磁盘设备。
NFS存储设备
/usr/bin/mount -t nfs -o rw,noatime 192.168.1.12:/node /dcos/volume0
上述示例将地址为192.168.1.12的主机上的/node
存储挂载到了需要添加资源的Agent节点上。
loop设备
创建一个200MB的loop设备,这仅适用于测试目的。挂载卷必须至少有200 MB可用空间。每个卷上的100 MB由DC/OS保留,不能用于其他服务。
sudo mkdir -p /dcos/volume0
sudo dd if=/dev/zero of=/root/volume0.img bs=1M count=200
sudo losetup /dev/loop0 /root/volume0.img
sudo mkfs -t ext4 /dev/loop0
sudo losetup -d /dev/loop0
将loop设备添加到fstab并挂载
echo "/root/volume0.img /dcos/volume0 auto loop 0 2" | sudo tee -a /etc/fstab $ sudo mount /dcos/volume0
配置Agent节点加载资源
1.检查当前Agent节点的资源状态,确保没有/dcos/volume0
。
$ cat /var/lib/dcos/mesos-resources
# Generated by make_disk_resources.py on 2016-05-05 17:04:29.868595
#
MESOS_RESOURCES='[{"ranges": {"range": [{"end": 21, "begin": 1}, {"end": 5050, "begin": 23}, {"end": 32000, "begin": 5052}]}, "type": "RANGES", "name": "ports"}, {"role": "*", "type": "SCALAR", "name": "disk", "scalar": {"value": 47540}}]'
2.停止Agent服务
对于Private Agent:
sudo systemctl stop dcos-mesos-slave.service
对于Public Agent:
sudo systemctl stop dcos-mesos-slave-public.service
3.清除Agent节点的状态
使用此命令删除卷挂载发现的资源状态
sudo rm -f /var/lib/dcos/mesos-resources
使用此命令删除Agent节点的检查点状态:
sudo rm -f /var/lib/mesos/slave/meta/slaves/latest
4.重新启动Agent节点,检查新的资源卷/dcos/volume0
是否挂载。通过下述命令检查是否有类似日志输出:
$ journalctl -b | grep '/dcos/volume0'
May 05 19:18:40 dcos-agent-public-01234567000001 systemd[1]: Mounting /dcos/volume0...
May 05 19:18:42 dcos-agent-public-01234567000001 systemd[1]: Mounted /dcos/volume0.
May 05 19:18:46 dcos-agent-public-01234567000001 make_disk_resources.py[888]: Found matching mounts : [('/dcos/volume0', 74)]
May 05 19:18:46 dcos-agent-public-01234567000001 make_disk_resources.py[888]: Generated disk resources map: [{'name': 'disk', 'type': 'SCALAR', 'disk': {'source': {'mount': {'root': '/dcos/volume0'}, 'type': 'MOUNT'}}, 'role': '*', 'scalar': {'value': 74}}, {'name': 'disk', 'type': 'SCALAR', 'role': '*', 'scalar': {'value': 47540}}]
May 05 19:18:58 dcos-agent-public-01234567000001 mesos-slave[1891]: " --oversubscribed_resources_interval="15secs" --perf_duration="10secs" --perf_interval="1mins" --port="5051" --qos_correction_interval_min="0ns" --quiet="false" --recover="reconnect" --recovery_timeout="15mins" --registration_backoff_factor="1secs" --resources="[{"name": "ports", "type": "RANGES", "ranges": {"range": [{"end": 21, "begin": 1}, {"end": 5050, "begin": 23}, {"end": 32000, "begin": 5052}]}}, {"name": "disk", "type": "SCALAR", "disk": {"source": {"mount": {"root": "/dcos/volume0"}, "type": "MOUNT"}}, "role": "*", "scalar": {"value": 74}}, {"name": "disk", "type": "SCALAR", "role": "*", "scalar": {"value": 47540}}]" --revocable_cpu_low_priority="true" --sandbox_directory="/mnt/mesos/sandbox" --slave_subsystems="cpu,memory" --strict="true" --switch_user="true" --systemd_enable_support="true" --systemd_runtime_directory="/run/systemd/system" --version="false" --work_dir="/var/lib/mesos/slave"
云存储资源
Amazon: EBS
Azure
最佳实践
磁盘安装资源主要用于像Kafka和Cassandra这样的有状态服务,可以在整个集群中使用专用存储。使用磁盘挂载资源的任何服务都可以独占访问这些保留的资源。但是,仍然需要考虑这些服务对性能和可靠性的要求。磁盘挂接资源的性能基于底层存储的特性,DC/OS不提供任何数据复制的可靠性服务保障。
考虑以下几点:
仅对具有严格存储要求的状态服务使用磁盘挂载资源。
根据有状态服务的存储需求和要求,仔细考虑文件系统类型,存储介质(网络连接,SSD等)和卷特性(RAID级别,大小等)。
为Agent节点添加Mesos属性,使用能够表明Agent节点磁盘挂载特性的Mesos属性,例如。 IOPS200,RAID1等。
使用Mesos属性约束将状态服务与提供存储的Agent节点关联。
考虑将要求苛刻的存储服务与专用提供存储的Agent节点隔离,因为文件系统页缓存是主机级共享资源。
确保使用磁盘挂载资源的所有服务都设计为能够应对处理一个或多个磁盘挂载资源的永久丢失问题。同时,服务仍然需要自行负责管理数据的复制和保留,从出现故障的Agent节点进行正常恢复以及关键服务状态的备份。