GlusterFSをテストしてみた覚え書き

はじめに

分散処理ファイルシステム(Distributed File System、DFS)の一つ、GlusterFSに関して記述します。
とりあえず、自分で調べた結果をまとめてみたものなので、多々、間違いがあると思います。
これを、参考に、皆さん自身で、試してみる手助けになれば、嬉しいです。
geo-replicaで、slaveとしているノードのディスク以外は、SSDっぽいものを利用しています。

すべてのノード間で、sshのパスワード入力無しで、ログインできる様にしてあります。

GlusterFSとは

GlusterFSは、汎用的な分散ファイルシステムです。InfiniBandのRDMAやTCP/IPインターコネクトなどを使用し、一般的なハードウェア構成で、ペタバイト以上のストレージを扱えるとされています。

特徴

  • クライアント側コンポーネントとサーバ側コンポーネントが存在します。
  • 処理は、ユーザ空間で行われ、POSIX仕様のマウントは、FUSE機構を使って実行されます。
  • サーバは、glusterdのデーモンが、Clusterを構成し、ローカルのファイルシステムを、VOLUMEとしてExportします。クライアントのglusterプロセスが、それを一つの巨大なボリュームにくみ上げます。
  • クライアントとサーバで、動作に必要なプログラムは、同じものです。
  • サーバ郡に、マスターが存在する訳ではないので、SPOFは、存在していません。構成としては、非常にシンプルなものになっています。
  • GEO-Replicationという、非同期のレプリケーション機能を持っています。

対応するプロトコル

  • インターコネクト
  • File System
    • Ext4 (for Linux kernel 2.6.31 or higher)
    • Ext3 (for all earlier versions)
    • XFS file system.

インストール

サーバとクライアントは、インストールするものは同じです。
違いは、service(/etc/init.d/glusterd)を、動かすかどうかだけとなります。

  • GlusterFS 3.2.0
  • Cent OS 5.5 (x86_64)

GlusterFSをインストールする前に必要なもの

  • Bison
  • Automake / Autoconf
  • libtool
  • gcc
  • Portmapper(for NFS)
  • Fuse

Require RPM (rpmforge)
以下は、rpmforge から持ってこないと、入手できません。

 [root@centos1 rpm]# sudo rpm -ivh glusterfs-geo-replication-3.2.0-1.x86_64.rpm 
 エラー: 依存性の欠如:
	python-ctypes は glusterfs-geo-replication-3.2.0-1.x86_64 に必要とされています
	rsync >= 3.0.7 は glusterfs-geo-replication-3.2.0-1.x86_64 に必要とされています

GlusterFSのインストール

http://gluster.com/community/documentation/index.php/Gluster_3.2:_Installing_GlusterFS_on_Red_Hat_Package_Manager_%28RPM%29_Distributions を、参考にします。

必要なrpmをインストール

 [root@centos1 yum.repos.d]# sudo yum -y install wget fuse fuse-libs

FWの確認をする、必要なポートをあけるため。

 [root@centos1 yum.repos.d]# iptables -L Chain 

GlusterFSのrpmを取得

 [root@centos1 rpm]# wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-core-3.2.0-1.x86_64.rpm
 [root@centos1 rpm]# wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-fuse-3.2.0-1.x86_64.rpm
 [root@centos1 rpm]# wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-geo-replication-3.2.0-1.x86_64.rpm

rpmのインストール

 [root@centos1 rpm]# sudo rpm -Uvh glusterfs-core-3.2.0-1.x86_64.rpm 
 [root@centos1 rpm]# sudo rpm -Uvh glusterfs-fuse-3.2.0-1.x86_64.rpm 
 [root@centos1 rpm]# sudo rpm -ivh glusterfs-geo-replication-3.2.0-1.x86_64.rpm 

FUSEの組み込み

[root@centos1 ~]# modprobe fuse
[root@centos1 ~]#dmsg | grep -i fuse
  fuse init (API version 7.10)

起動の確認

サーバの起動確認。(クライアントで使う場合は、動かさなくてよいです)

[guutara@centos1 ~]$ sudo /etc/init.d/glusterd status
[sudo] password for guutara:  
  glusterd は停止しています
[guutara@centos1 ~]$ sudo /etc/init.d/glusterd start
  Starting glusterd:                                         [  OK  ]
[guutara@centos1 ~]$ ps -ax | grep glusterd
  Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
  27571 ?        Ssl    0:00 /opt/glusterfs/3.2.0/sbin/glusterd
  27618 pts/0    S+     0:00 grep glusterd
[guutara@centos1 ~]$ sudo /etc/init.d/glusterd stop
  Stopping glusterd:                                         [  OK  ]
[guutara@centos1 ~]$ ps -ax | grep glusterd
  Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
  27631 pts/0    S+     0:00 grep glusterd
[guutara@centos1 ~]$ sudo /etc/init.d/glusterd status
  glusterd は停止しています

使用例

