如何构建一个安全的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 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

一款功能丰富的Perl后门程序分析

最近通过Cowrie蜜罐捕获一枚有趣的后门程序,此程序用perl语言编写。功能包括:DDoS(udpflood、tcpflood、httpflood、sqlfl...

38510
来自专栏北京马哥教育

Linux服务简介-关闭不需要的Linux服务

Linux服务(Linux services)对于每个应用Linux的用户来说都很重要。关闭不需要的服务,可以让Linux运行的更高效,但并不是所有的Linux...

4324
来自专栏张戈的专栏

CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法

这几天复习运维知识,也没怎么关注业界新闻,可等我一关注,又“捅娄子”了,Linux 继上次CVE-2014-6271漏洞爆发以来,再次爆发一个严重漏洞:CVE-...

3164
来自专栏企鹅号快讯

Webpack 持久化缓存实践

作者:happylindz https://github.com/happylindz/blog/issues/7 前言 最近在看 webpack 如何做持久化...

3155
来自专栏Java技术

Nginx初探

Nginx——Ngine X,是一款自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;也就是说Nginx本身...

862
来自专栏cs

linux学习笔记五

笔记摘抄自《linux操作系统基础及应用》 ---- 作业控制 正在执行的一个或者多个程序可形成一个作业。使用管道命令和重定向命令,一个作业可以启动多个进程...

3176
来自专栏FreeBuf

基于Tor网络的钓鱼邮件分析

五月十一日,我们的蜜罐系统捕获到来自xxxxxxxxx@uscourtsgov.com邮箱的钓鱼邮件。其中uscourtsgov就已经是一个很唬人的服务器名称了...

1150
来自专栏刺客博客

PHP获取域名备案信息的API接口

7725
来自专栏FreeBuf

Ubuntu安装Kali工具集:Katoolin

在真实渗透环境下往往需要一个稳定、安全、可随时操作的环境,家中的电脑不能一直开着,而且还有解决公网IP的问题,这时候我们往往需要一台vps,但是市面上的vps往...

4756
来自专栏Python、Flask、Django

Docker服务无法正常启动,解决方法之一

1664

扫码关注云+社区