You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同网络双Ubuntu服务器K8s部署带复制的Cassandra负载均衡(单台4节点)配置求助

现有配置的核心问题
  • 当前节点亲和规则硬绑定了单台名为ubuntuserver的节点,第二台服务器完全不会被纳入调度范围,自然也跑不了Cassandra节点
  • 种子节点配置直接写死了两个Pod的IP地址,StatefulSet重建、节点漂移后Pod IP会变动,直接导致集群节点无法互联、脑裂
  • 没有配置Pod级别的反亲和规则,调度时可能出现8个Pod全挤在单台服务器上的情况,既不符合每台跑4个的要求,也会带来单节点故障丢数据的风险
  • 副本数设置为4,和2台服务器每台跑4个的总需求不匹配
分步配置调整指引

1. 提前给两台节点打专属标签

在集群控制平面执行以下命令,给两台Ubuntu节点打上Cassandra专属识别标签,方便后续调度匹配:

  • 给第一台原服务器打标签:kubectl label node <第一台节点实际主机名> cassandra/host=node1
  • 给第二台服务器打标签:kubectl label node <第二台节点实际主机名> cassandra/host=node2

2. 替换调度亲和规则,实现每台服务器固定跑4个节点

删掉原配置中只匹配单台ubuntuserver的节点亲和块,替换为两层调度规则,保证Pod只调度到指定的两台服务器上,且单台最多分配4个Cassandra Pod:

affinity:
  # 节点亲和:仅允许将Pod调度到打了Cassandra专属标签的两台服务器
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: cassandra/host
          operator: Exists
  # Pod反亲和:同节点的Cassandra Pod数量尽量打散,避免单节点资源挤兑
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchLabels:
          app: cassandra
      topologyKey: kubernetes.io/hostname

注意:当前单Pod资源申请为8核CPU、16Gi内存,需要保证每台服务器至少有32核CPU、64Gi内存的可用资源,才能满足单台运行4个Pod的需求,否则会因为资源不足导致Pod调度失败。

3. 替换硬编码的种子节点配置

原配置中写死Pod IP的SEEDS配置完全不适合StatefulSet场景,直接换成StatefulSet自带的固定域名作为种子地址,不管Pod被调度到哪台服务器、重建多少次,域名解析永远有效:
将env块中的SEEDS配置值修改为:

- name: SEEDS
  value: "cassandra-0.cassandra.cassandra.svc.cluster.local,cassandra-1.cassandra.cassandra.svc.cluster.local"

4. 动态适配机架标识,实现跨节点数据复制

原配置中RACK值硬编码为rack1,会让Cassandra认为所有节点都在同一个机架下,无法自动做跨物理节点的副本分布。通过Downward API把Pod所在的节点主机名传给容器,动态设置RACK值:
在env块中追加以下配置,替换原来硬编码的RACK值:

- name: RACK
  valueFrom:
    fieldRef:
      fieldPath: spec.nodeName

调整后Cassandra会自动识别两台服务器为两个独立机架,后续创建keyspace时设置副本因子为2,就会自动把数据副本分布在两台服务器上,实现真正的跨节点容错和负载均衡。

5. 调整副本数匹配总节点规模

将StatefulSet的replicas参数从4修改为8,匹配2台服务器每台跑4个节点的总规模。

额外校验注意事项
  • 确认两台服务器上都配置了名为local-storage的本地存储供应,否则第二台服务器上的Pod申请PVC时会因为找不到存储供应卡在Pending状态
  • 不需要单独给两台服务器写两套StatefulSet配置,调整后的规则会自动把8个Pod均匀打散到两台节点上,每台刚好分配4个
  • 校验 readinessProbe 依赖的script ConfigMap可以在两台节点上正常挂载,没有权限或路径问题
  • 顺带优化堆配置:当前配置将HEAP_NEWSIZE设为和MAX_HEAP_SIZE一样的8G,会导致堆区划分不合理,容易触发频繁GC,建议把年轻代堆大小调整为2G~3G区间即可

内容的提问来源于stack exchange,提问作者Mohammad Abbas Sayed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 01:24:04