Glusterfsにdistributed volumeを作成して、replicated volume、dispersed volume、compbined volume

15654 ワード

前の記事では、CentOSにglusterfsをどのようにインストールするか、および簡単にvolumeを作成し、native-mountを実現しました。今日は、glusterfs上でどのタイプのvolumeを作成するかに焦点を当ててみます。
1.まず実験環境を紹介します。今日は5台の仮想マシンを共用しました。その中に4つの仮想マシンがserver端末をしています。それぞれ:
servera.lab.example.com
serverb.lab.example.com
serverc.lab.example.com
serverd.lab.example.com
1つの仮想マシンがclient端末をする:
workstation.lab.example.com
5台の仮想マシンの間でファイアウォールが開かれています。相互にアクセスできます。そしてお互いにホームゲームを解析できます。4台のserverには既にglusterfs関連のpackageがインストールされています。そして一つのtrusted-storge-poolが構成されています。
[root@servera ~]# gluster pool list
UUID                        Hostname            State
d61aaee4-efe5-4f60-9216-c65fdb0b65f8    serverb.lab.example.com    Connected 
be6e1fe5-ae7d-40d1-901e-8b58fd0a4be3    serverc.lab.example.com    Connected 
25dda180-3285-47f6-8595-3cb9bdaab92f    serverd.lab.example.com    Connected 
860cd46c-390b-430f-8a01-d3433fa2775c    localhost            Connected
2.4台のserverでそれぞれ5つのbricksを作成し、/bricks/thinvol$nディレクトリにマウントして、以下のコマンドを順次実行します。
a.実験環境において、各serverにはすでに一つのlvm group vg_が予め完成されています。bricks
[root@servera~]菗vgs  VG        #PV菗LV菗SN Attr   Vsize  VFree  vg_bricks   1  10   0 wz-n-20.00 g 9.97 gb.やせた論理ボリュームを作成します。
[root@servera ~]# for i in {1..9}; do lvcreate -L 2G -T vg_bricks/pool$i; done
  Logical volume "pool1" created.
  Logical volume "pool2" created.
  Logical volume "pool3" created.
  Logical volume "pool4" created.
  Logical volume "pool5" created.
  Logical volume "pool6" created.
  Logical volume "pool7" created.
  Logical volume "pool8" created.
  Logical volume "pool9" created.

[root@servera ~]# for i in {1..9}; do lvcreate -L 2G -T vg_bricks/pool$i; done
  Logical volume pool1 already exists in Volume group vg_bricks.
  Logical volume pool2 already exists in Volume group vg_bricks.
  Logical volume pool3 already exists in Volume group vg_bricks.
  Logical volume pool4 already exists in Volume group vg_bricks.
  Logical volume pool5 already exists in Volume group vg_bricks.
  Logical volume pool6 already exists in Volume group vg_bricks.
  Logical volume pool7 already exists in Volume group vg_bricks.
  Logical volume pool8 already exists in Volume group vg_bricks.
  Logical volume pool9 already exists in Volume group vg_bricks.
c.論理ボリュームをフォーマットし、指定されたディレクトリにアップロードします。生産環境でマウントする時は、起動自動マウントを実現するために、マウントコマンドを/etc/fstabに書き込むことをおすすめします。
[root@servera ~]# for i in {1..9}; do mkfs -t xfs -i size=512 /dev/mapper/vg_bricks-thinvol$i; done
[root@servera ~]# mkdir -p /bricks/thinvol{1..9}
[root@servera ~]# for i in {1..9}; do mount -t xfs /dev/mapper/vg_bricks-thinvol$i /bricks/thinvol$i; done
d.selinuxセキュリティコンテキストを設定します。ここでデフォルトのselinuxは開きます。
[root@servera ~]# for i in {1..9}; do mkdir /bricks/thinvol$i/brick; done
[root@servera ~]# chcon -R -t glusterd_brick_t /bricks/thinvol{1..9}
これで準備が一段落する
3.分散ボリュームを作成するDisttributed volume
[root@servera ~]# gluster volume create Test01 \
> servera.lab.example.com:/bricks/thinvol1/brick \
> serverb.lab.example.com:/bricks/thinvol1/brick \
> serverc.lab.example.com:/bricks/thinvol1/brick \
> serverd.lab.example.com:/bricks/thinvol1/brick
volume create: Test01: success: please start the volume to access data
volumeの状態を見ると、作成直後のvolumeは「not started」の状態です。
[root@servera ~]# gluster volume status Test01
Volume Test01 is not started
start volume
[root@servera ~]# gluster volume start Test01
volume start: Test01: success
この時点でvolumeの詳細を調べたら、volumeはすでにstarted、volumeタイプはdistributeです。
[root@servera ~]# gluster volume info Test01
 
