操作系统 | GlusterFS 版本 | 服务器 IP 地址 | 主机名 | 存储路径 | 存储大小 |
---|---|---|---|---|---|
Fedora 42 | 11.1-8.fc42 | 10.165.19.30 | glusterfs-server1 | / /data/brick1 | 50G (系统) 199G (GlusterFS 数据盘) |
Fedora 42 | 11.1-8.fc42 | 10.165.19.31 | glusterfs-server2 | / /data/brick1 | 50G (系统) 199G (GlusterFS 数据盘) |
Fedora 42 | 11.1-8.fc42 | 10.165.19.32 | glusterfs-server3 | / /data/brick1 | 50G (系统) 199G (GlusterFS 数据盘) |
请注意: GlusterFS官方文档不建议将数据盘和系统文件划分为一个分区
步骤一: 服务器环境准备
-
修改服务器名
# 设置名字,根据不同的服务器均需改名 hostnamectl set-hostname glusterfs-server1 # 刷新名字 exec bash # 查看系统信息 hostnamectl
-
配置hosts文件
vim /etc/hosts 10.165.19.30 glusterfs-server1 10.165.19.31 glusterfs-server2 10.165.19.32 glusterfs-server3
-
配置网络
[root@localhost system-connections]# cd /etc/NetworkManager/system-connections/ [root@localhost system-connections]# ls ens33.nmconnection [root@localhost system-connections]# vim ens33.nmconnection [connection] id=ens33 uuid=b0985e9c-6d27-3de9-97b4-7c6c0e0cb6af type=ethernet autoconnect-priority=-999 interface-name=ens33 [ethernet] [ipv4] method=manual # 配置成手动 addresses=10.165.19.30/24 # 配置固定IP gateway=10.165.19.254 # 配置网关 dns=10.165.19.245 # 配置DNS [ipv6] addr-gen-mode=eui64 method=auto [proxy] [root@localhost system-connections]# systemctl restart NetworkManager
-
关闭防火墙
# 查看防火墙状态 systemctl status firewalld # 关闭防火墙 systemctl stop firewalld # 禁止开机启动防火墙 systemctl disable firewalld
-
访问服务器web管理界面
可以通过该网络查看cockpit管理界面, 此步骤与安装GlusterFS无关, 仅做记录
访问以下地址:
https://10.165.19.30:9090/
如果遇到无法使用root登录, 注释root再尝试打开页面。# 注释root, 应该就可以打开了。 vim /etc/cockpit/disallowed-users # root # 确认cockpit是否运行, 如果还是无法打开可以考虑将cockpit打开。 systemctl start cockpit
-
确认交换空间
确认交换空间是zram还是磁盘类型的, zram类型的无需执行关闭交换空间。# 查看分区如果是zram是属于内存压缩交换, 通常不需要关闭 swapon --show # 如果是磁盘类型的交换空间则需要关闭 swapoff -a vim /etc/fstab # 注释下列行 # /dev/mapper/centos-swap swap swap defaults 0 0 # 调整swappiness参数 echo vm.swappiness=0 >> /etc/sysctl.conf # 使配置生效 sysctl -p # 确认swap分区已关闭 free -m
步骤二: GlusterFS分区准备
-
新建分区并挂载
查看磁盘, 找到需要分区的磁盘。# 列出有几块磁盘大小 lsblk -d -o NAME,SIZE,MODEL # 列出所有磁盘和分区 fdisk -l # 查看磁盘挂载 lsblk
-
将sda剩余空间创建新的分区
fdisk /dev/sda # 确定是/dev/sda还是/dev/sdb
Command (m for help): n ← 输入 `n` 表示新建一个分区 Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): ← 直接按 Enter 选择默认的主分区 Partition number (4-4): 4 ← 创建 sda4,fdisk 会自动建议编号 First sector (xxxxx-xxxxx): ← 默认即可,直接回车 Last sector, +size or +sizeM or +sizeG: ← 输入你想要的大小(如 +100G),或直接回车用完全部剩余空间 Command (m for help): w ← 输入 `w` 保存更改并退出
-
将新创建的分区, 初始化使用。
# 对 /dev/sdb1 分区格式化为 XFS 文件系统,设置 inode 大小为 512 字节 mkfs.xfs -i size=512 /dev/sda4 # 创建挂载点目录 /data/brick1(如果 /data 不存在,也会一并创建) mkdir -p /data/brick1 # 将挂载配置添加到 /etc/fstab,实现开机自动挂载 # 含义:将 /dev/sda4 挂载到 /data/brick1,文件系统为 xfs,使用默认挂载选项,开机时挂载顺序为第2 echo '/dev/sda4 /data/brick1 xfs defaults 0 2' >> /etc/fstab # 立即挂载所有未挂载但已写入 /etc/fstab 的文件系统 # 然后显示当前已挂载的所有文件系统,用于验证 mount -a && mount
步骤三: GlusterFS服务搭建
手动安装指定的GlusterFS版本, 此文档不演示手动安装指定版本, 只告诉方法:
RPM包: https://download.gluster.org/pub/gluster/glusterfs/
# 下载指定版本的rpm包
wget https://download.gluster.org/pub/gluster/glusterfs/10/10.4/Fedora/glusterfs-server-10.4-1.fc38.x86_64.rpm
# 安装指定版本的rpm包
dnf install ./glusterfs-server-10.4-1.fc38.x86_64.rpm
-
安装GlusterFS
# 安装软件 dnf install glusterfs-server # 启动 GlusterFS 管理守护进程: systemctl start glusterd # 检查守护进程的状态: systemctl status glusterd # 配置开机启动 systemctl enable glusterd
应该看到类似这样的内容:
glusterd.service - LSB: glusterfs server Loaded: loaded (/etc/rc.d/init.d/glusterd) Active: active (running) since Mon, 13 Aug 2012 13:02:11 -0700; 2s ago Process: 19254 ExecStart=/etc/rc.d/init.d/glusterd start (code=exited, status=0/SUCCESS) CGroup: name=systemd:/system/glusterd.service ├ 19260 /usr/sbin/glusterd -p /run/glusterd.pid ├ 19304 /usr/sbin/glusterfsd --xlator-option georep-server.listen-port=24009 -s localhost... └ 19309 /usr/sbin/glusterfs -f /var/lib/glusterd/nfs/nfs-server.vol -p /var/lib/glusterd/...
-
配置可信池
可以是任意一台执行, 注意修改节点名字即可。
glusterfs-server1执行:gluster peer probe glusterfs-server2 gluster peer probe glusterfs-server3
glusterfs-server2执行:
gluster peer probe glusterfs-server1
查看对等状态
gluster peer status
-
设置GlusterFS 卷
所有服务器执行:mkdir -p /data/brick1/gv0
任意单台服务器执行:
请注意: replica 3为3副本, 如果不打算设置副本可以省去replica 3参数, 以下为省去replica 3参数命令。
请注意: 单副本和三副本根据需求选择性执行一个
单副本, 分布式存储:# 创建gv0卷, replica 3为三分副本 gluster volume create gv0 glusterfs-server1:/data/brick1/gv0 glusterfs-server2:/data/brick1/gv0 glusterfs-server3:/data/brick1/gv0
三副本示例:
# 创建gv0卷, replica 3为三分副本 gluster volume create gv0 replica 3 glusterfs-server1:/data/brick1/gv0 glusterfs-server2:/data/brick1/gv0 glusterfs-server3:/data/brick1/gv0 # 启动新创建的卷 gluster volume start gv0 # 确认卷是否启动 gluster volume info
信息确认:
应该会看到类似这样的内容(卷 ID 会有所不同)
Volume Name: gv0 Type: Replicate Volume ID: f25cc3d8-631f-41bd-96e1-3e22a4c6f71f Status: Started Snapshot Count: 0 Number of Bricks: 1 x 3 = 3 Transport-type: tcp Bricks: Brick1: glusterfs-server1:/data/brick1/gv0 Brick2: glusterfs-server2:/data/brick1/gv0 Brick3: glusterfs-server3:/data/brick1/gv0 Options Reconfigured: transport.address-family: inet
步骤四: 存储验证
- 挂载目录并写入文件
# 创建挂载目录 mkdir /mnt/gluster-test # 将创建的存储集群挂载到刚刚创建的目录上面 mount -t glusterfs glusterfs-server1:/gv0 /mnt/gluster-test # 写入100个文件 for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/gluster-test/copy-test-$i; done # 确认写入的文件是100个 ls -lA /mnt/gluster-test/copy* | wc -l
- 验证数据
在每台节点执行验证
# 确认是否为100个文件, 如果是3副本每台则是100个文件。 ls -lA /data/brick1/gv0/copy*
清理卷 慎重
此命令会将brick gv0重置, 在需要重建创建集群时选择使用。
# 停止卷
gluster volume stop gv0
# 删除卷
gluster volume delete gv0
# 清理旧brick目录
rm -rf /data/brick1/gv0
单副本剔除节点
这里演示的剔除glusterfs-server1节点
-
确认当前卷信息 与 存储的信息
glusterfs-server1节点执行 可在任意节点执行gluster volume info gv0 gluster volume status gv0 # 如果是生产环境请确认每个节点的数据数量,显示文件和文件夹数量。 ls -1A /data/brick1/gv0 | wc -l
-
手动迁移文件到glusterfs-server2的brick
在glusterfs-server1节点执行rsync -av --remove-source-files /data/brick1/gv0/ root@glusterfs-server2:/data/brick1/gv0/
-
从该卷中移除指定的brick
在glusterfs-server2或者glusterfs-server3执行均可# 移除glusterfs-server1 brick gluster volume remove-brick gv0 glusterfs-server1:/data/brick1/gv0 start # 提交移除信息 gluster volume remove-brick gv0 glusterfs-server1:/data/brick1/gv0 commit # 剔除可信池 gluster peer detach glusterfs-server1
-
: 验证卷状态
在glusterfs-server2或者glusterfs-server3执行均可gluster volume info gv0 gluster volume status gv0
添加节点
以glusterfs-server1为例添加新节点
- 添加可信池
在现有任意节点执行# 在任意节点执行添加可信池 gluster peer probe glusterfs-server1 # 确认可信池是否被正常添加 gluster peer status
- 新节点准备brick目录
在新节点执行
在现有节点执行# 创建brick目录 mkdir -p /data/brick1/gv0
新节点执行: 如添加节点brick目录报错,删除该目录下的原数据# 添加glusterfs-server1的brick目录 gluster volume add-brick gv0 glusterfs-server1:/data/brick1/gv0
rm -rf /data/brick1/gv0/.glusterfs
- 手动触发rebalance(重新分布文件)
任意节点可执行# 在任意节点手动触发rebalance(重新分布文件) gluster volume rebalance gv0 start # 查看rebalance状态 gluster volume rebalance gv0 status # 在glusterfs-server1节点执行查看文件数量, 确认否重新分布 ls -1A /data/brick1/gv0 | wc -l
- 在挂载的节点上执行, 查看指定文件在那个节点存储
getfattr -n trusted.glusterfs.pathinfo /mnt/gluster-test/copy-test-001