云計算-構建GlusterFS分布式存儲系統
GlusterFS是一個開源分布式文件系統,采用的時是無中心架構,可以實現橫向擴展。以資源池、集群式的方式提供NAS存儲系統,也有多種不同的卷類型。PB級容量、高可用、讀寫性能、基于文件系統級別共享、分布式、無metadata(元數據)的存儲方式。 沒有中心節點,所有節點全部平等。GlusterFS配置方便,穩定性好,可輕松達到PB級容量,數千個節點。
GlusterFS有以下幾個基本概念:
birck:GlusterFS的基本元素,以節點服務器目錄形式展現; volume:多個brick的邏輯集合; metadata:元數據,用于描述文件、目錄等的信息; self-heal:用于后臺運行檢測副本卷中文件和目錄的不一致性并解決這些不一致; FUSE:Filesystem Userspace是一個可加載的內核模塊,其支持非特權用戶創建自己的文件系統而不需要修改內核代碼通過在用戶空間運行文件系統的代碼通過FUSE代碼與內核進行橋接; Gluster Server:數據存儲服務器,即組成GlusterFS存儲集群的節點; Gluster Client:使用GlusterFS存儲服務的服務器,如KVM、OpenStack、LB RealServer、HA node。
一、配置安裝服務
使用阿里的yum源安裝gluster4.1版本
[root@glusterfs1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
Glusterfs1節點和glusterfs2節點安裝服務,配置服務啟動
[root@glusterfs1 ~]# yum -y install centos-release-gluster41 [root@glusterfs1 ~]# yum -y install glusterfs-server [root@glusterfs1 ~]# systemctl restart glusterd [root@glusterfs1 ~]# systemctl enable glusterd [root@glusterfs2 ~]# yum -y install centos-release-gluster41 [root@glusterfs2 ~]# yum -y install glusterfs-server [root@glusterfs2 ~]# systemctl restart glusterd [root@glusterfs2 ~]# systemctl enable glusterd
二、配置GlusterFS
1.配置掛載磁盤
每個節點添加三塊磁盤,大小5G
#對三塊磁盤各創建1個分區
[root@glusterfs1 ~]# fdisk /dev/sdb [root@glusterfs1 ~]# fdisk /dev/sdc [root@glusterfs1 ~]# fdisk /dev/sdd
#將分區進行格式化,創建分步存儲數據源掛載點文件夾,將分區分別掛載
[root@glusterfs1 ~]# mkfs.xfs /dev/sdb1 [root@glusterfs1 ~]# mkfs.xfs /dev/sdc1 [root@glusterfs1 ~]# mkfs.xfs /dev/sdd1 [root@glusterfs1 ~]# mkdir -p /data/brick{1..3} [root@glusterfs1 ~]# mount /dev/sdb1 /data/brick1 [root@glusterfs1 ~]# mount /dev/sdc1 /data/brick2 [root@glusterfs1 ~]# mount /dev/sdd1 /data/brick3 [root@glusterfs1 ~]# df -h|grep brick /dev/sdb1 5.0G 33M 5.0G 1% /data/brick1 /dev/sdc1 5.0G 33M 5.0G 1% /data/brick2 /dev/sdd1 5.0G 33M 5.0G 1% /data/brick3
2.創建主機信任對等體
任意一臺節點上配置
[root@glusterfs1 ~]# gluster peer probe glusterfs1 peer probe: success. Probe on localhost not needed [root@glusterfs1 ~]# gluster peer probe glusterfs2 peer probe: success. [root@glusterfs1 ~]# gluster peer status Number of Peers: 1 Hostname: glusterfs2 Uuid: 36515c7d-2b84-4f37-9ecf-d738887929aa State: Peer in Cluster (Connected)
配置分布卷
Distributed:分布式卷,文件通過哈希隨機算法分步到由bricks組成的卷上
3.創建配置glusterfs分布卷
#創建存儲目錄
[root@glusterfs1 ~]# mkdir -p /data/brick1/gv1
#創建分布卷
[root@glusterfs1 ~]# gluster volume create gv1 glusterfs1:/data/brick1/gv1/ glusterfs2:/data/brick1/gv1/ volume create: gv1: success: please start the volume to access data
#啟動分布卷
[root@glusterfs1 ~]# gluster volume start gv1 volume start: gv1: success
#查看gv1狀態
[root@glusterfs1 ~]# gluster volume status gv1 Status of volume: gv1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick glusterfs1:/data/brick1/gv1 49152 0 Y 25156 Brick glusterfs2:/data/brick1/gv1 49152 0 Y 24611 Task Status of Volume gv1 ------------------------------------------------------------------------------ There are no active volume tasks
#查看vg1信息
[root@glusterfs1 ~]# gluster volume info gv1 Volume Name: gv1 Type: Distribute Volume ID: 6cee1268-6401-4f0b-9dde-8e3f0e45cb74 Status: Started Snapshot Count: 0 Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: glusterfs1:/data/brick1/gv1 Brick2: glusterfs2:/data/brick1/gv1 Options Reconfigured: transport.address-family: inet nfs.disable: on
測試
#掛載gv1到目錄
[root@glusterfs1 ~]# mkdir /opt/gv1 [root@glusterfs1 ~]# mount -t glusterfs glusterfs1:/gv1 /opt/gv1 [root@glusterfs1 ~]# df -h |grep gv1 glusterfs1:/gv1 10G 167M 9.9G 2% /opt/gv1 #卷大小為兩個節點容量和5G+5G
#測試文件分布存儲
在掛載了gv1卷的目錄下,創建10個測試文件
進入glusterfs1節點的數據存儲目錄查看文件存儲情況
進入glusterfs2節點的數據存儲目錄查看文件存儲情況
將gv1分布卷再掛載到glusterfs2節點,可以看到同一分布卷的文件共享存儲
三、配置復制卷
Replicated:復制式卷,類似RAID1,replica數等于卷中brick存儲服務器數量
#創建存儲目錄
[root@glusterfs1 ~]# mkdir -p /data/brick1/gv2
#創建分布式卷,副本數為2,會提示出發生腦裂警告,輸入Y繼續即可
[root@glusterfs1 ~]# gluster volume create gv2 replica 2 glusterfs1:/data/brick1/gv2 glusterfs2:/data/brick1/gv2 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/. Do you still want to continue? (y/n) y volume create: gv2: success: please start the volume to access data
#啟動卷
[root@glusterfs1 ~]# gluster volume start gv2 volume start: gv2: success
#查看gv2狀態
[root@glusterfs1 ~]# gluster volume status gv2 Status of volume: gv2 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick glusterfs1:/data/brick1/gv2 49153 0 Y 100756 Brick glusterfs2:/data/brick1/gv2 49153 0 Y 62646 Self-heal Daemon on localhost N/A N/A Y 100805 Self-heal Daemon on glusterfs2 N/A N/A Y 62669 Task Status of Volume gv2 ------------------------------------------------------------------------------ There are no active volume tasks
#查看gv2信息
[root@glusterfs1 ~]# gluster volume info gv2 Volume Name: gv2 Type: Replicate Volume ID: 5c8ccf1a-8808-49de-b36f-74e4a2a7f215 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs1:/data/brick1/gv2 Brick2: glusterfs2:/data/brick1/gv2 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
測試
#創建掛載點目錄,掛載gv2,可見容量大小為一半(5G+5G)/2
[root@glusterfs1 ~]# mkdir -p /opt/gv2 [root@glusterfs1 ~]# mount -t glusterfs glusterfs1:/gv2 /opt/gv2 [root@glusterfs1 ~]# df -h|grep gv2 glusterfs1:/gv2 5.0G 84M 5.0G 2% /opt/gv2
創建10個測試文件,查看brick下gv目錄,文件數量為完整的10個
在glusterfs2節點查看文件數量,也是完整的10個,可見兩個節點存儲的文件為相同的
四、配置條帶卷
Striped:條帶式卷,類似RAID0,文件被分為數據塊,并發粒度為數據塊,大文件性能好
[root@glusterfs1 ~]# gluster volume create gv3 stripe 2 glusterfs1:/data/brick3/gv3 glusterfs2:/data/brick3/gv3 volume create: gv3: success: please start the volume to access data [root@glusterfs1 ~]# gluster volume start gv3 volume start: gv3: success [root@glusterfs1 ~]# gluster volume status gv3 Status of volume: gv3 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick glusterfs1:/data/brick3/gv3 49154 0 Y 129779 Brick glusterfs2:/data/brick3/gv3 49154 0 Y 77272 Task Status of Volume gv3 ------------------------------------------------------------------------------ There are no active volume tasks [root@glusterfs1 ~]# gluster volume info gv3 Volume Name: gv3 Type: Stripe Volume ID: cdee0ae8-e821-44a3-8bb7-71671e3f108a Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs1:/data/brick3/gv3 Brick2: glusterfs2:/data/brick3/gv3 Options Reconfigured: transport.address-family: inet nfs.disable: on
測試
#創建掛載點文件夾,掛載gv3,可用容量為5G+5G
[root@glusterfs1 ~]# mkdir /opt/gv3 [root@glusterfs1 ~]# mount -t glusterfs glusterfs1:/gv3 /opt/gv3 [root@glusterfs1 ~]# df -h|grep gv3 glusterfs1:/gv3 10G 167M 9.9G 2% /opt/gv3
#在掛載文件夾里創建一個大小為10M一個20M的測試文件
[root@glusterfs1 ~]# dd if=/dev/zero bs=1024 count=10000 of=/opt/gv3/10M.file 記錄了10000+0 的讀入 記錄了10000+0 的寫出 10240000字節(10 MB)已復制,0.883662 秒,11.6 MB/秒 [root@glusterfs1 ~]# dd if=/dev/zero bs=1024 count=20000 of=/opt/gv3/20M.file 記錄了20000+0 的讀入 記錄了20000+0 的寫出 20480000字節(20 MB)已復制,1.5851 秒,12.9 MB/秒
#分別查看glusterfs1節點和glusterfs2節點,10M的文件以5M大小文件塊分別存儲在兩個節點上,20M文件同理
[root@glusterfs1 ~]# ll -h /data/brick3/gv3/ 總用量 15M -rw-r--r-- 2 root root 4.9M 7月 25 04:51 10M.file -rw-r--r-- 2 root root 9.8M 7月 25 04:51 20M.file [root@glusterfs2 ~]# ll -h /data/brick3/gv3/ 總用量 15M -rw-r--r-- 2 root root 4.9M 7月 25 04:51 10M.file -rw-r--r-- 2 root root 9.8M 7月 25 04:51 20M.file
五、參考命令
集群節點操作:
#添加節點 gluster peer probe <主機名或IP> #刪除節點 gluster peer detach <主機名或IP> #查看節點連接狀態 gluster peer status #列出所有節點 gluster pool list
卷操作:
#查看卷信息 gluster volume info <卷名或all> #列出所有卷 gluster volume list #查看卷狀態 gluster volume stat<卷名> #啟動/停止/刪除卷 gluster volume start/stop/delete <卷名> #修復卷 gluster volume heal <卷名> //只修復有問題文件 gluster volume heal <卷名> full //修復所有文件 gluster volume heal <卷名> info //查看修復自愈詳情 #創建卷 gluster volume create <新卷名> [stripe 條帶卷數] [replica 副本卷數]
專屬分布式存儲服務 分布式
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。