Nodeの作成(Peer)
 [root@centos1 ~]# gluster peer probe psdata3b
   Probe successful
 [root@centos2 ~]# gluster peer status
   Number of Peers: 1
   Hostname: centos3b
   Uuid: 344c2329-956e-495e-91f6-442af9edd3b0
   State: Peer in Cluster (Connected)
distributed Volume の作成

作成

 [root@centos ~]# gluster volume create testvol transport tcp centos2b:/mnt/gluster   centos3b:/mnt/gluster
 Creation of volume testvol has been successful. Please start the volume to access data.

確認

 [root@centos ~]# gluster volume info testvol 
   Volume Name: testvol
   Type: Distribute
   Status: Created
   Number of Bricks: 2
   Transport-type: tcp
   Bricks:
   Brick1: centos2b:/mnt/gluster
   Brick2: centos3b:/mnt/gluster

Start

 [root@centos ~]# gluster volume start testvol
   Starting volume testvol has been successful

確認

 [root@centos2 ~]# gluster volume info testvol 
   Volume Name: testvol
   Type: Distribute
   Status: Started
   Number of Bricks: 2
   Transport-type: tcp
   Bricks:
   Brick1: centos2b:/mnt/gluster
   Brick2: centos3b:/mnt/gluster

Native Client(fuse) で、使用
mount する。

 [guutara@centos4 ~]$ sudo mount -t glusterfs centos2b:testvol /vol/testvol/
 [guutara@centos4 ~]$ mount
   /dev/mapper/live-rw on / type ext3 (rw,noatime)
   proc on /proc type proc (rw)
   sysfs on /sys type sysfs (rw)
   devpts on /dev/pts type devpts (rw,gid=5,mode=620)
   /dev/sdd1 on /disks/disk2 type ext3 (rw)
   none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
   sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
   glusterfs#centos2b:testvol on /vol/testvol type fuse    (rw,allow_other,default_permissions,max_read=131072)
 [guutara@centos4 ~]$ df
   Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
   /dev/mapper/live-rw   12385456   3256324   9129132  27% /
   /dev/sdd1            472568500   2128136 446048076   1% /disks/disk2
   glusterfs#centos2b:testvol
                     20158080    307328  19850752   2% /vol/testvol

Benchマーク

  • Fioを使って、RandomWrite? IOのBenchマークをとります。設定ファイルが、fio_swです。結果をみると、aggrb=181651KB/sと、ほぼ、NWの限界回線の70%*1まで、でています。
 [guutara@centos4 ~]$ cat fio_sw | grep -v ";" fio_sw
   [sw]
   rw=randwrite
   size=200m
   directory=/vol/testvol
   iodepth=32
   direct=0
   blocksize=512k
   numjobs=12
   nrfiles=1
   ioengine=sync
   loops=1
   group_reporting
   create_on_open=1
   create_serialize=0
 [guutara@centos4 ~]$ sudo fio-1.54/fio fio_sw
   sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
   ...
   sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
   fio 1.54
   Starting 12 processes
   Jobs: 8 (f=8): [w_ww_www__ww] [86.7% done] [0K/120.7M /s] [0 /235  iops] [eta 00m:02s]s]
   sw: (groupid=0, jobs=12): err= 0: pid=26262
     write: io=2238.0MB, bw=181651KB/s, iops=354 , runt= 12616msec
       clat (usec): min=385 , max=77562 , avg=33663.76, stdev=1235.03
        lat (usec): min=385 , max=77562 , avg=33664.14, stdev=1235.03
       bw (KB/s) : min= 1024, max=52825, per=8.08%, avg=14678.55, stdev=963.06
     cpu          : usr=0.03%, sys=0.23%, ctx=22440, majf=0, minf=191
     IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
        submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
        complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
        issued r/w/d: total=0/4476/0, short=0/0/0
        lat (usec): 500=0.04%, 750=0.36%, 1000=0.09%
        lat (msec): 2=0.04%, 10=4.40%, 20=31.57%, 50=63.03%, 100=0.47%
   Run status group 0 (all jobs):
     WRITE: io=2238.0MB, aggrb=181651KB/s, minb=186010KB/s, maxb=186010KB/s,     mint=12616msec, maxt=12616msec

ファイルの内容(distributed Volume)

 [guutara@centos4 ~]$ ls /vol/testvol/
   sw.1.0  sw.10.0  sw.11.0  sw.12.0  sw.2.0  sw.3.0  sw.4.0  sw.5.0  sw.6.0  sw.7.0  sw.8.0  sw.9.0

ファイルの実態

 [guutara@centos4 ~]$ !ssh
   ssh centos2b
   Last login: Thu May 19 19:47:38 2011 from centos4b.guutara.local
 [guutara@centos2 ~]$ ls /mnt/gluster
   sw.1.0  sw.11.0  sw.12.0  sw.3.0  sw.4.0  sw.6.0  sw.7.0  sw.8.0
 [guutara@centos2 ~]$ ssh centos3b
   Warning: Permanently added 'centos3b,10.29.154.3' (RSA) to the list of known hosts.
   Last login: Wed May 18 16:41:51 2011 from centos4.guutara.local
 [guutara@centos3 ~]$ ls /mnt/gluster/
   sw.10.0  sw.2.0  sw.5.0  sw.9.0
