硬件要求

  1. 至少 2 台服务器,并命名为 server1 server2
  2. 每台服务器至少 2 块硬盘,1 块安装操作系统,另外一块提供 GlusterFS 服务
  3. 建议使用 2C、2G、1GBps 以上配置的服务器
  4. 建议使用 2 个网卡,将存储和管理网络分开

软件要求

  1. 设置 DNS 和 NTP,保证各节点的时间相同,且使用主机名能找到响应的服务器
  2. 保证在 BIOS 中关闭节电模式
  3. 保证将将网卡安装并设置在最快速的 PCI-E 总线上

服务器信息

  • 系统:RHEL 7
  • 服务器:

    • k8s-work1
    • k8s-work2
    • k8s-work3

Gluster 安装

安装 yum 源

To Use the RPMs from Storage SIG, you need to install the centos-release-gluster RPM as it will provide the required YUM repository files. This RPM is available from CentOS Extras.

Example (for CentOS 7 / x86_64):

yum install centos-release-gluster

格式化并挂载 bricks

在每台服务器上执行以下操作:

分区

注意:分区前请确保该磁盘上的重要数据已经被备份。

fdisk /dev/sdb

使用 d 命令删除所有已存在分区,直到输入 p 命令时不显示任何分区。

使用 n 命令创建一个分区,以下为创建过程:

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): 直接回车
分区号 (1-4,默认 1):直接回车
起始 扇区 (2048-67108863,默认为 2048):直接回车
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-67108863,默认为 67108863):
将使用默认值 67108863
分区 1 已设置为 Linux 类型,大小设为 32 GiB

使用 t 命令,然后输入 83 设置分区类型为 “Linux”。

使用 w 命令,保存分区表并退出。

格式化

格式化为 xfs 格式。

mkfs.xfs -i size=512 /dev/sdb1

创建挂载点并挂载:

mkdir -p /bricks/brick1
vi /etc/fstab

将以下内容添加到打开的文件结尾:

/dev/sdb1 /bricks/brick1 xfs defaults 1 2

保存并退出。

mount -a && mount

现在应该可以看到 sdb1 被挂载到 /bricks/brick1

Note: 在 CentOS 6 系统中, 你需要安装 xfsprogs 才能使用 XFS 文件系统。
# yum install xfsprogs

安装 GlusterFS

yum install glusterfs-server -y

启动 GlusterFS 管理服务:

systemctl enable glusterd
systemctl start glusterd

查看状态:

# systemctl status glusterd
● glusterd.service - GlusterFS, a clustered file-system server
   Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
   Active: active (running) since 五 2020-10-23 14:59:22 CST; 12s ago
     Docs: man:glusterd(8)
  Process: 21116 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 21117 (glusterd)
    Tasks: 9
   Memory: 3.1M
   CGroup: /system.slice/glusterd.service
           └─21117 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

配置防火墙

需要放行相关节点 IP 地址:

iptables -I INPUT -p all -s x.x.x.x -j ACCEPT

配置 trusted pool (可信池?)

在 k8s-work1 上执行:

# gluster peer probe k8s-work2
# gluster peer probe k8s-work3

Note: Once this pool has been established, only trusted members may probe new servers into the pool. A new server cannot probe the pool, it must be probed from the pool.

配置 GlusterFS volume

创建卷

在所有服务器上执行:

mkdir /bricks/brick1/gv0

在任意一台服务器上执行,创建 Arbiter volume(仲裁卷?):

# gluster volume create gv0 replica 3 arbiter 1 k8s-work1:/bricks/brick1/gv0 k8s-work2:/bricks/brick1/gv0 k8s-work3:/bricks/brick1/gv0
volume create: gv0: success: please start the volume to access data

您也可以创建 3 副本的卷 (与上面的命令只能执行 1 个):

# gluster volume create gv0 replica 3 k8s-work1:/bricks/brick1/gv0 k8s-work2:/bricks/brick1/gv0 k8s-work3:/bricks/brick1/gv0

3 副本卷 是指数据各储存 1 份到 3 个节点,Arbiter volume 方式则将数据各储存 1 份到 2 个节点,另一个节点储存 metadata (元数据)。3 副本卷方式提供了更高的可用性,仲裁卷能占用较小空间,请根据使用环境自行取舍。

有关 防止脑裂 / 3 副本 / 仲裁卷 的文档

启动卷

在任意一台服务器上执行:

# gluster volume start gv0
volume start: gv0: success

确认是否启动成功 Status: Started

# gluster volume info
 
Volume Name: gv0
Type: Replicate
Volume ID: b2fbb4d2-933e-483b-bad7-73c4de5f2b31
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: k8s-work1:/bricks/brick1/gv0
Brick2: k8s-work2:/bricks/brick1/gv0
Brick3: k8s-work3:/bricks/brick1/gv0 (arbiter)
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
performance.client-io-threads: off

测试 GlusterFS volume

在这一步中,我们使用了其中一台服务器来挂载卷。通常情况下,你需要使用其他的设备做为客户端。使用此方式,你需要在客户端设备上安装额外的软件包,我们这里将使用其中一台服务器来做为客户端测试。

# mount -t glusterfs k8s-work1:/gv0 /mnt
# for 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

使用我们在这里列出的方法,您应该看到每台服务器有 100 个文件。如果没有复制,在仅分发卷(这里没有详细说明)中,每个卷应该有大约50个副本。