Volume Name: Test01
Type: Distribute
Volume ID: f40beb82-81ae-42d2-bd1a-a7b9a24abe63
Status: Started
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol1/brick
Brick2: serverb.lab.example.com:/bricks/thinvol1/brick
Brick3: serverc.lab.example.com:/bricks/thinvol1/brick
Brick4: serverd.lab.example.com:/bricks/thinvol1/brick
Options Reconfigured:
performance.readdir-ahead: on
workstation.lab.example.comにvolume Test 01をマウントする。
[root@workstation ~]# yum install -y glusterfs-fuse
[root@workstation ~]# mkdir /mnt/Test01
[root@workstation ~]# mount -t glusterfs servera.lab.example.com:Test01 /mnt/Test01
[root@workstation ~]# df -h | grep Test01
servera.lab.example.com:Test01  8.0G  131M  7.9G   2% /mnt/Test01
ここでいくつかのdistributed volumeの特徴を見ることができます。ちょっとライヴに似ています。volumeの大きさはvolumeを構成する4つのbrickの和です。(各brickの大きさは2 Gで、合計2 G*4=8 Gです。)
mnt/Test 01で100個のテストファイルを作成すると、ファイルは「ランダム」に4つのserverのbrickに割り当てられます。
[root@workstation ~]# cd /mnt/Test01/
[root@workstation Test01]# touch {1..100}.file
[root@servera ~]# ls /bricks/thinvol1/brick/
100.file  13.file  18.file  29.file  32.file  37.file  40.file  47.file  61.file  6.file   76.file  7.file   97.file
12.file   17.file  28.file  2.file   34.file  39.file  44.file  54.file  62.file  75.file  77.file  94.file
[root@serverb ~]# ls /bricks/thinvol1/brick/
10.file  1.file   25.file  38.file  42.file  52.file  56.file  59.file  66.file  80.file  86.file  98.file
14.file  24.file  26.file  41.file  50.file  53.file  57.file  5.file   74.file  83.file  87.file
...
4.レプリカボリュームを作成するReplicated volume
[root@servera ~]# gluster volume create Test02 replica 4 \
> servera.lab.example.com:/bricks/thinvol2/brick \
> serverb.lab.example.com:/bricks/thinvol2/brick \
> serverc.lab.example.com:/bricks/thinvol2/brick \
> serverd.lab.example.com:/bricks/thinvol2/brick
volume create: Test02: success: please start the volume to access data
start volume Test 02はvolumeの詳細を調べます。volumeのタイプはReplicateでコピーされています。
[root@servera ~]# gluster volume start Test02
volume start: Test02: success
[root@servera ~]# gluster volume info Test02
 
Volume Name: Test02
Type: Replicate
Volume ID: 305f2c2f-8550-40e0-9d75-a2bc8149a333
Status: Started
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol2/brick
Brick2: serverb.lab.example.com:/bricks/thinvol2/brick
Brick3: serverc.lab.example.com:/bricks/thinvol2/brick
Brick4: serverd.lab.example.com:/bricks/thinvol2/brick
Options Reconfigured:
performance.readdir-ahead: on
Test 02をclient下の/mnt/Test 02ディレクトリにマウントします。
[root@workstation Test01]# mkdir /mnt/Test02
[root@workstation Test01]# mount -t glusterfs servera.lab.example.com:Test02 /mnt/Test02
[root@workstation Test02]# df -h | grep Test02
servera.lab.example.com:Test02  2.0G   33M  2.0G   2% /mnt/Test02
ここで、Test 02のマウント後のサイズは2 Gであり、即ちTest 02を構成する各brickと同じ大きさであり、その特徴はライヴd 1と似ている。
mnt/Test 02で100個のテストファイルを作成すると、各serverのbrickで100個のテストファイルが作成されていることが分かります。
[root@workstation Test02]# touch {1..100}.file
[root@servera ~]# ls /bricks/thinvol2/brick/
100.file  16.file  22.file  29.file  35.file  41.file  48.file  54.file  60.file  67.file  73.file  7.file   86.file  92.file  99.file
10.file   17.file  23.file  2.file   36.file  42.file  49.file  55.file  61.file  68.file  74.file  80.file  87.file  93.file  9.file
11.file   18.file  24.file  30.file  37.file  43.file  4.file   56.file  62.file  69.file  75.file  81.file  88.file  94.file
12.file   19.file  25.file  31.file  38.file  44.file  50.file  57.file  63.file  6.file   76.file  82.file  89.file  95.file
13.file   1.file   26.file  32.file  39.file  45.file  51.file  58.file  64.file  70.file  77.file  83.file  8.file   96.file
14.file   20.file  27.file  33.file  3.file   46.file  52.file  59.file  65.file  71.file  78.file  84.file  90.file  97.file
15.file   21.file  28.file  34.file  40.file  47.file  53.file  5.file   66.file  72.file  79.file  85.file  91.file  98.file
[root@serverb ~]# ls /bricks/thinvol2/brick/ | wc -w
100
[root@serverc ~]# ls /bricks/thinvol2/brick/ | wc -w
100
[root@serverd ~]# ls /bricks/thinvol2/brick/ | wc -w
100
5.「分散巻」を作成するDisppersed volume
[root@servera ~]# for BRICKNUM in {3..5}; do
> for node in {a..d}; do
> echo server$node.lab.example.com:/bricks/thinvol$BRICKNUM/brick
> done
> done > /tmp/Test03.txt
[root@servera ~]# cat /tmp/Test03.txt 
servera.lab.example.com:/bricks/thinvol3/brick
serverb.lab.example.com:/bricks/thinvol3/brick
serverc.lab.example.com:/bricks/thinvol3/brick
serverd.lab.example.com:/bricks/thinvol3/brick
servera.lab.example.com:/bricks/thinvol4/brick
serverb.lab.example.com:/bricks/thinvol4/brick
serverc.lab.example.com:/bricks/thinvol4/brick
serverd.lab.example.com:/bricks/thinvol4/brick
servera.lab.example.com:/bricks/thinvol5/brick
serverb.lab.example.com:/bricks/thinvol5/brick
serverc.lab.example.com:/bricks/thinvol5/brick
serverd.lab.example.com:/bricks/thinvol5/brick
[root@servera ~]# gluster volume create Test03 disperse-data 4 redundancy 2 $( 
  