Distributed Replicated Volumes の作成

作成

 [root@centos2 ~]# gluster volume create testvol replica 2 transport tcp centos2b:/mnt/gluster   centos3b:/mnt/gluster
 Creation of volume testvol has been successful. Please start the volume to access data.

確認

 [root@centos2 ~]# gluster volume info testvol
 Volume Name: testvol
 Type: Replicate
 Status: Stopped
 Number of Bricks: 2
 Transport-type: tcp
 Bricks:
 Brick1: centos2b:/mnt/gluster
 Brick2: centos3b:/mnt/gluster

Start

 [root@centos2 ~]# gluster volume start testvol
 Starting volume testvol has been successful

確認

 [root@centos2 ~]# gluster volume info testvol
 Volume Name: testvol
 Type: Replicate
 Status: Started
 Number of Bricks: 2
 Transport-type: tcp
 Bricks:
 Brick1: centos2b:/mnt/gluster
 Brick2: centos3b:/mnt/gluster

Native Client(fuse)で、使用
mount する。

 [guutara@centos4 ~]$ sudo mount -t glusterfs centos2b:testvol /vol/testvol/
 [guutara@centos4 ~]$ mount
 /dev/mapper/live-rw on / type ext3 (rw,noatime)
 proc on /proc type proc (rw)
 sysfs on /sys type sysfs (rw)
 devpts on /dev/pts type devpts (rw,gid=5,mode=620)
 /dev/sdd1 on /disks/disk2 type ext3 (rw)
 none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
 sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
 glusterfs#centos2b:testvol on /vol/testvol type fuse (  rw,allow_other,default_permissions,max_read=131072)
 [guutara@centos4 ~]$ df
 Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
 /dev/mapper/live-rw   12385456   3262888   9122568  27% /
 /dev/sdd1            472568500   2128136 446048076   1% /disks/disk2
 glusterfs#centos2b:testvol
                       10078976    153600   9925376   2% /vol/testvol

Benchマーク

  • Fioを使って、RandomWrite IOのBenchマークをとります。設定ファイルが、fio_swです。結果をみると、aggrb=118251KB/sと、NWの限界回線の上限*2より、かなり下で止まっています。
 [guutara@centos4 ~]$ cat fio_sw | grep -v ";" fio_sw
   [sw]
   rw=randwrite
   size=200m
   directory=/vol/testvol
   iodepth=32
   direct=0
   blocksize=512k
   numjobs=12
   nrfiles=1
   ioengine=sync
   loops=1
   group_reporting
   create_on_open=1
   create_serialize=0
 [guutara@centos4 ~]$ sudo fio-1.54/fio fio_sw
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 ...
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 fio 1.54
 Starting 12 processes
 Jobs: 7 (f=7): [w__ww_ww_ww_] [95.2% done] [0K/114.3M /s] [0 /223  iops] [eta 00m:01s]s]
 sw: (groupid=0, jobs=12): err= 0: pid=29698
   write: io=2238.0MB, bw=118251KB/s, iops=230 , runt= 19380msec
     clat (usec): min=393 , max=101596 , avg=51840.50, stdev=2050.80
      lat (usec): min=393 , max=101596 , avg=51840.91, stdev=2050.79
     bw (KB/s) : min= 5840, max=19656, per=8.22%, avg=9721.22, stdev=198.64
   cpu          : usr=0.02%, sys=0.12%, ctx=22442, majf=0, minf=191
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued r/w/d: total=0/4476/0, short=0/0/0
      lat (usec): 500=0.13%, 750=0.20%, 1000=0.16%
      lat (msec): 2=0.04%, 10=0.42%, 20=0.58%, 50=20.67%, 100=77.73%
      lat (msec): 250=0.07%
 Run status group 0 (all jobs):
   WRITE: io=2238.0MB, aggrb=118251KB/s, minb=121089KB/s, maxb=121089KB/s, mint=19380msec, maxt=19380msec

ファイルの内容

 [guutara@centos4 ~]$ ls /vol/testvol/
 sw.1.0  sw.10.0  sw.11.0  sw.12.0  sw.2.0  sw.3.0  sw.4.0  sw.5.0  sw.6.0  sw.7.0  sw.8.0  sw.9.0

ファイルの実態
Replicaなので、2つのホストに、同一の内容で格納されています。

 [guutara@centos2 ~]$ ls /mnt/gluster/
 sw.1.0  sw.10.0  sw.11.0  sw.12.0  sw.2.0  sw.3.0  sw.4.0  sw.5.0  sw.6.0  sw.7.0  sw.8.0  sw.9.0
 [guutara@centos3 ~]$ ls /mnt/gluster/
 sw.1.0  sw.10.0  sw.11.0  sw.12.0  sw.2.0  sw.3.0  sw.4.0  sw.5.0  sw.6.0  sw.7.0  sw.8.0  sw.9.0
Distributed Striped Volumes

作成

 [root@centos2 ~]# gluster volume create testvol stripe 2 transport tcp centos2b:/mnt/gluster   centos3b:/mnt/gluster
 Creation of volume testvol has been successful. Please start the volume to access data.

