#作者:闫乾苓
主集群3个节点:gfs01、gfs02、gfs03,同步的卷为3个brick的复制卷gv0
备集群3个节点:gfs04、gfs05、gfs06,同步的卷为3个brick的复制卷gv0-bak
主备集群所有节点都需要安装
# yum install glusterfs-geo-replication.x86_64
备份集群所有节点创建复制用的用户,组,并设置密码
# groupadd geogroup
# useradd -G geogroup geoaccount
# passwd geoaccount
备份集群任一节点(gfs04)设置 mountbroker 根目录和组, mountbroker目录用于存储同步过程中的元数据、配置信息、状态信息等数据。
# gluster-mountbroker setup /var/mountbroker-root geogroup
备份集群任一节点(gfs04)运行以下命令以添加备份卷gv0-bak和用户添加geoaccount到 mountbroker服务。
# gluster-mountbroker add gv0-bak geoaccount
(注意:要删除用户,请使用 command)gluster-mountbroker remove
使用以下方法检查设置状态:
# gluster-mountbroker status
# systemctl restart glusterd
在异地复制主卷的块上,服务器的所有时间 必须一致。建议设置 NTP(网络时间 协议)或类似服务来保持 brick 及时同步并避免超时同步。
必须在主集群某一节点(将发出地理复制创建命令的地方)(gfs01)和上面创建的非特权帐户的备集群节点之一(gfs04)之间设置无密码登录。
# ssh-keygen
在主集群同一节点上(gfs01)运行以下命令到备份集群任意1个节点(gfs04)
# ssh-copy-id geoaccount@gfs04
执行以下命令,会自动设置并收集主机群所有节点的ssh秘钥,简化了geo-replication配置中的SSH密钥管理,使得geo-replication任务能够安全且无缝地在主集群和备集群(Secondary)之间传输数据。
# gluster-georep-sshkey generate
创建会话命令如下,主备集群中各选择一个节点来创建geo-replication会话
gluster volume geo-replication \
@:: \
create [ssh-port ] push-pem|no-verify [force]
删除会话:
gluster volume geo-replication \
@:: delete [force]
:这是你想要复制数据的主卷名称。@::
:这指定了备卷的位置,包括用户名、主机名和备卷名称。用户名用于SSH连接,主机名是备卷所在服务器的地址,备卷名称是目标卷的名称。# gluster volume geo-replication gv0 \
geoaccount@gfs04::gv0-bak \
create push-pem force
脚本将配置 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
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 机制:
即便是在每个节点只有1个brick的环境中,只要设置了副本卷,都需要开启Meta Volume:
启用 Meta Volume 后,每个 Worker 会尝试在 Meta Volume 上的锁文件中获取唯一锁:
开启步骤:
开启共享存储功能(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
使用以下命令启动已配置的异地复制会话,
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
如果状态异常,可通过日志排查,使用以下命令找到日志文件:
主集群gfs01节点执行
# gluster volume geo-replication gv0 geoaccount@gfs04::gv0-bak config log-file