CentOS
GlusterFS

CentOS7でGlusterFSの環境構築

More than 1 year has 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





参考