確認

 [root@centos2 ~]# gluster volume info testvol
 Volume Name: testvol
 Type: Stripe
 Status: Created
 Number of Bricks: 2
 Transport-type: tcp
 Bricks:
 Brick1: centos2b:/mnt/gluster
 Brick2: centos3b:/mnt/gluster

Start

[root@centos2 ~]# gluster volume start testvol
Starting volume testvol has been successful

確認

 [root@centos2 ~]# gluster volume info testvol
 Volume Name: testvol
 Type: Stripe
 Status: Started
 Number of Bricks: 2
 Transport-type: tcp
 Bricks:
 Brick1: centos2b:/mnt/gluster
 Brick2: centos3b:/mnt/gluster

Native Client(fuse)で、使用
mount する。

 [guutara@centos4 ~]$ sudo mount -t glusterfs centos2b:testvol /vol/testvol/
 [guutara@centos4 ~]$ mount
 /dev/mapper/live-rw on / type ext3 (rw,noatime)
 proc on /proc type proc (rw)
 sysfs on /sys type sysfs (rw)
 devpts on /dev/pts type devpts (rw,gid=5,mode=620)
 /dev/sdd1 on /disks/disk2 type ext3 (rw)
 none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
 sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
 glusterfs#centos2b:testvol on /vol/testvol type fuse (rw,allow_other,default_permissions,max_read=131072)
 [guutara@centos4 ~]$ df
 Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
 /dev/mapper/live-rw   12385456   3261280   9124176  27% /
 /dev/sdd1            472568500   2128136 446048076   1% /disks/disk2
 glusterfs#centos2b:testvol
                       20158080    307328  19850752   2% /vol/testvol

Benchマーク

  • Fioを使って、RandomWrite IOのBenchマークをとります。設定ファイルが、fio_swです。結果をみると、aggrb=241614KB/sと、NWの限界回線の上限*3の90%まで使い切っています。
 [guutara@centos4 ~]$ cat fio_sw | grep -v ";" fio_sw
 [sw]
 rw=randwrite
 size=200m
 directory=/vol/testvol
 iodepth=32
 direct=0
 blocksize=512k
 numjobs=12
 nrfiles=1
 ioengine=sync
 loops=1
 group_reporting
 create_on_open=1
 create_serialize=0
 [guutara@centos4 ~]$ ls /vol/testvol/
 [guutara@centos4 ~]$ sudo fio-1.54/fio fio_sw
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 ...
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 fio 1.54
 Starting 12 processes
 Jobs: 10 (f=10): [w__wwwwwwwww] [90.9% done] [0K/239.2M /s] [0 /467  iops] [eta 00m:01s]
 sw: (groupid=0, jobs=12): err= 0: pid=25095
   write: io=2238.0MB, bw=241614KB/s, iops=471 , runt=  9485msec
     clat (usec): min=402 , max=69128 , avg=25305.34, stdev=939.55
      lat (usec): min=403 , max=69128 , avg=25305.74, stdev=939.55
     bw (KB/s) : min= 3953, max=44222, per=7.94%, avg=19188.44, stdev=1061.64
   cpu          : usr=0.03%, sys=0.24%, ctx=22439, majf=0, minf=191
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued r/w/d: total=0/4476/0, short=0/0/0
      lat (usec): 500=0.07%, 750=0.27%, 1000=0.13%
      lat (msec): 2=0.07%, 4=0.74%, 10=2.46%, 20=5.12%, 50=90.88%
      lat (msec): 100=0.27%
 Run status group 0 (all jobs):
   WRITE: io=2238.0MB, aggrb=241614KB/s, minb=247413KB/s, maxb=247413KB/s, mint=9485msec,   maxt=9485msec

ファイルの内容

 [guutara@centos4 ~]$ ls -al /vol/testvol/
 合計 1148372
 drwxr-xr-x 2 root root      4096  524 17:47 .
 drwxr-xr-x 5 root root      4096  520 11:27 ..
 -rw------- 1 root root 209715200  524 17:47 sw.1.0
 -rw------- 1 root root 209715200  524 17:47 sw.10.0
 -rw------- 1 root root 209715200  524 17:47 sw.11.0
 -rw------- 1 root root 209715200  524 17:47 sw.12.0
 -rw------- 1 root root 209715200  524 17:47 sw.2.0
 -rw------- 1 root root 209715200  524 17:47 sw.3.0
 -rw------- 1 root root 209715200  524 17:47 sw.4.0
 -rw------- 1 root root 209715200  524 17:47 sw.5.0
 -rw------- 1 root root 209715200  524 17:47 sw.6.0
 -rw------- 1 root root 209715200  524 17:47 sw.7.0
 -rw------- 1 root root 209715200  524 17:47 sw.8.0
 -rw------- 1 root root 209715200  524 17:47 sw.9.0

