1つは、GlusterFSの概要です。
1.1GlusterFSの概要
オープンソースの分散ファイルシステム
ストレージサーバー、クライアント、NFS / Sambaストレージゲートウェイで構成されます
メタデータサーバーなし
1.2GlusterFSの機能
スケーラビリティと高性能
高可用性
グローバル統一ネームスペース
柔軟なボリューム管理
標準プロトコルに基づく
1.3、一般的に使用される用語
ブリック:信頼できるストレージプール内のサーバーのエクスポートディレクトリを介した、GFS内のストレージユニット。'SERVER:EXPORT'などのホスト名とディレクトリ名で識別できます
ボリューム:ボリューム
FUSE:カーネルファイルシステム、Filesystem Userspaceはロード可能なカーネルモジュールであり、非特権ユーザーがカーネルコードを変更せずに独自のファイルシステムを作成できるようにします。ユーザースペースでファイルシステムコードを実行することにより、FUSEコードはカーネルをブリッジします。
VFS:仮想ファイルシステム
Glusterd:信頼できるストレージプール内のすべてのサーバーで実行するGluster管理デーモン。
1.4、GFS構造と柔軟なHASHアルゴリズム
■モジュラースタックアーキテクチャ
モジュール式のスタックアーキテクチャ
モジュールの組み合わせにより、複雑な機能を実現
■ElasticHASHアルゴリズム
HASHアルゴリズムを使用して32ビットの整数を取得
します。N個の連続したサブスペースに分割します。各スペースはブリックに対応し
ます。柔軟なHASHアルゴリズムの利点。
データが各ブリックに均等に分散されるようにします。これ
により、メタデータサーバーへの依存が解決され、問題が解決されます。単一の障害点とアクセスのボトルネック
2、GlusterFSの動作原理
1.クライアントまたはアプリケーションはGlusterFSのマウントポイントを介してデータにアクセスします2.Linux
システムカーネルは要求を受信し、VFSAPIを介してそれらを処理し
ます3.VFSはFUSEカーネルファイルシステムにデータを送信し、fuseファイルシステムは/ devを介してデータを渡します/ fuseデバイスファイルはGlusterFSクライアントに送信されます
。4。GlusterFSクライアントがデータを受信した後、クライアントは構成ファイルの構成に従ってデータを処理します
。5。データはネットワークを介してリモートGlusterFSサーバーに転送され、データはサーバーに書き込まれます。ストレージデバイス
3、GlusterFSボリュームタイプ
分散ボリューム
ストライプボリューム
複製ボリューム
分散ストライプボリューム
分散複製ボリューム
ストライプ複製ボリューム
分散ストライプ複製ボリューム
3.1、分散ボリューム
ファイルはブロックに分割されていません。HASH
値は、ファイル属性を拡張することによって保存されます。
サポートされている基盤となるファイルシステムは、EXT3、EXT4、ZFS、XFS、およびその他の
分散ボリューム特性です。
ファイルは異なるサーバーに分散されており、冗長性はありません。
ボリュームのサイズを拡張する方が簡単で安価です。
単一の障害が発生するとデータが失われます。
基盤となるデータ保護に依存してください。
分散ボリュームの作成コマンド:
gluster volume create dis-volume server1:/dir1 server2:/dir2
3.2ストリップロール
ファイルはオフセットに応じてNブロック(Nストライプノード)に分割され、ポーリングされたストレージは各Brick Serverノードに保存されます。
大きなファイルを保存する場合、パフォーマンスは特に優れています
。Raid0
ストライプボリュームの特性と同様に、冗長性はありません。
データは小さな断片に分割され、ブロックサーバーグループ内のさまざまなストリップに分散されます。
分散により負荷が軽減され、ファイルが小さいほどアクセス速度が向上します。
データの冗長性はありません。
ストライプボリュームの作成コマンド:
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
3.3、コピーボリューム
同じファイルの1つ以上のコピーを保持する
コピーモードではコピーを保存する必要があるため、ディスク使用率は低くなります
複数のノードのストレージスペースに一貫性がない場合、バレル効果に従って、最も低いノードの容量がボリュームの合計容量と見なされ
ます。複製されたボリュームの機能:
ボリューム内のすべてのサーバーは完全なコピーを格納します
。ボリュームのコピー数は、顧客が作成したときに決定できます。
少なくとも2つのブロックサーバーまたはそれ以上のサーバー
に冗長性があります。
ボリュームのコピーコマンドを作成します。
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
3.4、分散ストリップボリューム
分散ボリュームとストライプボリュームの機能を考慮して
主に大容量ファイルアクセス処理に使用
少なくとも4台のサーバーが必要
分散ストライプボリュームを作成するコマンド:
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
3.5、分散レプリケーションボリューム
分散ボリュームと複製ボリュームの機能を考慮に入れる
冗長性が必要な場合に
分散複製ボリュームを作成するために使用されるコマンド:
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
3.6、コマンド補足
ボリュームを削除する場合、信頼プール内のホストをダウンさせることはできません。そうしないと、削除は成功しません。
gluster volume stop dis-vol
yes
gluster volume delete dis-vol
#######访问控制##########
//仅拒绝
gluster volume set dis-vol auth.reject 20.0.0.25
//仅允许
gluster volume set dis-vol auth.allow 20.0.0.25
第四に、GlusterFSプラットフォームの展開
4.1。実験環境
VMwareソフトウェア
centos7.4仮想マシン、IPアドレス:20.0.0.21、ホスト名:node1、4つのディスクを追加します。これらはすべてサイズが20Gです。
centos7.4仮想マシン、IPアドレス:20.0.0.22、ホスト名:node2、4つのディスクを追加します。これらはすべて、サイズが20Gです。
centos7.4仮想マシン、IPアドレス:20.0.0.23、ホスト名:node3、4つのディスクを追加します。これらはすべて、サイズが20Gです。
centos7.4仮想マシン、IPアドレス:20.0.0.24、ホスト名:node4、4つのディスクを追加します。これらはすべて、サイズが20Gです。
centos7.4仮想マシン、IPアドレス:20.0.0.25、ホスト名:クライアント、テストマシンとして使用
ファイアウォール、カーネル保護はオフです
4.2。展開構成
すべてのノードノードは次の手順を実行します。列としてnode1:20.0.0.21を示します。
[root@node1 ~]# vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
20.0.0.23 node3
20.0.0.24 node4
更改主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
自動フォーマット、自動永続マウントスクリプトを作成する
[root@node1 ~]# vi gsf.sh
#!/bin/bash
for V in $(ls /dev/sd[b-z])
do
echo -e "n\np\n\n\n\nw\n" |fdisk $V
mkfs.xfs -i size=512 ${V}1 &>/dev/null
sleep 1
M=$(echo "$V" |awk -F "/" '{print $3}')
mkdir -p /data/${M}1 &>/dev/null
echo -e "${V}1 /data/${M}1 xfs defaults 0 0\n" >>/etc/fstab
mount -a &>/dev/null
done
[root@node1 ~]# chmod +x gsf.sh
[root@node1 ~]# ./gsf.sh
[root@node1 ~]# scp gsf.sh 20.0.0.22:/
[root@node1 ~]# scp gsf.sh 20.0.0.23:/
[root@node1 ~]# scp gsf.sh 20.0.0.24:/
ネットワークyum倉庫を構築する
[root@node1 abc]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak
[root@node1 yum.repos.d]# mv C* /bak
[root@node1 yum.repos.d]# vim local.repo
[centos]
name=CentOS
baseurl=http://mirror.centos.org/centos/$releasever/storage/$basearch/gluster-3.12/
gpgcheck=0
enabled=1
[root@node1 yum.repos.d]# yum clean all
[root@node1 yum.repos.d]# yum list
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com
4.3、ノード情報を構成します
[root@node1 ~]# gluster peer probe node2 ##添加池子,peer匹配, probe信任+节点名称
peer probe: success.
[root@node1 ~]# gluster peer probe node3
peer probe: success.
[root@node1 ~]# gluster peer probe node4
peer probe: success.
ノードプールを表示
[root@node1 ~]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: 542a7be9-1a0c-43be-89db-57fe4db5a56f
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 2ca567f1-e92e-4215-9b09-e6c5e1f08f35
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 9110ff49-ab25-45d0-85fb-ad67fc266d7c
State: Peer in Cluster (Connected)
[root@node1 ~]# gluster peer status
Number of Peers: 3
ノードを変更するとプールが表示されます
4.4、分散ボリュームを作成する
[root@node2 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data
查看分布式卷的详细信息
[root@node2 ~]# gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: 028c2554-a6d6-48cd-a3ad-8778998c42da
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
开启分布式卷组
[root@node2 ~]# gluster volume start dis-vol
volume start: dis-vol: success
查看是不是开启状态
[root@node2 ~]# gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: 028c2554-a6d6-48cd-a3ad-8778998c42da
Status: Started
Snapshot Count: 0
4.5、ストライプボリュームを作成します
[root@node2 ~]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-vol: success: please start the volume to access data
[root@node2 ~]# gluster volume info stripe-vol
Volume Name: stripe-vol
Type: Stripe
Volume ID: 4b9fe354-a14c-4cfa-9dbc-b887cf101d7c
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node2 ~]# gluster volume start stripe-vol
volume start: stripe-vol: success
[root@node2 ~]# gluster volume info stripe-vol
Volume Name: stripe-vol
Type: Stripe
Volume ID: 4b9fe354-a14c-4cfa-9dbc-b887cf101d7c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
4.6、複製されたボリュームを作成する
[root@node2 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-vol: success: please start the volume to access data
[root@node2 ~]# gluster volume info rep-vol
Volume Name: rep-vol
Type: Replicate
Volume ID: bb87f9dc-8260-44b8-8ba3-53aab9ae10be
Status: Created
Snapshot Count: 0
Xlator 1: BD
Capability 1: thin
Capability 2: offload_copy
Capability 3: offload_snapshot
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick1 VG:
Brick2: node4:/data/sdb1
Brick2 VG:
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node2 ~]# gluster volume start rep-vol
volume start: rep-vol: success
4.7、分散ストリップを作成する
[root@node2 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
[root@node2 ~]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 37af4c7c-4dcc-47a6-89b7-91443343b0a0
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node2 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node2 ~]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 37af4c7c-4dcc-47a6-89b7-91443343b0a0
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
4.8、分散レプリケーションボリュームを作成する
[root@node2 ~]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
[root@node2 ~]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 12e0a204-b09d-427e-a43d-743fd709a096
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node2 ~]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node2 ~]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 12e0a204-b09d-427e-a43d-743fd709a096
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
5、テスト
テストマシン(20.0.0.25)はこれら2つだけを必要とします
[root@localhost ~]# yum -y install glusterfs glusterfs-fuse
[root@localhost ~]# vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
20.0.0.23 node3
20.0.0.24 node4
[root@localhost ~]# mkdir -p /test/dis
[root@localhost ~]# mkdir -p /test/strip
[root@localhost ~]# mkdir -p /test/rep
[root@localhost ~]# mkdir -p /test/dis_stripe
[root@localhost ~]# mkdir -p /test/dis_rep
[root@localhost ~]# mount.glusterfs node1:dis-vol /test/dis
[root@localhost ~]# mount.glusterfs node2:stripe-vol /test/strip
[root@localhost ~]# mount.glusterfs node3:rep-vol /test/rep
[root@localhost ~]# mount.glusterfs node4:dis-stripe /test/dis_stripe
[root@localhost ~]# mount.glusterfs node1:dis-rep /test/dis_rep
サイズが40Mのファイルを5つ作成します
[root@localhost opt]# dd if=/dev/zero of=/opt/1.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/2.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/3.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/4.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/5.log bs=1M count=40
5つのファイルをコピーして、保存用に作成したファイルに保存します
[root@localhost opt]# cp * /test/dis
[root@localhost opt]# cp * /test/strip/
[root@localhost opt]# cp * /test/rep/
[root@localhost opt]# cp * /test/dis_stripe/
[root@localhost opt]# cp * /test/dis_rep/
分散ボリュームを表示する
[root@node1 ~]# cd /data/sdb1/
[root@node1 sdb1]# ll -h
total 160M
-rw-r--r-- 2 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 5.log
[root@node2 ~]# cd /data/sdb1/
[root@node2 sdb1]# ll -h
总用量 40M
-rw-r--r-- 2 root root 40M 10月 28 01:28 2.log
ストリップロールを見る
[root@node1 sdb1]# cd /data/
[root@node1 data]# ll -h sdc1/
total 100M
-rw-r--r-- 2 root root 20M Oct 27 13:28 1.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 2.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 3.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 4.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 5.log
[root@node2 sdb1]# cd /data/
[root@node2 data]# ll -h sdc1/
总用量 100M
-rw-r--r-- 2 root root 20M 10月 28 01:28 1.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 2.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 3.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 4.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 5.log
破壊的な実験を開始して、ボリュームグループを確認します
0 node1を初期化し、テストマシン20.0.0.25に移動して、結果を
表示します。分散ボリュームを表示します。
[root@localhost test]# ls -lh dis/
total 40M
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
ストリップロールを見る
[root@localhost test]# ll
ls: cannot access strip: Transport endpoint is not connected
total 16
drwxr-xr-x 3 root root 4096 Oct 27 13:28 dis
drwxr-xr-x 3 root root 4096 Oct 27 13:28 dis_rep
drwxr-xr-x 3 root root 4096 Oct 27 13:28 dis_stripe
drwxr-xr-x 3 root root 4096 Oct 27 13:28 rep
d????????? ? ? ? ? ? strip
テストに成功