5.8. 创建任意分区卷(可选)
仲裁卷支持所有具有相似一致性和磁盘空间要求的持久性卷类型。仲裁复制卷或仲裁器卷充当一个三向复制卷,其中每个第三个 brick 都是称为 arbiter 的特殊类型的 brick。仲裁器 brick 不存储文件数据;它们仅存储文件名、结构和元数据。仲裁程序使用客户端仲裁将此元数据与其他节点的元数据进行比较,以确保卷的一致性并防止脑裂状况。
仲裁复制卷的优点:
- 相似一致性:配置仲裁器时,仲裁逻辑在自动模式中使用客户端仲裁,以防止出现脑裂条件的文件操作。
- 所需磁盘空间减少:由于仲裁器 brick 仅存储文件名和元数据,因此仲裁 brick 可能会比卷中的其他 brick 小得多。
在创建仲裁卷前,请确保已安装了 heketi-client 软件包。
# subscription-manager repos --enable=rh-gluster-3-for-rhel-7-server-rpms
# yum install heketi-client
如果要升级现有 Heketi 服务器,请查看 https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/3.11/html-single/deployment_guide/index#upgrade_heketi_rhgs。
仲裁卷可能不适用于小文件或无法预计文件大小的工作负载,因为它可能会比数据 brick 更快地填充仲裁数 brick。如果要使用仲裁卷,我们建议您根据数据 brick 的大小和文件数量选择更保守的平均文件大小,以便仲裁的 brick 可以容纳您的工作负载。
5.8.1. 创建任意卷
可以使用 Heketi CLI 或更新 storageclass 文件来创建仲裁卷。
5.8.1.1. 使用 Heketi CLI 创建任意分区卷
要使用 Heketi CLI 创建 Arbiter 卷,必须请求一个副本 3 卷,并提供 Heketi 特定卷选项"user.heketi.arbiter true",它将指示系统创建副本 3 的 Arbiter 变量。
例如:
# heketi-cli volume create --size=4 --gluster-volume-options='user.heketi.arbiter true'
5.8.1.2. 使用 Storageclass 文件创建任意卷
要使用 storageclass 文件创建仲裁程序卷,请确保在 storageclass 文件中包含以下两个参数:
- user.heketi.arbiter true
- (可选)user.heketi.average-file-size 1024
以下是 storageclass 文件示例:
# cat glusterfs-storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: gluster-container provisioner: kubernetes.io/glusterfs parameters: resturl: "http://heketi-storage-project.cloudapps.mystorage.com" restuser: "admin" volumetype: "replicate:3" clusterid: "630372ccdc720a92c681fb928f27b53f,796e6db1981f369ea0340913eeea4c9a" secretNamespace: "default" secretName: "heketi-secret" volumeoptions: "user.heketi.arbiter true,user.heketi.average-file-size 1024" volumenameprefix: "test-vol" spec: persistentVolumeReclaimPolicy: Retain accessModes: - ReadWriteOnce resources: requests: storage: 5Gi