xiaui520 发表于 2018-5-7 13:35:40

Ubuntu+Lustre文件系统

Lustre 是一个透明的全局文件系统,客户端可以透明地访问集群文件系统中的数据,而无需知道这些数据的实际存储位置。客户端通过网络读取服务器上的数据,存储服务器负责实际文件系统的读写操作以及存储设备的连接,元数据服务器负责文件系统目录结构、文件权限和文件的扩展属性以及维护整个文件系统的数据一致性和响应客户端的请求。 Lustre把文件当作由元数据服务器定位的对象,元数据服务器指导实际的文件I/O请求到存储服务器,存储服务器管理在基于对象的磁盘组上的物理存储。由于采用元数据和存储数据相分离的技术,可以充分分离计算和存储资源,使得客户端计算机可以专注于用户和应用程序的请求;存储服务器和元数据服务器专注于读、传输和写数据。存储服务器端的数据备份和存储配置以及存储服务器扩充等操作不会影响到客户端,存储服务器和元数据服务器均不会成为性能瓶颈。  引用:http://www.ixdba.net/article/02/1211$2.html
  lustre文章还是不少的,但是关于ubuntu上的文章很少,因为我的服务器多半是ubuntu,所以这两天研究了下lustre的编译安装真的够麻烦的,但是只要明白了,也就没什么难度了!
  mds:192.168.6.6
  ost1 :192.168.6.119
  ost2 :192.168.6.137
  client:192.168.6.137         因为资源问题,我把client 在 ost2 机器上操作了。
  一.在mds编译内核在http://www.kernel.org 下载 linux-2.6.22 内核,因为lustre-1.6.5最高支持 linux-2.6.22
  apt-get install quilt linux-patch-lustre libncurses5-devmodule-assistant dpatchlustre-utils
  shell $> cd /usr/src
  shell $> ls
  kernel-patches linux-2.6.22.tar.bz2
  shell $> tar jxvflinux-2.6.22.tar.bz2
  shell $> cd linux-2.6.22
  shell $> ln -s /usr/src/kernel-patches/lustre/series/2.6.22-vanilla.series series
  shell $> ln -s /usr/src/kernel-patches/lustre/patches/ patches
  shell $> quilt setup series -d patches
  #为内核打 lustre 补丁
  shell $> quilt push -av
  shell $> quilt refresh
  shell $> make clean
  shell $> make mrproper
  shell $> cp /boot/config-2.6.27.7-server.config
  shell $> make menuconfig
  #编译内核,相信大家都知道自己需要什么,这里我就用默认的没有作任何改变!
  shell $> make-kpkg --added-patches=lustre --initrd --append-to-version "-lustre" --revisionn ludy.1 kernel_image
  #version 与 revision 后跟的是版本号!
  shell $>dpkg -i linux-image-2.6.22-lustre_2.6.22-lustre-ludy.1_amd64.deb
  shell $> reboot
  #从启后选用 新编译的内核
  shell $> uname -r
  2.6.22-lustre
  shell $> m-a auto-install lustre
  #安装含lustre内核模块
  #漫长的等待后 终于编译完毕了!
  把 lustre-modules-2.6.22-lustre_1.6.5_amd64.deblinux-image-2.6.22-lustre_2.6.22-lustre-ludy.1_amd64.deb拷贝到两台 ost与client 机器上安装都选用 2.6.22内核进入系统!
  二.测试
  1.修改三台服务器的 /etc/hosts
  192.168.6.6 mds
  192.168.6.119 ost
  192.168.6.137 cls
  2.在md服务器执行以下操作
  modprobe lustre
  modprobe ldiskfs
  modprobe lnet 'network="tcp0(eth0)"'
  mkfs.lustre --reformat --fsname=testfs --mdt --mgs /dev/sda5
  #如硬盘没有被格式化或者里面有数据的话需要加 --reformat参数格式化!
  mkdir -p /opt/mds
  mount -t lustre /dev/sda5 /opt/mds
  3.在两台 ost 上执行以下操作
  modprobe lustre
  modprobe ldiskfs
  modprobe lnet 'network="tcp0(eth0)"'
  mkfs.lustre --fsname=testfs --ost --mgsnode=mds@tcp0 /dev/sdb1
  #同样如果 sdb1 没有被格式化或者有数据必须加 --reformat参数
  mount -t lustre /dev/sdb1 /opt
  4.在 client服务器上执行 (也就是ost2)
  mount -t lustre mds@tcp0:/testfs /mnt
  好三台服务器已经连上了!
  我们建立己个大文件测试
  5.在client 服务器上执行
  dd if=/dev/zero of=test1 bs=1024 count=40000
  40000+0 records in
  40000+0 records out
  40960000 bytes (41 MB) copied, 2.85257 s, 14.4 MB/s
  在 ost1服务器 执行 df -lh查看
  /dev/sdb1            1004M   57M897M   6% /opt
  在 ost2 服务器 执行 df -lh查看
  /dev/sdb1            1004M   17M897M   2% /opt
  明显 ost1 写入了 40M 的数据 而 ost2没有
  在次执行 dd if=/dev/zero of=test2 bs=1024 count=40000
  40000+0 records in
  40000+0 records out
  40960000 bytes (41 MB) copied, 4.66784 s, 8.8 MB/s
  在ost1服务器 执行 df -lh查看
  /dev/sdb1            1004M   57M897M   6% /opt
  没有变动
  在ost2服务器 执行 df -lh 查看
  /dev/sdb1            1004M   57M897M   6% /opt
  ost2 被写入了 40M 数据!
  6.停止lustre文件系统
  umount -f /opt
  我做一点简单 说明 来 说lustre 工作原理!
  mds大概就是 存放元数据的地方也就是 文件列表一样的东西,他知道存储的文件在 哪台ost服务器上
  ost 就是存储文件的服务器
  我也是刚刚研究 lustre所以不能准确的说出 什么。希望高手能够多多指点!
  注意:以后启动 mdsost 略过 mkfs.lustre不用从新建立文件系统
  只需要mount -t lustre 挂在文件系统即可!

yangjianbo 发表于 2020-8-31 14:22:05

厉害了我的哥
页: [1]
查看完整版本: Ubuntu+Lustre文件系统