当前位置: 首页 > news >正文

GlusterFS 部署全攻略:详细步骤与要点解析(上)

文章目录

  • 1、二进制部署
    • 1.1 安装yum源
    • 1.2 准备服务器
    • 1.3 添加本地解析
    • 1.4关闭防火墙及selinux
    • 1.5 加载内核模块
    • 1.6 格式化分区和挂载brick
    • 1.7 安装GlusterFS
    • 1.8 iptables配置
    • 1.9 配置可信任池
    • 1.10 设置GlusterFS卷
    • 1.11 测试volume卷
  • 2、使用heketi将二进制GlusterFS集群作为k8s持久化存储

GlusterFS可支持多种部署方式,二进制部署,kubernetes部署,docker部署等等

1、二进制部署

GlusterFS二进制部署可支持Debian、Ubuntu、Redhat/Centos、Fedora、Arch Linux等多种Linux发行版,在此以国内使用最多的Centos发行版演示GlusterFS二进制部署流程

1.1 安装yum源

对于可公网访问环境,推荐使用yum安装方式,简单便捷,解决依赖;对于内网限制环境,可将RPM包提前下载准备好,进行自行安装。
以centos7为例:

  yum install centos-release-gluster -y

1.2 准备服务器

  1. 准备至少两台centos7服务器,数量越多可实现的卷类型越丰富
  2. 主机之间网络互通
  3. 每台主机至少两块硬盘,一块用于操作系统安装,另一块用于Gluster数据存储(数据盘可挂载多个,提高性能),防止系统盘损坏数据丢失,也是避免系统盘和数据盘发生IO抢占。

注意:GlusterFS将其动态生成的配置文件存储在/var/lib/glusterd中,如果在任何时间点GlusterFS无法写入这些文件,它会导致您的GlusterFS系统出现问题,或者让系统脱机,建议为/var/lib/glusterd,/var/log等这些目录单独创建分区以防发生这种问题。

1.3 添加本地解析

添加服务器本地解析
192.168.1.x server1
192.168.1.x server2
192.168.1.x server3

1.4关闭防火墙及selinux

 Cenos6: systemctl stop iptables ;chkconfig iptables offCentos7: systemctl stop firewalld;systemctl disable firewalld/etc/selinux/configSELINUX=disabled

1.5 加载内核模块

modprobe dm_snapshot
modprobe dm_mirror
modprobe dm_thin_pool

1.6 格式化分区和挂载brick

对于文件系统类型,推荐使用性能更好的xfs或者ext4
以下命令在每台节点上操作
fdisk /dev/sdb
mkfs.xfs -i size=512 /dev/sdb1
mkdir -p /bricks/brick1
echo -n /dev/sdb1 /bricks/brick1 xfs defaults 1 2 >> /etc/fstab
mount -a && mount
现在看到sdb1 挂载到/bricks/brick1
注意:在centos6上,需要安装xfsprogs包以支持格式化XFS文件系统
yum install xfsprogs

1.7 安装GlusterFS

在每台节点上安装
yum install GlusterFS-server -y
在centos8上安装时需要启动PowerTools源
dnf --enablerepo=powertools install GlusterFS-server
启动GlusterFS进程
systemctl start glusterd && systemctl enable glusterd

1.8 iptables配置

您可以使用iptables规则运行GlusterFS,但需要注意的是,默认情况下,glusterd将在tcp/24007上侦听,但在glusterd节点上打开该端口是不够的,每次添加brick时,它都会打开一个新端口(您可以通过“gluster volume status”查看)
根据您的设计,最好为 gluster/存储流量使用专用 NIC,因此通过您的 netfilter 解决方案“信任”nic/subnet/gluster 节点(CentOS 6 的 /etc/sysconfig/iptables 和 firewalld/firewall -cmd)
对于安全性要求不是非常高的使用场景,推荐关闭firewalld

1.9 配置可信任池

在任意一台机器执行以下命令:
gluster peer probe server2
gluster peer probe server3
在其中一台主机添加不在信任池中的其他主机
例如在server1上执行命令添加server2,server3主机
注意:一旦建立了信任池,只有受信任的成员可以将新服务器添加到池中,新服务器无法自行添加到信任池

1.10 设置GlusterFS卷

在server1和server2上执行以下命令
mkdir /bricks/brick1/gv0
在任意一台服务器执行:
gluster volume create gv0 replica 2 server1:/bricks/brick1/gv0 server2:/bricks/brick1/gv0
gluster volume start gv0

