Glusterfsにdistributed volumeを作成して、replicated volume、dispersed volume、compbined volume
前の記事では、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が構成されています。
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.やせた論理ボリュームを作成します。
3.分散ボリュームを作成するDisttributed volume
mnt/Test 01で100個のテストファイルを作成すると、ファイルは「ランダム」に4つのserverのbrickに割り当てられます。
mnt/Test 02で100個のテストファイルを作成すると、各serverのbrickで100個のテストファイルが作成されていることが分かります。
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、 はここまでです。