Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

CentOS7でGlusterFSの環境構築

More than 3 years have passed since last update.

0.事前情報

用語

  • Brick

    • GlusterFSで使用するサーバ上のディレクトリ。
    • GlusterFSにはストレージとして用いられる。
    • GlusterFSで構築した、分散FSに保存されたファイルは物理的にはこのブリック内に保存される。
  • Volume

    • 上記のBrickを論理的に一つにまとめて1ストレージとして扱うことができるもの。
    • Volumeには3種類ある
      • Distributed : 保存したファイルが、Volume内のBrickのいずれか一つに格納される。
      • Replicated : 保存したファイルが、Volume内の全てのBrickに格納される。
      • Striped : 保存したファイルが、分割され、指定したストライプ数に分散され格納される。
    • 以下のサイトの図がわかりやすい

導入環境

  • CentOS 7.1.1503 (64bit)
  • Gluster-Server : ver 3.7.4-2.el7
  • HDDを2枚持つ仮想マシン
    • sdbが追加したディスク
  • gluster-01, gluster-02, gluster-03の3台で構成
  • gluster-01のipアドレス: 10.255.10.11
  • gluster-02のipアドレス: 10.255.10.12
  • gluster-03のipアドレス: 10.255.10.13

注意

  • 基本的にコマンドはルートで行う
  • 断り書きがない限りはすべてのノードで同じ作業を行う

1.必要なもののインストール

2016/08/03追記;epelを入れなくてもGlusterFSがインストールできるようになりました。↓の2コマンドを打ち込むだけでOKです。

# yum install centos-release-gluster
# yum install glusterfs-server
  • EPELのinstall

    # yum install epel-release -y
    
    • もしくは

      # wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
      # rpm -ivh epel-release-7-5.noarch.rpm
      
  • Gluster serverのinsatall

    # cd /etc/yum.repos.d/
    # wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo
    # yum install glusterfs-server -y
    # systemctl start glusterd
    # systemctl status glusterd    (起動しているか確認)
        glusterd.service - GlusterFS, a clustered file-system server
           Loaded: loaded (/usr/lib/systemd/system/glusterd.service; disabled)
           Active: active (running) since 月 2015-09-28 04:50:01 JST; 11s ago
          Process: 10023 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid (code=exited, status=0/SUCCESS)
         Main PID: 10024 (glusterd)
           CGroup: /system.slice/glusterd.service
                   mq10024 /usr/sbin/glusterd -p /var/run/glusterd.pid
    
         9月 28 04:50:01 gluster-02 systemd[1]: Started GlusterFS, a clustered file-....
        Hint: Some lines were ellipsized, use -l to show in full.
    
    # systemctl enable glusterd
    

2016/04/22追記: glusterfs-epel.repoのURLが変更されていたので修正しました。

2015/11/16追記: 11/10の更新でLATESTの中に、CentOSディレクトリが現在、消えているので注意してください。
最新版ではないですが、glusterfs-epel.repoをwgetで持ってくる場所を以下のコマンドに置き換えることで対応できます。

sudo wget http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.5/CentOS/glusterfs-epel.repo

2.各ノードの設定

  • firewalldを止める

    # systemctl stop firewalld
    
    • firewallを止めるのが嫌な場合は以下のポートを解放するとよいらしい(公式より)
      • 24007 (TCP): Gluster Daemon
      • 24008 (TCP): TCP for Infiniband management (optional unless you are using IB)
      • 24009 - 240xx (TCP): brick port(GlusterFS 3.3 & below)
      • 49152 - 491xx (TCP): brick port(GlusterFS 3.4 & later)
      • 38465 - 38467 (TCP): Gluster NFS Server
      • 111 (TCP and UDP): portmapper
      • 2049 (TCP): portmapper(GlusterFS 3.4 & later)
    • brick portはブリックごとに必要。1 volume, 2 brickならばポート番号は49152と49153を使用する。
    • コマンド例

      # firewall-cmd --add-port=24007-24099/tcp --zone=public --permanent
      # firewall-cmd --reload
      
  • hostsファイルの編集(お好みで)

    # vi /etc/hosts
    
    • 10.255.10.12 gluster-02  こんな感じで追加
    • 同様に他のノードに関しても追加
    • hostsの設定をせずに、IPアドレスでもできる

3.ストレージプールの作成

  • gluster peerをすることでノード間を認識させ、ストレージプールを作成する
  • gluster-01のみで行う

    [root@gluster-01 ~]# gluster peer probe gluster-02
    [root@gluster-01 ~]# gluster peer probe gluster-03
    
    • この時 peer probe: failed: Probe returned with unknown errno 107 というエラーが出ているときはポートが空いていない可能性大
  • peerの確認

            [root@gluster-01 ~]# gluster peer status
            Number of Peers: 2
    
            Hostname: gluster-02
            Uuid: 91ef7964-2451-4ef1-aeb2-91e4e44e6186
            State: Peer in Cluster (Connected)
    
            Hostname: gluster-03
            Uuid: e8821d6c-8a10-4494-af79-8aab7a518c30
            State: Peer in Cluster (Connected)
    