查看volume信息确保volume启动了
gluster volume info
注意:如果卷未启动,则有关出错的线索将在一台或两台服务器上/var/log/GlusterFS下的日志文件中 - 通常在etc-GlusterFS-glusterd.vol.log

1.11 测试volume卷

  在任意一台主机挂载volume测试mount -t GlusterFS server1:/gv0 /mntfor i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done首先检查挂载点ls -lA /mnt | wc -l
您应该看到返回了 100 个文件。接下来,检查每台服务器上的 GlusterFS 挂载点:ls -lA /bricks/brick1/gv0

2、使用heketi将二进制GlusterFS集群作为k8s持久化存储

在上一节安装完GlusterFS集群后,我们需要使用heketi将GlusterFS接入到k8s,作为后端持久化存储。heketi是一个GlusterFS管理软件,可以管理GlusterFS集群的卷创建、删除等操作
heketi管理GlusterFS集群需要注意:

  1. GlusterFS集群的各peer必须要有未安装文件系统的磁盘设备(磁盘设备未进行格式化)
  2. GlusterFS集群各peer的端口号不能太少,不然当peer上的brick将端口号用完后,会造成无法创建卷。
  3. GlusterFS的各peer不能组成集群,heketi可以自创建集群集合。

步骤:

  1. 准备磁盘
    如果是使用的全部磁盘,则磁盘不需要分区,直接使用/dev/sdb
    如果使用磁盘的部分空间,则需要对磁盘分区,使用/dev/sdb1

上一节我们使用/dev/sdb并进行了分区,因此我们需要将磁盘分区删除,并将磁盘数据清除,否则heketi将拒绝使用该磁盘

  umount /bricks/brick1fdisk /dev/sdb d w   #删除分区wipefs -a /dev/sdb #清除磁盘数据及信息 

注意⚠️:如果您使用的是另一块未格式化的新磁盘,上面的三个命令无需执行

  1. 安装heketi(在集群中任选一个节点安装)
    yum install heketi heketi-client

  2. 生成密钥并配置免密

# ssh-keygen -t rsa -q -f /etc/heketi/private_key -N ""# ssh-copy-id -i /etc/heketi/private_key.pub GlusterFS-node01# ssh-copy-id -i /etc/heketi/private_key.pub GlusterFS-node02# ssh-copy-id -i /etc/heketi/private_key.pub GlusterFS-node03# chown heketi.heketi /etc/heketi/private_key
  1. 配置heketi
  vi /etc/heketi/heketi.json{"_port_comment": "Heketi Server Port Number","port": “48080", #改为48080或其他端口"_use_auth": "Enable JWT authorization. Please enable for deployment","use_auth": true, #改为true"_jwt": "Private keys for access","jwt": {"_admin": "Admin has access to all APIs","admin": {"key": "admin@password"		#用于heketi认证的admin用户及密码},"_user": "User only has access to /volumes endpoint","user": {"key": "user@password"	#用于heketi认证的user用户及密码,可以不配置}},"_GlusterFS_comment": "GlusterFS Configuration","GlusterFS": {"_executor_comment": ["Execute plugin. Possible choices: mock, ssh","mock: This setting is used for testing and development.","      It will not send commands to any node.","ssh:  This setting will notify Heketi to ssh to the nodes.","      It will need the values in sshexec to be configured.","kubernetes: Communicate with GlusterFS containers over","            Kubernetes exec api."],"executor": “ssh",#改为ssh"_sshexec_comment": "SSH username and private key file information","sshexec": {"keyfile": "/etc/heketi/private_key","user": "root", #若这里使用root用户,则GlusterFS的机器之间不能禁用root"port": "22", "fstab": "/etc/fstab"},"_kubeexec_comment": "Kubernetes configuration","kubeexec": {"host" :"https://kubernetes.host:8443","cert" : "/path/to/crt.file","insecure": false,"user": "kubernetes username","password": "password for kubernetes user","namespace": "OpenShift project or Kubernetes namespace","fstab": "Optional: Specify fstab file on node.  Default is /etc/fstab"},"_db_comment": "Database file name","db": "/var/lib/heketi/heketi.db","_loglevel_comment": ["Set log level. Choices are:","  none, critical, error, warning, info, debug","Default is warning"],"loglevel" : "debug"}
}
将默认配置文件参考上述配置进行修改
  1. 启动并测试heketi
  systemctl enable heketi.service && systemctl start heketi.service

测试连通性

  curl http://GlusterFS-node01:48080/helloHello from Heketi  #返回结果
  1. 配置topology
