部署GlusterFS及Heketi

一、前言及环境

在实践kubernetes的StateFulSet及各种需要持久存储的组件和功能时,通常会用到pv的动态供给,这就需要用到支持此类功能的存储系统了。在各类支持pv动态供给的存储系统中,GlusterFS的设定比较简单,且数据安全性比较有保障,相较于ceph和NFS。

环境(gluster-server之间互信):

系统  IP  主机名称  磁盘  角色
CentOS Linux release 7.4 192.168.1.220 heketi   CFS-client
CentOS Linux release 7.4 192.e168.1.221 gluster-server01 /dev/sdb CFS-server/heketi
CentOS Linux release 7.4 192.168.1.222 gluster-server02 /dev/sdb CFS-server
CentOS Linux release 7.4 192.168.1.223 gluster-server03 /dev/sdb CFS-server

二、部署GlusterFS

1.分别在三个节点上安装glusterfs-server程序包,并启动服务
[root@gluster-server03 ~]#  yum install centos-release-gluster -y
[root@gluster-server03 ~]# yum --enablerepo=centos-gluster*-test install glusterfs-server -y 
[root@gluster-server03 ~]# systemctl enable glusterd && systemctl start glusterd
[root@gluster-server03 ~]# systemctl status glusterd
#确保服务器启动成功

#其他两个节点相同操作

2.在任意一节点发现其他节点,组成GlusterFS集群
复制代码
[root@gluster-server01 ~]# gluster peer probe gluster-server02
peer probe: success. 
[root@gluster-server01 ~]# gluster peer probe gluster-server03
peer probe: success. 
[root@gluster-server01 ~]# gluster peer status
Number of Peers: 2

Hostname: gluster-server02
Uuid: d82e2e1e-954d-463a-8abd-30851052fbfd
State: Peer in Cluster (Connected)

Hostname: gluster-server03
Uuid: a5bc9e32-b2cd-48a2-b0d6-5d526d0972bd
State: Peer in Cluster (Connected)
[root@gluster-server01 ~]# 
复制代码

