跨地域灾备:远程异地复制实战指南

#作者:闫乾苓

文章目录

  • 1. 集群环境说明
  • 2. 安装所需软件包
  • 3. 备集群用户相关设置
  • 4. 异地复制环境配置
    • 4.1 时间同步
    • 4.2 免密SSH
    • 4.3 创建pem pub文件
    • 4.4 创建异地复制会话
    • 4.5 备集群SSH免密配置
  • 5. 开启Meta Volume(元卷)功能
  • 6. 启动地理复制

GlusterFS远程异地复制的工作原理基于源集群和备份集群之间的异地同步。其主要目的是实现跨地理位置的数据备份和冗余,以确保数据的高可用性和灾难恢复能力。

1. 集群环境说明

主集群3个节点:gfs01、gfs02、gfs03,同步的卷为3个brick的复制卷gv0
备集群3个节点:gfs04、gfs05、gfs06,同步的卷为3个brick的复制卷gv0-bak

2. 安装所需软件包

主备集群所有节点都需要安装

# yum install glusterfs-geo-replication.x86_64

3. 备集群用户相关设置

备份集群所有节点创建复制用的用户,组,并设置密码

# groupadd geogroup
# useradd -G geogroup geoaccount
# passwd geoaccount

备份集群任一节点(gfs04)设置 mountbroker 根目录和组, mountbroker目录用于存储同步过程中的元数据、配置信息、状态信息等数据。

# gluster-mountbroker setup /var/mountbroker-root geogroup

跨地域灾备:远程异地复制实战指南_第1张图片
备份集群任一节点(gfs04)运行以下命令以添加备份卷gv0-bak和用户添加geoaccount到 mountbroker服务。

# gluster-mountbroker add gv0-bak geoaccount

跨地域灾备:远程异地复制实战指南_第2张图片
(注意:要删除用户,请使用 command)gluster-mountbroker remove

使用以下方法检查设置状态:

# gluster-mountbroker status

跨地域灾备:远程异地复制实战指南_第3张图片
在所有辅助节点上重新启动服务glusterd

# systemctl restart glusterd

4. 异地复制环境配置

4.1 时间同步

在异地复制主卷的块上,服务器的所有时间 必须一致。建议设置 NTP(网络时间 协议)或类似服务来保持 brick 及时同步并避免超时同步。

4.2 免密SSH

必须在主集群某一节点(将发出地理复制创建命令的地方)(gfs01)和上面创建的非特权帐户的备集群节点之一(gfs04)之间设置无密码登录。

# ssh-keygen

跨地域灾备:远程异地复制实战指南_第4张图片
在主集群同一节点上(gfs01)运行以下命令到备份集群任意1个节点(gfs04)

# ssh-copy-id geoaccount@gfs04

跨地域灾备:远程异地复制实战指南_第5张图片

4.3 创建pem pub文件

执行以下命令,会自动设置并收集主机群所有节点的ssh秘钥,简化了geo-replication配置中的SSH密钥管理,使得geo-replication任务能够安全且无缝地在主集群和备集群(Secondary)之间传输数据。

# gluster-georep-sshkey generate

跨地域灾备:远程异地复制实战指南_第6张图片

4.4 创建异地复制会话

创建会话命令如下,主备集群中各选择一个节点来创建geo-replication会话

gluster volume geo-replication  \
    @:: \
create [ssh-port ] push-pem|no-verify [force]

删除会话:

gluster volume geo-replication  \
    @:: delete [force]
  • :这是你想要复制数据的主卷名称。
  • @:::这指定了备卷的位置,包括用户名、主机名和备卷名称。用户名用于SSH连接,主机名是备卷所在服务器的地址,备卷名称是目标卷的名称。
  • create:这个选项用于创建geo-rep会话。
  • [ssh-port ]:这是一个可选参数,用于指定SSH连接的端口号。如果备卷服务器的SSH服务配置在非标准端口上,你需要使用这个选项来指定正确的端口。
  • push-pem:这个选项告诉GlusterFS使用之前生成的common_secret.pem.pub文件中的公钥来建立主卷和备卷之间无密码的SSH连接。
  • no-verify:这个选项用于跳过一些默认的验证步骤,比如验证备卷是否为空、SSH连接是否配置正确等。使用这个选项时,你需要确保这些验证步骤已经通过其他方式完成。
  • [force]:如果备卷的总可用空间小于主卷的总大小,默认情况下创建会话的命令会失败。使用force选项可以强制创建会话,但请注意这可能会导致数据丢失或不一致。
    比如下面的命令创建主机群卷gv0到备份集群卷gv0-bak间的远程复制会话
# gluster volume geo-replication gv0 \
    geoaccount@gfs04::gv0-bak \
    create push-pem force

4.5 备集群SSH免密配置

脚本将配置 SSH 密钥,以便主集群上的 geo-replication 进程可以无密码地登录到备份集群上的指定用户。