4.GlusterFS用の領域の用意

  • ルートパーティションでgluster volumeを作成しようとすると警告が出る
  • どうしてもルートパーティションに作成したい場合は force を 最後につけることで作成できる
  • 今回の構成では、2つディスクを用意しているため、ルートパーティションがあるディスクとは別のディスク(sdb)にGlusterFS用の領域を作成する

    # fdisk /dev/sdb
    
    • fdidkで打つもの(nでパーティションを新規作成,全てdefaultでいいのでenter4回, wで書き込み)
  • ファイルシステム作成(xfsかext4じゃないとダメ)

    # mkfs.xfs -i size=512 /dev/sdb1
    
  • 作成したパーティションのマウント

    # mkdir -p /export/sdb1 
    # mount /dev/sdb1 /export/sdb1
    # mkdir -p /export/sdb1/brick
    # df
        ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
        /dev/mapper/centos-root    14571520 1172812 13398708    9% /
        devtmpfs                     936396       0   936396    0% /dev
        tmpfs                        942792       0   942792    0% /dev/shm
        tmpfs                        942792    8608   934184    1% /run
        tmpfs                        942792       0   942792    0% /sys/fs/cgroup
        /dev/sda1                    508588  130496   378092   26% /boot
        /dev/sdb1                  16765952   32944 16733008    1% /export/sdb1
    
    # echo "/dev/sdb1 /export/sdb1 xfs defaults 0 0"  >> /etc/fstab
    # mount -a
    

5.Gluster Volume(Replication)の作成・起動

Gluster Volumeの作成

以下の作業はgluster-01のみで行う

    # gluster vol info
            No volumes present
    # gluster volume create gv0 replica 3 gluster-01:/export/sdb1/brick/gv0/ gluster-02:/export/sdb1/brick/gv0/ gluster-03:/export/sdb1/brick/gv0
        volume create: gv0: success: please start the volume to access data
    # gluster vol info
        Volume Name: gv0
        Type: Replicate
        Volume ID: b852413c-f62b-45e0-9daa-c4528cf454b5
        Status: Created
        Number of Bricks: 1 x 3 = 3
        Transport-type: tcp
        Bricks:
        Brick1: gluster-01:/export/sdb1/brick/gv0
        Brick2: gluster-02:/export/sdb1/brick/gv0
        Brick3: gluster-03:/export/sdb1/brick/gv0
        Options Reconfigured:
        performance.readdir-ahead: on
  • gv0という名前でgluster-01,02,03ノードに、レプリケーションモードで使用するボリュームを作成した

Gluster Volumeの起動

    # gluster volume start gv0
        volume start: gv0: success
    # gluster vol status
            Status of volume: gv0
            Gluster process                             TCP Port  RDMA Port  Online  Pid
            ------------------------------------------------------------------------------
            Brick gluster-01:/export/sdb1/brick/gv0      49152     0          Y       9799
            Brick gluster-02:/export/sdb1/brick/gv0      49152     0          Y       30121
            Brick gluster-03:/export/sdb1/brick/gv0      49152     0          Y       29985
            NFS Server on localhost                     N/A       N/A        N       N/A
            Self-heal Daemon on localhost               N/A       N/A        Y       9827
            NFS Server on gluster-03                     N/A       N/A        N       N/A
            Self-heal Daemon on gluster-03               N/A       N/A        Y       30012
            NFS Server on gluster-02                     N/A       N/A        N       N/A
            Self-heal Daemon on gluster-02               N/A       N/A        Y       30148

            Task Status of Volume gv0
            ------------------------------------------------------------------------------
            There are no active volume tasks

参考

  • 分散ボリュームを作成したい場合

    # gluster volume create gv1 gluster-01:/export/sdb1/brick/gv1/ gluster-02:/export/sdb1/brick/gv1/
    # gluster volume start gv1
    
  • ストライピングボリュームを作成したい場合

    # gluster volume create gv2 stripe 2 gluster-01:/export/sdb1/brick/gv2/ gluster-02:/export/sdb1/brick/gv2/
    # gluster volume start g2
    
  • 追加情報

    • 同一ノード上で複数ブリック使用したい場合
      • 分散、ストライピング:使用可能
      • レプリケート: 使用可能、しかし非推奨であるため、force オプションをつける必要がある

6.glusterボリュームのマウント