, disperse volume , “ ” brick server , ...... “ ” server brick, force 。

[root@servera ~]# gluster volume create Test03 disperse-data 4 redundancy 2 $( 
  
[root@servera ~]# gluster volume start Test03
volume start: Test03: success
[root@servera ~]# gluster volume info Test03
 
Volume Name: Test03
Type: Distributed-Disperse
Volume ID: b4d90a15-9a2b-46ec-a90f-e6f96b48d77b
Status: Started
Number of Bricks: 2 x (4 + 2) = 12
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol3/brick
Brick2: serverb.lab.example.com:/bricks/thinvol3/brick
Brick3: serverc.lab.example.com:/bricks/thinvol3/brick
Brick4: serverd.lab.example.com:/bricks/thinvol3/brick
Brick5: servera.lab.example.com:/bricks/thinvol4/brick
Brick6: serverb.lab.example.com:/bricks/thinvol4/brick
Brick7: serverc.lab.example.com:/bricks/thinvol4/brick
Brick8: serverd.lab.example.com:/bricks/thinvol4/brick
Brick9: servera.lab.example.com:/bricks/thinvol5/brick
Brick10: serverb.lab.example.com:/bricks/thinvol5/brick
Brick11: serverc.lab.example.com:/bricks/thinvol5/brick
Brick12: serverd.lab.example.com:/bricks/thinvol5/brick
Options Reconfigured:
performance.readdir-ahead: on
の により、 はすでにdispersed volume Test 03を し、 しました。 には2 x(4+2)のDistributed-disperse volumeであるべきです。
Redhat のredundenncy level:a.6=4+2 b.11=8+3 c.12=8+4
dispersed volume Test 03をclient server/mnt/Test 03ディレクトリにアップロードします。
[root@workstation Test02]# mkdir /mnt/Test03
[root@workstation Test02]# mount -t glusterfs servera.lab.example.com:Test03 /mnt/Test03
[root@workstation Test03]# df -h | grep Test03
servera.lab.example.com:Test03   16G  361M   16G   3% /mnt/Test03
から ても、Test 03の な サイズは16 Gで、8つのbricksに する。
servera.lab.example.com:/bricks/thinvol3/brick serverb.lab.example.com:/bricks/thinvol3/brick
)の きさ、 は16/(2*12)です。
100 MBのテストファイルを/mnt/Test 03で します。
[root@workstation Test03]# dd if=/dev/zero of=/mnt/Test03/100M.file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 21.1374 s, 5.0 MB/s
[root@workstation Test03]# ls -lh
total 100M
-rw-r--r--. 1 root root 100M Jul 29 19:44 100M.file
server のbrickの を します。
[root@servera ~]# ls -lh /bricks/thinvol{3..5}/brick
/bricks/thinvol3/brick:
total 25M
-rw-r--r--. 2 root root 25M Jul 29 19:44 100M.file
/bricks/thinvol4/brick:
total 25M
-rw-r--r--. 2 root root 25M Jul 29 19:44 100M.file
/bricks/thinvol5/brick:
total 0
[root@serverb ~]# ls -lh /bricks/thinvol{3..5}/brick
/bricks/thinvol3/brick:
total 25M
-rw-r--r--. 2 root root 25M Jul 29 19:44 100M.file
/bricks/thinvol4/brick:
total 25M
-rw-r--r--. 2 root root 25M Jul 29 19:44 100M.file
/bricks/thinvol5/brick:
total 0
[root@serverc ~]# ls -lh /bricks/thinvol{3..5}/brick
/bricks/thinvol3/brick:
total 25M
-rw-r--r--. 2 root root 25M Jul 29 19:44 100M.file

