GlusterFs部署及使用

目录

一、部署和使用

1. clusterfs服务器初始化

2. 部署glusterfs

 3.  创建volume

  4. 客户端挂载和使用

 5.  k8s使用glusterfs作为后端存储(静态供给glusterfs存储)

5.1 集群所有节点安装glusterfs客户端

5.2 k8s创建资源对象使用glusterfs存储

5.2.1 创建glusterfs-endpoints

5.2.2 为这些端点创建一个service,以便它们能够持久,不需要标签选择器

5.2.3 创建pv,pvc,pv中定义glusterfs的信息

5.2.4 创建deployment、service

二、Glusterfs扩/缩容

三、故障演练

四、优化

五、线上创建命令

glusterfs卷简介



一、部署和使用

1. clusterfs服务器初始化
# 三台机器需要添加hosts
10.1.63.1 a5000-glusterfs-server1                                                                                                                                                       
10.1.63.2 a5000-glusterfs-server2                                                                                                                                                       
10.1.63.3 a5000-glusterfs-server3 

# 将磁盘设置为GPT格式
parted /dev/sdb mklabel gpt

# 将所有磁盘空间都分给sdb1
parted /dev/sdb mkpart primary 0% 100%

# 初始化ext4文件系统
mkfs -t ext4 /dev/sdb1

# 获取sdb1的UUID
blkid  /dev/sdb1

# 设置开机自动挂载
vim /etc/fstab  
/dev/disk/by-uuid/9eb095cb-d9ae-4f03-99c5-98f312aa4e88 /glusterfs  ext4 defaults 0 1

# 创建挂载点
mkdir /glusterfs

# 进行挂载
mount -a 
2. 部署glusterfs

注意:部署过程很简单,只需要安装一个glusterfs-server即可,需要注意的是glusterfs 客户端也需要安装一个客户端工具,并且配置hosts可以解析glusterfs-server的主机名

# 安装软件-属性-通用
apt install software-properties-common

apt install -y glusterfs-server
systemctl enable glusterd --now

# 查看gluster节点状态
gluster peer status

# 增加节点
gluster peer probe a5000-glusterfs-server2

# 删除一个节点
gluster peer detach a5000-glusterfs-server2

# 查看glustrefs集群节点
gluster pool list

 3.  创建volume
# 查看所有卷的信息
gluster volume status all

# 创建volume  创建3副本卷,2副本会有脑裂的情况。不加replica的情况下默认是分布式卷
gluster volume create test-volume replica 3 transport tcp a5000-glusterfs-server1:/glusterfs/sunwenbo-test  a5000-glusterfs-server2:/glusterfs/sunwenbo-test a5000-glusterfs-server3:/glusterfs/sunwenbo-test

# 启动共享volume gluster守护进程端口24007,每创建一个逻辑卷,就会启动一个进程和端口,进程端口默认是49152,以此类推,第二个卷端口就是49153。
gluster volume start test-volume 

# 查看volume信息
gluster volume info

  4. 客户端挂载和使用
# 每台机器需要安装client
sudo apt -y install glusterfs-client
# 同时增加hosts解析记录
  cat >> /tmp/hosts << EOF                                                                                                                        
10.0.1.1 a5000-registry.chatglm.cn                                                                                                                                                      
10.1.63.1 a5000-glusterfs-server1                                                                                                                                                       
10.1.63.2 a5000-glusterfs-server2                                                                                                                                                       
10.1.63.3 a5000-glusterfs-server3                                                                                                                                                       
EOF

# 创建挂载点
mkdir -p /mnt/test-volume/

# 手动进行挂载
mount -t glusterfs 10.1.63.1:/test-volume /mnt/test-volume/

# 卸载卷
umount /mnt/test-volume 

# 开机自动挂载,修改/etc/fstab
10.1.63.1:/test-volume /mnt/test-volume/  glusterfs defaults 0 0

# 停止共享某一个volume
gluster volume stop  test-volume

# 删除卷
gluster volume delete  test-volume

注意:删除卷的前提是先停止卷,如果要删除卷下面的数据,现在客户端将卷下的数据删除完毕,再停止卷,再删除卷

 5.  k8s使用glusterfs作为后端存储(静态供给glusterfs存储)

已经在1.25版本后废弃

