#author("2018-01-28T16:53:05+09:00","default:nowsky","nowsky") *GlusterFS [#k20eee14] RedHatにより開発されている分散ファイルシステムの一種。 ファイルシステムではあるがコアシステムはアプリケーション層(ユーザ空間)で動作する。 ファイルシステムのマウントもFUSE・NFSなど様々な物が用意されている為、 用途・環境に合わせて組み替えて使用する事が出来る。 また、RAID0/1/5相当の処理が簡単に実装できる点や、 大容量ファイルの処理が早い為、10G-NICを積んでHCI環境で利用する場合がある。 ~ *参考サイト [#w627f265] -[[GlusterFS:+https://www.gluster.org/]] -[[CentOS7でGlusterFSの環境構築:+https://qiita.com/Yuki-Inamoto/items/2ea1efe862aeba34019c]] ~ * 構築環境 [#h28022db] 今回は下記条件でGlusterFSを構築した -OS:openSUSE Leap 42.3 -Node1:10.0.0.1 -Node2:10.0.0.2 -Node3:10.0.0.3 -Brick:1Brick -BrickPoint:/brick -GlusterFSVolume:/gluster -Type:Replicate ~ * インストール [#b3191049] -&size(16){&font(b){1. リポジトリ追加};}; openSUSEでGlusterFSを利用する場合、ファイルシステムリポジトリを追加する必要がある。 その為、最初にリポジトリ追加を行った後、GlusterFSのコアシステムをインストールする。 また、GlusterFSネイティブマウントを行う為に、FUSEもインストールしておく。 # zypper addrepo https://download.opensuse.org/repositories/filesystems/openSUSE_Leap_42.3/filesystems.repo # zypper refresh # zypper install glusterfs fuse -&size(16){&font(b){2. サービス起動};}; ファイルシステムではあるが、 コアシステムはサービスの一種なのでデーモンを起動する。 # systemctl unmask glusterd # systemctl enable glusterd # systemctl start glusterd # ps -ef | grep glusterd -&size(16){&font(b){3. ログローテート};}; デフォルトでログローテート設定が作成されないので手動作成する。 ローテートオプションについては環境に合わせて設定する。 # vi /etc/logrotate.d/glusterfs --- /var/log/glusterfs/*.log /var/log/glusterfs/bricks/*.log { weekly compress rotate 4 missingok ifempty create 600 root root sharedscripts postrotate systemctl restart glusterd.service > /dev/null endscript } -&size(16){&font(b){4. Brickの準備};}; GlusterFSの一時ファイルを格納するBrick領域を準備する。 Brick領域のファイルシステムは、&color(#ff0000){[xfs]または[ext4]};しか利用出来ないが、 オフィシャルでは&font(b){xfsを推奨};しているので、今回はxfsで準備する。 パーティションはrootパーティション[/]以外、 物理HDDもrootパーティションを格納しているHDD以外にしておく方が良い # fdisk /dev/sdb # mkfs.xfs -i size=512 /dev/sdb1 # mkdir /brick # mount -p /dev/sdb1 /brick # blkid /dev/sdb1 # echo "UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /brick xfs defaults 1 2" >> /etc/fstab ~ * ピア設定 [#j1463b89] -&size(16){&font(b){1. iptables};}; GlusterFSはTCP/IPで通信を行う為、iptablesもポートを開放する必要がある。 ただし、利用するポート番号は多岐にわたる為、 セキュリティ上問題無ければ&color(#ff0000){ホスト単位};で通信許可する方が良い。 |Protocol|PortNumber|Description| |TCP|111 |portmap/rpcbind| |UDP|111 |portmap/rpcbind| |TCP|2049 |NFS| |UDP|2049 |NFS| |TCP|24007 |GlusterFS Daemon| |TCP|24008 |GlusterFS Management| |TCP|24009~brick|GlusterFS versions earlier than 3.4| |TCP|38465~38467|Required for GlusterFS NFS service| |TCP|49152~brick|GlusterFS versions 3.4 and later| その中でも、BrickPort(上記の~brick)は&color(#ff0000){ホストが格納するBrick数に比例};して範囲許可する必要がある。 構築環境によって変化する為、基本は8ポート分くらい多めに見積もってポート開放する。 どうしても決め打ちする時は、下記に従って設定を行う |PC/Count|GlusterFS v3.3|GlusterFS v3.4| |1PC/1Brick|TCP:24009|TCP:49152| |1PC/2Brick|TCP:24009~24010|TCP:49152~49153| |1PC/3Brick|TCP:24009~24011|TCP:49152~49154| |2PC/1Brick|TCP:24009|TCP:49152| |2PC/2Brick|TCP:24009~24010|TCP:49152~49153| |2PC/3Brick|TCP:24009~24011|TCP:49152~49154| 設定する時は下記の様にiptablesで設定を行う。 範囲指定する箇所については、確保したBrickPortに従って変更する。 今回は設定例として、8Brick(8ポート)分を確保してみた。 # iptables -I INPUT -s ${srcIP} -p tcp --dport 111 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p udp --dport 111 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p tcp --dport 2049 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p udp --dport 2049 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p tcp --dport 24007:24008 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p tcp --dport 24009:24017 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p tcp --dport 38465:38467 -j ACCEPT # iptables -I INPUT -s ${srcIP} -p tcp --dport 49152:49160 -j ACCEPT -&size(16){&font(b){2. GlusterPeer設定};}; GlusterFSのストレージプールを作成する為、クラスタに参加するノードを設定する。 ピア設定は、クラスタ内のノード1台で設定すれば全台に自動反映される。 下記は『Node1:10.0.0.1』で実行する場合のピア接続コマンドとなる。 # gluster peer status # gluster peer probe 10.0.0.2 # gluster peer probe 10.0.0.1 # gluster pool list ~ * ファイルシステム [#t20d3b2a] -&size(16){&font(b){1. ボリューム作成};}; 今回は3台でミラーリング(Replica3)を構築する。 本来、Brickはマウントポイントにサブディレクトリを作成する必要があるが、 今回は1Volume/1Brickのみ構築するので[force]オプションを付けて強制作成する。 ・ボリューム作成 # gluster vol create gluster replica 3 10.0.0.1:/brick 10.0.0.2:/brick 10.0.0.3:/brick force --- volume create: gluster: success: please start the volume to access data ・ボリューム開始 # gluster vol start gluster --- volume start: gluster: success ・ステータス確認 # gluster vol status --- Status of volume: gluster -&size(16){&font(b){2. GlusterPeer設定};}; GlusterFSは様々なマウント方法が存在するが、マウント先ノードが停止していた際、 自動的に他ノードを再マウントするフォールバック機能がある。 NFSマウント/FUSEマウント両方で利用する事が出来るが、 NFSでマウントするとローカルマウントを経由してからフォールバックする為、アクセス速度が遅くなる。 今回はマウント先を直接変更出来る、FUSEマウントを利用してネイティブフォールバックを行う。 ・ノードA # mkdir /gluster # mount -t glusterfs 10.0.0.1:/gluster /gluster # mount -t glusterfs 10.0.0.1:/gluster /gluster -o backup-volfile-servers=10.0.0.2:10.0.0.3 # echo "10.0.0.1:/gluster /gluster glusterfs defaults,_netdev,backup-volfile-servers=10.0.0.2:10.0.0.3 0 0" >> /etc/fstab ・ノードB # mkdir /gluster # mount -t glusterfs 10.0.0.2:/gluster /gluster # mount -t glusterfs 10.0.0.2:/gluster /gluster -o backup-volfile-servers=10.0.0.3:10.0.0.1 # echo "10.0.0.2:/gluster /gluster glusterfs defaults,_netdev,backup-volfile-servers=10.0.0.3:10.0.0.1 0 0" >> /etc/fstab ・ノードC # mkdir /gluster # mount -t glusterfs 10.0.0.3:/gluster /gluster # mount -t glusterfs 10.0.0.3:/gluster /gluster -o backup-volfile-servers=10.0.0.1:10.0.0.2 # echo "10.0.0.3:/gluster /gluster glusterfs defaults,_netdev,backup-volfile-servers=10.0.0.1:10.0.0.2 0 0" >> /etc/fstab ~ * チューニング [#g0eb423b] -&size(16){&font(b){1. パフォーマンス設定};}; GlusterFSの動作を高速化させる為、パフォーマンスチューニングを行う。 さらに突き詰めたチューニングを行う場合、kernelチューニングも必要になるが、 下手にkernelチューニングをすると他への影響が出る場合があるので、今回はGlusterFSのみ設定する。 -[[Managing GlusterFS Volumes:+http://docs.gluster.org/en/latest/Administrator%20Guide/Managing%20Volumes/]] -[[SCSK GlusterFS紹介:+https://www.scsk.jp/lib/product/oss/pdf/oss_12.pdf]] # gluster vol set all cluster.server-quorum-ratio 60% # gluster vol set gluster cluster.quorum-type auto # gluster vol set gluster cluster.server-quorum-type server # gluster vol set gluster network.ping-timeout 3 # gluster vol set gluster nfs.disable on # gluster vol set gluster nfs.disable true # gluster vol set gluster performance.cache-size 256MB # gluster vol set gluster performance.cache-max-file-size 128MB # gluster vol set gluster performance.cache-min-file-size 1KB -&size(16){&font(b){2. パフォーマンス設定};}; GlusterFSでNFSを停止した時、バージョンによっては下記の様なエラーが大量に出力される場合がある。 -[[gfs-brick has disconnected from glusterd:+http://www.petasan.org/forums/?view=thread&id=126]] 0-management: readv on /var/run/gluster/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.socket failed (Invalid argument) この場合、下記コマンドを実行する事でログ出力を抑制する事が出来る。 今回の設定例ではGlusterFSのNFSを停止している為、下記のエラーログ抑制を行う事を推奨。 # gluster volume set all nfs.disable true # systemctl stop glusterd # rm /var/log/glusterfs/etc-glusterfs-glusterd.vol.log # systemctl start glusterd