使用 Heketi 在 Ubuntu 22.04 上配置 GlusterFS |使用 Heketi 在 Ubuntu 22.04 上配置 GlusterFS |使用 Heketi 在 Ubuntu 22.04 上配置 GlusterFS |使用 Heketi 在 Ubuntu 22.04 上配置 GlusterFS |
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

使用 Heketi 在 Ubuntu 22.04 上配置 GlusterFS |

发表 admin at 2025年2月28日
类别
  • 未分类
标签

GlusterFS 是一款由 Gluster Inc 开发、目前由 Redhat 维护的开源软件。它用于提供对象、块和文件存储接口。它为非结构化数据提供经济实惠且灵活的存储,通常用于高数据密集型工作负载,包括云存储媒体流和 CDN。它可以部署在本地或云端,并支持无数协议,包括 NFS、SMB、CIFS、HTTP 和 FTP

Heketi 可用于通过提供 RESTful 管理界面来管理 Gluster 存储卷的生命周期。这使得 GlusterFS 可以轻松地与 Kubernetes、OpenStack Manila 和 OpenShift 等云服务集成,以实现卷的动态配置。 Heketi 自动确定集群中砖块的位置,将它们及其副本放置在不同的故障域中。它还支持无数的GlusterFS集群,从而可以提供不受单个GlusterFS集群限制的网络文件存储。一般来说,Heketi 使系统管理员可以更轻松地管理或配置块、磁盘或可信存储池。该服务为管理员管理所有硬件,从而实现按需存储的位置。

今天,我们将学习如何使用 Heketi 在 Ubuntu 22.04 上配置 GlusterFS

入门

对于本指南,我们将配置如下所示的环境:

  • 3 个用于 GlusterFS 的 Ubuntu 22.04 服务器
  • 每台服务器附有3个10GB的辅助磁盘
  • 须藤访问
  • Heketi 将设置在其中一台服务器上

对于没有 DNS 服务器的用户,可以在每台服务器上的 /etc/hosts 处配置 DNS 解析

$ sudo vim /etc/hosts
192.168.200.90 gluster01.computingforgeeks.com  gluster01
192.168.200.91 gluster02.computingforgeeks.com  gluster02
192.168.200.92  gluster03.computingforgeeks.com  gluster03

1.配置NTP时间同步

在开始之前,所有 3 个服务器上的时间同步非常重要。这可以使用网络时间协议 (NTP) 或 Chrony 守护程序来完成。

为此,请确保已安装 Chrony:

sudo apt -y install chrony

启动并启用服务:

sudo systemctl enable --now chronyd

在所有 3 台服务器上设置时区:

sudo timedatectl set-timezone Africa/Nairobi --adjust-system-clock
sudo timedatectl set-ntp yes

验证更改:

$ timedatectl 
               Local time: J5 2023-06-14 14:44:50 EAT
           Universal time: J5 2023-06-14 11:44:50 UTC
                 RTC time: J5 2023-06-14 11:44:50
                Time zone: Africa/Nairobi (EAT, +0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

2.在Ubuntu 22.04上安装GlusterFS

GlusterFS 存在于默认的 Ubuntu 22.04 存储库中。这使得安装变得如此简单。要在 Ubuntu 22.04 上安装 GlusterFS,请执行以下命令:

sudo apt install glusterfs-server

安装后,确保该服务已启动并启用:

sudo systemctl enable --now glusterd

查看服务的状态:

$ systemctl status glusterd
● glusterd.service - GlusterFS, a clustered file-system server
     Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-06-14 14:46:22 EAT; 4s ago
       Docs: man:glusterd(8)
    Process: 14472 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEV>
   Main PID: 14473 (glusterd)
      Tasks: 9 (limit: 4617)
     Memory: 11.0M
        CPU: 1.481s
     CGroup: /system.slice/glusterd.service
             └─14473 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

Jun 14 14:46:21 gluster01.computingforgeeks.com systemd[1]: Starting GlusterFS,

如果您启用了防火墙,请允许该服务通过:

sudo ufw allow 24007/tcp

一旦在所有 3 个节点上完成安装,我们将探测集群中的其他节点。从一个节点 gluster01 来说,执行以下命令:

# Perform on Node 01
sudo gluster peer probe gluster02
sudo gluster peer probe gluster03

查看状态:

sudo gluster peer status

示例输出:

3.在Ubuntu 22.04上安装Heketi

如前所述,Heketi 将仅安装在集群中的一个节点上。对于本指南,我们将其安装在 gluster01 上。从 GitHub 版本页面下载最新版本的 Heketi。

您还可以使用以下命令提取二进制文件:

wget https://github.com/heketi/heketi/releases/download/v10.4.0/heketi-v10.4.0-release-10.linux.amd64.tar.gz

提取存档:

for i in `ls | grep heketi | grep .tar.gz`; do tar xvf $i; done

将提取的二进制文件复制到您的路径:

sudo cp heketi/{heketi,heketi-cli} /usr/local/bin

现在验证安装:

$ heketi --version
Heketi v10.4.0-release-10 (using go: go1.15.14)

$ heketi-cli --version
heketi-cli v10.4.0-release-10

4.在Ubuntu 22.04上配置Heketi

在使用 Heketi 之前,我们需要进行一些配置。首先,为Heketi创建一个专用用户:

sudo groupadd --system heketi
sudo useradd -s /sbin/nologin --system -g heketi heketi

然后继续为 Heketi 创建配置和数据路径:

sudo mkdir -p /var/lib/heketi /etc/heketi /var/log/heketi
sudo cp heketi/heketi.json /etc/heketi

现在我们可以根据需要修改创建的配置文件:

sudo vim /etc/heketi/heketi.json

在该文件中,有几个可以修改的变量,其中包括:

##Set service port##
"port": "8080"

##Set admin and use secrets##
"_jwt": "Private keys for access",
  "jwt": {
    "_admin": "Admin has access to all APIs",
    "admin": {
      "key": "jvd7df8RN7QNeKV1"
    },
    "_user": "User only has access to /volumes endpoint",
    "user": {
      "key": "lMPgdZ8NtFNj6jgk"
    }
  },

##Configure glusterfs executor##
_sshexec_comment": "SSH username and private key file information",
    "sshexec": {
      "keyfile": "/etc/heketi/heketi_key",
      "user": "root",
      "port": "22",
      "fstab": "/etc/fstab",
......
},

##database path settings
"_db_comment": "Database file name",
    "db": "/var/lib/heketi/heketi.db",
....
},