ファイルの実態
ls で、みると、各サーバに巨大なファイルがある様に見えるますが、実は中身は入っていません。1つのファイルが、分散してかかれています。スパースファイル(sparse file)を使用していることがわかります。

 [root@centos2 gluster]# ls -al /mnt/gluster/
 合計 1148364
 drwxr-xr-x 2 root root      4096  524 18:45 .
 drwxr-xr-x 3 root root      4096  516 17:59 ..
 -rw------- 1 root root 209584128  524 18:45 sw.1.0
 -rw------- 1 root root 209584128  524 18:45 sw.10.0
 -rw------- 1 root root 209584128  524 18:45 sw.11.0
 -rw------- 1 root root 209584128  524 18:45 sw.12.0
 -rw------- 1 root root 209584128  524 18:45 sw.2.0
 -rw------- 1 root root 209584128  524 18:45 sw.3.0
 -rw------- 1 root root 209584128  524 18:45 sw.4.0
 -rw------- 1 root root 209584128  524 18:45 sw.5.0
 -rw------- 1 root root 209584128  524 18:45 sw.6.0
 -rw------- 1 root root 209584128  524 18:45 sw.7.0
 -rw------- 1 root root 209584128  524 18:45 sw.8.0
 -rw------- 1 root root 209584128  524 18:45 sw.9.0
 [root@centos2 gluster]# du -a /mnt/gluster/
 86480	/mnt/gluster/sw.12.0
 99536	/mnt/gluster/sw.1.0
 93136	/mnt/gluster/sw.3.0
 95696	/mnt/gluster/sw.4.0
 93648	/mnt/gluster/sw.6.0
 92624	/mnt/gluster/sw.2.0
 97232	/mnt/gluster/sw.11.0
 98000	/mnt/gluster/sw.8.0
 98768	/mnt/gluster/sw.10.0
 98768	/mnt/gluster/sw.5.0
 91856	/mnt/gluster/sw.9.0
 102608	  /mnt/gluster/sw.7.0
 [guutara@centos3 ~]$ ls -al /mnt/gluster/
 合計 1148364
 drwxr-xr-x 2 root root      4096  524 18:45 .
 drwxr-xr-x 3 root root      4096  516 18:01 ..
 -rw------- 1 root root 209715200  524 18:45 sw.1.0
 -rw------- 1 root root 209715200  524 18:45 sw.10.0
 -rw------- 1 root root 209715200  524 18:45 sw.11.0
 -rw------- 1 root root 209715200  524 18:45 sw.12.0
 -rw------- 1 root root 209715200  524 18:45 sw.2.0
 -rw------- 1 root root 209715200  524 18:45 sw.3.0
 -rw------- 1 root root 209715200  524 18:45 sw.4.0
 -rw------- 1 root root 209715200  524 18:45 sw.5.0
 -rw------- 1 root root 209715200  524 18:45 sw.6.0
 -rw------- 1 root root 209715200  524 18:45 sw.7.0
 -rw------- 1 root root 209715200  524 18:45 sw.8.0
 -rw------- 1 root root 209715200  524 18:45 sw.9.0
 [guutara@centos3 ~]$ du -a /mnt/gluster/
 86480	/mnt/gluster/sw.12.0
 102608	/mnt/gluster/sw.7.0
 98768	/mnt/gluster/sw.5.0
 93136	/mnt/gluster/sw.3.0
 99536	/mnt/gluster/sw.1.0
 98000	/mnt/gluster/sw.8.0
 97232	/mnt/gluster/sw.11.0
 92624	/mnt/gluster/sw.2.0
 95696	/mnt/gluster/sw.4.0
 93648	/mnt/gluster/sw.6.0
 91856	/mnt/gluster/sw.9.0
 98768	/mnt/gluster/sw.10.0
Geo-Replicationの設定 -- slaveを、GlusterFS Volume で作成する。

Slaveは、1台のノードです。

peer の確認
3台で、peerしています。

 [root@centos2 ~]# gluster peer status
   Number of Peers: 2

   Hostname: centos3b
   Uuid: 344c2329-956e-495e-91f6-442af9edd3b0
   State: Peer in Cluster (Connected)
   Hostname: centos5b
   Uuid: 526b9a5c-6da4-475f-a131-c5686fa542eb
   State: Peer in Cluster (Connected)

Volumeの設定
testvolが、MasterにするVolumeです。mirrorが、slaveにするvolumeです。

testvolume

 [root@centos2 ~]# gluster volume info testvol
   Volume Name: testvol
   Type: Distribute
   Status: Started
   Number of Bricks: 2
   Transport-type: tcp
   Bricks:
     Brick1: centos2b:/mnt/gluster
     Brick2: centos3b:/mnt/gluster
   Options Reconfigured:
   geo-replication.indexing: on

mirror

 [root@centos2 ~]# gluster volume info mirror
   Volume Name: mirror
   Type: Distribute
   Status: Started 
   Number of Bricks: 1
   Transport-type: tcp
   Bricks:
     Brick1: centos5b:/disks/disk2/mirror

