同网络双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 依赖的
scriptConfigMap可以在两台节点上正常挂载,没有权限或路径问题 - 顺带优化堆配置:当前配置将
HEAP_NEWSIZE设为和MAX_HEAP_SIZE一样的8G,会导致堆区划分不合理,容易触发频繁GC,建议把年轻代堆大小调整为2G~3G区间即可
内容的提问来源于stack exchange,提问作者Mohammad Abbas Sayed
相关产品推荐
相关产品推荐