同样在文件中,通过添加 (_) 注释掉以下行,如下所示:

    "_sshexec_comment": "SSH username and private key file information",
....
      "_xfs_sw": "Optional: Specify number of data disks in the underlying RAID device",
      "_xfs_su": "Optional: Specifies a stripe unit or RAID chunk size.",
      "_gluster_cli_timeout": "Optional: Timeout, in seconds, passed to the gluster cli invocations",
      "_debug_umount_failures": "Optional: boolean to capture more details in case brick unmounting fails",

    "_kubeexec_comment": "Kubernetes configuration",
      "_xfs_sw": "Optional: Specify number of data disks in the underlying RAID device.",
      "_xfs_su": "Optional: Specifies a stripe unit or RAID chunk size.",
      "_gluster_cli_timeout": "Optional: Timeout, in seconds, passed to the gluster cli invocations",
      "_debug_umount_failures": "Optional: boolean to capture more details in case brick unmounting fails",
.....

如果您使用 root 以外的 SSH 用户,请确保您已为 sudo 配置了无密码。完成所需的更改后,保存文件并为提供的用户生成 SSH 密钥,例如 root:

sudo -i
ssh-keygen -f /etc/heketi/heketi_key -t rsa -N ''
chown heketi:heketi /etc/heketi/heketi_key*

首先,如果使用 root 作为用户,请确保所有 3 台服务器都允许 root 登录:

$ vim /etc/ssh/sshd_config
PermitRootLogin yes

重新启动服务:

sudo systemctl restart sshd

使用以下命令将创建的公钥复制到所有其他 GlusterFS 节点:

for i in gluster01 gluster02 gluster03; do
 ssh-copy-id -i /etc/heketi/heketi_key.pub root@$i
done

使用私钥验证从 gluster01 对 GlusterFS 节点的访问:

root@gluster01:~# ssh -i /etc/heketi/heketi_key root@gluster02
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.19.0-41-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

460 updates can be applied immediately.
255 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

Last login: Wed Jun 14 17:10:36 2023 from 192.168.200.90
root@gluster02:~# exit

这表明 SSH 密钥正在按预期工作。 退出会话并继续进行以下配置。

为 Heketi 创建服务文件:

sudo vim /etc/systemd/system/heketi.service

将这些行添加到文件中:

[Unit]
Description=Heketi Server

[Service]
Type=simple
WorkingDirectory=/var/lib/heketi
EnvironmentFile=-/etc/heketi/heketi.env
User=heketi
ExecStart=/usr/local/bin/heketi --config=/etc/heketi/heketi.json
Restart=on-failure
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

保存文件并下载环境文件:

sudo wget -O /etc/heketi/heketi.env https://raw.githubusercontent.com/heketi/heketi/master/extras/systemd/heketi.env

为 Heketi 用户分配所有必需的权限:

sudo chown -R heketi:heketi /var/lib/heketi /var/log/heketi /etc/heketi

加载 Heketi 所需的所有内核模块:

for i in dm_snapshot dm_mirror dm_thin_pool; do
  sudo modprobe $i
done

重新加载守护进程并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable --now heketi

验证服务是否启动:

$ systemctl status heketi
● heketi.service - Heketi Server
     Loaded: loaded (/etc/systemd/system/heketi.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-06-14 17:48:36 EAT; 4s ago
   Main PID: 4545 (heketi)
      Tasks: 7 (limit: 4617)
     Memory: 5.7M
        CPU: 16ms
     CGroup: /system.slice/heketi.service
             └─4545 /usr/local/bin/heketi --config=/etc/heketi/heketi.json

Jun 14 17:48:36 gluster01.computingforgeeks.com heketi[4545]: Heketi v10.4.0-release-10 (using go: go1.15.14)
Jun 14 17:48:36 gluster01.computingforgeeks.com heketi[4545]: [heketi] INFO 2023/06/14 17:48:36 Loaded mock executor
....
Jun 14 17:48:36 gluster01.computingforgeeks.com heketi[4545]: Listening on port 8080

5. 创建Heketi拓扑文件

在本指南中,我们将使用 Ansible 脚本生成和维护 Heketi 拓扑文件,因为手动编辑 JSON 文件可能很累人。

为了更简单,请在您的系统上安装 Ansible:

sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

接下来,创建一个项目文件夹:

mkdir -p ~/projects/ansible/roles/heketi/{tasks,templates,defaults}

现在创建拓扑文件模板:

$ vim ~/projects/ansible/roles/heketi/templates/topology.json.j2
{
  "clusters": [
    {
      "nodes": [
      {% if gluster_servers is defined and gluster_servers is iterable %}
      {% for item in gluster_servers %}
        {
          "node": {
            "hostnames": {
              "manage": [
                "{{ item.servername }}"
              ],
              "storage": [
                "{{ item.serverip }}"
              ]
            },
            "zone": {{ item.zone }}
          },
          "devices": [
            "{{ item.disks | list | join ("\",\"") }}"
          ]
        }{% if not loop.last %},{% endif %}
    {% endfor %}
    {% endif %}
      ]
    }
  ]
}

保存此文件并创建一个与定义值匹配的变量文件:

vim ~/projects/ansible/roles/heketi/defaults/main.yml

添加以下行,并根据需要正确替换:

---
# GlusterFS nodes
gluster_servers:
  - servername: gluster01
    serverip: 192.168.200.90
    zone: 1
    disks:
      - /dev/sdb
      - /dev/sdc
      - /dev/sdd
  - servername: gluster02
    serverip: 192.168.200.91
    zone: 1
    disks:
      - /dev/sdb
      - /dev/sdc
      - /dev/sdd
  - servername: gluster03
    serverip: 192.168.200.92
    zone: 1
    disks:
      - /dev/sdb
      - /dev/sdc
      - /dev/sdd

创建 Ansible 任务:

vim ~/projects/ansible/roles/heketi/tasks/main.yml

在文件中,提供以下内容:

---
- name: Copy heketi topology file
  template:
    src: topology.json.j2
    dest: /etc/heketi/topology.json

- name: Set proper file ownership
  file:
   path:  /etc/heketi/topology.json
   owner: heketi
   group: heketi

创建 Ansible 剧本文件:

vim ~/projects/ansible/heketi.yml

将这些行添加到文件中:

---
- name: Generate Heketi topology file and copy to Heketi Server
  hosts: gluster01
  become: yes
  become_method: sudo
  roles:
    - heketi

创建主机文件:

$ vim ~/projects/ansible/hosts
gluster01

导航到目录:

cd ~/projects/ansible

查看创建的所有内容:

$ tree
.
├── heketi.yml
├── hosts
└── roles
    └── heketi
        ├── defaults
        │   └── main.yml
        ├── tasks
        │   └── main.yml
        └── templates
            └── topology.json.j2

5 directories, 5 files

现在使用以下命令运行 Ansible playbook:s

ansible-playbook -i hosts --user myuser --ask-pass --ask-become-pass heketi.yml

或者,您可以通过以下命令使用 root 用户或 sudo 无密码用户:

ansible-playbook -i hosts --user myuser heketi.yml

示例输出:

现在您将生成一个拓扑文件,如下所示:

$ cat /etc/heketi/topology.json 
{
  "clusters": [
    {
      "nodes": [
                    {
          "node": {
            "hostnames": {
              "manage": [
                "gluster01"
              ],
              "storage": [
                "192.168.200.90"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb","/dev/sdc","/dev/sdd"
          ]
        },            {
          "node": {
            "hostnames": {
              "manage": [
                "gluster02"
              ],
              "storage": [
                "192.168.200.91"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb","/dev/sdc","/dev/sdd"
          ]
        },            {
          "node": {
            "hostnames": {
              "manage": [
                "gluster03"
              ],
              "storage": [
                "192.168.200.92"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb","/dev/sdc","/dev/sdd"
          ]
        }              ]
    }
  ]
}

6.加载Heketi拓扑文件

一旦通过上述步骤创建了拓扑文件,我们就可以在 Heketi 上加载并使用它。要使用 CI 加载它,请使用以下语法运行命令

heketi-cli topology load --user admin --secret <heketi_admin_secret> --json=/etc/heketi/topology.json

替换 heketi_admin_secret,例如:

heketi-cli topology load --user admin --secret jvd7df8RN7QNeKV1 --json=/etc/heketi/topology.json

示例输出:

现在导出变量:

$ vim ~/.bashrc
export HEKETI_CLI_SERVER=http://heketiserverip:8080
export HEKETI_CLI_USER=admin
export HEKETI_CLI_KEY="Adminsecret"

来源简介:

source ~/.bashrc

现在查看集群:

$ heketi-cli cluster list
Clusters:
Id:e36f3593c6abde17ff69665043765e17 [file][block]

显示可用节点:

$ heketi-cli node list
Id:111dcab88510035789f3551a359e27fe	Cluster:e36f3593c6abde17ff69665043765e17
Id:3649b21cb354e55c3588868ddfa7ff92	Cluster:e36f3593c6abde17ff69665043765e17
Id:b9dbcd4773319d28e3f265d6ab6b52b6	Cluster:e36f3593c6abde17ff69665043765e17

您还可以使用以下命令查看节点:

$ sudo gluster pool list
UUID					Hostname 	State
44c4384a-313b-4726-87c7-89622250ab83	gluster02	Connected 
d1f8f291-f2cd-4a8b-8b26-91243d192ecf	gluster03	Connected 
d1f8f291-f2cd-4a8b-8b26-91243d192ece	localhost	Connected 

查看集群的更多详细信息

heketi-cli node info <NODE_ID>

例如:

$ heketi-cli node info 111dcab88510035789f3551a359e27fe
Node Id: 111dcab88510035789f3551a359e27fe
State: online
Cluster Id: e36f3593c6abde17ff69665043765e17
Zone: 1
Management Hostname: gluster03
Storage Hostname: 192.168.200.92
Devices:
Id:1072f75242b8f7cd32d450344c2bf9b4   Name:/dev/sdd            State:online    Size (GiB):500     Used (GiB):0       Free (GiB):500     Bricks:0       
Id:49e832b9834ec185b21960f411891292   Name:/dev/sdc            State:online    Size (GiB):500     Used (GiB):0       Free (GiB):500     Bricks:0       
Id:a8aca352fb2d742e9bda4d04e48877a9   Name:/dev/sdb            State:online    Size (GiB):500     Used (GiB):0       Free (GiB):500     Bricks:0    

为了验证 Gluster 卷是否按预期工作,我们将使用 Heketi 创建一个卷:

# heketi-cli volume create --size=1
Name: vol_e3791aa3f720f8e1e50c3d433326030f
Size: 1
Volume Id: e3791aa3f720f8e1e50c3d433326030f
Cluster Id: e36f3593c6abde17ff69665043765e17
Mount: 192.168.200.92:vol_e3791aa3f720f8e1e50c3d433326030f
Mount Options: backup-volfile-servers=192.168.200.91,192.168.200.90
Block: false
Free Size: 0
Reserved Size: 0
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distribute Count: 1
Replica Count: 3

查看创建的卷:

# heketi-cli volume list
Id:e3791aa3f720f8e1e50c3d433326030f    Cluster:e36f3593c6abde17ff69665043765e17    Name:vol_e3791aa3f720f8e1e50c3d433326030f

要查看拓扑,请执行:

heketi-cli topology info

现在玩具可以继续并根据需要使用 GlusterFS。要将其与 Kubernetes 集成,请按照此处提供的帮助进行操作:

  • 使用 Heketi 和 GlusterFS 配置 Kubernetes 动态卷配置

还有许多其他用例,请随意探索。我希望本指南对您很重要。

查看更多:

  • 在 CentOS 上使用 Heketi 设置 GlusterFS 存储
  • 使用 GlusterFS 和 Heketi 进行 Kubernetes 和 OpenShift 动态卷配置
  • 如何创建和删除 GlusterFS 卷
©2015-2025 Norria support@alaica.com