masterの状態の確認

 [root@centos4 ~]# df
 Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
 /dev/mapper/live-rw   12385456   3260156   9125300  27% /
 /dev/sdd1            472568500   2128136 446048076   1% /disks/disk2
 glusterfs#centos2b:testvol
                     20158080    307328  19850752   2% /vol/testvol
 [root@centos4 ~]# ls -al /vol/testvol/
 合計 8
 drwxr-xr-x 2 root root 4096  516 18:03 .
 drwxr-xr-x 4 root root 4096  520 11:25 ..
mirrorの内容の確認
 [root@centos5 ~]# mount -t glusterfs centos5:/mirror /vol/mirror/
 [root@centos5 ~]# ls -al /vol/mirror/
 合計 12
 drwxr-xr-x 2 root root 4096  521 19:19 .
 drwxr-xr-x 3 root root 4096  521 19:18 ..

geo-replication の開始

[root@centos2 ~]# gluster volume geo-replication testvol centos5b:mirror start
 Starting geo-replication session between testvol & centos5b:mirror has been successful

geo-replicationの状態の確認

 [root@centos2 ~]# gluster volume geo-replication testvol centos5b:mirror status
 MASTER               SLAVE                                              STATUS
 ----
 testvol              centos5b:mirror                                    starting...
 [root@centos2 ~]# gluster volume geo-replication testvol centos5b:mirror status
 MASTER               SLAVE                                              STATUS
 ----
 testvol              centos5b:mirror                                    OK

masterへの書き込みテスト
Cliant(cenyos4)で、masterをマウントして書き込みます。
非同期ならば、回線の上限*4の60%=150MBps程度はでるはずです。結果、aggrb=179040KB/sなので、書き込み速度は、予想通りでした。

 [guutara@centos4 ~]$ sudo fio-1.54/fio fio_sw
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 ...
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 fio 1.54
 Starting 12 processes
 Jobs: 8 (f=8): [w_ww_www__ww] [86.7% done] [0K/119.1M /s] [0 /234  iops] [eta 00m:02s]s]
   sw: (groupid=0, jobs=12): err= 0: pid=23475
   write: io=2238.0MB, bw=179040KB/s, iops=349 , runt= 12800msec
     clat (usec): min=367 , max=84086 , avg=33741.42, stdev=1072.94
     lat (usec): min=367 , max=84086 , avg=33741.81, stdev=1072.93
     bw (KB/s) : min=  992, max=50097, per=8.13%, avg=14549.08, stdev=865.20
   cpu          : usr=0.03%, sys=0.20%, ctx=22437, majf=0, minf=191
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued r/w/d: total=0/4476/0, short=0/0/0
      lat (usec): 500=0.16%, 750=0.20%, 1000=0.11%
      lat (msec): 2=0.07%, 4=0.02%, 10=2.61%, 20=30.97%, 50=65.37%
      lat (msec): 100=0.49%
 Run status group 0 (all jobs):
 WRITE: io=2238.0MB, aggrb=179040KB/s, minb=183336KB/s, maxb=183336KB/s, mint=12800msec, maxt=12800msec

master側の内容

 [guutara@centos4 ~]$ ls -al /vol/testvol/
 合計 2294228
 drwxr-xr-x 2 root root      8192  521 19:30 .
 drwxr-xr-x 5 root root      4096  520 11:27 ..
 -rw------- 1 root root 209715200  521 19:30 sw.1.0
 -rw------- 1 root root 209715200  521 19:30 sw.10.0
 -rw------- 1 root root 209715200  521 19:30 sw.11.0
 -rw------- 1 root root 209715200  521 19:30 sw.12.0
 -rw------- 1 root root 209715200  521 19:30 sw.2.0
 -rw------- 1 root root 209715200  521 19:30 sw.3.0
 -rw------- 1 root root 209715200  521 19:30 sw.4.0
 -rw------- 1 root root 209715200  521 19:30 sw.5.0
 -rw------- 1 root root 209715200  521 19:30 sw.6.0
 -rw------- 1 root root 209715200  521 19:30 sw.7.0
 -rw------- 1 root root 209715200  521 19:30 sw.8.0
 -rw------- 1 root root 209715200  521 19:30 sw.9.0

slave側の内容

 [guutara@centos5 ~]$ ls -al /vol/mirror/
 合計 2294220
 drwxr-xr-x 2 root root      4096  521 19:30 .
 drwxr-xr-x 3 root root      4096  521 19:18 ..
 -rw------- 1 root root 209715200  521 19:30 sw.1.0
 -rw------- 1 root root 209715200  521 19:30 sw.10.0
 -rw------- 1 root root 209715200  521 19:30 sw.11.0
 -rw------- 1 root root 209715200  521 19:30 sw.12.0
 -rw------- 1 root root 209715200  521 19:30 sw.2.0
 -rw------- 1 root root 209715200  521 19:30 sw.3.0
 -rw------- 1 root root 209715200  521 19:30 sw.4.0
 -rw------- 1 root root 209715200  521 19:30 sw.5.0
 -rw------- 1 root root 209715200  521 19:30 sw.6.0
 -rw------- 1 root root 209715200  521 19:30 sw.7.0
 -rw------- 1 root root 209715200  521 19:30 sw.8.0
 -rw------- 1 root root 209715200  521 19:30 sw.9.0

