テクノロジーの世界では、アプリケーション/ユーザーがデータにアクセスできるようにするために、データを高可用性に保つことが常に重要です。ここでは、データを複数のボリューム/ノードに分散することで高可用性を実現しています。
クライアントマシン/ユーザーは、ローカルストレージのようにストレージにアクセスできます。ユーザーがGlusterストレージにデータを作成するたびに、データは他のストレージノードにミラーリング/配布されます。
GlusterFSとは何ですか?
GlusterFSは、メディアストリーミング、クラウドストレージ、CDN(コンテンツ配信ネットワーク)などのデータ集約型のワークロードに適した、オープンソースのスケーラブルなネットワークファイルシステムです。 GlusterFSは、最初はGluster Incによって開発され、その後、買収の結果としてRedhatによって開発されました。
用語:
以下は、この記事全体で使用する重要な用語です。
レンガ –は、信頼できるストレージプール内のサーバー上の基本ストレージ(ディレクトリ)です。
ボリューム –はレンガの論理的なコレクションです。
クラスター –は、リンクされたコンピューターのグループであり、単一のコンピューターとして連携して動作します。
分散ファイルシステム –データが複数のストレージノードに分散され、クライアントがネットワーク経由でデータにアクセスできるようにするファイルシステム。
クライアント –ボリュームをマウントするマシンです。
サーバー –は、データが保存される実際のファイルシステムがホストされているマシンです。
複製 –高い冗長性を実現するために、データの複数のコピーを作成します。
ヒューズ –は、非特権ユーザーがカーネルコードを編集せずに独自のファイルシステムを作成できるようにするロード可能なカーネルモジュールです。
glusterd –は、信頼できるストレージプール内のすべてのサーバーで実行されるデーモンです。
RAID – Redundant Array of Inexpensive Disks(RAID)は、冗長性によってストレージの信頼性を向上させるテクノロジーです。
ボリューム:
前述のように、ボリュームはブリックのコレクションであり、読み取りや書き込みなどのほとんどのgluster操作はボリューム上で行われます。 GlusterFSは、要件に基づいてさまざまなタイプのボリュームをサポートします。ストレージサイズのスケーリング、パフォーマンスの向上、またはその両方に適しています。
この記事では、Ubuntu 16.04 / Debian 8でレプリケートされたGlusterFSボリュームを構成します。このガイドは、Ubuntu 14.04 /Ubuntu12.04などの以前のバージョンのUbuntuでも機能するはずです。
複製されたGlusterfsボリューム RAID 1のようなものです 、およびボリュームは、すべてのブリックのデータの正確なコピーを維持します。ボリュームの作成中にレプリカの数を決定できるため、2つのレプリカでボリュームを作成するには少なくとも2つのブリックが必要であり、3つのレプリカのボリュームを作成するには3つのブリックが必要です。
このボリュームは、より優れたデータの信頼性とデータの冗長性を提供します。残りの種類のGlusterFSボリュームについて読んでみませんか。
要件:
ここでは、2つのレプリカを使用してGlusterFSボリュームを構成します。 1GBのメモリを搭載した64ビットシステム(仮想または物理)が2つあり、各システムに予備のハードディスクが1つあることを確認してください。
ホスト名 | IPアドレス | OS | メモリ | ディスク | 目的 |
---|---|---|---|---|---|
gluster1.itzgeek.local | 192.168.12.16 | Ubuntu 16.04 LTS | 1GB | / dev / sdb(5GB) | ストレージノード1 |
gluster2.itzgeek.local | 192.168.12.17 | Debian 8 | 1GB | / dev / sdb(5GB) | ストレージノード2 |
client.itzgeek.local | 192.168.12.8 | CentOS 7 / Debian | NA | NA | クライアントマシン |
DNSの構成:
GlusterFSコンポーネントは名前の解決にDNSを使用するため、DNSを構成するか、ホストエントリを設定します。ご使用の環境にDNSがない場合は、/ etc / hostsファイルを変更し、それに応じて更新してください。
sudo vi /etc/hosts 192.168.12.16 gluster1.itzgeek.local gluster1 192.168.12.17 gluster2.itzgeek.local gluster2 192.168.12.20 client.itzgeek.local client
GlusterFSリポジトリの追加:
インストールに進む前に、両方のストレージノードでGlusterFSリポジトリを構成する必要があります。指示に従って、リポジトリをシステムに追加します。
Debian:
httpsトランザクションのサポートパッケージをインストールします。
sudo apt-get install -y lsb-release sudo apt-get install -y apt-transport-https
GlusterFSリポジトリの公開鍵を追加します。
wget -O - http://download.gluster.org/pub/gluster/glusterfs/LATEST/rsa.pub | sudo apt-key add - echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/$(lsb_release -sc)/apt $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/gluster.list
Ubuntu 16.04 / 14.04:
sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:gluster/glusterfs-3.8
GlusterFSのインストール:
システムにリポジトリを追加したら、GlusterFSのインストールに取り掛かることができます。
リポジトリキャッシュを更新します。
sudo apt-get update
次のコマンドを使用してGlusterFSパッケージをインストールします。
sudo apt-get install -y glusterfs-server
すべてのglusterノードでglusterfs-serverサービスを開始します。
sudo service glusterfs-server start
glusterfsサービスが正常に実行されていることを確認します。
raj@gluster1:~$ sudo service glusterfs-server status ● glusterfs-server.service - LSB: GlusterFS server Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled) Active: active (running) since Sat 2016-09-24 21:47:20 IST; 1min 6s ago Docs: man:systemd-sysv-generator(8) Process: 1570 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS) Process: 1664 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS) Tasks: 7 (limit: 512) Memory: 25.5M CPU: 3.552s CGroup: /system.slice/glusterfs-server.service └─1673 /usr/sbin/glusterd -p /var/run/glusterd.pid Sep 24 21:47:16 gluster1.itzgeek.local systemd[1]: Starting LSB: GlusterFS server... Sep 24 21:47:16 gluster1.itzgeek.local glusterfs-server[1664]: * Starting glusterd service glusterd Sep 24 21:47:20 gluster1.itzgeek.local glusterfs-server[1664]: ...done. Sep 24 21:47:20 gluster1.itzgeek.local systemd[1]: Started LSB: GlusterFS server.
ファイアウォールの構成:
ファイアウォールを無効にするか、クラスター内のすべての接続を許可するようにファイアウォールを構成する必要があります。
sudo iptables -I INPUT -p all -s <ip-address> -j ACCEPT
ストレージの追加:
マシンに予備のハードディスクが1台あるとすると、 / dev / sdb ここでレンガに使用するものです。以下に示すように、スペアハードディスクに単一のパーティションを作成します。
両方のノードで以下の手順を実行する必要があります。
sudo fdisk /dev/sdb
作成したパーティションを選択したファイルシステムでフォーマットします。
sudo mkfs.ext4 /dev/sdb1
/ data / glusterというディレクトリにディスクをマウントします 。
sudo mkdir -p /data/gluster sudo mount /dev/sdb1 /data/gluster
/ etc / fstabにエントリを追加します 再起動後もマウントを永続的に保つため。
echo "/dev/sdb1 /data/gluster ext4 defaults 0 0" | sudo tee --append /etc/fstab
Ubuntu 16.04でGlusterFSを構成する:
ボリュームを作成する前に、 gluster2.itzgeek.local を追加して、信頼できるストレージプールを作成する必要があります。 。 GlusterFS構成コマンドは、クラスター内の任意の1つのサーバーで実行でき、他のすべてのサーバーでも同じコマンドを実行します。
ここでは、 gluster1.itzgeek.localですべてのGlusterFSコマンドを実行します ノード。
raj@gluster1:~$ sudo gluster peer probe gluster2.itzgeek.local peer probe: success.
信頼できるストレージプールのステータスを確認します。
raj@gluster1:~$ sudo gluster peer status Number of Peers: 1 Hostname: gluster2.itzgeek.local Uuid: 51470928-dfa8-42e1-a221-d7bbcb8c13bd State: Peer in Cluster (Connected)
ストレージプールを一覧表示します。
raj@gluster1:~$ sudo gluster pool list UUID Hostname State 51470928-dfa8-42e1-a221-d7bbcb8c13bd gluster2.itzgeek.local Connected dc7c1639-d21c-4adf-b28f-5150229e6980 localhost Connected
GlusterFSボリュームのセットアップ:
「gvol0」という名前のブリック(ディレクトリ)を作成します 」は、両方のノードにマウントされたファイルシステムにあります。
sudo mkdir -p /data/gluster/gvol0
複製されたボリュームを使用するので、「 gvol0」という名前のボリュームを作成します。 」と2つのレプリカ。
raj@gluster1:~$ sudo gluster volume create gvol0 replica 2 gluster1.itzgeek.local:/data/gluster/gvol0 gluster2.itzgeek.local:/data/gluster/gvol0 volume create: gvol0: success: please start the volume to access data
ボリュームを開始します。
raj@gluster1:~$ sudo gluster volume start gvol0 volume start: gvol0: success
作成したボリュームの状態を確認してください。
raj@gluster1:~$ sudo gluster volume info gvol0 Volume Name: gvol0 Type: Replicate Volume ID: ca102e4b-6cd1-4d9d-9c5a-03b882c76da0 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster1.itzgeek.local:/data/gluster/gvol0 Brick2: gluster2.itzgeek.local:/data/gluster/gvol0 Options Reconfigured: transport.address-family: inet performance.readdir-ahead: on nfs.disable: on
GlusterFSクライアントのセットアップ:
glusterfs-clientをインストールします GlusterFSファイルシステムのマウントをサポートするパッケージ。すべてのコマンドをrootとして実行します ユーザー。
$ su - ### CentOS / RHEL ### yum install -y glusterfs-client ### Ubuntu / Debian ### apt-get install -y glusterfs-client
GlusterFSファイルシステムをマウントするためのディレクトリを作成します。
mkdir -p /mnt/glusterfs
次に、GlusterFSファイルシステムを / mnt / glusterfsにマウントします 次のコマンドを使用します。
mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt/glusterfs
gluster2.itzgeek.localを使用することもできます gluster1.itzgeek.comの代わりに 上記のコマンドで。
マウントされたGlusterFSファイルシステムを確認します。
[root@client ~]# df -hP /mnt/glusterfs Filesystem Size Used Avail Use% Mounted on gluster1.itzgeek.local:/gvol0 4.8G 11M 4.6G 1% /mnt/glusterfs
以下のコマンドを使用して、GlusterFSファイルシステムを確認することもできます。
[root@client ~]# cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=490448k,nr_inodes=122612,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 /dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 /dev/mapper/centos-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 tmpfs /run/user/0 tmpfs rw,seclabel,nosuid,nodev,relatime,size=100136k,mode=700 0 0 gluster1.itzgeek.local:/gvol0 /mnt/glusterfs fuse.glusterfs rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
以下のエントリを/etc / fstabに追加します システムの起動時に自動的にマウントします。
gluster1.itzgeek.local:/gvol0 /mnt/glusterfs glusterfs defaults,_netdev 0 0
GlusterFSレプリケーションと高可用性のテスト:
GlusterFSサーバー側:
レプリケーションを確認するには、作成したGlusterFSボリュームを同じストレージノードにマウントします。
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt raj@gluster2:~$ sudo mount -t glusterfs gluster2.itzgeek.local:/gvol0 /mnt
/ mnt内のデータ 両方のノードのディレクトリは常に同じになります(レプリケーション)。
GlusterFSクライアント側:
client.itzgeek.local。のマウントされたファイルシステムにいくつかのファイルを作成しましょう。
touch /mnt/glusterfs/file1 touch /mnt/glusterfs/file2
作成したファイルを確認します。
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2
/ mnt 内に同じデータがあるかどうか、両方のGlusterFSノードをテストします 。
raj@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:52 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 raj@gluster2:~$ ls -al /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 06:30 . drwxr-xr-x 23 root root 4096 Sep 24 08:39 .. -rw-r--r-- 1 root root 0 Sep 26 2016 file1 -rw-r--r-- 1 root root 0 Sep 26 2016 file2
ご存知のとおり、 gluster1.itzgeek.localからGlusterFSボリュームをマウントしました client.itzgeek.local 、今度はノードをシャットダウンしてボリュームの高可用性をテストするときです。
raj@gluster1:~$ sudo poweroff
ここで、ファイルの可用性をテストします。ノードがダウンしていても、最近作成したファイルが表示されます。
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2マウントされたGlusterFSファイルシステムでコマンドの実行が遅くなる場合があります。これは、GlusterFSが gluster2.itzgeek.localに切り替わったためです。 client.itzgeek.local gluster1.itzgeek.localに到達できません 。
GlusterFSファイルシステムにさらにいくつかのファイルを作成して、レプリケーションを確認します。
touch /mnt/glusterfs/file3 touch /mnt/glusterfs/file4
ファイル数を確認します。
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2 -rw-r--r--. 1 root root 0 Sep 26 11:26 file3 -rw-r--r--. 1 root root 0 Sep 26 11:26 file4
gluster1以降 ダウンすると、すべてのデータが gluster2.itzgeek.localに書き込まれるようになります 高可用性のため。次に、node1の電源を入れます( gluster1.itzgeek.local 。
/ mntを確認してください gluster1.itzgeekk.localの;ディレクトリに4つのファイルがすべて表示されます。これにより、レプリケーションが期待どおりに機能していることが確認されます。
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt [sudo] password for raj: raj@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:59 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 -rw-r--r-- 1 root root 0 Sep 26 20:56 file3 -rw-r--r-- 1 root root 0 Sep 26 20:56 file4
以上です。