Keepalived+Glustefs分佈式存儲

環境

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

selinux firewalld

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

安裝 glusterfs

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

安裝配置 keepalived

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

GlusterFS 五種卷

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)搭建條件

  • 塊服務器的數量必須是複製的倍數
  • 將按塊服務器的排列順序指定相鄰的塊服務器成爲彼此的複製
  • 例如,8臺服務器:
  • 當複製副本爲2時,按照服務器列表的順序,服務器1和2做爲一個複製,3和4做爲一個複製,5和6做爲一個複製,7和8做爲一個複製
  • 當複製副本爲4時,按照服務器列表的順序,服務器1/2/3/4做爲一個複製,5/6/7/8做爲一個複製

2)建立分佈式複製卷

磁盤存儲的平衡 平衡佈局是頗有必要的,由於佈局結構是靜態的,當新的 bricks 加入現有卷,新建立的文件會分佈到舊的 bricks 中,因此須要平衡佈局結構,使新加入的 bricks 生效。佈局平衡只是使新佈局生效,並不會在新的佈局中移動老的數據,若是你想在新佈局生效後,從新平衡卷中的數據,還須要對卷中的數據進行平衡。

磁盤存儲平衡

# gluster volume rebalance gv2 start

查看平衡存儲狀態

# gluster volume rebalance gv2 status

移除 brick

你可能想在線縮小卷的大小,例如:當硬件損壞或網絡故障的時候,你可能想在卷中移除相關的 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

glustefs分佈式存儲優化

優化參數

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目錄,而不是對組成卷組的空間進行限制。

相關文章
相關標籤/搜索