GlusterFS をインストールする
本書では CentOS(Redhat Enterprise Linux と等価)6 系と Ubuntu 12.04 LTS を使ったインストール手順を紹介しています。この他の環境向けの場合はソースをコンパイルしてインストールするを参照して下さい。
また、本書は GlusterFS 3.4.2 について説明していますが、Ubuntu や CentOS の公式パッケージバージョンはこのバージョンよりも古いものになります。
特に GlusterFS 3.4.2 でなければならない理由がない限りはこのパッケージバージョンを使うことをお勧めします(セキュリティバグフィックスのアップグレードが容易である為)。
GlusterFS 3.4.2 あるいはそれ以上のバージョンを利用したい方はソースをコンパイルしてインストールするを参照して下さい。
インストールの構成
本書で説明するサーバの構成を示します。
<th class="head">
ディストリビューション
</th>
<th class="head">
用途
</th>
<td>
CentOS 6.4 64bit
</td>
<td>
ノード
</td>
<td>
ubuntu server 12.04 64bit
</td>
<td>
ノード
</td>
<td>
ubuntu server 12.04 64bit
</td>
<td>
ノード
</td>
<td>
ubuntu server 12.04 64bit
</td>
<td>
ノード
</td>
<td>
ubuntu server 12.04 64bit
</td>
<td>
NFS クライアント
</td>
上記のように 5台の Linux マシンを利用します。client には GlusterFS はインストールせず NFS 経由でボリュームに接続します。他の server01、server02、server03、server04 も GlusterFS の Native クライアント(GlusterFS が提供するクライアント)を利用してボリュームに接続します。
また、これらのホストはそれぞれ /etc/hosts に登録してあり、全てホスト名で接続します。 /etc/hosts の構成は例えば以下のようなものです。
127.0.0.1 localhost
192.168.33.10 server01
192.168.33.20 server02
192.168.33.30 server03
192.168.33.40 server04
192.168.33.50 nfs-client
/etc/hosts の設定は vi 等のエディタで自分に変更することができます。
# vi /etc/hosts
Ubuntu に GlusterFS をインストールする
ubuntu server 12.04 64bit に GlusterFS をインストールします。GlusterFS は Ubuntu 向けにパッケージ(deb 形式)を用意している為、それを使ってインストールします。
インストール対象サーバはインストールの構成に記載したノード(Ubuntu である 3台)になります。
最初に GlusterFS 用にファイアウォールのポートを開放します。Ubuntu の場合、デフォルトはファイアウォールが閉じている為、そのままであれば何もする必要はありません。ただ、有効になっている場合は GlusterFS 用のポートを開放しておく必要があります。
GlusterFS は 111(tcp/udp)、24007-24020(tcp)、38465-38490(tcp、NFS 利用時)を利用します。Ubuntu のファイアウォール設定ツールである ufw コマンドを使ってポートを開放してみましょう。
# ufw status
# ufw enable # ファイアウォールを有効にする
# ufw default DENY # デフォルトを拒否に設定
# ufw allow proto tcp from 192.168.33.0/24 to any port 111
# ufw allow proto udp from 192.168.33.0/24 to any port 111
# ufw allow proto tcp from 192.168.33.0/24 to any port 24007:24020
# ufw allow proto tcp from 192.168.33.0/24 to any port 38465:38490
これでファイアウォールの設定は完了です。引き続きインストールを行います。
ubuntu server 12.04 で apt-get install コマンドを使った場合、GlusterFS 3.2.5 がインストールされます。
ただ、本書で紹介している GlusterFS 3.4 系を使いたい場合は apt リポジトリを追加する必要があります。apt リポジトリの追加は以下のコマンドで行います。バージョン 3.2.5 で構わない場合は以下のコマンドを実行する必要はありません。
# apt-get install python-software-properties # add-apt-regository コマンドが無い場合
# add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4
# apt-get update
add-apt-repository コマンド実行後は追加か否かエンターキー入力を求められる為、エンターを入力します。
続いて GlusterFS をインストールします。
# apt-get install glusterfs-common
# apt-get install glusterfs-server
glusterfs-server をインストールすると自動的に glusterfs-server が起動し、GlusterFS のクライアント(glusterfs-client)も一緒にインストールされます。
OS が起動した時に GlusterFS も一緒に起動したい場合は次のコマンドも実行しておきます。
# update-rc.d glusterfs-server defaults
これで Ubuntu への GlusterFS インストールは完了です。
CentOS に GlusterFS をインストールする
続いて CentOS 6系への GlusterFS のインストールです。
最初に GlusterFS 用にファイアウォールのポートを開放します。GlusterFS は 111(tcp/udp)、24007-24020(tcp)、38465-38490(tcp、NFS 利用時)を利用します。
ファイアウォールの開放は system-config-firewall-tui コマンドを使って行います。
# yum install system-config-firewall-tui # コマンドが無い場合のみ
# system-config-firewall-tui
ファイアウォールの設定画面 が表示されます。 タブ と エンターキー でカスタマイズを選択して下さい。
┌──────┤ ファイアーウォールの設定 ├───────┐
│ │
│ ファイアウォールは許可されていないネットワークからの侵 │
│ 入を防御します。 │
│ ファイアウォールを有効にすると全ての受信を遮断します。 │
│ ファイアウォールを無効にすると全ての接続が許可されるた │
│ め推奨できません。 │
│ │
│ ファイアーウォール: * 有効 │
│ │
│ ┌──┐ ┌───────┐ ┌─────┐ │
│ │ OK │ │ カスタマイズ │ │ 取り消し │ │
│ └──┘ └───────┘ └─────┘ │
│ │
└────────────────────────────┘
次に 信頼したサービス 画面が表示されます。 転送 を選択して下さい。
┌──────────┤ 信頼したサービス ├─────────┐
│ │
│ ここでどのサービスが信頼できるかを定義できます。信頼したサ │
│ ービスは全てのホストやネットワークからアクセスできます。 │
│ │
│ Amanda バックアップクライアント ↑ │
│ Bacula ▮ │
│ Bacula クライアント ▒ │
│ DNS ▒ │
│ FTP ▒ │
│ IPsec ↓ │
│ │
│ ┌───┐ ┌────┐ │
│ │ 転送 │ │ 閉じる │ │
│ └───┘ └────┘ │
│ │
└──────────────────────────────┘
続いて その他のポート が表示されます。ここで <追加> を選択して下さい。
┌─────────┤ その他のポート ├─────────┐
│ │
│ 全てのホストやネットワークからアクセスできることが必要 │
│ な追加のポートか、ポートの範囲を追加します。 │
│ │
│ ↑ │
│ ▮ │
│ ▒ │
│ ↓ │
│ <追加> <編集> <削除> │
│ │
│ ┌───┐ ┌───┐ ┌────┐ │
│ │ 転送 │ │ 戻る │ │ 閉じる │ │
│ └───┘ └───┘ └────┘ │
│ │
└────────────────────────────┘
次に ポート番号とプロトコル(tcp か udp)を設定する画面 が表示されます。ここでポート/ポート範囲に 111、プロトコルに tcp を入力し、 OK を選択します。
┌─────┤ Port and Protocol├─────┐
│ │
│ 有効なポート番号またはポート範囲と │
│ プロトコルを入力してください。 │
│ │
│ ポート / ポート範囲: 111________________ │
│ プロトコル: tcp________________ │
│ │
│ ┌──┐ ┌─────┐ │
│ │ OK │ │ 取り消し │ │
│ └──┘ └─────┘ │
│ │
│ │
└─────────────────────┘
これで 111番ポートの tcp が登録されました。
┌────────┤ その他のポート ├──────────┐
│ │
│ 全てのホストやネットワークからアクセスできることが必要 │
│ な追加のポートか、ポートの範囲を追加します。 │
│ │
│ 111:tcp ↑ │
│ ▮ │
│ ▒ │
│ ↓ │
│ <追加> <編集> <削除> │
│ │
│ ┌───┐ ┌───┐ ┌────┐ │
│ │ 転送 │ │ 戻る │ │ 閉じる │ │
│ └───┘ └───┘ └────┘ │
│ │
└────────────────────────────┘
このポート登録の手順を次のポート・プロトコル分追加して下さい。
- ポート:111、プロトコル:udp
- ポート:24007-24020(ハイフンもそのまま入力)、プロトコル:tcp
- ポート:38465-38490(ハイフンもそのまま入力)、プロトコル:tcp
これらを全て登録すると次のような画面になります。同じ内容になっていれば 閉じる を選択します。
┌─────────┤ その他のポート ├─────────┐
│ │
│ 全てのホストやネットワークからアクセスできることが必要 │
│ な追加のポートか、ポートの範囲を追加します。 │
│ │
│ 24007-24020:tcp ↑ │
│ 38465-38485:tcp ▮ │
│ 111:tcp ▒ │
│ 111:udp ↓ │
│ <追加> <編集> <削除> │
│ │
│ ┌───┐ ┌───┐ ┌────┐ │
│ │ 転送 │ │ 戻る │ │ 閉じる │ │
│ └───┘ └───┘ └────┘ │
│ │
└────────────────────────────┘
ファイアウォールの設定画面 に戻りますので OK を選択します。
┌──────┤ ファイアーウォールの設定 ├───────┐
│ │
│ ファイアウォールは許可されていないネットワークからの侵 │
│ 入を防御します。 │
│ ファイアウォールを有効にすると全ての受信を遮断します。 │
│ ファイアウォールを無効にすると全ての接続が許可されるた │
│ め推奨できません。 │
│ │
│ ファイアーウォール: * 有効 │
│ │
│ ┌──┐ ┌───────┐ ┌─────┐ │
│ │ OK │ │ カスタマイズ │ │ 取り消し │ │
│ └──┘ └───────┘ └─────┘ │
│ │
└────────────────────────────┘
警告 も はい を選択します。
┌───────┤ 警告 ├───────┐
│ │
│ はいのボタンをクリックすると、既存 │
│ のファイアーウォール設定を上書きしま │
│ す。本当にこの操作をしたいですか? │
│ │
│ サービスの iptables および ip6tables │
│ が有効になっているか確認するのを忘れ │
│ ないようにしてください。 │
│ │
│ ┌───┐ ┌────┐ │
│ │ はい │ │ いいえ │ │
│ └───┘ └────┘ │
│ │
└───────────────────┘
これでファイアウォールの設定は完了です。
次にインストールですが、CentOS も Ubuntu 同様 GlusterFS の最新バージョンである 3.4.2 はコミュニティーからしか提供されていません(RedHat 公式の RPM リポジトリの方が古い)。
どちらを利用しても構いませんが本書では GlusterFS RPM リポジトリの方を利用しています。最初に GlusterFS リポジトリを追加します。
# cd /etc/yum.repos.d
# wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo">http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo
続いて GlusterFS をインストールします。
# sudo yum install glusterfs
# sudo yum install glusterfs-server
# sudo yum install glusterfs-rdma # InfiniBand を利用する場合のみ
CentOS の場合、 glusterfs-server は自動的に起動しません。自分で次のコマンドで起動する必要があります。さらに、CentOS の場合 glusterd(ボリュームの管理)と glusterfsd(クライアント側)の 2種類のサービスがあって混乱しますが、 glusterd の方を立ち上げます。
# service glusterd start
OS が起動した時に GlusterFS も一緒に起動したい場合は次のコマンドも実行しておきます。
# chkconfig glusterd on
これで CentOS への GlusterFS インストールは完了です。
GlusterFS クライアントのインストール
ノード側のインストールはこれで完了ですが、利用(クライアント)側にも GlusterFS のクライアントモジュールをインストールする必要があります(ノード側は glusterfs-server をインストールした時点でクライアントもインストールされます)。
Ubuntu の場合は次のコマンドでインストールします。
# apt-get install python-software-properties # add-apt-regository コマンドが無い場合
# add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4
# apt-get update
# apt-get install glusterfs-client
CentOS の場合は次のコマンドでインストールします。
# cd /etc/yum.repos.d
# wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo">http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo
# yum install glusterfs-fuse
ノードとクライアントのバージョンは統一して下さい。そうでない場合、例えば「0-glusterfs: XDR decoding error」のような一見すると何がなんだか分からないようなエラーが発生します
NTP を設定する
NTP(Network Time Protocol)はサーバ間の時刻を合わせる為のプロトコルですが GlusterFS(だけでなくどんな分散システムでも)ではサーバ間の時刻同期は非常に重要です。
例えばサーバ間で各ファイルの更新時刻が大きくことなってしまった場合、不整合が起きる可能性があります。
その為、GlusterFS が構成するサーバは全て同じ NTP サーバから時刻を取ってくるように設定しておく必要があります。
とは言っても NTP の設定は CentOS、Ubuntu ともに簡単です。
Ubuntu の場合は次の手順でインストールします。
# apt-get install ntp
# vi /etc/ntp.conf
ここで /etc/nfp.conf 内の server と記載されている行を見つけて下の例のように修正します。
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
#server 0.ubuntu.pool.ntp.org # もともと定義されていた行
#server 1.ubuntu.pool.ntp.org # もともと定義されていた行
#server 2.ubuntu.pool.ntp.org # もともと定義されていた行
#server 3.ubuntu.pool.ntp.org # もともと定義されていた行
server ntp.nict.jp # 3行続けて書く
server ntp.nict.jp
server ntp.nict.jp
# Use Ubuntu's ntp server as a fallback.
#server ntp.ubuntu.com # もともと定義されていた行
この後、ntp を再起動します。
# service ntp restart
CentOS の場合は次の手順でインストールします。
# yum install ntp
# vi /etc/ntp.conf
ここで /etc/nfp.conf 内の server と記載されている行を見つけて下の例のように修正します。
#server 0.centos.pool.ntp.org iburst # もともと定義されていた行
#server 1.centos.pool.ntp.org iburst # もともと定義されていた行
#server 2.centos.pool.ntp.org iburst # もともと定義されていた行
#server 3.centos.pool.ntp.org iburst # もともと定義されていた行
server ntp.nict.jp # 3行続けて書く
server ntp.nict.jp
server ntp.nict.jp
この後、ntpd を再起動します。
# service ntpd restart
Ubuntu も CentOS も共通で NTP が反映されたかを調べるには次のように ntpq -p コマンドを使います。
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp-b2.nict.go. .INIT. 16 u - 64 0 0.000 0.000 0.000
ntp-a2.nict.go. .INIT. 16 u - 64 0 0.000 0.000 0.000
ntp-b3.nict.go. .INIT. 16 u - 64 0 0.000 0.000 0.000
上の例のように *.nict.go が remote に含まれていれば成功です。
公開ディレクトリの所有者も統一する
GlusterFS だけではなく分散ファイルシステム・ネットワークファイルシステム全般に言えることですが、公開するディレクトリの所有者(アカウント名と UID、GID)はどのノードも統一しておく必要があります。
例えば、UID・GID が 2000 の foo というユーザが利用するのであればクライアント・ノード全てにこのアカウントを作成しておく必要があります。
GID・UID を指定してユーザを作成するには例えば以下のようにコマンドを実行します。
# groupadd -g 2000 foogrp
# useradd -g foogrp -u 2000 foo
所有者の統一性がないとパーミッションエラーに悩まされることも多くなりますので注意が必要です。