vi /etc/heketi/topology.json #配置三个节点的使用信息,这里/dev/sdb表示后端存储所要使用的数据盘
{"clusters": [{"nodes": [{"node": {"hostnames": {"manage": [“10.140.xx.xx”],"storage": ["10.140.xx.xx"]},"zone": 1},"devices": ["/dev/sdb"]},{"node": {"hostnames": {"manage": ["10.140.xx.xx"],"storage": ["10.140.xx.xx"]},"zone": 1},"devices": ["/dev/sdb"]},{"node": {"hostnames": {"manage": ["10.139.xx.xx"],"storage": ["10.139.xx.xx"]},"zone": 1},"devices": ["/dev/sdb"]}]}]
}
  1. 配置环境变量,方便操作
echo “export HEKETI_CLI_SERVER=http://10.140.xx.xx:48080” >> /etc/profile.d/heketi.sh #heketi地址
echo “alias heketi-cli=‘heketi-cli --server “$HEKETI_CLI_SERVER” --user admin --secret admin@password” >> ~/.bashrc #heketi用户密码
source /etc/profile.d/heketi.sh
source ~/.bashrc
  1. 创建集群
heketi-cli topology load --json=/etc/heketi/topology.json
  1. 查看集群信息
heketi-cli cluster list
heketi-cli cluster info xxxx #xxxx为上条命令返回的id
heketi-cli node list
创建volume测试
heketi-cli volume create --size=2 --replica=3
heketi-cli volume list
mount -t GlusterFS 10.140.xx.xx:vol_4f1a171ab06adf80460c84f2132e96e0 /mnt
heketi-cli volume delete 4f1a171ab06adf80460c84f2132e96e0
  1. k8s接入heketi
    所有的k8s节点均安装GlusterFS-fuse,以保证正常使用
    yum install GlusterFS-fuse -y
    创建secret,heketi的认证密码,或者在kebesphere平台添加密钥
apiVersion: v1
kind: Secret
metadata:name: heketi-secretnamespace: kube-system
data:key: YWRtaW5AUEBzc1cwcmQ=
type: kubernetes.io/GlusterFSkey的值,使用base64转码生成echo -n "admin@password" | base64 这里的用户名密码为heketi配置文件中创建的用户密码创建storageclass(heketi-storageclass.yaml)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: GlusterFSnamespace: kube-system
parameters:resturl: “http://10.140.xx.xx:48080” 	#heketi的地址clusterid: "cca360f44db482f03297a151886eea19"  #在heketi节点使用heketi-cli cluster list命令返回的idrestauthenabled: "true" restuser: "admin" #heketi配置文件中创建的用户密secretName: "heketi-secret" # name/namespace与secret资源中定义一致secretNamespace: "kube-system"volumetype: "replicate:3" 
provisioner: kubernetes.io/GlusterFS
reclaimPolicy: Delete创建pvc测试
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: heketi-pvcannotations:volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/GlusterFS
spec:storageClassName: "GlusterFS"accessModes:- ReadWriteOnceresources:requests:storage: 1Gi查看sc和pvc的信息
kubectl get sc
kubectl get pvc
创建Pod挂载pvc(heketi-pod.yaml)
kind: Pod
apiVersion: v1
metadata:name: heketi-pod
spec:containers:- name: heketi-containerimage: busyboxcommand:- sleep- "3600"volumeMounts:- name: heketi-volumemountPath: "/pv-data"readOnly: falsevolumes:- name: heketi-volumepersistentVolumeClaim:claimName: heketi-pvc进入容器测试
kubectl exec -it heketi-pod /bin/sh

相关文章:

GlusterFS 部署全攻略:详细步骤与要点解析(上)

文章目录 1、二进制部署1.1 安装yum源1.2 准备服务器1.3 添加本地解析1.4关闭防火墙及selinux1.5 加载内核模块1.6 格式化分区和挂载brick1.7 安装GlusterFS1.8 iptables配置1.9 配置可信任池1.10 设置GlusterFS卷1.11 测试volume卷 2、使用heketi将二进制GlusterFS集群作为k8s…...

充分利用 AIStor 的网络配置

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhttps%3A%2F%2Ffiles.mdnice.com%2Fuser%2F41350%2F4ce80f61-875a-493b-a4ad-e884d7835be1.png&pos_idimg-flS gQlNx-1734678799…...

算法题(10):好数

审题: 需要判断出1-N的范围内有多少个好数,并输出 思路: 遍历数据:需要用for循环(从1循环到N) 每一位判断:用while循环,先从个位开始,每循环一次就让记录位数的变量&…...

