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 あるいはそれ以上のバージョンを利用したい方はソースをコンパイルしてインストールするを参照して下さい。

インストールの構成

本書で説明するサーバの構成を示します。

ホスト名 ディストリビューション 用途
server01 CentOS 6.4 64bit ノード
server02 ubuntu server 12.04 64bit ノード
server03 ubuntu server 12.04 64bit ノード
server04 ubuntu server 12.04 64bit ノード
nfs-client ubuntu server 12.04 64bit NFS クライアント

上記のように 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 <a class="reference external" href="http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo">http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo</a>

続いて 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 <a class="reference external" href="http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo">http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo</a>
# yum install glusterfs-fuse

Note

ノードとクライアントのバージョンは統一して下さい。そうでない場合、例えば「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

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

No Comments - Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

*