分佈式存儲 GlusterFS 介紹與部署

圖片

1.glusterfs概述

GlusterFS系統是一個可擴展的網絡文件系統,相比其餘分佈式文件系統,GlusterFS具備高擴展性、高可用性、高性能、可橫向擴展等特色,而且其沒有元數據服務器的設計,讓整個服務沒有單點故障的隱患。圖片當客戶端訪問GlusterFS存儲時,首先程序經過訪問掛載點的形式讀寫數據,對於用戶和程序而言,集羣文件系統是透明的,用戶和程序根本感受不到文件系統是本地仍是在遠程服務器上。讀寫操做將會被交給VFS(Virtual File System)來處理,VFS會將請求交給FUSE內核模塊,而FUSE又會經過設備/dev/fuse將數據交給GlusterFS Client。最後通過GlusterFS Client的計算,並最終通過網絡將請求或數據發送到GlusterFS Server上。node

2.glusterfs經常使用分佈式簡介

圖片分佈式卷也當作爲哈希卷,多個文件以文件爲單位在多個brick上,使用哈希算法隨機存儲。python

  • 應用場景:大量小文件
  • 優勢:讀/寫性能好
  • 缺點:若是存儲或服務器故障,該brick上的數據將丟失
  • 不指定卷類型,默認是分佈式卷
  • brick數量沒有限制

建立分佈式卷命令:linux

gluster volume create volume_name node1:/data/br1 node2:/data/br1

複製卷是將多個文件在多個brick上覆制多份,brick的數目要與須要複製的份數相等,建議brick分佈在不一樣的服務器上。nginx

  • 應用場景:對可靠性高和讀寫性能要求高的場景
  • 優勢:讀寫性能好
  • 缺點:寫性能差
  • replica = brick

建立複製卷:算法

gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1

replica:文件保存的份數圖片vim

條帶卷是將文件分紅條帶,存放在多個brick上,默認條帶大小128ksegmentfault

  • 應用場景:大文件
  • 優勢:適用於大文件存儲
  • 缺點:可靠性低,brick故障會致使數據所有丟失
  • stripe = birck
  • stripe:條帶個數 建立條帶卷:
gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1

分佈式條帶卷是將多個文件在多個節點哈希存儲,每一個文件再多分條帶在多個brick上存儲後端

  • 應用場景:讀/寫性能高的大量大文件場景
  • 優勢:高併發支持
  • 缺點:沒有冗餘,可靠性差
  • brick數是stripe的倍數

建立分佈式條帶卷:服務器

gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

分佈式複製卷是將多個文件在多個節點上哈希存儲,在多個brick複製多份存儲。網絡

  • 應用場景:大量文件讀和可靠性要求高的場景
  • 優勢:高可靠,讀性能高
  • 缺點:犧牲存儲空間,寫性能差
  • brick數量是replica的倍數
gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

圖片

條帶式複製卷是將一個大文件存儲的時候劃分條帶,而且保存多份

  • 應用場景:超大文件,而且對可靠性要求高
  • 優勢:大文件存儲,可靠性高
  • 缺點:犧牲空間寫性能差
  • brick數量是stripe、replica的乘積
gluster volume create volume_name stripe 2 replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

3.glusterfs環境

圖片

日誌存儲集羣採用的是分佈式複製卷,將多個文件在多個節點上哈希存儲,在多個brick複製多份存儲。共有五臺服務器,磁盤空間共有90T,那麼採用這種分佈式複製卷的方式,只有45T磁盤空間可用。而且須要採用分佈式複製卷方式須要要有雙數的brick,因此現採用一臺服務器上建立兩個brick,如上圖所示,10.102.23.4:/data_01/node和10.102.23.44:/data_01/node是備份關係,其餘節點均是如此,10.102.23.44做爲日誌存儲集羣的管理節點,nfs-ganesha服務只須要安裝在控制節點,客戶端則能夠經過nfs方式掛載。

# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/sysconfig/selinux #關閉selinux
# iptables -F #清除防火牆規則

安裝glusterfs(01-05)圖片

# yum install userspace-rcu-*
# yum install python2-gluster-3.13.2-2.el7.x86_64.rpm
# yum install tcmu-runner-* libtcmu-*
# yum install gluster*
# yum install nfs-ganesha-*
#這個nfs只要須要對外掛載的哪臺服務器須要安裝(10.102.23.44)
# systemctl start glusterd.service #全部服務器啓動glusterd
# systemctl start rpcbind
# systemctl enable glusterd.service
# systemctl enable rpcbind
# ss -lnt #查詢端口是否有爲24007,若是有則服務正常運行

建立集羣(在10.102.23.44節點上執行一下操做,向集羣中添加節點):

[root@admin-node ~]# gluster peer probe 10.102.23.44
peer probe: success. [root@admin-node ~]# gluster peer probe 10.102.23.45
peer probe: success.
[root@admin-node ~]# gluster peer probe 10.102.23.46
peer probe: success.
[root@admin-node ~]# gluster peer probe 10.102.23.47
peer probe: success.
[root@admin-node ~]# gluster peer probe 10.102.23.4
peer probe: success.

查看虛擬機信任狀態添加結果

[root@admin-node ~]# gluster peer status
Number of Peers: 4
Hostname: 10.102.23.46
Uuid: 31b5ecd4-c49c-4fa7-8757-c01604ffcc7e
State: Peer in Cluster (Connected)
Hostname: 10.102.23.47
Uuid: 38a7fda9-ad4a-441a-b28f-a396b09606af
State: Peer in Cluster (Connected)
Hostname: 10.102.23.45
Uuid: 9e3cfb56-1ed4-4daf-9d20-ad4bf2cefb37
State: Peer in Cluster (Connected)
Hostname: 10.102.23.4
Uuid: 1836ae9a-eca5-444f-bb9c-20f032247bcb
State: Peer in Cluster (Connected)

