GlusterFS交換障害Brick
1はじめに
筆者の社内にはGlusterFS分散型ストレージがあり、最近データパーティションのファイルシステムにエラーが発生し、クラスタにBrickがあるので置き換える必要があります.
妥当な操作の原則に基づいて、筆者はまずテスト環境を構築し、テストに合格してから実際の環境で実行することができる.以下は筆者のテストドキュメントであり、必要なブロガーに参照し、また筆者は本稿を発表する際にすでに生産環境で検証に合格した.
サーバの障害ログ(ファイルシステムを修復する方法のあるブロガーへようこそ):
次の情報が表示されます.
2実践部分
2.1環境情報
2.1.1ホスト情報
GlusterH0[1-5]:
hostname=GlusterH0[1-5].cmdschool.org
ipaddress=10.168.0.19[1-5]
2.1.2名称解析構成
In GlusterH0[1-6]
2.1.3 YUMソースの構成
In GlusterH0[1-6]
2.1.4ファイアウォールを閉じる
In GlusterH0[1-6]
2.2データストアルートの構成
In GlusterH0[1-5]
2.2.1新規パーティション
詳細ウィザードは次のとおりです.
2.2.2発見と検証
2.2.3ファイルシステムの作成
2.2.4マウントの構成
2.3 glusterfsサービス側の構成
In GlusterH0[1-5] :
2.3.1 yumソースのインストール
2.3.2サービスの開始
2.4信頼プールの構成
In GlusterH01:
成功情報を表示:
信頼プールのステータスの確認
次のように表示されます.
本と他のサーバの接続ステータスを確認
次のように表示されます.
注:以上から、本機は他のbrickごとに2つのTCP接続があり、全部で6つあることがわかります.
2.5 GlusterFSボリュームの構成
2.5.1保管場所の構成
In GlusterH0[1-4] :
2.5.2 Glusterボリュームの作成
In GlusterH01 :
成功情報を表示:
2.5.3 GlusterFSボリュームの起動
In GlusterH01 :
成功情報を表示:
2.5.4検証ボリュームの情報
In GlusterH01 :
次のように表示されます.
2.6 Glusterクライアントの構成
In GlusterH01 :
2.6.1クライアント関連パッケージのインストール
2.6.2手動でボリュームgv 0をローカルにマウントする
2.7 Glusterボリュームのテスト
2.7.1書き込みテスト
In GlusterH01 :
2.7.2書き込み確認
In GlusterH01 :
In GlusterH0[1-4] :
2.8シミュレーションbrick障害
2.8.1現在のストレージステータスの表示
In GlusterH01 :
次のように表示されます.
注意:オンライン項目が全て「Y」であることに注意
2.8.2製造故障
In GlusterH01 :
コメントを下のように削除します.
サーバーの再起動
2.8.3現在のストレージステータスの表示
In GlusterH01 :
次のように表示されます.
注意:GH 01のOnline項目が「N」であることに気づく
注意:物理的なハードディスク(HDD)に問題がないか、アレイ内のハードディスク(HDD)を交換済みとして、ファイルシステムに障害が発生.
2.9リカバリ障害brickメソッド
2.9.1故障brickのプロセスを終了する
In GlusterH01 :
次のように表示されます.
注意:ステータスOnline項目が「N」のGH 01にPID番号がある場合(N/Aは表示されない)、次のコマンドを使用して落下経路を終了してから、次のステップに進みます.
2.9.2新しいデータディレクトリの作成
In GlusterH01:
fstabの編集
コメントを削除:
ファイルシステムの再マウント:
新しいデータストアフォルダを追加します(前のディレクトリと同じではありません)
2.9.3障害ノードのバックアップノード(gh 02)ディレクトリの拡張プロパティを問い合わせる
In GlusterH01:
次のように表示されます.
2.9.4ボリュームをマウントし、自己治癒をトリガー
In GlusterH01:
1)mntディレクトリにボリュームを掛ける
2)ボリュームに存在しないディレクトリを新規作成して削除
3)拡張属性の設定による自己治癒
2.9.5現在のノードがxattrsを保留しているかどうかを確認する
In GlusterH01:
1)障害ノードのバックアップノード(gh 02)ディレクトリの拡張属性を再問合せする
次のように検出されました.
注意:4行目は、xattrsがソースをgh 02:/data/brick 1/gv 0とマークしていることを示しています.
2)ボリュームのステータスが表示されているかどうかを確認します.
In GlusterH01:
次のように表示されます.
注意:ステータスプロンプト転送エンドポイントが接続されていません(2行目)
2.9.6強制コミットによる操作の完了
In GlusterH01:
正常に完了したことを示すプロンプトが表示されます.
注意:データを別のサーバにリカバリすることもできます.詳細なコマンドは次のとおりです(オプション).
2.9.7ストレージのオンライン状態の確認
In GlusterH01:
次のように表示されます.
また、別のサーバに交換した場合は、次のようになります.
ドキュメント参照
===================================
公式交換操作:
http://gluster.readthedocs.io/en/latest/Administrator%20Guide/Managing%20Volumes/#shrinking-volumes
筆者の社内にはGlusterFS分散型ストレージがあり、最近データパーティションのファイルシステムにエラーが発生し、クラスタにBrickがあるので置き換える必要があります.
妥当な操作の原則に基づいて、筆者はまずテスト環境を構築し、テストに合格してから実際の環境で実行することができる.以下は筆者のテストドキュメントであり、必要なブロガーに参照し、また筆者は本稿を発表する際にすでに生産環境で検証に合格した.
サーバの障害ログ(ファイルシステムを修復する方法のあるブロガーへようこそ):
cat /var/log/messages
次の情報が表示されます.
Mar 21 14:58:04 GH01 kernel: XFS (dm-5): xfs_log_force: error 5 returned.
2実践部分
2.1環境情報
2.1.1ホスト情報
GlusterH0[1-5]:
hostname=GlusterH0[1-5].cmdschool.org
ipaddress=10.168.0.19[1-5]
2.1.2名称解析構成
In GlusterH0[1-6]
echo "10.168.0.191 GlusterH01.cmdschool.org GH01" >> /etc/hosts
echo "10.168.0.192 GlusterH02.cmdschool.org GH02" >> /etc/hosts
echo "10.168.0.193 GlusterH03.cmdschool.org GH03" >> /etc/hosts
echo "10.168.0.194 GlusterH04.cmdschool.org GH04" >> /etc/hosts
echo "10.168.0.195 GlusterH05.cmdschool.org GH05" >> /etc/hosts
2.1.3 YUMソースの構成
In GlusterH0[1-6]
yum install -y centos-release-gluster38
2.1.4ファイアウォールを閉じる
In GlusterH0[1-6]
/etc/init.d/iptables stop
chkconfig iptables off
2.2データストアルートの構成
In GlusterH0[1-5]
2.2.1新規パーティション
fdisk /dev/sdb
詳細ウィザードは次のとおりです.
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x089fd1ab.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-26108, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108):
Using default value 26108
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
2.2.2発見と検証
partx /dev/sdb
ls /dev/sdb*
2.2.3ファイルシステムの作成
mkfs.xfs -i size=512 /dev/sdb1
2.2.4マウントの構成
mkdir -p /data
echo '/dev/sdb1 /data xfs defaults 1 2' >> /etc/fstab
mount -a && mount
2.3 glusterfsサービス側の構成
In GlusterH0[1-5] :
2.3.1 yumソースのインストール
yum install -y glusterfs-server
2.3.2サービスの開始
/etc/init.d/glusterd start
chkconfig glusterd on
2.4信頼プールの構成
In GlusterH01:
gluster peer probe GH02
gluster peer probe GH03
gluster peer probe GH04
成功情報を表示:
peer probe: success.
信頼プールのステータスの確認
gluster peer status
次のように表示されます.
Number of Peers: 3
Hostname: GH02
Uuid: e935be20-6157-4bc6-804b-a6901850211f
State: Accepted peer request (Connected)
Hostname: GH03
Uuid: d91cf978-71d7-4734-b395-fae7ccf4c040
State: Accepted peer request (Connected)
Hostname: GH04
Uuid: e05ea224-72f7-48c5-a73a-eeeb253d171d
State: Accepted peer request (Connected)
本と他のサーバの接続ステータスを確認
netstat -antp | grep glusterd
次のように表示されます.
tcp 0 0 0.0.0.0:24007 0.0.0.0:* LISTEN 1213/glusterd
tcp 0 0 10.168.0.191:24007 10.168.0.192:49150 ESTABLISHED 1213/glusterd
tcp 0 0 10.168.0.191:49149 10.168.0.193:24007 ESTABLISHED 1213/glusterd
tcp 0 0 10.168.0.191:24007 10.168.0.193:49149 ESTABLISHED 1213/glusterd
tcp 0 0 10.168.0.191:49151 10.168.0.192:24007 ESTABLISHED 1213/glusterd
tcp 0 0 10.168.0.191:49150 10.168.0.194:24007 ESTABLISHED 1213/glusterd
tcp 0 0 10.168.0.191:24007 10.168.0.194:49151 ESTABLISHED 1213/glusterd
注:以上から、本機は他のbrickごとに2つのTCP接続があり、全部で6つあることがわかります.
2.5 GlusterFSボリュームの構成
2.5.1保管場所の構成
In GlusterH0[1-4] :
mkdir -p /data/brick1/gv0
2.5.2 Glusterボリュームの作成
In GlusterH01 :
gluster volume create gv0 replica 2 transport tcp GH01:/data/brick1/gv0 GH02:/data/brick1/gv0 GH03:/data/brick1/gv0 GH04:/data/brick1/gv0
成功情報を表示:
volume create: gv0: success: please start the volume to access data
2.5.3 GlusterFSボリュームの起動
In GlusterH01 :
gluster volume start gv0
成功情報を表示:
volume start: gv0: success
2.5.4検証ボリュームの情報
In GlusterH01 :
gluster volume info
次のように表示されます.
Volume Name: gv0
Type: Distributed-Replicate
Volume ID: cfea514c-cdce-4ae4-bcd9-bf56f4173271
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: GH01:/data/brick1/gv0
Brick2: GH02:/data/brick1/gv0
Brick3: GH03:/data/brick1/gv0
Brick4: GH04:/data/brick1/gv0
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on
2.6 Glusterクライアントの構成
In GlusterH01 :
2.6.1クライアント関連パッケージのインストール
yum install -y glusterfs-fuse
2.6.2手動でボリュームgv 0をローカルにマウントする
mount -t glusterfs GH01:/gv0 /mnt
2.7 Glusterボリュームのテスト
2.7.1書き込みテスト
In GlusterH01 :
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
2.7.2書き込み確認
In GlusterH01 :
ls -lA /mnt/ | wc -l
In GlusterH0[1-4] :
ls -lA /data/brick1/gv0/
2.8シミュレーションbrick障害
2.8.1現在のストレージステータスの表示
In GlusterH01 :
gluster volume status
次のように表示されます.
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick GH01:/data/brick1/gv0 49153 0 Y 1447
Brick GH02:/data/brick1/gv0 49153 0 Y 1379
Brick GH03:/data/brick1/gv0 49153 0 Y 1281
Brick GH04:/data/brick1/gv0 49153 0 Y 1375
Self-heal Daemon on localhost N/A N/A Y 1506
Self-heal Daemon on GH02 N/A N/A Y 1440
Self-heal Daemon on GH04 N/A N/A Y 1430
Self-heal Daemon on GH03 N/A N/A Y 1430
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
注意:オンライン項目が全て「Y」であることに注意
2.8.2製造故障
In GlusterH01 :
vim /etc/fstab
コメントを下のように削除します.
#/dev/sdb1 /data xfs defaults 1 2
サーバーの再起動
reboot
2.8.3現在のストレージステータスの表示
In GlusterH01 :
gluster volume status
次のように表示されます.
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick GH01:/data/brick1/gv0 N/A N/A N N/A
Brick GH02:/data/brick1/gv0 49153 0 Y 1379
Brick GH03:/data/brick1/gv0 49153 0 Y 1281
Brick GH04:/data/brick1/gv0 49153 0 Y 1375
Self-heal Daemon on localhost N/A N/A Y 1484
Self-heal Daemon on GH02 N/A N/A Y 1453
Self-heal Daemon on GH03 N/A N/A Y 1443
Self-heal Daemon on GH04 N/A N/A Y 1444
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
注意:GH 01のOnline項目が「N」であることに気づく
注意:物理的なハードディスク(HDD)に問題がないか、アレイ内のハードディスク(HDD)を交換済みとして、ファイルシステムに障害が発生.
2.9リカバリ障害brickメソッド
2.9.1故障brickのプロセスを終了する
In GlusterH01 :
gluster volume status
次のように表示されます.
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick GH01:/data/brick1/gv0 N/A N/A N N/A
Brick GH02:/data/brick1/gv0 49153 0 Y 1379
Brick GH03:/data/brick1/gv0 49153 0 Y 1281
Brick GH04:/data/brick1/gv0 49153 0 Y 1375
Self-heal Daemon on localhost N/A N/A Y 1484
Self-heal Daemon on GH02 N/A N/A Y 1453
Self-heal Daemon on GH03 N/A N/A Y 1443
Self-heal Daemon on GH04 N/A N/A Y 1444
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
注意:ステータスOnline項目が「N」のGH 01にPID番号がある場合(N/Aは表示されない)、次のコマンドを使用して落下経路を終了してから、次のステップに進みます.
kill -15 pid
2.9.2新しいデータディレクトリの作成
In GlusterH01:
mkfs.xfs -i size=512 /dev/sdb1
fstabの編集
vim /etc/fstab
コメントを削除:
/dev/sdb1 /data xfs defaults 1 2
ファイルシステムの再マウント:
mount -a
新しいデータストアフォルダを追加します(前のディレクトリと同じではありません)
mkdir -p /data/brick1/gv1
2.9.3障害ノードのバックアップノード(gh 02)ディレクトリの拡張プロパティを問い合わせる
In GlusterH01:
ssh gh02 getfattr -d -m. -e hex /data/brick1/gv0
次のように表示されます.
getfattr: Removing leading '/' from absolute path names
# file: data/brick1/gv0
security.selinux=0x756e636f6e66696e65645f753a6f626a6563745f723a686f6d655f726f6f745f743a733000
trusted.gfid=0x00000000000000000000000000000001
trusted.glusterfs.dht=0x0000000100000000000000007ffffffe
trusted.glusterfs.volume-id=0xcfea514ccdce4ae4bcd9bf56f4173271
2.9.4ボリュームをマウントし、自己治癒をトリガー
In GlusterH01:
1)mntディレクトリにボリュームを掛ける
mount -t glusterfs GH01:/gv0 /mnt
2)ボリュームに存在しないディレクトリを新規作成して削除
mkdir /mnt/testDir001
rmdir /mnt/testDir001
3)拡張属性の設定による自己治癒
setfattr -n trusted.non-existent-key -v abc /mnt
setfattr -x trusted.non-existent-key /mnt
2.9.5現在のノードがxattrsを保留しているかどうかを確認する
In GlusterH01:
1)障害ノードのバックアップノード(gh 02)ディレクトリの拡張属性を再問合せする
ssh gh02 getfattr -d -m. -e hex /data/brick1/gv0
次のように検出されました.
# file: data/brick1/gv0
security.selinux=0x756e636f6e66696e65645f753a6f626a6563745f723a686f6d655f726f6f745f743a733000
trusted.afr.dirty=0x000000000000000000000000
trusted.afr.gv0-client-0=0x000000000000000200000002
trusted.gfid=0x00000000000000000000000000000001
trusted.glusterfs.dht=0x0000000100000000000000007ffffffe
trusted.glusterfs.volume-id=0xcfea514ccdce4ae4bcd9bf56f4173271
getfattr: Removing leading '/' from absolute path names
注意:4行目は、xattrsがソースをgh 02:/data/brick 1/gv 0とマークしていることを示しています.
2)ボリュームのステータスが表示されているかどうかを確認します.
In GlusterH01:
gluster volume heal gv0 info
次のように表示されます.
Brick GH01:/data/brick1/gv0
Status: Transport endpoint is not connected
Number of entries: -
Brick GH02:/data/brick1/gv0
/
Status: Connected
Number of entries: 1
Brick GH03:/data/brick1/gv0
Status: Connected
Number of entries: 0
Brick GH04:/data/brick1/gv0
Status: Connected
Number of entries: 0
注意:ステータスプロンプト転送エンドポイントが接続されていません(2行目)
2.9.6強制コミットによる操作の完了
In GlusterH01:
gluster volume replace-brick gv0 GH01:/data/brick1/gv0 GH01:/data/brick1/gv1 commit force
正常に完了したことを示すプロンプトが表示されます.
volume replace-brick: success: replace-brick commit force operation successful
注意:データを別のサーバにリカバリすることもできます.詳細なコマンドは次のとおりです(オプション).
gluster peer probe GH05
gluster volume replace-brick gv0 GH01:/data/brick1/gv0 GH05:/data/brick1/gv0 commit force
2.9.7ストレージのオンライン状態の確認
In GlusterH01:
gluster volume status
次のように表示されます.
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick GH01:/data/brick1/gv1 49153 0 Y 1658
Brick GH02:/data/brick1/gv0 49153 0 Y 1406
Brick GH03:/data/brick1/gv0 49153 0 Y 1371
Brick GH04:/data/brick1/gv0 49153 0 Y 1406
Self-heal Daemon on localhost N/A N/A Y 1663
Self-heal Daemon on GH04 N/A N/A Y 1703
Self-heal Daemon on GH03 N/A N/A Y 1695
Self-heal Daemon on GH02 N/A N/A Y 1726
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
また、別のサーバに交換した場合は、次のようになります.
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick GH05:/data/brick1/gv0 49152 0 Y 1448
Brick GH02:/data/brick1/gv0 49153 0 Y 1270
Brick GH03:/data/brick1/gv0 49153 0 Y 1328
Brick GH04:/data/brick1/gv0 49153 0 Y 1405
Self-heal Daemon on localhost N/A N/A Y 1559
Self-heal Daemon on GH02 N/A N/A Y 1489
Self-heal Daemon on GH03 N/A N/A Y 1479
Self-heal Daemon on GH04 N/A N/A Y 1473
Self-heal Daemon on GH05 N/A N/A Y 1453
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
ドキュメント参照
===================================
公式交換操作:
http://gluster.readthedocs.io/en/latest/Administrator%20Guide/Managing%20Volumes/#shrinking-volumes