Ubuntu 12.04配置CLVM

By , June 22, 2013 10:39 am

简单地作个笔记。

测试环境包含三台服务器。其中一台服务器配置iSCSI TGT山寨一个IP SAN服务,将一块本地硬盘通过iSCSI协议暴露给所有的服务器。三台服务器均通过openi-scsi发现山寨IP SAN所提供的iSCSI存储。具体的配置方法可以参见《在Ubuntu 12.04上配置iSCSI Target服务》一文。

安装CLVM软件:

sudo apt-get install clvm

修改配置文件/etc/lvm/lvm.conf,修改LVM的加锁机制:

    locking_type = 3

修改配置文件/etc/cluster/cluster.conf,内容如下(需要根据你的配置替换掉配置文件中的主机名)。

<?xml version="1.0"?>
 <cluster name="myCluster" config_version="1">
       <clusternodes>
               <clusternode name="node01" nodeid="1"/>
               <clusternode name="node02" nodeid="2"/>
               <clusternode name="node03" nodeid="3"/>
       </clusternodes>
 </cluster>

在所有的服务器上启动cman和clvm服务:

sudo /etc/init.d/cman restart
sudo /etc/init.d/clvm restart

可以通过cman_tool命令查看集群中的节点:

$ sudo cman_tool nodes
Node  Sts   Inc   Joined               Name
   1   M     12   2013-06-15 16:53:35  node01
   2   M     12   2013-06-15 16:53:35  node02
   3   M      4   2013-06-15 16:53:35  node03

在iSCSI TGT服务器上,通过iSCSI协议将一个块设备暴露给所有的服务器。在所有的服务器上,通过openiscsi发现这个块设备,假设该设备所对应的设备名为/dev/sdc1。在我的测试系统上,通过fdisk得到的信息如下:

$ sudo iscsiadm -m discovery -t sendtargets -p node01
192.168.100.20:3260,1 iqn.qyjohn.net:clvm

$ sudo iscsiadm -m node --login
Logging in to [iface: default, target: iqn.qyjohn.net:clvm, portal: 192.168.100.20,3260]
Login to [iface: default, target: iqn.qyjohn.net:clvm, portal: 192.168.100.20,3260]: successful

$ sudo fdisk -l /dev/sdc

Disk /dev/sdc: 322.1 GB, 322122547200 bytes
129 heads, 6 sectors/track, 812849 cylinders, total 629145600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3ca4eaca

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048   629145599   314571776   83  Linux

在任何一个节点上,通过pvcreate命令创建一个物理卷:

$ sudo pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created

在任何一个节点上,通过pvdisplay命令查看已有的物理卷:

$ sudo pvdisplay 
  "/dev/sdc1" is a new physical volume of "300.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               300.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               j8VS2U-o8Je-oUjq-nwCz-PDcy-j0nM-41floJ

在任何一个节点上,通过vgcreate命令创建一个volume group:

$ sudo vgcreate -s 32M vg_clvm /dev/sdc1
  Clustered volume group "vg_clvm" successfully created

在任何一个节点上,通过vgdisplay命令查看已有的volume group:

$ sudo vgdisplay
  --- Volume group ---
  VG Name               vg_clvm
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  Clustered             yes
  Shared                no
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               299.97 GiB
  PE Size               32.00 MiB
  Total PE              9599
  Alloc PE / Size       0 / 0   
  Free  PE / Size       9599 / 299.97 GiB
  VG UUID               Na3LN0-DAFu-AC8x-fukv-0hfZ-3vS9-QbJHo2

在任何一个节点上,通过lvcreate命令创建一个逻辑卷:

$ sudo lvcreate -L 50G -n lv_001 vg_clvm
  Logical volume "lv_001" created

在任何一个节点上,通过lvdisplay命令查看已有的逻辑卷:

$ sudo lvdisplay 
  --- Logical volume ---
  LV Name                /dev/vg_clvm/lv_001
  VG Name                vg_clvm
  LV UUID                ThHd00-Hj9V-PYDt-9CEv-055l-TRfj-pH6GLt
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                50.00 GiB
  Current LE             1600
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

可以看出,在集群中任何一个节点上所进行的LVM操作,都会反映到集群中的其他节点上。

一组NFS和OCFS2的对比数据

By , June 16, 2013 2:35 pm

nfs_ocfs2

[测试环境]

两台DELL PowerEdge R420服务器,分别配置2 颗Intel E5-2620处理器(6 个核心,12个线程),24 GB内存,2 块300GB的15000转SAS硬盘做RAID1。一台DELL MD3200磁盘阵列,配置10块300GB的15000转SAS硬盘做RAID5。将磁盘阵列的存储空间划分为两块,一块750 GB通过SAS线缆连接到服务器A,另一块750 GB通过SAS线缆连接到服务器B。两台服务器均运行64位Ubuntu 12.04服务器版操作系统,通过KVM进行虚拟化。两台服务器之间通过万兆交换机提供网络连接。