5.1 集群所有节点安装glusterfs客户端
sudo apt -y install glusterfs-client
5.2 k8s创建资源对象使用glusterfs存储
5.2.1 创建glusterfs-endpoints
可以参考: https://github.com/kubernetes/examples/blob/master/volumes/glusterfs/glusterfs-endpoints.yaml
vim glusterfs-endpoints.yaml
apiVersion: v1                                                                                                                                                                          
kind: Endpoints                                                                                                                                                                         
metadata:                                                                                                                                                                               
  name: glusterfs-cluster                                                                                                                                                               
subsets:                                                                                                                                                                                
- addresses:                                                                                                                                                                            
  - ip: 10.1.63.1                                                                                                                                                                       
  ports:                                                                                                                                                                                
  - port: 49152                                #填 写 卷 的 端 口 (官 网 说 在 端 口 字 段 中 提 供 任 何 有 效 值 (从 1到 65535)都 可 以 , 所 以 这 个 端 口 有 些 网 上 教 程 写 1的 )                                         
- addresses:                                                                                                                                                                            
  - ip: 10.1.63.2                                                                                                                                                                       
  ports:                                                                                                                                                                                
  - port: 49152                                #填 写 卷 的 端 口                                                                                                                             
- addresses:                                                                                                                                                                            
  - ip: 10.1.63.3                                                                                                                                                                       
  ports:                                                                                                                                                                                
  - port: 49152                                #填 写 卷 的 端 口  

kubectl create -f glusterfs-endpoints.yaml
5.2.2 为这些端点创建一个service,以便它们能够持久,不需要标签选择器
vim glusterfs-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: glusterfs-cluster        #名字要与Endpoints名字一样才能进行管理
spec:
  ports:
  - port: 49152

kubectl create -f glusterfs-service.yaml
5.2.3 创建pv,pvc,pv中定义glusterfs的信息
apiVersion: v1                                                                                                                                                                          
kind: PersistentVolume                                                                                                                                                                  
metadata:                                                                                                                                                                               
  name: glusterfs-pv                                                                                                                                                                    
spec:                                                                                                                                                                                   
  capacity:                                                                                                                                                                             
    storage: 5Gi                                                                                                                                                                        
  volumeMode: Filesystem                                                                                                                                                                
  accessModes:                                                                                                                                                                          
    - ReadWriteMany                                                                                                                                                                     
  persistentVolumeReclaimPolicy: Retain                                                                                                                                                 
  storageClassName: ""                                                                                                                                                                  
  glusterfs:                                                #定 义 gluster的 信 息                                                                                                           
    endpoints: glusterfs-cluster         #指 定 glusterfs的 endpoint                                                                                                                       
    endpointsNamespace: default                #指 定 glusterfs的 endpoint的 所 属 命 名 空 间                                                                                                    
    path: test-volume                                                                                                                                                                   
    readOnly: false                                                                                                                                                                     
---                                                                                                                                                                                     
apiVersion: v1                                                                                                                                                                          
kind: PersistentVolumeClaim                                                                                                                                                             
metadata:                                                                                                                                                                               
  name: glusterfs-pvc                                                                                                                                                                   
spec:                                                                                                                                                                                   
  accessModes:                                                                                                                                                                          
    - ReadWriteMany                                                                                                                                                                     
  volumeMode: Filesystem                                                                                                                                                                
  resources:                                                                                                                                                                            
    requests:                                                                                                                                                                           
      storage: 5Gi                                                                                                                                                                      
  storageClassName: ""

5.2.4 创建deployment、service
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - name: nginx 
          containerPort: 80
        volumeMounts:
        - name: pvc-volume                                
          mountPath: /var/log/nginx                #持久化nginx的日志
      volumes:
      - name: pvc-volume
        persistentVolumeClaim:
          claimName: glusterfs-pvc 
          readOnly: false
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: ClusterIP
---

二、Glusterfs扩/缩容

复制卷(Replicated)最大容量,是由宿主机的磁盘决定。生产环境下我们可以先移除glusterfs集群的一台机器,进行更换硬盘格式化后挂载再加入到集群。依次替换集群的机器完成扩容。

Distributed-Replicate分布式复制卷,获得两倍容量

三、故障演练

客户端正常挂载使用

当glusterfs-server2机器发生故障时不会影响客户端挂载使用,可以继续正常写入数据

且glusterfs集群正常的节点依然会存储数据

