部署GlusterFS及Heketi
一、前言及环境
在实践kubernetes的StateFulSet及各种需要持久存储的组件和功能时,通常会用到pv的动态供给,这就需要用到支持此类功能的存储系统了。在各类支持pv动态供给的存储系统中,GlusterFS的设定比较简单,且数据安全性比较有保障,相较于ceph和NFS。
环境(gluster-server之间互信):
二、部署GlusterFS
1.分别在三个节点上安装glusterfs-server程序包,并启动服务
[root@gluster-server01 ~]# yum clean all && yum makecache fast
[root@gluster-server01 ~]# yum install centos-release-gluster -y
[root@gluster-server01 ~]# yum --enablerepo=centos-gluster*-test install glusterfs-server -y
[root@gluster-server01 ~]# systemctl enable glusterd && systemctl start glusterd
[root@gluster-server01 ~]# 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: Hostname: gluster-server02
Uuid: 82a98899-550b-466c-80f3-c56b85059e9a
State: Peer in Cluster (Connected) Hostname: gluster-server03
Uuid: 9fdb08a3-b5ca-4e93--d49e737f92e8
State: Peer in Cluster (Connected)
三、部署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 ~]# for host in {..};do ssh-copy-id -i /etc/heketi/heketi_key.pub root@gluster-server${host} done
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": "",
"use_auth": false, #若要启动连接Heketi的认证,则需要将user_auth改为true,并在jwt{}段为各用户设置相应的密码,用户名和密码都可以自定义 "jwt": {
"admin": {
"key": "My Secret"
},
"user": {
"key": "My Secret"
}
}, "glusterfs": {
"executor": "ssh",
"sshexec": {
"keyfile": "/etc/heketi/heketi_key",
"user": "root",
"port": "",
"fstab": "/etc/fstab"
},
"db": "/var/lib/heketi/heketi.db",
"loglevel" : "debug"
}
}
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.107"
],
"storage": [
"192.168.1.107"
]
},
"zone":
},
"devices": [
"/dev/sdb"
]
}, { "node": {
"hostnames": {
"manage": [
"192.168.1.108"
],
"storage": [
"192.168.1.108"
]
},
"zone":
},
"devices": [
"/dev/sdb"
]
},
{ "node": {
"hostnames": {
"manage": [
"192.168.1.109"
],
"storage": [
"192.168.1.109"
]
},
"zone":
},
"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: 34be103e76c2254779d3c0dbd029acbd
Allowing file volumes on cluster.
Allowing block volumes on cluster.
Creating node 192.168.1.107 ... ID: 389b66793f41ed74ab30109e8d1faf85
Adding device /dev/sdb ... OK
Creating node 192.168.1.108 ... ID: d3bffc39419abfe1a04d2c235f9720f3
Adding device /dev/sdb ... OK
Creating node 192.168.1.109 ... ID: 45b7db6cd1cb0405f07ac634a82b9fc9
Adding device /dev/sdb ... OK
2.根据生成的随机Cluster ID号查看集群状态信息
[root@gluster-server01 heketi]# heketi-cli cluster info 34be103e76c2254779d3c0dbd029acbd #注意是第一行的cluster ID
Cluster id: 34be103e76c2254779d3c0dbd029acbd
Nodes:
389b66793f41ed74ab30109e8d1faf85
45b7db6cd1cb0405f07ac634a82b9fc9
d3bffc39419abfe1a04d2c235f9720f3
Volumes: Block: true File: true
3.创建一个测试使用的存储卷
[root@gluster-server01 heketi]# heketi-cli volume create --size=
Name: vol_9f2dde345a9b7566f8134c3952251d7a
Size:
Volume Id: 9f2dde345a9b7566f8134c3952251d7a
Cluster Id: 34be103e76c2254779d3c0dbd029acbd
Mount: 192.168.1.107:vol_9f2dde345a9b7566f8134c3952251d7a #客户端挂载的地址
Mount Options: backup-volfile-servers=192.168.1.109,192.168.1.108
Block: false
Free Size:
Reserved Size:
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distributed+Replica:
4.存储客户端安装glusterfs客户端程序并挂载测试存储卷(如果有k8s集群,也可以使用k8s来测试)
[root@gluster-client01 ~]# yum clean all && yum makecache fast
[root@gluster-client01 ~]# yum install centos-release-gluster -y
[root@gluster-client01 ~]# yum --enablerepo=centos-gluster*-test install glusterfs glusterfs-fuse -y
[root@gluster-client01 ~]# mount -t glusterfs 192.168.1.107:vol_9f2dde345a9b7566f8134c3952251d7a /mnt #创建volume信息中的Mount信息
[root@gluster-client01 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G .0G 15G % /
devtmpfs 330M 330M % /dev
tmpfs 341M 341M % /dev/shm
tmpfs 341M 4.8M 336M % /run
tmpfs 341M 341M % /sys/fs/cgroup
/dev/sda1 1014M 139M 876M % /boot
tmpfs 69M 69M % /run/user/
192.168.1.107:vol_9f2dde345a9b7566f8134c3952251d7a .0G 84M .0G % /mnt
5.测试完成删除存储卷命令
[root@gluster-server01 heketi]# heketi-cli volume delete 9f2dde345a9b7566f8134c3952251d7a #创建信息中的Volume Id
部署GlusterFS及Heketi的更多相关文章
- 在Kubernetes中部署GlusterFS+Heketi
目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...
- 独立部署GlusterFS+Heketi实现Kubernetes共享存储
目录 环境 glusterfs配置 安装 测试 heketi配置 部署 简介 修改heketi配置文件 配置ssh密钥 启动heketi 生产案例 heketi添加glusterfs 添加cluste ...
- CentOS 7.6 部署 GlusterFS 分布式存储系统
文章目录 GlusterFS简介 环境介绍 开始GlusterFS部署 配置hosts解析 配置GlusterFS 创建文件系统 安装GlusterFS 启动GlusterFS 将节点加入到主机池 创 ...
- CentOS 6 部署GlusterFS
首先需要关闭CentOS的防火墙和selinux,否则glusterfs将可能无法正常工作. /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着. /etc/in ...
- Ubuntu Server 12.04下部署glusterfs
1.安装环境 Linux:Ubuntuserver 12.04.1 LTS 64bit 2台 分布式文件系统:Gluster 测试环境:一台作文件服务器端(192.168.56.133),一台作客户端 ...
- glusterfs+heketi为k8s提供共享存储
背景 近来在研究k8s,学习到pv.pvc .storageclass的时候,自己捣腾的时候使用nfs手工提供pv的方式,看到官方文档大量文档都是使用storageclass来定义一个后端存储服务, ...
- 附009.Kubernetes永久存储之GlusterFS独立部署
一 前期准备 1.1 基础知识 Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期.Heketi会动态在集群内选择bricks构建所需的volumes,从而确保数 ...
- 附010.Kubernetes永久存储之GlusterFS超融合部署
一 前期准备 1.1 基础知识 在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是: 创建brick-->创建volume-->创建PV-->创建PVC--&g ...
- kubernetes实战(九):k8s集群动态存储管理GlusterFS及使用Heketi扩容GlusterFS集群
1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [root@ ...
随机推荐
- ccf-炉石传说-201609-3
大概是CCF 第三题比较简洁的一道题吧 尽量设计好一个数据结构: node t[2][10]: 存双方的英雄和随从 int num[2]: 存隋朝的数量 用p来实现双方的切换,因为有统一 的接口 ...
- Codeforces1056E.Check Transcription(枚举+Hash)
题目链接:传送门 题目: E. Check Transcription time limit per test seconds memory limit per test megabytes inpu ...
- eclipse中js报错简单快捷的解决方式
eclipse中对正确的js文件报错十分常见,我的项目中只要是以.js结尾的必会报错,作为一名小小的程序员,看到“满江红”甚是烦躁!今天就给大家分享一个方便又快捷的解决方案. 瞄准被报错的js文件点鼠 ...
- javascript第一个作业之网页计算器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- UT源码105032014093
需求描述: 设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Ce ...
- 20164318 毛瀚逸 Exp4 恶意代码分析
---恢复内容开始--- 1 关键内容 系统运行监控 (1)使用计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述分析结果. (2)安装配置sys ...
- robotframework之去除空格、去掉前面的0、增加空格换行符的方法,两个字符之间的拼接
1.去除空格 A)若需要去除两个拼接字符之间的空格,可以使用robotframework中的关键词Catenate,需要注意的是SEPARATOR=一定需要大写 B)若在一个字符串中存在空格,且需要去 ...
- C语言 基础
内存的定义 在学习python的时候 了解过内存的管理机制,例如引用计数,垃圾回收,小内存池的概念. 但是并不了解内存究竟是个什么东西?不了解内存的实际存储方式. Mac OS Mojave 处理器 ...
- java-使用icepdf实现pdf转换成png
下载icepdf的架包,并导入项目中,这里用到4个,如下: /** * 本地pdf文件转png */ public static int pdf2pngByFile(String target){ S ...
- 【凡尘】---react-redux---【react】
一.Redux与组件 react-redux是一个第三方插件使我们在react上更方便的来使用redux这个数据架构 React-Redux提供connect方法,用于从UI组件生成容器组件,conn ...