服务器A 将来自磁盘阵列的存储空间/dev/sdb挂载为本机上的/nfs目录,并在此基础上提供NFS服务。服务器B 通过NFS客户端将来自服务器A 的/nfs目录挂载为本机上的/nfs目录。

服务器B 安装iSCSI TGT服务,将来自磁盘阵列的存储空间/dev/sdb通过iSCSI协议暴露到局域网。服务器A 和服务器B 均通过open-iscsi将如上所述iSCSI目标发现为本机上的/dev/sdc。在服务器A 和服务器B 上通过配置OCFS2集群文件系统共享同一个块设备,且都挂载为本机上的/tgt目录。

[测试方法]

利用iozone软件分别测试服务器A 上的/目录(本地磁盘)和/nfs目录(磁盘阵列)、服务器B 上的/nfs目录(NFS共享文件系统)和/tgt目录(OCFS2集群文件系统)、以及运行在NFS和OCFS2上的虚拟机/目录的文件IO性能进行测试。虚拟机的配置为4 个处理器核,4 GB内存,10 GB磁盘,运行64位Ubuntu 12.04服务器版,磁盘和网卡都启用了virtio,并且设置虚拟机磁盘缓存参数为cache=”none”。在对虚拟机进行测试的时候,虚拟机运行在计算节点B 上。

测试参数:

$ ./iozone -Mcew -i0 -i1 -s3g -r256k -f [file_name]

[测试结果]

测试环境 write rewrite read reread
服务器A | 本地硬盘 168123 177677 3775577 6146712
服务器A | 磁盘阵列 312041 335915 3566998 5952576
服务器B | NFS共享文件系统 246113 285600 3798812 5695323
服务器B | OCFS2集群文件系统 250326 300573 5193533 5346467
虚拟机 | NFS 189379 238361 3534514 6041784
虚拟机 | OCFS2 108236 213260 3582519 4949598

基于这个特定的试验环境,有三个小小的发现:

(1)基于磁盘阵列的NFS共享文件系统与OCFS2集群文件系统的文件IO性能在同一水平线上。

(2)NFS共享文件系统的性能可以达到磁盘阵列性能的80%左右。

(3)运行在NFS上的虚拟机比运行在OCFS2上的虚拟机似乎具有更好的文件IO性能,原因待进一步研究。

[测试结果]

后续工作,找几个更大的测试环境,弄两台真正的IP SAN和FC SAN进行对比测试。

Ubuntu 12.04配置GFS2

By , June 15, 2013 8:02 pm

简单地作个笔记。

测试环境包含三台服务器。其中一台服务器配置iSCSI TGT山寨一个IP SAN服务,将一块本地硬盘通过iSCSI协议暴露给所有的服务器。三台服务器均通过openi-scsi发现山寨IP SAN所提供的iSCSI存储。具体的配置方法可以参见《在Ubuntu 12.04上配置iSCSI Target服务》一文。

安装GFS2软件:

sudo apt-get install gfs2-utils gfs2-cluster

修改配置文件/etc/cluster/cluster.conf,内容如下(需要根据你的配置替换掉配置文件中的主机名)。

<?xml version="1.0"?>
 <cluster name="myGfs2" config_version="1">
       <clusternodes>
               <clusternode name="node01" nodeid="1"/>
               <clusternode name="node02" nodeid="2"/>
               <clusternode name="node03" nodeid="3"/>
       </clusternodes>
 </cluster>

在所有的服务器上启动cman和gfs2-cluster服务:

sudo chkconfig cman on
sudo chkconfig gfs2-cluster on
sudo /etc/init.d/cman restart
sudo /etc/init.d/gfs2-cluster restart

可以通过cman_tool命令查看集群中的节点:

$ sudo cman_tool nodes
Node  Sts   Inc   Joined               Name
   1   M     12   2013-06-15 16:53:35  node01
   2   M     12   2013-06-15 16:53:35  node02
   3   M      4   2013-06-15 16:53:35  node03

在iSCSI TGT服务器上将通过iSCSI协议暴露出去的硬盘上创建一个分区,并格式化为GFS2文件系统(假设该分区所对应的设备名为/dev/sdc1)。在下面的命令中,-p lock_dlm参数指定使用lock_dlm作为文件系统的加锁机制;-t myGfs2:mydisk参数中的myGfs2是集群的名称,需要与/etc/cluster/cluster.conf中的设置相同,mydisk则是文件系统的标签;-j 16参数指定为该文件系统所创建的日志的份数为16,由于每一个节点需要一份日志,所以该参数也限定了最多可以同时有16个节点挂载同一块磁盘。

