3.1. GlusterFS をインストールする – GlusterFS Community ではじめる分散ファイルシステム

.

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&#39;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

所有者の統一性がないとパーミッションエラーに悩まされることも多くなりますので注意が必要です。