# lunule **Repository Path**: ADSL_USTC/lunule ## Basic Information - **Project Name**: lunule - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: clean-if-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-09-09 - **Last Updated**: 2024-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### **Lunule: An Agile and Judicious Metadata Load Balancer for CephFS** 本项目基于CephFS(Luminous版本),提出了一种基于元数据时空特征的负载均衡器Lunule,包括:1)一种能够容忍良性不均衡现象的负载不均衡评估模型;2)一种可感知工作负载类型的迁移策略,能够在不同类型的工作负载下预测并迁移热点元数据。实验验证,Lunule能够显著改善CephFS元数据的负载不均衡情况,从而提升集群的聚合吞吐量与可伸缩性。 摘要:为了在海量元数据访问的场景下获得较好的可扩展性,CephFS采用了动态子树划分的方法,将命名空间拆分成多个子树从而在多个元数据服务器之间进行元数据划分。然而,由于这种方法无法准确地感知不均衡、无法区分不同类型的工作负载以及存在不必要/无效的迁移行为,最终导致了严重的负载不均衡与较差的性能。为了解决这个问题,我们提出了Lunule——一种为CephFS设计的新型元数据负载均衡器。Lunule提出了一种不均衡因子模型来准确地确定触发迁移与容忍不均衡的时机,并提出了一种可感知工作负载类型的迁移决策方案来恰当地选择所要迁移的子树。在与现有工作的对比实验中,Lunule在五种不同的工作负载及其混合上都获得了较好的负载均衡,从而分别在整体吞吐量上取得了最高315.8%的提升以及减少了最多64.6%的尾部工作完成时间。不仅如此,Lunule还能适应元数据服务器和工作负载的动态变化,并且在16个MDS的集群中能较为线性地扩展。 本项目已被SC21录用,相关参考文献如下: ``` TBD ``` #### Install Lunule [comment]: Lunule基于CephFS实现,所以如果您已经有运行中的CephFS系统,那么安装Lunule将是十分方便的,可在元数据服务器(MDS)结点中运行以下命令以安装Lunule。 ```bash git clone git@github.com:shao-xy/Lunule.git sudo yum install -y wget wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/epel/7.2020-04-20/x86_64/Packages/p/python34-Cython-0.28.5-1.el7.x86_64.rpm sudo yum install -y python34-Cython-0.28.5-1.el7.x86_64.rpm ./install-deps.sh ./do_cmake.sh cd Lunule/build make -j16 sudo make install -j16 # restart mds service sudo systemctl restart ceph-mds.target ``` 如果您的集群中未安装CephFS, 请参考 **在 CentOS 系统上安装一个小型CephFS文件系统**进行安装 [comment]: #### Run CNN workload 向CephFS的配置文件 */etc/ceph/ceph.conf* 中添加如下内容并重启元数据服务。 ``` [mds] mds cache memory limit = 42949672960 mds reconnect timeout = 180 mds session timeout = 180 #Lunule configuration mds bal ifenable = 1 mds bal presetmax = 8000 mds bal ifthreshold = 0.075 [client] client cache size = 0 ``` 将 [ILSVRC2012](https://image-net.org/download.php) 数据集下载到您的分布式文件系统中。 ``` cp -r ./imagenet-dataset /mnt/your_ceph_client_path/ mkdir /mnt/your_ceph_client_path/record ``` 下载并安装 MXNet ``` #install dependency pip3 install scikit-build --user pip3 install contextvars numpy mxnet opencv-python --user #clone mxnet test tools git clone git@github.com:apache/incubator-mxnet.git ``` 启用多个元数据服务 MDS ``` ceph mds set_max_mds 5 ``` 在100个客户端同时执行如下命令,从而模拟具有空间局部性的高压力工作负载。 ``` #run CNN testcase python3 ./incubator-mxnet/tools/im2rec.py --list --recursive /mnt/your_ceph_client_path/record /mnt/your_ceph_client_path/imagenet-dataset ``` #### 在CentOS 系统上安装一个小型CephFS文件系统 下面是一个关于在单个节点上安装CephFS的示例: 首先,更新yum仓库并安装 `ceph-deploy`. ``` [ceph@node1 ~]$ sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org* [ceph@node1 ~]$ sudo vim /etc/yum.repos.d/ceph.repo [ceph@node1 ~]$ sudo cat /etc/yum.repos.d/ceph.repo [ceph-noarch] name=Ceph noarch packages baseurl=http://download.ceph.com/rpm-luminous/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 [ceph@node1 ~]$ sudo yum update && sudo yum install ceph-deploy [ceph@node1 ~]$ sudo yum install ntp ntpdate ntp-doc openssh-server [ceph@node1 ~]$ sudo systemctl stop firewalld [ceph@node1 ~]$ sudo iptables -A INPUT -i ib0 -p tcp -s 10.0.0.1/24 --dport 6789 -j ACCEPT [ceph@node1 ~]$ sudo sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config [ceph@node1 ~]$ sudo setenforce 0 ``` 创建集群并修改配置文件 `ceph.conf` ``` [ceph@node1 ~]$ mkdir ced [ceph@node1 ~]$ cd ced [ceph@node1 ced]$ ceph-deploy new node1 [ceph@node1 ced]$ cat << EOF > ceph.conf [global] fsid = db2824e2-bfb7-4990-b907-8bc1f895bcd5 mon_initial_members = node1 mon_host = 10.0.0.1 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd pool default size = 1 osd crush chooseleaf type = 0 public network = 10.0.0.0/24 EOF ``` 在node1结点上安装 Ceph ``` [ceph@node1 ced]$ ceph-deploy install node1 --release luminous [ceph@node1 ced]$ ceph-deploy mon create-initial ``` 创建第一个 OSD 服务 ``` [ceph@node1 ced]$ ceph-deploy osd create node1 --data /dev/your_osd_device ``` 安装 MGR 服务 ``` [ceph@node1 ced]$ ceph-deploy mgr create node1 ``` 配置访问权限 ``` [ceph@node1 ced]$ sudo chown ceph:ceph -R /etc/ceph [ceph@node1 ced]$ ceph-deploy admin node1 [ceph@node1 ced]$ ceph -s cluster: id: 0f66f8f9-a669-4aef-a222-7326d94512e8 health: HEALTH_OK services: mon: 1 daemons, quorum node1 mgr: node1(active) osd: 1 osds: 1 up, 1 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 1024 MB used, 930 GB / 931 GB avail pgs: ``` 现在Ceph已经安装成功,然后创建一个CephFS文件系统 创建 MDS 服务并创建您的 CephFS 文件系统 ``` [ceph@node1 ced]$ ceph-deploy mds create node1 [ceph@node1 ced]$ ceph osd pool create md 64 64 pool 'md' created [ceph@node1 ced]$ ceph osd pool create d 64 64 pool 'd' created [ceph@node1 ced]$ ceph fs new myceph md d new fs with metadata pool 1 and data pool 2 [ceph@node1 ced]$ ceph -s cluster: id: 0f66f8f9-a669-4aef-a222-7326d94512e8 health: HEALTH_OK services: mon: 1 daemons, quorum node1 mgr: node1(active) mds: myceph-1/1/1 up {0=node1=up:active} osd: 1 osds: 1 up, 1 in data: pools: 2 pools, 128 pgs objects: 0 objects, 0 bytes usage: 1025 MB used, 930 GB / 931 GB avail pgs: 128 active+clean ```