sudo mkfs.gfs2 -p lock_dlm -t myGfs2:mydisk -j 16 /dev/sdc1

在所有的服务器上挂载对应的分区到/data目录:

sudo mkdir /data
sudo mount -t gfs2 /dev/sdc1 /data

也可以将对应的配置写入/etc/fstab文件,以便在操作系统启动时自动挂载:

/dev/sdc1        /data        gfs2        _netdev        0        0

可以通过gfs_control命令来查看一些基本的相关信息:

$ sudo gfs_control -n ls
gfs mountgroups
name          mydisk
id            0x48e6326b
flags         0x00000008 mounted
change        member 3 joined 1 remove 0 failed 0 seq 1,1
members       1 2 3 
all nodes
nodeid 1 jid 0 member 1 failed 0 start 1 seq_add 1 seq_rem 0 mount done
nodeid 2 jid 1 member 1 failed 0 start 1 seq_add 1 seq_rem 0 mount done
nodeid 3 jid 2 member 1 failed 0 start 1 seq_add 1 seq_rem 0 mount done

下面利用iozone来对在GFS2上运行虚拟机的文件IO性能做一个简单的测试。在这个测试中,将存储节点A 本地磁盘上的一个分区通过iSCSI TGT服务暴露给所有的服务器,并在此基础上配置GFS2集群文件系统,虚拟机实例运行在计算节点B 上,其磁盘映像文件存放在GFS2上。存储服务器和计算节点的配置都是单颗4 核处理器(Intel(R) Core(TM) i5-3330S CPU @ 2.70GHz),8 GB内存,750GB的7200转SATA硬盘,千兆网卡,运行64位Ubuntu 12.04服务器版+KVM进行虚拟化。虚拟机的配置为2 个处理器核,4 GB内存,10 GB磁盘,运行64位Ubuntu 12.04服务器版,磁盘和网卡都启用了virtio,并且设置虚拟机磁盘缓存参数为cache=”none”。

在我的前一篇博客文章《Ubuntu 12.04配置OCFS2》中对在NFS和OCFS2上分别运行虚拟机的文件IO性能做了一些类似的测试,在这里将NFS、GFS2和OCFS2的测试结果综合如下:

测试环境 write rewrite read reread
存储节点 | 本地硬盘 122684 119326 8564609 8792814
计算节点 | NFS 63184 66472 95322 6738489
计算节点 | OCFS2 75547 82115 175872 7654664
计算节点 | GFS2 61191 64561 8950366 9134438
虚拟机 | NFS 36678 26711 160948 163411
虚拟机 | OCFS2 59251 60797 140720 148803
虚拟机 | GFS2 57181 58439 147742 172711

从这个非常粗糙的测试可以看出,在没有进行任何性能调优的情况下,GFS2和OCFS2的文件IO性能是类似的,都比NFS要好许多。OCFS2的性能似乎比GFS2好一点点,但是优势并不是十分明显。

回头找个强悍一点的FC SAN做个更加详细的测试看看结果。

Ubuntu 12.04配置OCFS2

By , June 14, 2013 3:23 pm

简单地作个笔记。

测试环境包含三台服务器。其中一台服务器配置iSCSI TGT山寨一个IP SAN服务,将一块本地硬盘通过iSCSI协议暴露给所有的服务器。三台服务器均通过openi-scsi发现山寨IP SAN所提供的iSCSI存储。具体的配置方法可以参见《在Ubuntu 12.04上配置iSCSI Target服务》一文。

安装OCFS2软件:

sudo apt-get install ocfs2-tools

创建配置文件/etc/ocfs2/cluster.conf,内容如下(需要根据你的配置替换掉配置文件中的IP地址和主机名)。

node:
        ip_port = 7777
        ip_address = 192.168.100.20
        number = 0
        name = node0
        cluster = ocfs2
node:
        ip_port = 7777
        ip_address = 192.168.100.19
        number = 1
        name = node1
        cluster = ocfs2
node:
        ip_port = 7777
        ip_address = 192.168.100.18
        number = 2
        name = node2
        cluster = ocfs2
cluster:
        node_count = 3
        name = ocfs2

启动相应的服务:

sudo chkconfig o2cb on
sudo chkconfig ocfs2 on
sudo /etc/init.d/o2cb restart
sudo /etc/init.d/ocfs2 restart

在iSCSI TGT服务器上将通过iSCSI协议暴露出去的硬盘上创建一个分区,并格式化为OCFS2文件系统(假设该分区所对应的设备名为/dev/sdc1):