/bricks/thinvol4/brick:
total 0

/bricks/thinvol5/brick:
total 0
[root@serverd ~]# ls -lh /bricks/thinvol{3..5}/brick
/bricks/thinvol3/brick:
total 25M
-rw-r--r--. 2 root root 25M Jul 29 19:44 100M.file
/bricks/thinvol4/brick:
total 0
/bricks/thinvol5/brick:
total 0
されているのは のbricksです。
Brick1: servera.lab.example.com:/bricks/thinvol3/brick
Brick2: serverb.lab.example.com:/bricks/thinvol3/brick
Brick3: serverc.lab.example.com:/bricks/thinvol3/brick
Brick4: serverd.lab.example.com:/bricks/thinvol3/brick
Brick5: servera.lab.example.com:/bricks/thinvol4/brick
Brick6: serverb.lab.example.com:/bricks/thinvol4/brick
6. Commbined volumeを する
は の3 の み わせです。distributed-replicatedでもいいです。distributed-dispersedでもいいですが、replicate-dispersedの み わせはないようです。
[root@servera ~]# gluster volume create Test04 replica 3 \
> servera.lab.example.com:/bricks/thinvol6/brick \
> serverb.lab.example.com:/bricks/thinvol6/brick \
> serverc.lab.example.com:/bricks/thinvol6/brick \
> servera.lab.example.com:/bricks/thinvol7/brick \
> serverb.lab.example.com:/bricks/thinvol7/brick \
> serverc.lab.example.com:/bricks/thinvol7/brick
volume create: Test04: success: please start the volume to access data
[root@servera ~]# gluster volume start Test04
volume start: Test04: success
[root@servera ~]# gluster volume info Test04
 
Volume Name: Test04
Type: Distributed-Replicate
Volume ID: 45df998d-2d14-4af2-83c7-e497bd5a8dd0
Status: Started
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol6/brick
Brick2: serverb.lab.example.com:/bricks/thinvol6/brick
Brick3: serverc.lab.example.com:/bricks/thinvol6/brick
Brick4: servera.lab.example.com:/bricks/thinvol7/brick
Brick5: serverb.lab.example.com:/bricks/thinvol7/brick
Brick6: serverc.lab.example.com:/bricks/thinvol7/brick
Options Reconfigured:
performance.readdir-ahead: on
からvolume Test 04のタイプはDistributed-Replicateであることが かります。
CientにTest 04をマウントし、Test 04の き は4 Gである。
[root@workstation Test03]# mkdir /mnt/Test04
[root@workstation Test03]# mount -t glusterfs servera.lab.example.com:Test04 /mnt/Test04
[root@workstation Test03]# df -h | grep Test04
servera.lab.example.com:Test04  4.0G   66M  4.0G   2% /mnt/Test04
mnt/Test 04で100 のテストファイルを し、データ を します。
[root@workstation Test04]# touch {1..100}.file
[root@servera thinvol4]# ls /bricks/thinvol4/brick/ | wc -w
48
[root@servera thinvol4]# ls /bricks/thinvol5/brick/ | wc -w
52
[root@servera thinvol4]#
[root@serverb ~]# ls /bricks/thinvol4/brick/ | wc -w
48
[root@serverb ~]# ls /bricks/thinvol5/brick/ | wc -w
52
[root@serverc ~]# ls /bricks/thinvol4/brick/ | wc -w
48
[root@serverc ~]# ls /bricks/thinvol5/brick/ | wc -w
52
つけられます
Brick1: servera.lab.example.com:/bricks/thinvol4/brick
Brick2: serverb.lab.example.com:/bricks/thinvol4/brick
Brick3: serverc.lab.example.com:/bricks/thinvol4/brick
3つのコピーを しています。 brickのデータは しています。
Brick4: servera.lab.example.com:/bricks/thinvol5/brick
Brick5: serverb.lab.example.com:/bricks/thinvol5/brick
Brick6: serverc.lab.example.com:/bricks/thinvol5/brick
3つのコピーを しています。 brickのデータは しています。
もちろん、ここの は の に られています。 serverで つのbrickを しました。 の ではこのような をできるだけ けなければなりません。Ok、 はここまでです。