CentOS-7.6 IP: 192.168.2.7[1-3] VIP: 192.168.2.80 hostname=node[1-3].local
node[1-3].localnode
cat >> /etc/hosts <<'EOF' 192.168.2.71 node1.local 192.168.2.72 node2.local 192.168.2.73 node3.local EOF hostnamectl set-hostname node1.local hostnamectl set-hostname node2.local hostnamectl set-hostname node3.local
node[1-3].locallinux
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/conf firewall-cmd --set-default-zone=trusted firewall-cmd --complete-reload
node[1-3].local算法
rm -f /etc/yum.repos.d/*.repo curl -so /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo curl -so /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo sed -i '/aliyuncs.com/d' /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/epel-7.repo yum install -y centos-release-gluster41
node[1-3].localcentos
yum install -y glusterfs-server
node[1-3].local緩存
systemctl start glusterd systemctl enable glusterd
node1.local服務器
配置信任池網絡
gluster peer probe node2.local gluster peer probe node3.local
從信任池中刪除併發
gluster peer detach node3.local force
檢查信任池狀態curl
gluster peer status netstat -antp | grep glusterd
node1.localtcp
存儲空間爲全部設備的容量之和
配置存儲位置
# node[1-3].local mkdir -p /data/glusterfs/gv0
建立Gluster卷
gluster volume create gv0 transport tcp node1.local:/data/glusterfs/gv0 node2.local:/data/glusterfs/gv0 node3.local:/data/glusterfs/gv0 force
啓動GlusterFS卷
gluster volume start gv0 gluster volume status gluster volume info gv0
node[1-3].local
安裝
yum install -y keepalived
配置
cat > /etc/keepalived/keepalived.conf <<'EOF' ! Configuration File for keepalived global_defs { router_id 10 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 110 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 125 } virtual_ipaddress { 192.168.2.80 } } EOF
啓動服務 跟隨系統啓動
systemctl start keepalived systemctl enable keepalived
mount -t glusterfs -o defaults,_netdev 192.168.2.80:/gv0 /mnt
Distributed:分佈式卷,文件經過 hash 算法隨機分佈到由 bricks 組成的捲上。 Replicated: 複製式卷,相似 RAID 1,replica 數必須等於 volume 中 brick 所包含的存儲服務器數,可用性高。 Striped: 條帶式卷,相似 RAID 0,stripe 數必須等於 volume 中 brick 所包含的存儲服務器數,文件被分紅數據塊,以 Round Robin 的方式存儲在 bricks 中,併發粒度是數據塊,大文件性能好。 Distributed Striped: 分佈式的條帶卷,volume中 brick 所包含的存儲服務器數必須是 stripe 的倍數(>=2倍),兼顧分佈式和條帶式的功能。 Distributed Replicated: 分佈式的複製卷,volume 中 brick 所包含的存儲服務器數必須是 replica 的倍數(>=2倍),兼顧分佈式和複製式的功能。 分佈式複製卷的brick順序決定了文件分佈的位置,通常來講,先是兩個brick造成一個複製關係,而後兩個複製關係造成分佈。 企業通常用後兩種,大部分會用分佈式複製(可用容量爲 總容量/複製份數),經過網絡傳輸的話最好用萬兆交換機,萬兆網卡來作。這樣就會優化一部分性能。它們的數據都是經過網絡來傳輸的。
node1.local
存儲空間爲全部設備的容量之和
配置存儲位置
mkdir -p /data/glusterfs/gv0
建立Gluster卷
gluster volume create gv0 transport tcp node1.local:/data/glusterfs/gv0 node2.local:/data/glusterfs/gv0 node3.local:/data/glusterfs/gv0 force
啓動GlusterFS卷
gluster volume start gv0 gluster volume status gluster volume info gv0
存儲空間爲總容量的一半
# 注:複製模式,既AFR, 建立volume 時帶 replica x 數量: 將文件複製到 replica x 個節點中 # gluster volume create gv2 replica 2 node1.local:/data/glusterfs/gv2 node2.local:/data/glusterfs/gv2 force # gluster volume start gv2 # gluster volume info gv2 # 查看gv2信息 Type
寫入的時候是循環地一點一點在node01和node02的磁盤上
# gluster volume create gv3 stripe 2 node1.local:/data/brick3 node2.local:/data/brick3 force # gluster volume start gv3 # gluster volume info gv3 # 查看gv2信息 Type
最少須要4臺服務器才能建立
# 將原有的複製卷gv2進行擴容,使其成爲分佈式複製卷 # gluster volume stop gv2 # gluster volume add-brick gv2 replica 2 node3.local:/data/glusterfs/gv2 node4.local:/data/glusterfs/gv2 force # gluster volume start gv2 # gluster volume info gv2 # 查看gv2信息 Type
注意:當你給分佈式複製卷和分佈式條帶卷增長 bricks 時,你增長的 bricks 數目必須是複製或條帶數目的倍數, 例如:你給一個分佈式複製卷的 replica 爲 2,你在增長 bricks 的時候數量必須爲二、四、六、8等。 擴容後進行測試,發現文件都分佈在擴容前的卷中。
# 將原有的複製卷gv3進行擴容,使其成爲分佈式條帶卷 # gluster volume stop gv3 # gluster volume add-brick gv3 stripe 2 node3.local:/data/glusterfs/gv3 node4.local:/data/glusterfs/gv3 force # gluster volume start gv3 # gluster volume info gv3 # 查看gv3信息 Type
1)搭建條件
2)建立分佈式複製卷
磁盤存儲的平衡 平衡佈局是頗有必要的,由於佈局結構是靜態的,當新的 bricks 加入現有卷,新建立的文件會分佈到舊的 bricks 中,因此須要平衡佈局結構,使新加入的 bricks 生效。佈局平衡只是使新佈局生效,並不會在新的佈局中移動老的數據,若是你想在新佈局生效後,從新平衡卷中的數據,還須要對卷中的數據進行平衡。
磁盤存儲平衡
# gluster volume rebalance gv2 start
查看平衡存儲狀態
# gluster volume rebalance gv2 status
你可能想在線縮小卷的大小,例如:當硬件損壞或網絡故障的時候,你可能想在卷中移除相關的 bricks。 注意:當你移除 bricks 的時候,你在 gluster 的掛載點將不能繼續訪問數據,只有配置文件中的信息移除後你才能繼續訪問 bricks 中的數據。當移除分佈式複製卷或者分佈式條帶卷的時候,移除的 bricks 數目必須是 replica 或者 stripe 的倍數。 可是移除brick在生產環境中基本上不作的,若是是硬盤壞掉的話,直接換個好的硬盤便可,而後再對新的硬盤設置卷標識就能夠使用了,後面會演示硬件故障或系統故障的解決辦法。
# gluster volume stop gv2 # gluster volume remove-brick gv2 replica 2 node3.local:/data/glusterfs/gv2 node4.local:/data/glusterfs/gv2 force # gluster volume start gv2
若是誤操做刪除了後,其實文件還在 /storage/brick1 裏面的,加回來就能夠了
# gluster volume add-brick gv2 replica 2 node3.local:/data/glusterfs/gv2 node4.local:/data/glusterfs/gv2 force # gluster volume info gv2
gluster volume stop gv1 gluster volume delete gv1
模擬誤刪除卷信息故障及解決辦法
rm -rf /data/glusterfs/gv3 gluster volume sync node2.local
物理故障 同時有多塊硬盤故障,形成數據丟失 系統損壞不可修復 解決方法:
找一臺徹底同樣的機器,至少要保證硬盤數量和大小一致,安裝系統,配置和故障機一樣的 IP,安裝 gluster 軟件, 保證配置同樣,在其餘健康節點上執行命令 gluster peer status,查看故障服務器的 uuid 例如 node2 故障可在其餘節點查看
[root@node1 ~]# gluster peer status Number of Peers: 2 Hostname: node2.local Uuid: a2d1e5a4-56ff-498b-aed1-2377b27b1ee6 State: Peer in Cluster (Connected) Hostname: node3.local Uuid: c6aae718-c73d-4585-8f02-d1fec473fd38 State: Peer in Cluster (Connected) [root@node2 ~]# sed -i 's/UUID=.*/UUID=a2d1e5a4-56ff-498b-aed1-2377b27b1ee6/' /var/lib/glusterd/glusterd.info # 在信任存儲池中任意節點執行 就會自動開始同步,但在同步的時候會影響整個系統的性能 # gluster volume heal gv2 full # 查看狀態 # gluster volume heal gv2 info
優化參數
Auth_allow # IP訪問受權;缺省值(*.allow all);合法值:Ip地址 Cluster.min-free-disk # 剩餘磁盤空間閥值;缺省值(10%);合法值:百分比 Cluster.stripe-block-size # 條帶大小;缺省值(128KB);合法值:字節 Network.frame-timeout # 請求等待時間;缺省值(1800s);合法值:1-1800 Network.ping-timeout # 客戶端等待時間;缺省值(42s);合法值:0-42 Nfs.disabled # 關閉NFS服務;缺省值(Off);合法值:Off|on Performance.io-thread-count # IO線程數;缺省值(16);合法值:0-65 Performance.cache-refresh-timeout # 緩存校驗時間;缺省值(1s);合法值:0-61 Performance.cache-size # 讀緩存大小;缺省值(32MB);合法值:字節 Performance.quick-read # 優化讀取小文件的性能 Performance.read-ahead # 用預讀的方式提升讀取的性能,有利於應用頻繁持續性的訪問文件 Performance.write-behind # 先寫入緩存內,在寫入硬盤,以提升寫入的性能。 Performance.io-cache # 緩存已經被讀過的、
優化參數調整
# 命令格式: # gluster.volume set <卷><參數> # 例如: # 打開預讀方式訪問存儲 [root@node01 ~]# gluster volume set gv2 performance.read-ahead on # 調整讀取緩存的大小 [root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M
#看下節點有沒有在線 gluster volume status nfsp #啓動徹底修復 gluster volume heal gv2 full #查看須要修復的文件 gluster volume heal gv2 info #查看修復成功的文件 gluster volume heal gv2 info healed #查看修復失敗的文件 gluster volume heal gv2 heal-failed #查看主機的狀態 gluster peer status #查看腦裂的文件 gluster volume heal gv2 info split-brain #激活quota功能 gluster volume quota gv2 enable #關閉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 #設置信息的超時時間 gluster volume set gv2 features.quota-timeout 5 #刪除某個目錄的quota設置 gluster volume quota gv2 remove /data
quota功能,主要是對掛載點下的某個目錄進行空間限額。如:/mnt/gulster/data目錄,而不是對組成卷組的空間進行限制。