/usr/libexec/glusterfs/set_geo_rep_pem_keys.sh  \
     

在备集群任意一个节点上(gfs04)以 root 身份运行以下命令

# /usr/libexec/glusterfs/set_geo_rep_pem_keys.sh geoaccount gv0 gv0-bak

在这里插入图片描述
配置异地复制

gluster volume geo-replication  \
   @:: config [option]

在主集群gfs01节点执行以下命令,配置主集群中卷gv0到备集群中卷gv0-bak的异地复制

# gluster volume geo-replication gv0 \
  geoaccount@gfs04::gv0-bak \
  config sync-jobs 3

5. 开启Meta Volume(元卷)功能

Meta Volume提供了一种机制来更好地管理 Geo-replication 中多个副本 (Replica) 工作者的同步行为。

在使用 GlusterFS 的副本卷 (Replica Volume) 时,每个副本有多个副本砖(Brick)。Geo-replication 在同步时需要为每个副本brick分配一个工作者 (Worker),但出于性能和数据一致性的考虑:

  • 只有一个工作者处于 Active 状态并负责实际的数据同步。

  • 其他工作者处于 Passive 状态,等待成为备用。
    默认情况下,Geo-replication 使用 node-uuid(节点唯一标识符)来决定哪个工作者是 Active:

  • 如果某个副本砖的 node-uuid 在第一个子卷节点 ID 列表中存在,该工作者会成为 Active。

  • 如果多个砖位于同一机器上,可能导致多个工作者同时变为 Active,这可能引发同步冲突或性能问题。

为了解决这个问题,可以使用 Meta Volume 机制:

  • 每个worker尝试在 Meta Volume 中的一个特定文件上获取锁。
  • 锁文件的名称是根据子卷的不同模式生成的(确保唯一性)。
  • 只有获取到锁的worker会成为 Active,其余工作者保持 Passive 状态。
  • 这种方法有效避免了多个brick位于同一机器上时出现多个工作者同时为 Active 的问题。

即便是在每个节点只有1个brick的环境中,只要设置了副本卷,都需要开启Meta Volume:

  • 即便每个节点只有一个 Brick,由于这是一个副本卷,Geo-replication 会尝试在每个副本上启动一个 Worker。
  • 在某些复杂网络场景下,可能导致多个 Worker 争抢 Active 状态,产生以下问题:
  • 同步任务的冗余或冲突。
  • 性能降低,因为多个 Worker 争抢资源。

启用 Meta Volume 后,每个 Worker 会尝试在 Meta Volume 上的锁文件中获取唯一锁:

  • 获取锁的 Worker 成为 Active,负责同步任务。
  • 其余 Worker 保持 Passive 状态,仅在 Active Worker 故障时接管。
  • 这种机制能够彻底避免 Worker 冲突问题,尤其是在复杂网络环境或节点故障情况下。

开启步骤:
开启共享存储功能(meta-volume依赖,集群级别设置,对集群所有卷生效,只需在主集群开启)
在主集群gfs01节点执行以下命令

# gluster volume set all cluster.enable-shared-storage enable

主集群gfs01节点执行,在主机群中gv0卷到备集群中gv0-bak间的异地复制开启meta-volume功能

# gluster volume geo-replication gv0 \

  geoaccount@gfs04::gv0-bak config \
  use-meta-volume true

6. 启动地理复制

使用以下命令启动已配置的异地复制会话,

gluster volume geo-replication   \
    @:: \
    start [force]

主集群gfs01节点执行

# gluster volume geo-replication gv0 \
  geoaccount@gfs04::gv0-bak \
  start

如果要停止,执行以下命令:

gluster volume geo-replication   \
    @:: \
    stop [force]

检查群集中所有异地复制会话的状态:

gluster volume geo-replication status

要检查某个会话的状态

gluster volume geo-replication  \
@:: status [detail]

主集群gfs01节点执行,查看gv0到gv0-bak间的会话状态:

# gluster volume geo-replication gv0     geoaccount@gfs04::gv0-bak status

在这里插入图片描述

  • Initializing:这是地理复制会话的初始阶段;它会保持这种状态一分钟,以确保不存在异常。
  • Created:复制会话已创建,但尚未启动。
  • Active:此节点中的 gsync 守护进程处于活动状态并同步数据。(副本对中的一个工作程序将处于 Active 状态)
  • Passive:主动节点的副本对。数据同步由主动节点处理。因此,此节点不同步任何数据。如果主动节点发生故障,被动工作节点将变为主动节点
  • Faulty:地理复制会话遇到问题,需要进一步调查该问题。检查日志文件以获取有关故障状态的更多详细信息
  • Stop: 地理复制会话已停止,但尚未删除。

如果状态异常,可通过日志排查,使用以下命令找到日志文件:
主集群gfs01节点执行

# gluster volume geo-replication gv0   geoaccount@gfs04::gv0-bak  config log-file

在这里插入图片描述

你可能感兴趣的:(服务器,运维)