使用二分查找法找出给定点距离给定点集合距离最近的点

1、场景描述 给定点Point A (x,y)和 直线点集合 Points [(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)......],计算出集合中距离点A最近的一个点 (如果集合中的两个点距离A点最近且相等,则只取其中一个) 2、代码&#x…...

国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案

随着科技高速发展,视频信号经过数字压缩,通过互联网宽带或者移动4G网络传递,可实现远程视频监控功能。将这一功能运用于施工现场安全管理,势必会大大提高管理效率,提升监管层次。而这些,通过Liveweb监控系统…...

构建MacOS应用小白教程(打包 签名 公证 上架)

打包 在package.json中,dependencies会被打进 Electron 应用的包里,而devDependencies则不会,所以必要的依赖需要放到dependencies中。files中定义自己需要被打进 Electron 包里的文件。以下是一个完整的 mac electron-builder的配置文件。 …...

Nginx 双向链表 ngx_queue_t

目录 一、基本概述 二、数据结构 三、接口描述与实现 1、相关宏接口 2、ngx_queue_middle 3、ngx_queue_sort 四、使用案例 整理自 nginx 1.9.2 源码 和 《深入理解 Nginx:模块开发与架构解析》 一、基本概述 双向链表的优势是可以快速进行数据插入、删除与…...

【vue】npm install 报错 python2 Error: not found: python2

如图所示,vue项目在下载依赖的时候报错找不到python2,有网友通过下载python2.7并配置环境变量解决了,这里有两个其他自测可用的方式,供各位作为参考。 报错的主要原因是因为【sass-loader】【node-sass】这两个依赖跟nodejs版本有…...

CS 144 check3: the TCP sender

Lecture Notes 略 Exercises 现在,在check3中,您将实现连接的另一边。 TCPSender是一种工具,它从出站字节流转换为将成为不可靠数据报的有效负载的段。 TCP sender的任务是确保receiver至少收到每个bytes一次。任务: 1、跟踪…...

Deepin/Linux clash TUN模式不起作用,因网关导致的问题的解决方案。

网关导致的问题的解决方案 查看路由 ip route寻找默认路由 默认路由应当为Mihomo default dev Mihomo scope link 如果不是,则 sudo ip route add default dev Mihomo在clash TUN开关状态发生变化时,Mihomo网卡会消失,所以提示找不到网卡…...

Tomato 靶机(通关攻略)

点击开启靶机 去kali终端输入 arp-scan -l //扫描靶机IP 扫出靶机IP192.168.131.171 第一步:信息收集 端口扫描 nmap -p- 192.168.131.171 敏感目录扫描 dirb http://192.168.131.171 总结: IP:192.168.168.131 开放端口:2…...

服务器被入侵登录不上怎么办?

在数字化时代,服务器作为数据存储与业务运行的核心载体,其安全性直接关系到企业的生死存亡。然而,随着网络攻击手段的不断升级,服务器被入侵的事件屡见不鲜,导致系统瘫痪、数据泄露等严重后果。当您发现自己的服务器被…...

达梦官方工具 SQLark数据迁移(oracle->达梦数据库)

应国产化需求需要,需将系统中涉及的各中间件替换成国产中间件,此文介绍了从Oracle迁移数据至达梦dm8的步骤,该文在windos环境下已验证测试过 1 SQLark介绍 SQLark是一款专为信创应用开发者设计的数据库开发和管理工具。它支持快速查询、创建和管理多种类型的数据库系统&#xf…...

redis数据类型:list

list 的相关命令配合使用的应用场景: 栈和队列:插入和弹出命令的配合,亦可实现栈和队列的功能 实现哪种数据结构,取决于插入和弹出命令的配合,如左插右出或右插左出:这两种种方式实现先进先出的数据结构&a…...

.NET周刊【12月第2期 2024-12-08】

国内文章 终于解决了.net在线客服系统总是被360误报的问题(对软件进行数字签名) https://www.cnblogs.com/sheng_chao/p/18581139 升讯威在线客服与营销系统由.net core和WPF开发,旨在开放、开源、共享。开发者为解决360与其他国产管家的误…...

C#—扩展方法

扩展方法 扩展方法是C#中一种特殊的静态方法,它定义在一个静态类中,但是可以像实例方法一样被调用,使得代码看起来更为直观和易于阅读。扩展方法允许你在不修改原始类的情况下,添加新的方法到现有的类型中。 有↓箭头的是扩展方…...

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …...

