如何构建一个安全的Glusterfs分布式文件系统集群?

一、前言

本文主要通过实验方式展现对Glusterfs的一些配置与操作,仅供技术参考,不可作为生产上的指导。

本文不涉及Glusterfs的基本概念介绍,默认读者已经对Glusterfs有所认知。

全文的实验中,所有节点如果没有关闭firewalld,就需要添加相应端口和服务的防火墙规则,本文基于所有节点firewalld关闭进行的。

在glusterfs中,对volume参数的修改,大多需要将volme umount,修改参数完毕后,再mount。

二、调优

红帽 Gluster 存储附带两个已调优的调优配置文件,可以根据预期的工作负载来应用它们;rhgs-random-io 适用于数量多、规模小的读取和写入,rhgs-sequential-io 则适用于大型文件传输。它们都基于 throughput-performance 配置文件。

参数调优针对的对象是glusterfs集群的节点。而非整个集群。

三、加密集群

glusterfs的加密,是给glusterfs集群节点之间通讯加密,以及客户端到集群的机密通讯。

glusterfs集群之间加密通讯需要几个文件(所有节点,包括glusterfs节点和client。这些证书通常由企业内部签发):

/etc/ssl/glusterfs.pem

/etc/ssl/glusterfs.key

/etc/ssl/glusterfs.ca

/var/lib/glusterd/secure-access(手工创建,有这个文件后,glusterfs集群节点通过加密方式进行网络访问)

在所有server节点和client节点下载key并touch文件(以一个server节点为例):

添加节点:

确认glusterd

增加serverd:

在两个节点上各创建10G的thin pool:

在两个节点的thin pool上创建2G的lv:

在两个lv上创建文件系统:

在两个节点创建文件系统的mount点:

在两个节点创建brick:

创建volume:

启动volume:

接下来,我们的vulume进行权限限制,禁止客户端通过NFS访问它.

然后在客户端通过nfs mount卷,报错:

将限制取消:

可以mount成功:

接下来,对一个volume做安全限制。

在一个server节点:

允许所有server节点和client可以访问存储池:

再次查看volume的状态,与之前进行对比:

重启glusterfs所有相关服务。

接下来,对client进行配置

安装fuse:

Client挂载成功:

四、管理快照

现有的实验环境中:

查看已有volume的快照:

删除tigers快照:

接下来,将剩下的elephants快照克隆成一个新的volume:

接下来,配置几个和快照相关的参数。

snap-max-hard-limit:一个volume最大快照的数量

snap-max-soft-limit:快照数量超过这个以后旧的快照会自动删除

配置自动激活新的快照:

在客户端重新umount volume

为zoo volume启用user-serviceable snapshots

在客户端重新mount volume:

mount -a

接下来创建一个不带时间戳的快照:

接下来,为snapshot配置计划任务。

启动shared storage

五、配置分层

在Red Hat Gluster Storage中,分层将经常访问的数据放在更高的位置执行热点层(如固态驱动器(SSD))和不活动的数据到性能较低的层冷层(如旋转磁盘),没有任何I / O中断。当活动的水平数据被识别,分层使用重新平衡逻辑将活动和非活动数据重新定位到最多适当的存储层。数据根据访问频率定义为热或冷。当文件访问增加时,数据被移动到热层。相反,当文件访问数据减少时,数据将重新定位到冷级。

分层架构

分层转换器基于 DHT 和重新平衡逻辑,将一个卷分割为两个子卷:hot 和 cold。hot 子卷被视为 cold 子卷的缓存。转换器负责决定将哪一分层用于文件,以及何时在分层之间迁移文件。一个文件可以驻留于任一个卷,但一个文件不能分割到两个子卷上。文件迁移按照以下条件发生:

  • 热度:文件被访问的频率。
  • 容量:达到了 hot 子卷的容量(或水位)。

cluster.watermark-hi和cluster.watermark-hi是高水位和低水位。

数据移动框架

数据移动框架是利用重新平衡逻辑的迁移逻辑一般化。用于迁移文件的触发器由应用驱动。文件被升级或降级到适当的分层。可以配置文件的升级和降级检查频率,以适合具体的 glusterfs 架构。

数据移动触发器

数据移动触发器是触发文件从源存储单元到目标存储单元的机制。源存储单元 (SSU) 和目标存储单元 (DSU) 分别指定从中迁移出数据的 glusterfs brick/卷,以及迁移后数据所驻留的 glusterfs brick/卷。数据移动触发器将创建数据移动请求 (DMR),该请求将提交至数据移动服务 (DMS)。触发器有两个,即 I/O Path Trigger和 Scanning Trigger。

  • I/O Path Trigger
  • 当文件符合指定的数据移动规则时,此触发器将启动。
  • Scanner Trigger
  • 根据指定的移动规则,Scanner Trigger 遍历指定的源单元并选择对象/文件。在选择对象/文件后,向数据移动服务提交数据移动请求。

数据移动服务 (DMS)

数据移动服务负责数据的实际移动。此服务接收由数据移动触发器提交的数据移动请求。数据移动请求指定用于处理该请求的适当插件。

查看一个已有的volume:

接下来,给volume增加hot tier:

gluster volume tier prod-vol attach replica 2 serverc:/bricks/brick-c2/brick serverd:/bricks/brick-d2/brick

确认volume的状态:

查看tier的状态:

接下来,我们给另外一个volume删除tier。

删除brick-c5和brick-d5的tier(不能只删除部分tier,只能先删除删除所有的4个,再添加回不需要删除的两个):

将需要的两个brick tier加回来:

六、配置ACLs和配额

本实验中,对graphics volume设置配额。

查看volume:

在graphics volume hard-limit 针对/raw 1 GiB, soft limit设置为50%.

接下来,把volume的硬超时设置为5s,软超时为1s:

下面命令含义是让df查看目录的时候,显示的剩余空间是配额空间,而不是物理剩余空间。

客户端重新挂载volume:

尝试写入大于1G文件:

当文件大于1G的时候,就会提示超出限额。

接下来,配置ACLs。

客户端的fstab配置中设置acl:

在挂载的文件系统中创建目录,并设置属组:

让目录可以被属组的成员有完全访问的权限:

属组的成员对于新创建的文件也有完全访问权限:

directors组对现有文件和新创建文件有只读权限:

配置volume的qouta:

七、配置异地复制

异地复制在两个卷之间提供异步的单向增量复制。这表示对卷进行的更改将同步到卷,但这种同步不是即刻执行的。通过运行修改版本的 rsync (称为 gsyncd),在主卷和从卷之间使用 SSH 连接。

异地复制可以在同一主机上的卷之间配置,也可以在本地卷和远程主机上的卷之间配置。这一远程主机可以使用同一数据中心的 LAN、WAN 或者互联网进行连接。

异地复制和复制卷并不相同。复制卷镜像同一受信存储池中 brick 之间的数据,而异地复制则镜像(地理上分散的)受信存储池之间的数据。复制卷用于实现高可用性,而异地复制则用于备份和灾难恢复。还有一个区别,复制卷是同步的,任何更改都会立即写入所有 brick;而异地复制是异步的,更改会以某种间隔批量同步。

异地复制还能以级联的方式配置。单个主卷可以同步到多个从卷,这些从卷又可以各自同步到一个或多个从卷。这可用于实现数据同步到全球各地多个数据中心的设置。

本是实验中,serverc和serverd是一个glusterfs集群:

servere是另外一个glusterfs集群

两个集群之间做volume的异地复制。datavol到backupvol。

NFS Ganesha和异地等功能要求共享存储在群集的所有节点上都可用。这种情况下需要对volume启用gluster_shared_storage的gluster参数。

接下来,创建用于异步复制的用户:geouser

先创建ssh key:

在servere,创建一个名为/ var / mountbroker-root的新目录。 这个目录

必须使用权限0711创建,并且具有与/ home相同的SELinux上下文。 这个

目录将用于在异地过程中处理(无特权)的挂载。

将mountbroker-root目录设置成/var/mountbroker-root.

Set the mountbroker user for the backupvol volume to geouser.

Set the geo-replication-log-group group to geogroup.

允许RPC连接:

重启服务:

为异地复制的进程创建ssh key

On serverc, create and push the SSH keys that will be used for georeplication.

On servere, copy the keys pushed in the previous step to the correct locations

配置两个卷之间的复制关系:

启动异地卷复制:

查看异地复制的进度:

查看backupvol的bricks:

到对应的bricks中,可以看到拷贝过来的文件:

影响异地复制的选项也可以直接在主卷上设置。changelog.rollover-time决定更改日志检查更改的频率与主volume同步。此设置的默认值为15秒。

我们将它改成5s:

ignore-deletes参数默认为false。

如果设置为true,那么在主volume上删除文件,复制卷上的文件不会被删除。

魏新宇

  • "大魏分享"运营者、红帽资深解决方案架构师
  • 专注开源云计算、容器及自动化运维在金融行业的推广
  • 拥有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鉴定级)等管理认证。
  • 拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技术认证。

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2018-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PhpZendo

Redis 持久化(persistence)技术口袋书

RDB 持久化:可以在指定时间间隔内,生成数据集在这个时间点的快照。 AOF 持久化:通过记录服务器执行的所有写操作命令,在服务器重启时,通过重新执行这些命令来...

531
来自专栏Albert陈凯

spark on mesos 两种运行模式

原文地址:http://blog.csdn.net/lsshlsw/article/details/47104913 Spark on mesos 有粗粒度(c...

3114
来自专栏温安适的blog

基于zookeeper+leveldb的activemq集群

3784
来自专栏服务端思维

常用性能监控指南

这个命令适合用来实时掌握操作系统的整体情况,且能够实时反映出系统各个进程的资源的占用情况,类似于 windows 的任务管理器。使用 top 命令可以显示进程信...

742
来自专栏散尽浮华

redis持久化策略梳理及主从环境下的策略调整记录

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。可以不定期的通过异步方式保存到磁盘上(即“半持久化模式”...

33510
来自专栏我是攻城师

Elasticsearch如何保证数据不丢失?

6789
来自专栏散尽浮华

Linux下Redis主从复制以及SSDB主主复制环境部署记录

前面的文章已经介绍了redis作为缓存数据库的说明,本文主要说下redis主从复制及集群管理配置的操作记录: Redis主从复制(目前redis仅支持主从复制模...

2247
来自专栏zhangdd.com

linux redis最新官方集群安装配置教程

Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.

372
来自专栏追不上乌龟的兔子

使用MongoDB构建数据库集群

MongoDB是一个领先的非关系型数据库管理系统,也是NoSQL运动的重要成员。MongoDB不是使用关系数据库管理系统(RDBMS)的表和固定模式,而是在文档...

783
来自专栏云计算

将基于MicroProfile的应用程序部署到IBM Cloud Private

Eclipse MicroProfile是一个开源项目,用于优化Java企业版的微服务体系结构。基于MicroProfile的应用程序可以部署到K...

20110

扫码关注云+社区