glusterfsでマウント(gluster-02から)

    # mount -t glusterfs gluster-01:/gv0 /mnt
    # df
    ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
    /dev/mapper/centos-root    14571520 1180396 13391124    9% /
    devtmpfs                     936396       0   936396    0% /dev
    tmpfs                        942792       0   942792    0% /dev/shm
    tmpfs                        942792    8616   934176    1% /run
    tmpfs                        942792       0   942792    0% /sys/fs/cgroup
    /dev/sda1                    508588  130496   378092   26% /boot
    /dev/sdb1                  16765952   33104 16732848    1% /export/sdb1
    gluster-01:/gv0             16765952   33152 16732800    1% /mnt
  • yum install でgluster-clientだけをインストールしたノードからでもマウントできる。

nfsマウント

nfsクライアントとしてgluster-clientノードを用意する

  • nfs server側で

    # gluster vol status
            Status of volume: gv0
            Gluster process                             TCP Port  RDMA Port  Online  Pid
            ------------------------------------------------------------------------------
            Brick gluster-01:/export/sdb1/brick/gv0      49152     0          Y       9799
            Brick gluster-02:/export/sdb1/brick/gv0      49152     0          Y       30121
            Brick gluster-03:/export/sdb1/brick/gv0      49152     0          Y       29985
            NFS Server on localhost                     N/A       N/A        N       N/A
            Self-heal Daemon on localhost               N/A       N/A        Y       9827
            NFS Server on gluster-03                     N/A       N/A        N       N/A
            Self-heal Daemon on gluster-03               N/A       N/A        Y       30012
            NFS Server on gluster-02                     N/A       N/A        N       N/A
            Self-heal Daemon on gluster-02               N/A       N/A        Y       30148
    
            Task Status of Volume gv0
            ------------------------------------------------------------------------------
            There are no active volume tasks
    
  • glusterfsのnfsサーバは動いてない

    • GlusterFSでは自前のnfsサーバを使うためサービスとして動いているnfsサーバがあれば止める
  • すべてのノードで必要なパッケージ

    # yum install nfs-utils
    
  • rpcbindが動いていなかったらstartする

    # systemctl start rpcbind.service
    # systemctl status rpcbind.service
            rpcbind.service - RPC bind service
               Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; static)
               Active: active (running) since 土 2015-09-26 04:28:37 JST; 5s ago
              Process: 9872 ExecStart=/sbin/rpcbind -w ${RPCBIND_ARGS} (code=exited, status=0/SUCCESS)
             Main PID: 9873 (rpcbind)
               CGroup: /system.slice/rpcbind.service
                       mq9873 /sbin/rpcbind -w
    
    # systemctl enable rpcbind.service
    
  • glusterdのリスタート

    # systemctl restart glusterd.service
    
  • nfs Serveが起動しているか確認

    # gluster vol status
    Status of volume: gv0
    Gluster process                             TCP Port  RDMA Port  Online  Pid
    ------------------------------------------------------------------------------
    Brick gluster-01:/export/sdb1/brick/gv0      49152     0          Y       9799
    Brick gluster-02:/export/sdb1/brick/gv0      49152     0          Y       30121
    Brick gluster-03:/export/sdb1/brick/gv0      49152     0          Y       29985
    NFS Server on localhost                     2049      0          Y       9912
    Self-heal Daemon on localhost               N/A       N/A        Y       9920
    NFS Server on gluster-02                     2049      0          Y       30294
    Self-heal Daemon on gluster-02               N/A       N/A        Y       30302
    NFS Server on gluster-03                     2049      0          Y       30085
    Self-heal Daemon on gluster-03               N/A       N/A        Y       30093
    
    Task Status of Volume gv0
    ------------------------------------------------------------------------------
    There are no active volume tasks
    
  • nfs client側で

    # mount -t nfs -o mountproto=tcp,mountvers=3 gluster-01:/gv0 /mnt/
    
    • うまくいかなかったらrpcbindが起動しているか確かめる

7.ノードの追加

  • 現在Glusterでクラスタを組んでいるノードから、gluster peerしてあげる

8.ボリュームの拡張

  • ボリュームを拡張する時、レプリケーションで利用している場合と分散で利用している場合で若干異なる
  • 利用するブリックを増やすことで拡張する

  • レプリケーションしているときは、現在のレプリカ数の倍数のブリックを同時に追加する必要がある

    # gluster vol add-brick gv0 gluster04:/export/sdb1/brick/gv0 gluster05:/export/sdb1/brick/gv0 gluster06:/export/sdb1/brick/gv0
    
  • 分散は特になし

    • ちなみに追加後データの再配置を行うことができる

      # gluster vol add-brick gv1 gluster04:/export/sdb1/brick/gv1
      # gluster vol rebalance gv1 start
      

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away