結果
書き込みされた後、非同期に、slave側へデータが転送されているのが、観測されました。非同期にレプリケーションされています。


他のVolumeでの結果
replica,stripeのVolumeをMasterにした際の結果を以下に記します。実験の際、Stripeに関して、statusが、「faulty」になる事象が発生しました。現時点では、原因は、不明です。

replica

 [root@centos2 ~]# gluster volume geo-replication testvol centos5b:mirror start
 [root@centos2 ~]# gluster volume info testvol
 Volume Name: testvol
 Type: Replicate
 Status: Started
 Number of Bricks: 2
 Transport-type: tcp
 Bricks:
 Brick1: centos2b:/mnt/gluster
 Brick2: centos3b:/mnt/gluster
 Options Reconfigured:
 geo-replication.indexing: on
 [guutara@centos4 ~]$ sudo fio-1.54/fio fio_sw
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 ...
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 fio 1.54
 Starting 12 processes
 Jobs: 7 (f=7): [w__ww_ww_ww_] [95.2% done] [0K/115.2M /s] [0 /224  iops] [eta 00m:01s]s]
 sw: (groupid=0, jobs=12): err= 0: pid=23729
   write: io=2238.0MB, bw=118105KB/s, iops=230 , runt= 19404msec
     clat (usec): min=385 , max=138767 , avg=50778.30, stdev=2464.12
      lat (usec): min=385 , max=138767 , avg=50778.66, stdev=2464.11
     bw (KB/s) : min= 5079, max=22093, per=8.52%, avg=10065.18, stdev=366.89
   cpu          : usr=0.02%, sys=0.11%, ctx=22440, majf=0, minf=191
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued r/w/d: total=0/4476/0, short=0/0/0
      lat (usec): 500=0.09%, 750=0.25%, 1000=0.11%
      lat (msec): 2=0.09%, 10=0.67%, 20=0.83%, 50=23.17%, 100=74.62%
      lat (msec): 250=0.18%
 Run status group 0 (all jobs):
   WRITE: io=2238.0MB, aggrb=118105KB/s, minb=120939KB/s, maxb=120939KB/s,   mint=19404msec, maxt=19404msec
 [guutara@centos4 ~]$ ls -l /vol/testvol/
 合計 2294208
 -rw------- 1 root root 209715200  524 17:16 sw.1.0
 -rw------- 1 root root 209715200  524 17:16 sw.10.0
 -rw------- 1 root root 209715200  524 17:16 sw.11.0
 -rw------- 1 root root 209715200  524 17:16 sw.12.0
 -rw------- 1 root root 209715200  524 17:16 sw.2.0
 -rw------- 1 root root 209715200  524 17:16 sw.3.0
 -rw------- 1 root root 209715200  524 17:16 sw.4.0
 -rw------- 1 root root 209715200  524 17:16 sw.5.0
 -rw------- 1 root root 209715200  524 17:16 sw.6.0
 -rw------- 1 root root 209715200  524 17:16 sw.7.0
 -rw------- 1 root root 209715200  524 17:16 sw.8.0
 -rw------- 1 root root 209715200  524 17:16 sw.9.0
 [root@centos5 ~]# ls -al /vol/mirror/
 合計 2294220
 drwxr-xr-x 2 root root      4096  524 17:16 .
 drwxr-xr-x 3 root root      4096  521 19:18 ..
 -rw------- 1 root root 209715200  524 17:16 sw.1.0
 -rw------- 1 root root 209715200  524 17:16 sw.10.0
 -rw------- 1 root root 209715200  524 17:16 sw.11.0
 -rw------- 1 root root 209715200  524 17:16 sw.12.0
 -rw------- 1 root root 209715200  524 17:16 sw.2.0
 -rw------- 1 root root 209715200  524 17:16 sw.3.0
 -rw------- 1 root root 209715200  524 17:16 sw.4.0
 -rw------- 1 root root 209715200  524 17:16 sw.5.0
 -rw------- 1 root root 209715200  524 17:16 sw.6.0
 -rw------- 1 root root 209715200  524 17:16 sw.7.0
 -rw------- 1 root root 209715200  524 17:16 sw.8.0
 -rw------- 1 root root 209715200  524 17:16 sw.9.0