sql server 查询对象的修改时间

sql server 不能查询索引的最后修改时间,可以查询表,存储过程,函数,pk 的最后修改时间使用以下语句 select * from sys.all_objects ob order by ob.modify_date desc 但可以参考一下统计信息的最后修改时间,因为索…...

Qt之串口设计-线程实现(十二)

Qt开发 系列文章 - Serial-port(十二) 目录 前言 一、SerialPort 二、实现方式 1.创建类 2.相关功能函数 3.用户使用 4.效果演示 5.拓展应用-实时刷新 总结 前言 Qt作为一个跨平台的应用程序开发框架,在串口编程方面提供了方便易用…...

探索 Seaborn Palette 的奥秘:为数据可视化增色添彩

一、引言 在数据科学的世界里,视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息,还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库,而它的调色板(palette)功能,则为我们提供了调配绚…...

Linux创建普通用户和修改主机名

创建修改用户名和用户组 工作组相关命令 功能命令说明切换用户su username注销用户logout新建用户adduser username 创建用户并分配到用户组useradd -g test username 设置用户密码passwd username查看某一用户w username查看登录用户w查看登陆用户并显示IPwho查看登录历史…...

在 Spring Boot 3 中实现基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种有价值的访问控制模型,可增强安全性、简化访问管理并提高效率。它在管理资源访问对安全和运营至关重要的复杂环境中尤其有益。 我们将做什么 我们有一个包含公共路由和受限路由的 Web API。受限路由需要数据库中用户的有效 JWT。 现在用户…...

二八(vue2-04)、scoped、data函数、父子通信、props校验、非父子通信(EventBus、provideinject)、v-model进阶

1. 组件的三大组成部分(结构/样式/逻辑) 1.1 scoped 样式冲突 App.vue <template><!-- template 只能有一个根元素 --><div id"app"><BaseOne></BaseOne><BaseTwo></BaseTwo></div> </template><script…...

配置PostgreSQL用于集成测试的步骤

在进行软件开发时&#xff0c;集成测试是确保各个组件能够协同工作的关键环节。PostgreSQL作为一种强大的开源数据库系统&#xff0c;常被用于集成测试中。下面将详细介绍如何在不同的环境中配置PostgreSQL以支持集成测试。 1. 选择并安装PostgreSQL 首先&#xff0c;你需要根…...

【ComfyUI + 铅笔素描画风】艺术家DaTou发布了的彩色铅笔素描风格生成(真实感超强)

发布时间&#xff1a;2024年12月09日 项目主页&#xff1a;https://hf-mirror.com/Datou1111/shou_xin 基础模型&#xff1a;flux.1-dev comfyui工作流下载&#xff1a;https://pan.baidu.com/s/1FrLQ4o8ldckKwhIrN1Pv7g?pwd1220 自己测试 官方效果 生成猫猫 shou_xin, a m…...

Unity-Editor扩展GUI基本实现一个可拖拉放的格子列表

短短几百行代码,好吧,又是“参考”了国外的月亮 操作,还真地挺自然的。。。。。。国外的实现有点小牛 拖拉,增加+ 一个Element 鼠标左键长按,可以出提示 鼠标右键,清除Element, 有点小bug,不是很自然地完全清除, using System.Collections; using System.Collecti…...

后摩尔定律时代,什么将推动计算机性能优化的发展?

在摩尔定律时代&#xff0c;每两年芯片上的晶体管数量就会翻一番&#xff0c;这一看似不可避免的趋势被称为摩尔定律&#xff0c;它极大地促进了计算机性能的提高。然而&#xff0c;硅基晶体管不可能一直小下去&#xff0c;半导体晶体管的微型化推动了计算机性能的提升&#xf…...

SQL进阶技巧:如何计算商品需求与到货队列表进出计划?

目录 0 需求描述 1 数据准备 2 问题分析 3 小结 累计到货数量计算 出货数量计算 剩余数量计算 0 需求描述 假设现有多种商品的订单需求表 DEMO_REQUIREMENT&#xff0c;以及商品的到货队列表 DEMO_ARR_QUEUE&#xff0c;要求按照业务需要&#xff0c;设计一个报表&#…...

linux普通用户使用sudo不需要输密码

1.root用户如果没有密码&#xff0c;先给root用户设置密码 sudo passwd root #设置密码 2.修改visudo配置 su #切换到root用户下 sudo visudo #修改visudo配置文件 用户名 ALL(ALL) NOPASSWD: ALL #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名...

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…...