三、部署Heketi(gluster-server01上)

Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期。 通过Heketi,就可以像使用OpenStack Manila,Kubernetes和OpenShift一样申请可以动态配置GlusterFS卷。Heketi会动态在集群内选择bricks构建所需的volumes,这样以确保数据的副本会分散到集群不同的故障域内。同时Heketi还支持任意数量的ClusterFS集群,以保证接入的云服务器不局限于单个GlusterFS集群。
1.安装Heketi服务
[root@gluster-server01 ~]# yum install heketi heketi-client  -y
2.配置heketi用户能够基于SSH秘钥认证的方式连接至GlusterFS集群各节点
[root@gluster-server01 ~]# ssh-keygen -f /etc/heketi/heketi_key -t rsa -N ''
[root@gluster-server01 ~]# chown heketi:heketi  /etc/heketi/heketi*
[root@gluster-server01 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@gluster-server01
[root@gluster-server01 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@gluster-server02
[root@gluster-server01 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@gluster-server03
3.heketi的主配置文件/etc/heketi/heketi.json,定义服务监听的端口、认证及连接Gluster存储集群的方式
复制代码
[root@gluster-server01 ~]#  cp /etc/heketi/heketi.json /etc/heketi/heketi.json-bak

[root@gluster-server01 ~]# cat /etc/heketi/heketi.json
{
"_port_comment": "Heketi Server Port Number",
"port": "8080",


"use_auth": false,


"jwt": {
"admin": {
"key": "My Secret"
},
"user": {
"key": "My Secret"
}
},


"glusterfs": {
"executor": "ssh",


"sshexec": {
"keyfile": "/etc/heketi/heketi_key",
"user": "root",
"port": "22",
"fstab": "/etc/fstab"
},



"db": "/var/lib/heketi/heketi.db",


"loglevel" : "debug"
}
}

#"use_auth": false,  #若要启动连接Heketi的认证,则需要将user_auth改为true,并在jwt{}段为各用户设置相应的密码,用户名和密码都可以自定义
复制代码
4.启动heketi服务
[root@gluster-server01 ~]# systemctl enable heketi && systemctl start heketi
[root@gluster-server01 ~]# systemctl status heketi
5.向heketi发起测试请求
[root@gluster-server01 ~]# curl http://gluster-server01:8080/hello
Hello from Heketi

四、设置Heketi系统拓扑

拓扑信息用于让Heketi确认可以使用的节点、磁盘和集群,管理员必须自行确定节点的故障域。故障域是赋予一组节点的整数值,这组节点共享相同的交换机、电源或其他任何会导致它们同时失效的组件。管理员必须确认哪些节点构成一个集群,Heketi使用这些信息来确保跨故障域中创建副本,从而提供数据冗余能力,Heketi支持多个Gluster存储集群
1、使用客户端加载预定义的集群拓扑(注意客户端的版本要与服务端保持一致)

示例:根据当前Gluster集群的实际环境将gluster-server01、gluster-server02、gluster-server03三个节点定义在同一个集群中,并指明各节点用于提供存储的设备

复制代码
[root@gluster-server01 heketi]# cat topolgy_demo.json 
{
  "clusters": [
    {
      "nodes": [
         {
           "node": {
               "hostnames": {
                   "manage": [
                      "192.168.1.221"
                    ],
                   "storage": [
                   "192.168.1.221"
                    ]
               },
          "zone": 1
         },
         "devices": [
            "/dev/sdb"
              ]
           },

         {  "node": {
               "hostnames": {
                   "manage": [
                      "192.168.1.222"
                    ],
                   "storage": [
                   "192.168.1.222"
                    ]
               },
          "zone": 1
         },
         "devices": [
            "/dev/sdb"
              ]
           },
         { "node": {
               "hostnames": {
                   "manage": [
                      "192.168.1.223"
                    ],
                   "storage": [
                   "192.168.1.223"
                    ]
               },
          "zone": 1
         },
         "devices": [
            "/dev/sdb"
              ]
           }     
        ]
     }
   ]
}
复制代码

加载拓扑信息,并添加各节点生成的随机ID号

复制代码
[root@gluster-server01 heketi]# echo "export HEKETI_CLI_SERVER=http://gluster-server01:8080" > /etc/profile.d/heketi.sh
[root@gluster-server01 heketi]# source /etc/profile.d/heketi.sh
[root@gluster-server01 heketi]# echo $HEKETI_CLI_SERVER
http://gluster-server01:8080
[root@gluster-server01 heketi]# heketi-cli topology load --json=topolgy_demo.json
Creating cluster ... ID: 1e3d367371b9ad2c44709055dd4c1fe0
        Allowing file volumes on cluster.
        Allowing block volumes on cluster.
        Creating node 192.168.1.221 ... ID: 867fa13056a7ae6214ea6bb2ce1a74cb
                Adding device /dev/sdb ... OK
        Creating node 192.168.1.222 ... ID: 26ff3e7ef93039f141f334bfb407168d
                Adding device /dev/sdb ... OK
        Creating node 192.168.1.223 ... ID: 46321ec9706e062a902d7080eed7576b
                Adding device /dev/sdb ... OK
复制代码
2.根据生成的随机Cluster ID号查看集群状态信息
复制代码
[root@gluster-server01 heketi]# heketi-cli cluster info 1e3d367371b9ad2c44709055dd4c1fe0  #注意第一行的Cluster ID
Cluster id: 1e3d367371b9ad2c44709055dd4c1fe0
Nodes:
26ff3e7ef93039f141f334bfb407168d
46321ec9706e062a902d7080eed7576b
867fa13056a7ae6214ea6bb2ce1a74cb
Volumes:

Block: true

File: true
复制代码
3.创建一个测试使用的存储卷
复制代码
[root@gluster-server01 heketi]#  heketi-cli volume create --size=5
Name: vol_f451e53336a2e4afa5e69995f9519910
Size: 5
Volume Id: f451e53336a2e4afa5e69995f9519910
Cluster Id: 1e3d367371b9ad2c44709055dd4c1fe0
Mount: 192.168.1.222:vol_f451e53336a2e4afa5e69995f9519910  #客户端挂载的地址
Mount Options: backup-volfile-servers=192.168.1.223,192.168.1.221
Block: false
Free Size: 0
Reserved Size: 0
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distribute Count: 1
Replica Count: 3
复制代码
4.存储客户端安装glusterfs客户端程序并挂载测试存储卷(如果有k8s集群,也可以使用k8s来测试)
[root@heketi ~]# yum install centos-release-gluster -y
[root@heketi ~]# yum --enablerepo=centos-gluster*-test install glusterfs glusterfs-fuse -y
复制代码
[root@heketi ~]# mount -t 192.168.1.222:vol_f451e53336a2e4afa5e69995f9519910 /mnt/
[root@heketi ~]# df -h
文件系统                                            容量  已用  可用 已用% 挂载点
/dev/mapper/cl-root                                  17G  2.0G   15G   12% /
devtmpfs                                            330M     0  330M    0% /dev
tmpfs                                               341M     0  341M    0% /dev/shm
tmpfs                                               341M  4.8M  336M    2% /run
tmpfs                                               341M     0  341M    0% /sys/fs/cgroup
/dev/sda1                                          1014M  139M  876M   14% /boot
tmpfs                                                69M     0   69M    0% /run/user/0
192.168.1.222:vol_f451e53336a2e4afa5e69995f9519910  5.0G   84M  5.0G    2% /mnt
复制代码
5.测试完成删除存储卷命令
[root@heketi ~]# heketi-cli volume delete 192.168.1.222:vol_f451e53336a2e4afa5e69995f9519910

 

posted @   星火撩原  阅读(263)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示

目录导航