但是glusterfs-server2这台机器上不会写入新数据没有test5这个文件当glusterfs-server2服务恢复时,从下图可以看出数据会自动从另外两个节点进行同步注意:当glusterfs-server2发生故障时,我们只要不umount 既可以正常使用。如果umount后再想挂载必须得修复glusterfs-server2的服务或者更换挂载ip

四、优化

1. 要同时启用 tcp 和 rdma:

root@a5000-glusterfs-server1:~# gluster volume set test-volume config.transport tcp,rdma                                                                                                
volume set: success  

2. 执行 gluster peer status 后Hostname显示的是主机名,实际需求需要显示为ip

这么做的原因是可以不用配置hosts或者不用解析宿主机hostname

root@a5000-glusterfs-server2:/glusterfs/sunwenbo-test# gluster peer status                                                                                                              
Number of Peers: 2                                                                                                                                                                      
                                                                                                                                                                                        
Hostname: a5000-glusterfs-server1                                                                                                                                                       
Uuid: 5400d9f4-eb91-4163-a3b6-9e0a2b250028                                                                                                                                              
State: Peer in Cluster (Connected)                                                                                                                                                      
                                                                                                                                                                                        
Hostname: 10.1.63.3                                                                                                                                                                     
Uuid: 251f6223-bc13-40cc-a2dc-45b13e81d35b                                                                                                                                              
State: Peer in Cluster (Connected)  
# 修改hostname 为ip
# 执行peer probe后需要在对应的节点上修改,将hostname1改为对应的ip即可
cat /var/lib/glusterd/peers/251f6223-bc13-40cc-a2dc-45b13e81d35b                                                                 
uuid=251f6223-bc13-40cc-a2dc-45b13e81d35b                                                                                                                                               
state=3                                                                                                                                                                                 
hostname1=10.1.63.3

五、线上创建命令


gluster volume create model-data replica 3 transport tcp a5000-glusterfs-server1:/glusterfs/  a5000-glusterfs-server2:/glusterfs/  a5000-glusterfs-server3:/glusterfs/ force

启动命令
gluster volume start model-data               

集群的每台集群都需要创建挂载点
 mkdir -p /data/glusterfs/        
安装glusterfs client
apt -y install glusterfs-client
增加hosts解析记录
  cat >> /tmp/hosts << EOF                                                                                                                        
10.0.1.1 a5000-registry.chatglm.cn                                                                                                                                                      
10.1.63.1 a5000-glusterfs-server1                                                                                                                                                       
10.1.63.2 a5000-glusterfs-server2                                                                                                                                                       
10.1.63.3 a5000-glusterfs-server3                                                                                                                                                       
EOF
/etc/fstab 追加一条挂载信息
10.1.63.2:/model-data /data/glusterfs/  glusterfs defaults 0 0
挂载
mount -a                                                        

六、监控数据采集

wget https://github.com/ofesseler/gluster_exporter/releases/download/v0.2.7/gluster_exporter-0.2.7.linux-amd64.tar.gz                                                                                                               
tar xf gluster_exporter-0.2.5.linux-amd64.tar.gz                                                                                                                                                                                    
cd gluster_exporter-0.2.5.linux-amd64/                                                                                                                                                                                              
nohup ./gluster_exporter  &                                                                 

七、glusterfs卷简介

  • 分布式卷:不具备冗余

  • 条带卷:不具备冗余

  • 复制卷: a5000 是复制卷 创建复制卷,指定类型为replica,数值为2,且后面跟了2个Brick Server,所以创建的是复制卷。数据有备份,但是磁盘使用率低

  • 分布式条带卷:创建分布式条带卷,指定类型为stripe,数值为2,而且后面跟了4个Brick Server,是2的两倍,所以创建的是分布式条带卷,不具备冗余

  • 分布式复制卷:指定类型为replica,数值为2,而且后面跟了4个Brick Server,是2的两倍,所以创建的是分布式复制卷,例如32个brick,副本数为2,那么可用空间为32 / 2 * 单个brick的容量。32 / 2 * 3.5 = 56T

gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
  • 条带复制卷:类似RAID 10,同时具有条带卷和复制卷的特点

gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick
  • 分布式条带复制卷:三种基本卷的复合卷

参考文献:

https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/#types-of-volumes

https://blog.csdn.net/zyy1020075955/article/details/127313156

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloud孙文波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值