GFS分散ファイルシステムクラスタ(実践編)

13538 ワード

実践的な導入
実践環境
  • は5台のLinux仮想マシンをオープンし、そのうち4台にそれぞれ4つのハードディスクを追加し、各ハードディスクメモリは:20 G
  • である.
  • がオンになると、node 1、node 2、node 3、node 4、client
  • という仮想マシン名が設定されます.
  • サーバアドレスはそれぞれ
  • node1:192.168.116.128
  • node2:192.168.116.130
  • node3:192.168.116.129
  • node4:192.168.116.131
  • client:192.168.116.132


  • すべての仮想マシンでホスト名解析を構成する
    vim /etc/hosts
    ...
    192.168.116.128 node1
    192.168.116.130 node2
    192.168.116.129 node3
    192.168.116.131 node4
    :wq

    node 1ノードサーバでフォーマットディスクスクリプトを編集し、スクリプトを実行
    mkdir /abc                //    
    cd /abc
    vim disk.sh                //    
    mkdir -p /data/sd{b..e}1
    for i in {b..e};do
    echo 'n
    
    w' | fdisk /dev/sd${i}
    mkfs.xfs /dev/sd${i}1
    mount /dev/sd${i}1 /data/sd${i}1
    done
    :wq
    chmod +x disk.sh         //      
    ./disk.sh                //    
    df -hT                  //      
                                    %    
    /dev/sda2      xfs        20G  1.5G   19G    8% /
    devtmpfs       devtmpfs  903M     0  903M    0% /dev
    tmpfs          tmpfs     912M     0  912M    0% /dev/shm
    tmpfs          tmpfs     912M  8.6M  904M    1% /run
    tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
    /dev/sda5      xfs       8.0G   33M  8.0G    1% /home
    /dev/sda1      xfs       8.0G  135M  7.9G    2% /boot
    tmpfs          tmpfs     183M     0  183M    0% /run/user/0
    /dev/sdb1      xfs        20G   33M   20G    1% /data/sdb1
    /dev/sdc1      xfs        20G   33M   20G    1% /data/sdc1
    /dev/sdd1      xfs        20G   33M   20G    1% /data/sdd1
    /dev/sde1      xfs        20G   33M   20G    1% /data/sde1  //    

    スクリプトファイルを2つ外の3つのノードサーバにそれぞれプッシュし、スクリプトファイルをそれぞれ実行します.
    scp disk.sh [email protected]:/opt/
    scp disk.sh [email protected]:/opt/
    scp disk.sh [email protected]:/opt/

    すべてのnodeノードサーバにyumソースを構築し、yumソースを使用してGFSサービスをインストール
  • GFSソフトウェアyumパッケージダウンロード
    mount.cifs //192.168.80.2/shares /abc/   //  yum    
    cd /etc/yum.repos.d/              //  yum    
    mkdir bak                          //     
    mv CentOS-* bak/                    //                 
    vim glfs.repo                       //  yum 
    [glfs]
    name=glfs
    baseurl=file:///abc/gfsrepo           //  yum   
    gpgcheck=0
    enabled=1
    :wq
    yum list                               //    yum  
    yum install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma -y   //  GFS  
    systemctl stop firewalld.service    //     
    setenforce 0                        //  selinux
    systemctl start glusterd.service    //  gfs  
    systemctl enable glusterd.service   //      
    ntpdate ntp1.aliyun.com             //       
    node 1ノードサーバにアクセスし、信頼ノード
    gluster peer probe node2
    gluster peer probe node3
    gluster peer probe node4
    を追加すべてのノードサーバで信頼ノード情報
  • を表示する.
    gluster peer status
    Number of Peers: 3
    
    Hostname: node2
    Uuid: 86e94693-aaaf-4eb9-91d6-edce0489e4f7
    State: Peer in Cluster (Connected)
    
    Hostname: node3
    Uuid: 1ee7a579-4a0e-493e-8709-d8234b8bb858
    State: Peer in Cluster (Connected)
    
    Hostname: node4
    Uuid: b98e1eb0-3639-47be-a767-3a3df125443a
    State: Peer in Cluster (Connected)

    Node 1ノードで分散ボリュームを作成する
    [root@node1 yum.repos.d]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force   //       force     
    [root@node1 yum.repos.d]# gluster volume info dis-vol    //     
    
    Volume Name: dis-vol
    Type: Distribute
    Volume ID: 370023d1-cdc9-4b0d-9c57-663ebad503cd
    Status: Created
    Snapshot Count: 0
    Number of Bricks: 2
    Transport-type: tcp
    Bricks:
    Brick1: node1:/data/sdb1
    Brick2: node2:/data/sdb1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on
    
    [root@node1 yum.repos.d]# gluster volume list     //      
    dis-vol
    [root@node1 yum.repos.d]# gluster volume start dis-vol   //   
    volume start: dis-vol: success
    [root@node1 yum.repos.d]# gluster volume status dis-vol   //     
    tatus of volume: dis-vol
    Gluster process                             TCP Port  RDMA Port  Online  Pid
    ------------------------------------------------------------------------------
    Brick node1:/data/sdb1                      49152     0          Y       12100
    Brick node2:/data/sdb1                      49152     0          Y       11714
    
    Task Status of Volume dis-vol
    ------------------------------------------------------------------------------
    There are no active volume tasks
    [root@node1 yum.repos.d]# gluster volume info dis-vol   //       
    Volume Name: dis-vol
    Type: Distribute        
    Volume ID: 370023d1-cdc9-4b0d-9c57-663ebad503cd
    Status: Started                 //      
    Snapshot Count: 0
    Number of Bricks: 2
    Transport-type: tcp
    Bricks:
    Brick1: node1:/data/sdb1
    Brick2: node2:/data/sdb1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on

    ストライプボリュームの作成
    [root@node1 yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
    volume create: stripe-vol: success: please start the volume to access data
    
    [root@node1 yum.repos.d]# gluster volume start stripe-vol 
    volume start: stripe-vol: success
    
    [root@node1 yum.repos.d]# gluster volume info stripe-vol 
    Volume Name: stripe-vol
    Type: Stripe
    Volume ID: da81b00a-0e98-43d9-b55a-726c758ecef9
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: node1:/data/sdc1
    Brick2: node2:/data/sdc1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on

    複製ボリュームの作成
    [root@node1 yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
    volume create: rep-vol: success: please start the volume to access data
    
    [root@node1 yum.repos.d]# gluster volume start rep-vol 
    volume start: rep-vol: success
    
    [root@node1 yum.repos.d]# gluster volume info rep-vol 
    Volume Name: rep-vol
    Type: Replicate
    Volume ID: fa5bd0c7-5d8d-49da-a25d-9d3fb0592fe3
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: node3:/data/sdb1
    Brick2: node4:/data/sdb1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on

    分散ストライプボリュームの作成(少なくとも4つのノード)
    [root@node1 yum.repos.d]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
    volume create: dis-stripe: success: please start the volume to access data
    
    [root@node1 yum.repos.d]# gluster volume start dis-stripe 
    volume start: dis-stripe: success
    
    [root@node1 yum.repos.d]# gluster volume info dis-stripe 
    
    Volume Name: dis-stripe
    Type: Distributed-Stripe
    Volume ID: 6dc5d7c3-76ed-437d-b5fe-e0b875c0de18
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 2 x 2 = 4
    Transport-type: tcp
    Bricks:
    Brick1: node1:/data/sdd1
    Brick2: node2:/data/sdd1
    Brick3: node3:/data/sdd1
    Brick4: node4:/data/sdd1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on

    分散型レプリケーション・ボリュームの作成(少なくとも4つのノード)
    [root@node1 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
    volume create: dis-rep: success: please start the volume to access data
    
    [root@node1 yum.repos.d]# gluster volume start dis-rep 
    volume start: dis-rep: success
    
    [root@node1 yum.repos.d]# gluster volume info dis-rep 
    
    Volume Name: dis-rep
    Type: Distributed-Replicate
    Volume ID: dd2c8b19-d63b-42aa-be66-ca760335d0a0
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 2 x 2 = 4
    Transport-type: tcp
    Bricks:
    Brick1: node1:/data/sde1
    Brick2: node2:/data/sde1
    Brick3: node3:/data/sde1
    Brick4: node4:/data/sde1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on

    作成したボリュームの表示
    [root@node1 yum.repos.d]# gluster volume list
    dis-rep
    dis-stripe
    dis-vol
    rep-vol
    stripe-vol

    クライアント構成
    systemctl stop firewalld.service    //     
    setenforce 0
    mkdir /abc
    mount.cifs //192.168.100.8/shares /abc/   //  yum     
    cd /etc/yum.repos.d/
    mkdir bak
    mv CentOS-* bak/
    vim glfs.repo                    //  yum 
    [glfs]
    name=glfs
    baseurl=file:///abc/gfsrepo
    gpgcheck=0
    enabled=1
    :wq
    yum list
    yum install glusterfs glusterfs-fuse -y     //  GFS
    mkdir -p /text/dis
    mkdir /text/strip
    mkdir /text/rep
    mkdir /text/dis-str
    mkdir /text/dis-rep       //  5      
    mount.glusterfs node1:dis-vol /text/dis/     //      
    mount.glusterfs node1:stripe-vol /text/strip/     //     
    mount.glusterfs node3:rep-vol /text/rep/          //     
    mount.glusterfs node2:dis-stripe /text/dis-str/    //        
    mount.glusterfs node4:dis-rep /text/dis-rep/        //        
    df -h
                                     %    
    ···
    node1:dis-vol             20G  265M   20G    2% /test/dis
    node1:stripe-vol          20G  265M   20G    2% /test/strip
    node1:rep-vol             10G  233M  9.8G    3% /test/rep
    node1:dis-stripe          40G  330M   40G    1% /test/dis_stripe
    node1:dis-rep             20G  265M   20G    2% /test/dis_rep

    クライアントサーバに40 Mのファイルを5個作成し、ファイルをそれぞれ5個のマウントディレクトリにコピーします.
    dd if=/dev/zero of=/demo1.log bs=1M count=40
    dd if=/dev/zero of=/demo2.log bs=1M count=40
    dd if=/dev/zero of=/demo3.log bs=1M count=40
    dd if=/dev/zero of=/demo4.log bs=1M count=40
    dd if=/dev/zero of=/demo5.log bs=1M count=40
    cp /demo* /test/dis
    cp /demo* /test/strip
    cp /demo* /test/rep
    cp /demo* /test/dis_stripe
    cp /demo* /test/dis_rep

    Node 1、node 2での分散ボリュームの保存方法の表示
    [root@node1 ~]# ll -h /data/sdb1/
        160M
    -rw-r--r--. 2 root root 40M 12  18 16:22 demo1.log   //         
    -rw-r--r--. 2 root root 40M 12  18 16:22 demo2.log   
    -rw-r--r--. 2 root root 40M 12  18 16:22 demo3.log
    -rw-r--r--. 2 root root 40M 12  18 16:22 demo4.log
    
    [root@node2 ~]# ll -h /data/sdb1/
        40M
    -rw-r--r--. 2 root root 40M 12  18 16:22 demo5.log  //  hash                

    Node 1、node 2でストライプボリュームの保存方法を表示する
    [root@node1 ~]# ll -h /data/sdc1/
        100M
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo4.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo5.log
    
    [root@node2 ~]# ll -h /data/sdc1/
        100M
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo4.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo5.log
    //                 

    node 3、node 4でのレプリケーションボリュームの表示
    [root@node3 ~]# ll -h /data/sdb1
        200M
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo4.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo5.log
    
    [root@node4 ~]# ll -h /data/sdb1/
        200M
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo4.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo5.log
    //            ,    

    すべてのノード・サーバで分散ストライプ・ボリュームの格納方法を個別に表示
    [root@node1 ~]# ll -h /data/sdd1/
        80M
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo4.log
    
    [root@node2 ~]# ll -h /data/sdd1/
        80M
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo4.log
    
    [root@node3 ~]# ll -h /data/sdd1/
        20M
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo5.log
    
    [root@node4 ~]# ll -h /data/sdd1/
        20M
    -rw-r--r--. 2 root root 20M 12  18 16:23 demo5.log
    //                        ,                    

    分散型レプリケーション・ボリュームの保存方法をすべてのノード・サーバで個別に表示
    [root@node1 ~]# ll -h /data/sde1/
        160M
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo4.log
    
    [root@node2 ~]# ll -h /data/sde1/
        160M
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo1.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo2.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo3.log
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo4.log
    
    [root@node3 ~]# ll -h /data/sde1/
        40M
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo5.log
    
    [root@node4 ~]# ll -h /data/sde1/
        40M
    -rw-r--r--. 2 root root 40M 12  18 16:23 demo5.log
                   ,            

    node 1でボリュームを削除
    [root@node1 ~]# gluster volume list   //      
    die-replica
    dis-stripe
    dis-vol
    rep-vol
    stripe-vol
    [root@node1 ~]# gluster volume stop rep-vol     //       
    topping volume will make its data inaccessible. Do you want to continue? (y/n) y     //  y    
    volume stop: rep-vol: success
    [root@node1 ~]# gluster volume delete rep-vol    //       
    Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
    volume delete: rep-vol: success     //    
    [root@node1 ~]# gluster volume list    //     ,     
    die-replica
    dis-stripe
    dis-vol
    stripe-vol

    アクセス制御の設定
    gluster volume set dis-vol auth.reject 192.168.116.130     //        、  
    gluster volume set dis-vol auth.allow 192.168.116.130       //        、