GlusterFS分布式存儲(chǔ)
目錄
glusterfs簡(jiǎn)介
glusterfs部署
glustefs分布式存儲(chǔ)優(yōu)化
glusterfs在企業(yè)中應(yīng)用場(chǎng)景
參考文章地址
一、glusterfs簡(jiǎn)介
Glusterfs是一個(gè)開源的分布式文件系統(tǒng),是Scale存儲(chǔ)的核心,能夠處理千數(shù)量級(jí)的客戶端。是整合了許多存儲(chǔ)塊(server)通過Infiniband RDMA或者 Tcp/Ip方式互聯(lián)的一個(gè)并行的網(wǎng)絡(luò)文件系統(tǒng)。
特征:
- 容量可以按比例的擴(kuò)展,且性能卻不會(huì)因此而降低。
- 廉價(jià)且使用簡(jiǎn)單,完全抽象在已有的文件系統(tǒng)之上。
- 擴(kuò)展和容錯(cuò)設(shè)計(jì)的比較合理,復(fù)雜度較低
- 適應(yīng)性強(qiáng),部署方便,對(duì)環(huán)境依賴低,使用,調(diào)試和維護(hù)便利
二、glusterfs安裝部署
一般在企業(yè)中,采用的是分布式復(fù)制卷,因?yàn)橛袛?shù)據(jù)備份,數(shù)據(jù)相對(duì)安全。
網(wǎng)絡(luò)要求全部千兆環(huán)境,gluster 服務(wù)器至少有 2 塊網(wǎng)卡,1 塊網(wǎng)卡綁定供 gluster 使用,剩余一塊分配管理網(wǎng)絡(luò) IP,用于系統(tǒng)管理。如果有條件購(gòu)買萬兆交換機(jī),服務(wù)器配置萬兆網(wǎng)卡,存儲(chǔ)性能會(huì)更好。網(wǎng)絡(luò)方面如果安全性要求較高,可以多網(wǎng)卡綁定。
跨地區(qū)機(jī)房配置 Gluster,在中國(guó)網(wǎng)絡(luò)格局下不適用。
- 注意:GlusterFS將其動(dòng)態(tài)生成的配置文件存儲(chǔ)在/var/lib/glusterd中。如果在任何時(shí)候GlusterFS無法寫入這些文件(例如,當(dāng)后備文件系統(tǒng)已滿),它至少會(huì)導(dǎo)致您的系統(tǒng)不穩(wěn)定的行為; 或者更糟糕的是,讓您的系統(tǒng)完全脫機(jī)。建議為/var/log等目錄創(chuàng)建單獨(dú)的分區(qū),以確保不會(huì)發(fā)生這種情況。
1、安裝glusterfs前的環(huán)境準(zhǔn)備
1.1、服務(wù)規(guī)劃:
操作系統(tǒng) | IP | 主機(jī)名 | 硬盤數(shù)量(三塊) |
centos 7.4 | 10.0.0.101 | node1 | sdb:5G sdc:5G sdd:5G |
centos 7.4 | 10.0.0.102 | node2 | sdb:5G sdc:5G sdd:5G |
centos 7.4 | 10.0.0.103 | node3 | sdb:5G sdc:5G sdd:5G |
centos 7.4 | 10.0.0.104 | node4 | sdb:5G sdc:5G sdd:5G |
centos 7.4 | 10.0.0.105 | node5-client | sda:20G |
1.2、首先關(guān)閉iptables和selinux,配置hosts文件如下(全部glusterfs主機(jī))
注:node01~node04所有的主機(jī)hosts文件均為此內(nèi)容;同時(shí)全部修改為對(duì)應(yīng)的主機(jī)名,centos7修改主機(jī)名方式:#hostnamectl set-hostname 主機(jī)名 (即為臨時(shí)和永久生效) 可以使用#hostnamectl status 查看系統(tǒng)基本信息
[root@node01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.101 node01 10.0.0.102 node02 10.0.0.103 node03 10.0.0.104 node04 [root@node01 ~]# systemctl stop firewalld.service #停止firewalld [root@node01 ~]# systemctl disable firewalld.service #禁止firewalld開機(jī)自啟 [root@node01 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config #關(guān)閉SELinux [root@node01 ~]# setenforce 0 [root@node01 ~]# getenforce Permissive [root@node01 ~]# ntpdate time.windows.com #同步時(shí)間
1.3、安裝gluterfs源(全部glusterfs主機(jī))
[root@node01 ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #不是必須的 [root@node01 ~]#yum search centos-release-gluster #查看有哪些版本的glusterfs源 ================================================ N/S matched: centos-release-gluster ================================================= centos-release-gluster310.noarch : Gluster 3.10 (Long Term Stable) packages from the CentOS Storage SIG repository centos-release-gluster312.noarch : Gluster 3.12 (Long Term Stable) packages from the CentOS Storage SIG repository centos-release-gluster313.noarch : Gluster 3.13 (Short Term Stable) packages from the CentOS Storage SIG repository centos-release-gluster36.noarch : GlusterFS 3.6 packages from the CentOS Storage SIG repository centos-release-gluster37.noarch : GlusterFS 3.7 packages from the CentOS Storage SIG repository centos-release-gluster38.noarch : GlusterFS 3.8 packages from the CentOS Storage SIG repository centos-release-gluster39.noarch : Gluster 3.9 (Short Term Stable) packages from the CentOS Storage SIG repository
這里我們使用glusterfs的3.12版本的源
[root@node01 ~]# yum -y install centos-release-gluster312.noarch
1.4、安裝glusterfs(全部glusterfs主機(jī))
在安裝glusterfs的時(shí)候直接指定源為glusterfs源,由于 源[centos-gluster310-test]的enable為0,所以在指定源的時(shí)候用–enablerepo來讓源生效
cat /etc/yum.repos.d/CentOS-Gluster-3.12.repo
安裝glusterfs
[root@node01 ~]# yum -y --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication
1.5、查看glusterfs版本并啟動(dòng)glusterfs服務(wù)(全部glusterfs主機(jī))
[root@node01 ~]# glusterfs -V glusterfs 3.12.5 [root@node01 ~]# systemctl start glusterd.service [root@node01 ~]# systemctl enable glusterd.service [root@node01 ~]# systemctl status glusterd.service [root@node01 ~]# netstat -lntup Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 866/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 972/master tcp 0 0 0.0.0.0:24007 0.0.0.0:* LISTEN 2268/glusterd tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 866/sshd tcp6 0 0 ::1:25 :::* LISTEN 972/master udp 0 0 0.0.0.0:111 0.0.0.0:* 2266/rpcbind udp 0 0 0.0.0.0:745 0.0.0.0:* 2266/rpcbind udp 0 0 127.0.0.1:323 0.0.0.0:* 527/chronyd udp6 0 0 :::111 :::* 2266/rpcbind udp6 0 0 :::745 :::* 2266/rpcbind udp6 0 0 ::1:323 :::* 527/chronyd
1.6、格式化磁盤(全部glusterfs主機(jī))
在每臺(tái)主機(jī)上創(chuàng)建幾塊硬盤,做接下來的分布式存儲(chǔ)使用
注:創(chuàng)建的硬盤要用xfs格式來格式化硬盤,如果用ext4來格式化硬盤的話,對(duì)于大于16TB空間格式化就無法實(shí)現(xiàn)了。所以這里要用xfs格式化磁盤(centos7默認(rèn)的文件格式就是xfs),并且xfs的文件格式支持PB級(jí)的數(shù)據(jù)量
如果是centos6默認(rèn)是不支持xfs的文件格式,要先安裝xfs支持包
yum install xfsprogs -y
用fdisk -l
查看磁盤設(shè)備,例如查看data-1-1的磁盤設(shè)備,這里的sdc、sdd、sde是新加的硬盤
[root@node01 ~]# fdisk -l Disk /dev/sdb: 5368 MB, 5368709120 bytes Disk /dev/sdc: 5368 MB, 5368709120 bytes Disk /dev/sdd: 5368 MB, 5368709120 bytes
特別說明:
如果磁盤大于 2T 的話就用 parted 來分區(qū),這里我們不用分區(qū)(可以不分區(qū)); 做分布式文件系統(tǒng)的時(shí)候數(shù)據(jù)盤一般不需要做 RAID,一般系統(tǒng)盤會(huì)做 RAID 1; 如果有raid卡的話,較好用上,raid卡有數(shù)據(jù)緩存功能,也能提高磁盤的iops,較好的話,用RAID 5; 如果都不做raid的話,也是沒問題的,glusterfs也是可以保證數(shù)據(jù)的安全的。 這里使用官方推薦的格盤方式:http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/#purpose-of-this-document
[root@node01 ~]# mkfs.xfs -i size=512 /dev/sdb [root@node01 ~]# mkfs.xfs -i size=512 /dev/sdc [root@node01 ~]# mkfs.xfs -i size=512 /dev/sdd
在四臺(tái)機(jī)器上創(chuàng)建掛載塊設(shè)備的目錄,掛載硬盤到目錄
mkdir -p /data/brick{1..3} echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab echo '/dev/sdc /data/brick2 xfs defaults 0 0' >> /etc/fstab echo '/dev/sdd /data/brick3 xfs defaults 0 0' >> /etc/fstab
#掛載
mount
-a [root@node01 ~]# df -h /dev/sdc 5.0G 33M 5.0G 1% /data/brick2 /dev/sdd 5.0G 33M 5.0G 1% /data/brick3 /dev/sdb 5.0G 33M 5.0G 1% /data/brick1
注:再次說明——以上操作均在node01-node04上同時(shí)操作
2、操作
2.1、將分布式存儲(chǔ)主機(jī)加入到信任主機(jī)池并查看加入的主機(jī)狀態(tài)
隨便在一個(gè)開啟glusterfs服務(wù)的主機(jī)上將其他主機(jī)加入到一個(gè)信任的主機(jī)池里,這里選擇node01
[root@node01 ~]# gluster peer probe node02 peer probe: success. [root@node01 ~]# gluster peer probe node03 peer probe: success. [root@node01 ~]# gluster peer probe node04 peer probe: success.
查看主機(jī)池中主機(jī)的狀態(tài)
[root@node01 ~]# gluster peer status Number of Peers: 3 #除本機(jī)外,還有三臺(tái)主機(jī)主機(jī)池中 Hostname: node02 Uuid: 6020709d-1b46-4e2c-9cdd-c4b3bba47b4b State: Peer in Cluster (Connected) Hostname: node03 Uuid: 147ee557-51f1-43fe-a27f-3dae2880b5d4 State: Peer in Cluster (Connected) Hostname: node04 Uuid: f61af299-b00d-489c-9fd9-b4f6a336a6c7 State: Peer in Cluster (Connected) 注意:一旦建立了這個(gè)池,只有受信任的成員可能會(huì)將新的服務(wù)器探測(cè)到池中。新服務(wù)器無法探測(cè)池,必須從池中探測(cè)。
2.2、創(chuàng)建glusterfs卷
GlusterFS 五種卷
- Distributed:分布式卷,文件通過 hash 算法隨機(jī)分布到由 bricks 組成的卷上。
- Replicated: 復(fù)制式卷,類似 RAID 1,replica 數(shù)必須等于 volume 中 brick 所包含的存儲(chǔ)服務(wù)器數(shù),可用性高。
- Striped: 條帶式卷,類似 RAID 0,stripe 數(shù)必須等于 volume 中 brick 所包含的存儲(chǔ)服務(wù)器數(shù),文件被分成數(shù)據(jù)塊,以 Round Robin 的方式存儲(chǔ)在 bricks 中,并發(fā)粒度是數(shù)據(jù)塊,大文件性能好。
- Distributed Striped: 分布式的條帶卷,volume中 brick 所包含的存儲(chǔ)服務(wù)器數(shù)必須是 stripe 的倍數(shù)(>=2倍),兼顧分布式和條帶式的功能。
- Distributed Replicated: 分布式的復(fù)制卷,volume 中 brick 所包含的存儲(chǔ)服務(wù)器數(shù)必須是 replica 的倍數(shù)(>=2倍),兼顧分布式和復(fù)制式的功能。
分布式復(fù)制卷的brick順序決定了文件分布的位置,一般來說,先是兩個(gè)brick形成一個(gè)復(fù)制關(guān)系,然后兩個(gè)復(fù)制關(guān)系形成分布。
企業(yè)一般用后兩種,大部分會(huì)用分布式復(fù)制(可用容量為 總?cè)萘?復(fù)制份數(shù)),通過網(wǎng)絡(luò)傳輸?shù)脑捿^好用萬兆交換機(jī),萬兆網(wǎng)卡來做。這樣就會(huì)優(yōu)化一部分性能。它們的數(shù)據(jù)都是通過網(wǎng)絡(luò)來傳輸?shù)摹?/p>
配置分布式卷
#在信任的主機(jī)池中任意一臺(tái)設(shè)備上創(chuàng)建卷都可以,而且創(chuàng)建好后可在任意設(shè)備掛載后都可以查看 [root@node01 ~]# gluster volume create gv1 node01:/data/brick1 node02:/data/brick1 force #創(chuàng)建分布式卷 volume create: gv1: success: please start the volume to access data [root@node01 ~]# gluster volume start gv1 #啟動(dòng)卷gv1 volume start: gv1: success [root@node01 ~]# gluster volume info gv1 #查看gv1的配置信息 Volume Name: gv1 Type: Distribute #分布式卷 Volume ID: 85622964-4b48-47d5-b767-d6c6f1e684cc Status: Started Snapshot Count: 0 Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: node01:/data/brick1 Brick2: node02:/data/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@node01 ~]# mount -t glusterfs 127.0.0.1:/gv1 /opt #掛載gv1卷 [root@node01 ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn)/dev/sdc 5.0G 33M 5.0G 1% /data/brick2 /dev/sdd 5.0G 33M 5.0G 1% /data/brick3 /dev/sdb 5.0G 33M 5.0G 1% /data/brick1 127.0.0.1:/gv1 10G 65M 10G 1% /opt #連個(gè)設(shè)備容量之和 [root@node01 ~]# cd /opt/ [root@node01 opt]# touch {a..f} #創(chuàng)建測(cè)試文件 [root@node01 opt]# ll 總用量 0 -rw-r--r--. 1 root root 0 2月 2 23:59 a -rw-r--r--. 1 root root 0 2月 2 23:59 b -rw-r--r--. 1 root root 0 2月 2 23:59 c -rw-r--r--. 1 root root 0 2月 2 23:59 d -rw-r--r--. 1 root root 0 2月 2 23:59 e -rw-r--r--. 1 root root 0 2月 2 23:59 f # 在node04也可看到新創(chuàng)建的文件,信任存儲(chǔ)池中的每一臺(tái)主機(jī)掛載這個(gè)卷后都可以看到 [root@node04 ~]# mount -t glusterfs 127.0.0.1:/gv1 /opt [root@node04 ~]# ll /opt/ 總用量 0 -rw-r--r--. 1 root root 0 2月 2 2018 a -rw-r--r--. 1 root root 0 2月 2 2018 b -rw-r--r--. 1 root root 0 2月 2 2018 c -rw-r--r--. 1 root root 0 2月 2 2018 d -rw-r--r--. 1 root root 0 2月 2 2018 e -rw-r--r--. 1 root root 0 2月 2 2018 f [root@node01 opt]# ll /data/brick1/ 總用量 0 -rw-r--r--. 2 root root 0 2月 2 23:59 a -rw-r--r--. 2 root root 0 2月 2 23:59 b -rw-r--r--. 2 root root 0 2月 2 23:59 c -rw-r--r--. 2 root root 0 2月 2 23:59 e [root@node02 ~]# ll /data/brick1 總用量 0 -rw-r--r--. 2 root root 0 2月 2 23:59 d -rw-r--r--. 2 root root 0 2月 2 23:59 f #文件實(shí)際存在位置node01和node02上的/data/brick1目錄下,通過hash分別存到node01和node02上的分布式磁盤上
配置復(fù)制卷
注:復(fù)制模式,既AFR, 創(chuàng)建volume 時(shí)帶 replica x 數(shù)量: 將文件復(fù)制到 replica x 個(gè)節(jié)點(diǎn)中。 這條命令的意思是使用Replicated的方式,建立一個(gè)名為gv2的卷(Volume),存儲(chǔ)塊(Brick)為2個(gè),分別為node01:/data/brick2和node02:/data/brick2; fore為強(qiáng)制創(chuàng)建:因?yàn)閺?fù)制卷在雙方主機(jī)通信有故障再恢復(fù)通信時(shí)容易發(fā)生腦裂。本次為實(shí)驗(yàn)環(huán)境,生產(chǎn)環(huán)境不建議使用。 [root@node01 ~]# gluster volume create gv2 replica 2 node01:/data/brick2 node02:/data/brick2 force volume create: gv2: success: please start the volume to access data [root@node01 ~]# gluster volume start gv2 #啟動(dòng)gv2卷 volume start: gv2: success [root@node01 ~]# gluster volume info gv2 #查看gv2信息 Volume Name: gv2 Type: Replicate #復(fù)制卷 Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node01:/data/brick2 Brick2: node02:/data/brick2 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off [root@node01 ~]# mount -t glusterfs 127.0.0.1:/gv2 /mnt [root@node01 ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn) /dev/sdc 5.0G 33M 5.0G 1% /data/brick2 /dev/sdd 5.0G 33M 5.0G 1% /data/brick3 /dev/sdb 5.0G 33M 5.0G 1% /data/brick1 127.0.0.1:/gv1 10G 65M 10G 1% /opt 127.0.0.1:/gv2 5.0G 33M 5.0G 1% /mnt #容量是總?cè)萘康囊话?[root@node01 ~]# cd /mnt/ [root@node01 mnt]# touch {1..6} [root@node01 mnt]# ll /data/brick2 總用量 0 -rw-r--r--. 2 root root 0 2月 3 01:06 1 -rw-r--r--. 2 root root 0 2月 3 01:06 2 -rw-r--r--. 2 root root 0 2月 3 01:06 3 -rw-r--r--. 2 root root 0 2月 3 01:06 4 -rw-r--r--. 2 root root 0 2月 3 01:06 5 -rw-r--r--. 2 root root 0 2月 3 01:06 6 [root@node02 ~]# ll /data/brick2 總用量 0 -rw-r--r--. 2 root root 0 2月 3 01:06 1 -rw-r--r--. 2 root root 0 2月 3 01:06 2 -rw-r--r--. 2 root root 0 2月 3 01:06 3 -rw-r--r--. 2 root root 0 2月 3 01:06 4 -rw-r--r--. 2 root root 0 2月 3 01:06 5 -rw-r--r--. 2 root root 0 2月 3 01:06 6 #創(chuàng)建文件的實(shí)際存在位置為node01和node02上的/data/brick2目錄下,因?yàn)槭菑?fù)制卷,這兩個(gè)目錄下的內(nèi)容是完全一致的。
配置條帶卷
[root@node01 ~]# gluster volume create gv3 stripe 2 node01:/data/brick3 node02:/data/brick3 force volume create: gv3: success: please start the volume to access data [root@node01 ~]# gluster volume start gv3 volume start: gv3: success [root@node01 ~]# gluster volume info gv3 Volume Name: gv3 Type: Stripe Volume ID: 54c16832-6bdf-42e2-81a9-6b8d7b547c1a Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node01:/data/brick3 Brick2: node02:/data/brick3 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@node01 ~]# mkdir /data01 [root@node01 ~]# mount -t glusterfs 127.0.0.1:/gv3 /data01 [root@node01 ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn) 127.0.0.1:/gv3 10G 65M 10G 1% /data01 [root@node01 ~]# dd if=/dev/zero bs=1024 count=10000 of=/data01/10M.file [root@node01 ~]# dd if=/dev/zero bs=1024 count=20000 of=/data01/20M.file [root@node01 ~]# ll /data01/ -h 總用量 30M -rw-r--r--. 1 root root 9.8M 2月 3 02:03 10M.file -rw-r--r--. 1 root root 20M 2月 3 02:04 20M.file ************************************************************************************* #文件的實(shí)際存放位置: [root@node01 ~]# ll -h /data/brick3 總用量 15M -rw-r--r--. 2 root root 4.9M 2月 3 02:03 10M.file -rw-r--r--. 2 root root 9.8M 2月 3 02:03 20M.file [root@node02 ~]# ll -h /data/brick3 總用量 15M -rw-r--r--. 2 root root 4.9M 2月 3 02:03 10M.file -rw-r--r--. 2 root root 9.8M 2月 3 02:04 20M.file # 上面可以看到 10M 20M 的文件分別分成了 2 塊(這是條帶的特點(diǎn)),寫入的時(shí)候是循環(huán)地一點(diǎn)一點(diǎn)在node01和node02的磁盤上. #上面配置的條帶卷在生產(chǎn)環(huán)境是很少使用的,因?yàn)樗鼤?huì)將文件破壞,比如一個(gè)圖片,它會(huì)將圖片一份一份地分別存到條帶卷中的brick上。
配置分布式復(fù)制卷
較少需要4臺(tái)服務(wù)器才能創(chuàng)建,[生產(chǎn)場(chǎng)景推薦使用此種方式]
#將原有的復(fù)制卷gv2進(jìn)行擴(kuò)容,使其成為分布式復(fù)制卷;
#要擴(kuò)容前需停掉gv2
[root@node01 ~]# gluster volume stop gv2
[root@node01 ~]# gluster volume add-brick gv2 replica 2 node03:/data/brick1 node04:/data/brick1 force #添加brick到gv2中 volume add-brick: success [root@node01 ~]# gluster volume start gv2 volume start: gv2: success [root@node01 ~]# gluster volume info gv2 Volume Name: gv2 Type: Distributed-Replicate # 這里顯示是分布式復(fù)制卷,是在 gv2 復(fù)制卷的基礎(chǔ)上增加 2 塊 brick 形成的 Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053 Status: Started Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node01:/data/brick2 Brick2: node02:/data/brick2 Brick3: node03:/data/brick1 Brick4: node04:/data/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off 注意:當(dāng)你給分布式復(fù)制卷和分布式條帶卷增加 bricks 時(shí),你增加的 bricks 數(shù)目必須是復(fù)制或條帶數(shù)目的倍數(shù), 例如:你給一個(gè)分布式復(fù)制卷的 replica 為 2,你在增加 bricks 的時(shí)候數(shù)量必須為2、4、6、8等。 擴(kuò)容后進(jìn)行測(cè)試,發(fā)現(xiàn)文件都分布在擴(kuò)容前的卷中。
配置分布式條帶卷
#將原有的復(fù)制卷gv3進(jìn)行擴(kuò)容,使其成為分布式條帶卷 #要擴(kuò)容前需停掉gv3 [root@node01 ~]# gluster volume stop gv3 [root@node01 ~]# gluster volume add-brick gv3 stripe 2 node03:/data/brick2 node04:/data/brick2 force #添加brick到gv3中 [root@node01 ~]# gluster volume start gv3 volume start: gv3: success [root@node01 ~]# gluster volume info gv3 Volume Name: gv3 Type: Distributed-Stripe # 這里顯示是分布式條帶卷,是在 gv3 條帶卷的基礎(chǔ)上增加 2 塊 brick 形成的 Volume ID: 54c16832-6bdf-42e2-81a9-6b8d7b547c1a Status: Started Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node01:/data/brick3 Brick2: node02:/data/brick3 Brick3: node03:/data/brick2 Brick4: node04:/data/brick2 Options Reconfigured: transport.address-family: inet nfs.disable: on
分布式復(fù)制卷的 較佳實(shí)踐:
1)搭建條件 - 塊服務(wù)器的數(shù)量必須是復(fù)制的倍數(shù) - 將按塊服務(wù)器的排列順序指定相鄰的塊服務(wù)器成為彼此的復(fù)制 例如,8臺(tái)服務(wù)器: - 當(dāng)復(fù)制副本為2時(shí),按照服務(wù)器列表的順序,服務(wù)器1和2作為一個(gè)復(fù)制,3和4作為一個(gè)復(fù)制,5和6作為一個(gè)復(fù)制,7和8作為一個(gè)復(fù)制 - 當(dāng)復(fù)制副本為4時(shí),按照服務(wù)器列表的順序,服務(wù)器1/2/3/4作為一個(gè)復(fù)制,5/6/7/8作為一個(gè)復(fù)制 2)創(chuàng)建分布式復(fù)制卷
磁盤存儲(chǔ)的平衡 平衡布局是很有必要的,因?yàn)椴季纸Y(jié)構(gòu)是靜態(tài)的,當(dāng)新的 bricks 加入現(xiàn)有卷,新創(chuàng)建的文件會(huì)分布到舊的 bricks 中,所以需要平衡布局結(jié)構(gòu),使新加入的 bricks 生效。布局平衡只是使新布局生效,并不會(huì)在新的布局中移動(dòng)老的數(shù)據(jù),如果你想在新布局生效后,重新平衡卷中的數(shù)據(jù),還需要對(duì)卷中的數(shù)據(jù)進(jìn)行平衡。
#在gv2的分布式復(fù)制卷的掛載目錄中創(chuàng)建測(cè)試文件入下 [root@node01 ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn) 127.0.0.1:/gv2 10G 65M 10G 1% /mnt [root@node01 ~]# cd /mnt/ [root@node01 mnt]# touch {x..z} #新創(chuàng)建的文件只在老的brick中有,在新加入的brick中是沒有的 [root@node01 mnt]# ls /data/brick2 1 2 3 4 5 6 x y z [root@node02 ~]# ls /data/brick2 1 2 3 4 5 6 x y z [root@node03 ~]# ll -h /data/brick1 總用量 0 [root@node04 ~]# ll -h /data/brick1 總用量 0 # 從上面可以看到,新創(chuàng)建的文件還是在之前的 bricks 中,并沒有分布中新加的 bricks 中 # 下面進(jìn)行磁盤存儲(chǔ)平衡 [root@node01 ~]# gluster volume rebalance gv2 start [root@node01 ~]# gluster volume rebalance gv2 status #查看平衡存儲(chǔ)狀態(tài) # 查看磁盤存儲(chǔ)平衡后文件在 bricks 中的分布情況 [root@node01 ~]# ls /data/brick2 1 5 y [root@node02 ~]# ls /data/brick2 1 5 y [root@node03 ~]# ls /data/brick1 2 3 4 6 x z [root@node04 ~]# ls /data/brick1 2 3 4 6 x z #從上面可以看出部分文件已經(jīng)平衡到新加入的brick中了 每做一次擴(kuò)容后都需要做一次磁盤平衡。 磁盤平衡是在萬不得已的情況下再做的,一般再創(chuàng)建一個(gè)卷就可以了。
移除 brick
你可能想在線縮小卷的大小,例如:當(dāng)硬件損壞或網(wǎng)絡(luò)故障的時(shí)候,你可能想在卷中移除相關(guān)的 bricks。
注意:當(dāng)你移除 bricks 的時(shí)候,你在 gluster 的掛載點(diǎn)將不能繼續(xù)訪問數(shù)據(jù),只有配置文件中的信息移除后你才能繼續(xù)訪問 bricks 中的數(shù)據(jù)。當(dāng)移除分布式復(fù)制卷或者分布式條帶卷的時(shí)候,移除的 bricks 數(shù)目必須是 replica 或者 stripe 的倍數(shù)。
但是移除brick在生產(chǎn)環(huán)境中基本上不做的,如果是硬盤壞掉的話,直接換個(gè)好的硬盤即可,然后再對(duì)新的硬盤設(shè)置卷標(biāo)識(shí)就可以使用了,后面會(huì)演示硬件故障或系統(tǒng)故障的解決辦法。
[root@node01 ~]# gluster volume stop gv2 [root@node01 ~]# gluster volume remove-brick gv2 replica 2 node03:/data/brick1 node04:/data/brick1 force #強(qiáng)制移除brick塊 [root@node01 ~]# gluster volume info gv2 Volume Name: gv2 Type: Replicate Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053 Status: Stopped Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node01:/data/brick2 Brick2: node02:/data/brick2 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off # 如果誤操作刪除了后,其實(shí)文件還在 /storage/brick1 里面的,加回來就可以了 [root@node01 ~]# gluster volume add-brick gv2 replica 2 node03:/data/brick1 node04:/data/brick1 force volume add-brick: success [root@node01 ~]# gluster volume info gv2 Volume Name: gv2 Type: Distributed-Replicate Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053 Status: Stopped Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node01:/data/brick2 Brick2: node02:/data/brick2 Brick3: node03:/data/brick1 Brick4: node04:/data/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
刪除卷 一般會(huì)用在命名不規(guī)范的時(shí)候才會(huì)刪除
[root@node01 ~]# gluster volume stop gv1 [root@node01 ~]# gluster volume delete gv
模擬誤刪除卷信息故障及解決辦法
[root@node01 ~]# ls /var/lib/glusterd/vols/ gv2 gv3 [root@node01 ~]# rm -rf /var/lib/glusterd/vols/gv3 #刪除卷gv3的卷信息 [root@node01 ~]# ls /var/lib/glusterd/vols/ #再查看卷信息情況如下:gv3卷信息被刪除了 gv2 [root@node01 ~]# gluster volume sync node02 #因?yàn)槠渌?jié)點(diǎn)服務(wù)器上的卷信息是完整的,比如從node02上同步所有卷信息如下: Sync volume may make data inaccessible while the sync is in progress. Do you want to continue? (y/n) y volume sync: success [root@node01 ~]# ls /var/lib/glusterd/vols/ #驗(yàn)證卷信息是否同步過來 gv2 gv3
模擬復(fù)制卷數(shù)據(jù)不一致故障及解決辦法
[root@node01 ~]# ls /data/brick2 #復(fù)制卷的存儲(chǔ)位置的數(shù)據(jù) 1 5 y [root@node01 ~]# rm -f /data/brick2/y [root@node01 ~]# ls /data/brick2 1 5 [root@node02 ~]# ls /data/brick2 1 5 y [root@node01 ~]# gluster start gv2 #因?yàn)橹瓣P(guān)閉了,如果未關(guān)閉可以忽略此步。 [root@node01 ~]# cat /mnt/y #通過訪問這個(gè)復(fù)制卷的掛載點(diǎn)的數(shù)據(jù)來同步數(shù)據(jù) [root@node01 ~]# ls /data/brick2/ #這時(shí)候再看復(fù)制卷的數(shù)據(jù)是否同步成功 1 5 y
3、glustefs分布式存儲(chǔ)優(yōu)化
Auth_allow #IP訪問授權(quán);缺省值(*.allow all);合法值:Ip地址 Cluster.min-free-disk #剩余磁盤空間閥值;缺省值(10%);合法值:百分比 Cluster.stripe-block-size #條帶大??;缺省值(128KB);合法值:字節(jié) Network.frame-timeout #請(qǐng)求等待時(shí)間;缺省值(1800s);合法值:1-1800 Network.ping-timeout #客戶端等待時(shí)間;缺省值(42s);合法值:0-42 Nfs.disabled #關(guān)閉NFS服務(wù);缺省值(Off);合法值:Off|on Performance.io-thread-count #IO線程數(shù);缺省值(16);合法值:0-65 Performance.cache-refresh-timeout #緩存校驗(yàn)時(shí)間;缺省值(1s);合法值:0-61 Performance.cache-size #讀緩存大?。蝗笔≈担?2MB);合法值:字節(jié) Performance.quick-read: #優(yōu)化讀取小文件的性能 Performance.read-ahead: #用預(yù)讀的方式提高讀取的性能,有利于應(yīng)用頻繁持續(xù)性的訪問文件,當(dāng)應(yīng)用完成當(dāng)前數(shù)據(jù)塊讀取的時(shí)候,下一個(gè)數(shù)據(jù)塊就已經(jīng)準(zhǔn)備好了。 Performance.write-behind:先寫入緩存內(nèi),在寫入硬盤,以提高寫入的性能。 Performance.io-cache:緩存已經(jīng)被讀過的、
3.1、優(yōu)化參數(shù)調(diào)整方式
命令格式:
gluster.volume set <卷><參數(shù)>
例如:
#打開預(yù)讀方式訪問存儲(chǔ)
[root@node01 ~]# gluster volume set gv2 performance.read-ahead on
#調(diào)整讀取緩存的大小
[root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M
3.2、監(jiān)控及日常維護(hù)
使用zabbix自帶的模板即可,CPU、內(nèi)存、磁盤空間、主機(jī)運(yùn)行時(shí)間、系統(tǒng)load。日常情況要查看服務(wù)器監(jiān)控值,遇到報(bào)警要及時(shí)處理。 #看下節(jié)點(diǎn)有沒有在線 gluster volume status nfsp #啟動(dòng)完全修復(fù) gluster volume heal gv2 full #查看需要修復(fù)的文件 gluster volume heal gv2 info #查看修復(fù)成功的文件 gluster volume heal gv2 info healed #查看修復(fù)失敗的文件 gluster volume heal gv2 heal-failed #查看主機(jī)的狀態(tài) gluster peer status #查看腦裂的文件 gluster volume heal gv2 info split-brain #激活quota功能 gluster volume quota gv2 enable #關(guān)閉quota功能 gulster volume quota gv2 disable #目錄限制(卷中文件夾的大小) gluster volume quota limit-usage /data/30MB --/gv2/data #quota信息列表 gluster volume quota gv2 list #限制目錄的quota信息 gluster volume quota gv2 list /data #設(shè)置信息的超時(shí)時(shí)間 gluster volume set gv2 features.quota-timeout 5 #刪除某個(gè)目錄的quota設(shè)置 gluster volume quota gv2 remove /data 備注:quota功能,主要是對(duì)掛載點(diǎn)下的某個(gè)目錄進(jìn)行空間限額。如:/mnt/gulster/data目錄,而不是對(duì)組成卷組的空間進(jìn)行限制。
3.3、Gluster日常維護(hù)及故障處理
注:給自己的提示:此處如有不詳之處查看qq微云–linux-glusterfs文件夾
1、硬盤故障
如果底層做了raid配置,有硬件故障,直接更換硬盤,會(huì)自動(dòng)同步數(shù)據(jù)。 如果沒有做raid處理方法:
2、一臺(tái)主機(jī)故障
一臺(tái)節(jié)點(diǎn)故障的情況包含以下情況:
物理故障
同時(shí)有多塊硬盤故障,造成數(shù)據(jù)丟失
系統(tǒng)損壞不可修復(fù)
解決方法:
找一臺(tái)完全一樣的機(jī)器,至少要保證硬盤數(shù)量和大小一致,安裝系統(tǒng),配置和故障機(jī)同樣的 IP,安裝 gluster 軟件,
保證配置一樣,在其他健康節(jié)點(diǎn)上執(zhí)行命令 gluster peer status,查看故障服務(wù)器的 uuid
[root@mystorage2 ~]# gluster peer status Number of Peers: 3 Hostname: mystorage3 Uuid: 36e4c45c-466f-47b0-b829-dcd4a69ca2e7 State: Peer in Cluster (Connected) Hostname: mystorage4 Uuid: c607f6c2-bdcb-4768-bc82-4bc2243b1b7a State: Peer in Cluster (Connected) Hostname: mystorage1 Uuid: 6e6a84af-ac7a-44eb-85c9-50f1f46acef1 State: Peer in Cluster (Disconnected) 復(fù)制代碼 修改新加機(jī)器的 /var/lib/glusterd/glusterd.info 和 故障機(jī)器一樣 [root@mystorage1 ~]# cat /var/lib/glusterd/glusterd.info UUID=6e6a84af-ac7a-44eb-85c9-50f1f46acef1 operating-version=30712 在信任存儲(chǔ)池中任意節(jié)點(diǎn)執(zhí)行 # gluster volume heal gv2 full 就會(huì)自動(dòng)開始同步,但在同步的時(shí)候會(huì)影響整個(gè)系統(tǒng)的性能。 可以查看狀態(tài) # gluster volume heal gv2 info
GlusterFS在企業(yè)中應(yīng)用場(chǎng)景
理論和實(shí)踐分析,GlusterFS目前主要使用大文件存儲(chǔ)場(chǎng)景,對(duì)于小文件尤其是海量小文件,存儲(chǔ)效率和訪問性能都表現(xiàn)不佳,海量小文件LOSF問題是工業(yè)界和學(xué)術(shù)界的人工難題,GlusterFS作為通用的分布式文件系統(tǒng),并沒有對(duì)小文件額外的優(yōu)化措施,性能不好也是可以理解的。
Media -文檔、圖片、音頻、視頻 *Shared storage -云存儲(chǔ)、虛擬化存儲(chǔ)、HPC(高性能計(jì)算) *Big data -日志文件、RFID(射頻識(shí)別)數(shù)據(jù)
西數(shù)科技: 司法鑒定/產(chǎn)品質(zhì)量鑒定/檢驗(yàn)檢測(cè)/數(shù)據(jù)恢復(fù)專家. 4006184118