在全部節點進行如下磁盤操做:

[root@admin-node ~]# fdisk /dev/sdb

建立卷組:

[root@admin-node ~]# vgcreate vg_data01 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
[root@admin-node ~]# vgcreate vg_data02 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1

查看卷組:

[root@admin-node ~]# vgdisplay

建立邏輯卷:

[root@admin-node ~]# lvcreate -n lv_data01 -L 9TB vg_data01
[root@admin-node ~]# lvcreate -n lv_data02 -L 9TB vg_data02

查看邏輯卷:

[root@admin-node ~]# lvdisplay

格式化邏輯卷:

[root@admin-node ~]# mkfs.xfs /dev/vg_data01/lv_data01
[root@admin-node ~]# mkfs.xfs /dev/vg_data02/lv_data02

掛載邏輯卷:

[root@admin-node ~]# mkdir -p /data_01/node /data_02/node
[root@admin-node ~]# vim /etc/fstab
/dev/vg_data01/lv_data01 /data_01 xfs defaults 0 0
/dev/vg_data02/lv_data02 /data_02 xfs defaults 0 0
[root@admin-node ~]# mount /data_01
[root@admin-node ~]# mount /data_02

分佈式複製模式(組合型), 最少須要4臺服務器才能建立。

建立卷:

[root@admin-node ~]# gluster volume create data-volume replica 2   10.102.23.4:/data_01/node  10.102.23.44:/data_01/node  10.102.23.44:/data_02/node 10.102.23.45:/data_02/node  10.102.23.45:/data_01/node  10.102.23.4:/data_02/node 10.102.23.46:/data_01/node  10.102.23.47:/data_01/node  10.102.23.46:/data_02/node  10.102.23.47:/data_02/node force

啓動建立的卷:

[root@admin-node ~]# gluster volume start data-volume
volume start: data-volume: success全部機器均可以查看:
[root@admin-node ~]# gluster volume info

圖片查看分佈式卷的狀態:

[root@admin-node ~]# gluster volume status

圖片基於以上glusterfs部署,glusterfs分佈式複製卷已經完成

4.nfs-ganesha環境搭建

glusterfs服務自己也是支持nfs掛載,因爲現有生產環境存在多個網段,而且有些網段與glusterfs存儲服務器網段是不通,因此須要經過nginx代理nfs來實現nfs掛載。Glusterfs服務只是支持nfs3版本的掛載,在經過nginx代理方面也不是那麼方便,端口繁多,因此glusterfs與NFSs-Ganesha是完美組合。NFSs-Ganesha 經過FSAL(文件系統抽象層)將一個後端存儲抽象成一個統一的API,提供給Ganesha服務端,而後經過NFS協議將其掛載到客戶端。在客戶端上對掛出來的空間進行操做。而且NFSs-Ganesha 能夠指定nfs的版本。

在管理節點10.102.23.44上安裝nfs-ganesha,在一開始部署glusterfs已在管理節點上安裝,這裏就不重複說明了,直接簡要說明配置文件

[root@admin-node ~]# vim /etc/ganesha/ganesha.conf
.....................................
EXPORT
{
## Export Id (mandatory, each EXPORT must have a unique Export_Id)
#Export_Id = 12345;
Export_Id = 10;
## Exported path (mandatory)
#Path = /nonexistant;
Path = /data01;
## Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
#Pseudo = /nonexistant;
Pseudo = /data01; #客戶端經過nfs掛載的根目錄
## Restrict the protocols that may use this export. This cannot allow
## access that is denied in NFS_CORE_PARAM.
#Protocols = 3,4;
Protocols = 4; #客戶端nfs掛載的版本
## Access type for clients. Default is None, so some access must be
## given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block
#Access_Type = RW;
Access_Type = RW; #權限問題
## Whether to squash various users.
#Squash = root_squash;
Squash = No_root_squash; #root降級
## Allowed security types for this export
#Sectype = sys,krb5,krb5i,krb5p;
Sectype = sys; #類型
## Exporting FSAL
#FSAL {
#Name = VFS;
#}
FSAL {
Name = GLUSTER;
hostname = "10.102.23.44"; #glusterfs管理節點IP
volume = "data-volume"; #glusterfs卷名
}
}
...................
[root@admin-node ~]# systemctl restart nfs-ganesha
[root@admin-node ~]# systemctl enable nfs-ganesha
[root@admin-node ~]# showmount -e 10.102.23.44
Export list for 10.102.23.44: #nfs-ganesha搭建成功

5.客戶端掛載

以glusterfs方式掛載:

[root@admin-node ~]# mkdir /logs
[root@admin-node ~]# mount -t glusterfs 10.102.23.44:data-volume /logs/

圖片以NFS方式進行掛載:

在客戶端(10.1.99段):

[root@moban-00 ~]#yum -y install nfs-utils rpcbind
[root@moban-00 ~]# systemctl start rpcbind
[root@moban-00 ~]# systemctl enable rpcbind
[root@moban-00 ~]# mkdir /home/dwweiyinwen/logs/
[root@moban-00 ~]# mount -t nfs -o vers=4,proto=tcp,port=2049 10.102.23.44:/data01 /home/dwweiyinwen/logs/

圖片

原文:https://www.jianshu.com/p/4b7...

image

相關文章
相關標籤/搜索