GlusterFS更換故障Brick

1 前言linux

筆者公司內有一套GlusterFS分佈式存儲,最近數據分區的文件系統提示錯誤,羣集有一個Brick須要替換掉。vim

基於穩妥操做的原則,筆者要先搭建測試環境並經過測試後才能在真實環境中執行,如下是筆者的測試文檔,給有須要的博友參閱,另外筆者在發表本文時已經在生產環境經過驗證。centos

服務器的故障日誌(有修復文件系統方法的博友歡迎指教):bash

cat /var/log/messages

能夠看到以下信息:服務器

Mar 21 14:58:04 GH01 kernel: XFS (dm-5): xfs_log_force: error 5 returned.

2 實踐部分ssh

2.1 環境信息tcp

2.1.1 主機信息
分佈式

GlusterH0[1-5]:ide

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都有兩個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 手動掛載卷gv0到本地

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

注:注意到Online項所有爲「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

注:注意到GH01的Online項爲「N」

注:文件系統故障,假設物理硬盤沒有問題或已經更換陣列中的硬盤

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」的GH01存在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 查詢故障節點的備份節點(gh02)目錄的擴展屬性

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)再次查詢故障節點的備份節點(gh02)目錄的擴展屬性

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已經將源標記爲gh02:/data/brick1/gv0

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

相關文章
相關標籤/搜索