Stripe

 [root@centos2 gluster]# gluster volume geo-replication testvol centos5b:mirror start
 Starting geo-replication session between testvol & centos5b:mirror has been successful
 [root@centos2 gluster]# gluster volume info testvol
 Volume Name: testvol
 Type: Stripe
 Status: Started
 Number of Bricks: 2
 Transport-type: tcp
 Bricks:
 Brick1: centos2b:/mnt/gluster
 Brick2: centos3b:/mnt/gluster
 Options Reconfigured:
 geo-replication.indexing: on
 [guutara@centos4 ~]$ ls -al /vol/testvol/
 合計 20
 drwxr-xr-x 2 root root 4096  524 20:32 .
 drwxr-xr-x 5 root root 4096  520 11:27 ..
 [guutara@centos4 ~]$ sudo fio-1.54/fio fio_sw
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 ...
 sw: (g=0): rw=randwrite, bs=512K-512K/512K-512K, ioengine=sync, iodepth=32
 fio 1.54
 Starting 12 processes
 Jobs: 11 (f=11): [wwwwwwwwwww_] [90.9% done] [0K/240.5M /s] [0 /469  iops] [eta 00m:01s]
 sw: (groupid=0, jobs=12): err= 0: pid=1878
   write: io=2238.0MB, bw=242023KB/s, iops=472 , runt=  9469msec
     clat (usec): min=396 , max=70724 , avg=24253.73, stdev=1352.69
      lat (usec): min=397 , max=70725 , avg=24254.11, stdev=1352.68
     bw (KB/s) : min= 5069, max=41568, per=8.65%, avg=20929.09, stdev=1140.28
   cpu          : usr=0.02%, sys=0.23%, ctx=22439, majf=0, minf=191
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued r/w/d: total=0/4476/0, short=0/0/0
      lat (usec): 500=0.13%, 750=0.16%, 1000=0.09%
      lat (msec): 2=0.20%, 4=0.27%, 10=1.85%, 20=7.73%, 50=89.30%
      lat (msec): 100=0.27%
 Run status group 0 (all jobs):
   WRITE: io=2238.0MB, aggrb=242022KB/s, minb=247831KB/s, maxb=247831KB/s, mint=9469msec, maxt=9469msec
 [guutara@centos4 ~]$ ls -al /vol/testvol
 合計 1148372
 drwxr-xr-x 2 root root      4096  524 20:38 .
 drwxr-xr-x 5 root root      4096  520 11:27 ..
 -rw------- 1 root root 209715200  524 20:38 sw.1.0
 -rw------- 1 root root 209715200  524 20:38 sw.10.0
 -rw------- 1 root root 209715200  524 20:38 sw.11.0
 -rw------- 1 root root 209715200  524 20:38 sw.12.0
 -rw------- 1 root root 209715200  524 20:38 sw.2.0
 -rw------- 1 root root 209715200  524 20:38 sw.3.0
 -rw------- 1 root root 209715200  524 20:38 sw.4.0
 -rw------- 1 root root 209715200  524 20:38 sw.5.0
 -rw------- 1 root root 209715200  524 20:38 sw.6.0
 -rw------- 1 root root 209715200  524 20:38 sw.7.0
 -rw------- 1 root root 209715200  524 20:38 sw.8.0
 -rw------- 1 root root 209715200  524 20:38 sw.9.0
 [root@centos5 ~]# ls -al /vol/mirror/
 合計 2294220
 drwxr-xr-x 2 root root      4096  524 20:38 .
 drwxr-xr-x 3 root root      4096  521 19:18 ..
 -rw------- 1 root root 209715200  524 20:38 sw.1.0
 -rw------- 1 root root 209715200  524 20:38 sw.10.0
 -rw------- 1 root root 209715200  524 20:38 sw.11.0
 -rw------- 1 root root 209715200  524 20:38 sw.12.0
 -rw------- 1 root root 209715200  524 20:38 sw.2.0
 -rw------- 1 root root 209715200  524 20:38 sw.3.0
 -rw------- 1 root root 209715200  524 20:38 sw.4.0
 -rw------- 1 root root 209715200  524 20:38 sw.5.0
 -rw------- 1 root root 209715200  524 20:38 sw.6.0
 -rw------- 1 root root 209715200  524 20:38 sw.7.0
 -rw------- 1 root root 209715200  524 20:38 sw.8.0
 -rw------- 1 root root 209715200  524 20:38 sw.9.0


geo-replication の停止
以下の様に、stopコマンドで停止します。Statusで、何も表示されなければ、停止しています。

 [root@centos2 ~]# gluster volume geo-replication testvol centos5b:mirror stop
 Stopping geo-replication session between testvol & centos5b:mirror has been successful
 [root@centos2 ~]# gluster volume geo-replication testvol centos5b:mirror status
 MASTER               SLAVE                                              STATUS    
 --------------------------------------------------------------------------------

Volumeの停止

 [root@centos1 ~]# gluster volume stop testvol
   Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
   Stopping volume testvol has been successful

Volumeの削除

 [root@centos1 ~]# gluster volume delete testvol
   Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
   Deleting volume testvol has been successful

peerの削除

 [root@centos1 ~]# gluster peer detach cento3b
   Detach successful
 [root@centos1 ~]# gluster peer status
   No peers present

最後に

テストした結果を、ざっと、書いてみました。あくまで、テスト結果なので、間違っている所も、多々、あると思います。
うのみには、しないで、ご利用は、自己責任でおねがいしまっす。
ちなみに、READだと、また、違った特性がでるので、色々、やってみると、面白いとおもいまっす!

*1:1Gbps*1000*2/8bit=250MBps

*2:1Gbps*1000*2/8bit=250MBps

*3:1Gbps*1000*2/8bit=250MBps

*4:1Gbps*1000*2/8bit=250MBps