sudo mkfs.ocfs2 /dev/sdc1

在所有的服务器上挂载对应的分区到/data目录:

sudo mkdir /data
sudo mount -t ocfs2 /dev/sdc1 /data

也可以将对应的配置写入/etc/fstab文件,以便在操作系统启动时自动挂载:

/dev/sdc1        /data        ocfs2        _netdev        0        0

下面利用iozone来针对使用NFS方案和OCFS2方案的虚拟机文件IO性能做一个初步的对比。在NFS方案中,将服务器A 本地磁盘上的一个目录通过NFS服务共享给计算节点B,虚拟机实例运行在计算节点B 上,其磁盘映像文件存放在NFS上。在OCFS2方案中,将服务器A 本地磁盘上的一个分区通过iSCSI TGT服务暴露给所有的服务器,并在此基础上配置OCFS2集群文件系统,虚拟机实例运行在计算节点B 上,其磁盘映像文件存放在OCFS2上。存储服务器和计算节点的配置都是单颗4 核处理器(Intel(R) Core(TM) i5-3330S CPU @ 2.70GHz),8 GB内存,750GB的7200转SATA硬盘,千兆网卡,运行64位Ubuntu 12.04服务器版+KVM进行虚拟化。虚拟机的配置为2 个处理器核,4 GB内存,10 GB磁盘,运行64位Ubuntu 12.04服务器版,磁盘和网卡都启用了virtio,并且设置虚拟机磁盘缓存参数为cache=”none”。

在NFS方案下得到的虚拟机文件IO测试数据:

ubuntu@ubuntu:~/iozone3_414/src/current$ sudo ./iozone -Mcew -i0 -i1 -s4g -r256k -f /io.tmp
	Iozone: Performance Test of File I/O
	        Version $Revision: 3.414 $
		Compiled for 64 bit mode.
		Build: linux 

	Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
	             Al Slater, Scott Rhine, Mike Wisner, Ken Goss
	             Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
	             Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
	             Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
	             Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
	             Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
	             Vangel Bojaxhi, Ben England.

	Run began: Fri Jun 14 14:59:24 2013


	Machine = Linux ubuntu 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC	Include close in write timing
	Include close in write timing
	Include fsync in write timing
	Setting no_unlink
	File size set to 4194304 KB
	Record Size 256 KB
	Command line used: ./iozone -Mcew -i0 -i1 -s4g -r256k -f /io.tmp
	Output is in Kbytes/sec
	Time Resolution = 0.000001 seconds.
	Processor cache size set to 1024 Kbytes.
	Processor cache line size set to 32 bytes.
	File stride size set to 17 * record size.
                                                            random  random    bkwd   record   stride                                   
              KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
         4194304     256   36678   26711   160948   163411                                                                          

iozone test complete.

在OCFS2方案下得到的虚拟机文件IO测试数据:

ubuntu@ubuntu:~/iozone3_414/src/current$ sudo ./iozone -Mcew -i0 -i1 -s4g -r256k -f /io.tmp
	Iozone: Performance Test of File I/O
	        Version $Revision: 3.414 $
		Compiled for 64 bit mode.
		Build: linux 

	Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
	             Al Slater, Scott Rhine, Mike Wisner, Ken Goss
	             Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
	             Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
	             Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
	             Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
	             Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
	             Vangel Bojaxhi, Ben England.

	Run began: Fri Jun 14 15:30:05 2013


	Machine = Linux ubuntu 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC	Include close in write timing
	Include close in write timing
	Include fsync in write timing
	Setting no_unlink
	File size set to 4194304 KB
	Record Size 256 KB
	Command line used: ./iozone -Mcew -i0 -i1 -s4g -r256k -f /io.tmp
	Output is in Kbytes/sec
	Time Resolution = 0.000001 seconds.
	Processor cache size set to 1024 Kbytes.
	Processor cache line size set to 32 bytes.
	File stride size set to 17 * record size.
                                                            random  random    bkwd   record   stride                                   
              KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
         4194304     256   59251   60797   140720   148803                                                                          

iozone test complete.

如下是一组关于物理机和虚拟机的对比测试数据。这组测试虽然粗糙,但还是能够定性地说明OCFS2的性能比NFS是强不止一点点的。

测试环境 write rewrite read reread
存储节点 | 本地硬盘 122684 119326 8564609 8792814
计算节点 | NFS 63184 66472 95322 6738489
计算节点 | OCFS2 75547 82115 175872 7654664
虚拟机 | NFS 36678 26711 160948 163411
虚拟机 | OCFS2 59251 60797 140720 148803

相关文档:《OCFS2 - A CLUSTER FILE SYSTEM FOR LINUX》

Panorama Theme by Themocracy