针对Cortex-M3的浮点点运算代替
2026/4/28 22:28:36
验证时间: 2025-12-28
集群: 145 (KUBECONFIG=/bpx/.145-admin.conf)
命名空间: qfusion-admin
| 验证项 | 结论 |
|---|---|
| 架构模式 | 双活 (Active-Active) |
| 副本数量 | 2 个 Predixy 实例 |
| 负载均衡 | Cilium eBPF (Random 随机选择) |
| 高可用 | Pod 级健康检查 + Cilium 自动故障转移 |
kubectl get pods -n qfusion-admin|grepredis-2305e285结果:
drc-redis-2305e285-0-0 3/3 Running 0 2d17h drc-redis-2305e285-0-1 3/3 Running 0 2d17h drc-redis-2305e285-1-0 3/3 Running 0 2d17h drc-redis-2305e285-1-1 3/3 Running 0 2d17h drc-redis-2305e285-2-0 3/3 Running 0 2d17h drc-redis-2305e285-2-1 3/3 Running 0 2d17h redis-2305e285-predixy-0 2/2 Running 0 2d17h redis-2305e285-slowlog-collector-0 1/1 Running 0 2d17hkubectl get pods -n qfusion-admin -l redis.resource.type=predixy -o wide结果:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES redis-2305e285-predixy-0 2/2 Running 0 2d17h 245.0.2.240 qfusion3 <none> <none> redis-2305e285-predixy-1 2/2 Running 0 2d17h 245.0.1.147 qfusion2 <none> <none>分析:
kubectl get statefulset redis-2305e285-predixy -n qfusion-admin -ojsonpath='{.spec.replicas}'结果:
2 replicaskubectl get statefulset redis-2305e285-predixy -n qfusion-admin -ojsonpath='{.spec.podManagementPolicy}'结果:
Parallel # 并行管理模式,Pod 可同时启动/更新kubectl get svc -n qfusion-admin|grepredis-2305e285结果:
redis-2305e285 ClusterIP 246.111.103.150 <none> 6379/TCP,16379/TCP,9100/TCP redis-2305e2850 ClusterIP 246.99.91.187 <none> 6379/TCP # Predixy 客户端入口 redis-2305e2850-lb ClusterIP 246.100.216.203 <none> 35036/TCP客户端入口:redis-2305e2850(ClusterIP: 246.99.91.187:6379)
kubectl get endpoints redis-2305e2850 -n qfusion-admin结果:
NAME ENDPOINTS AGE redis-2305e2850 245.0.1.147:7617,245.0.2.240:7617 2d17h映射关系:
| Endpoint | Predixy Pod | 节点 | 状态 |
|---|---|---|---|
| 245.0.1.147:7617 | redis-2305e285-predixy-1 | qfusion2 | active |
| 245.0.2.240:7617 | redis-2305e285-predixy-0 | qfusion3 | active |
kubectl get pods -n kube-system|grepcilium-agent结果:
cilium-7hjkj 1/1 Running 0 9d cilium-fk6px 1/1 Running 0 9d cilium-gsn82 1/1 Running 1 (5d ago) 9d cilium-mgjrg 1/1 Running 0 9dkubectl get pods -n kube-system|grepkube-proxy结果: (无输出)集群中无 kube-proxy
kubectl get cm -n kube-system cilium-config -ojsonpath='{.data.kube-proxy-replacement}'结果:
strict # Cilium 完全替代 kube-proxykubectl get cm -n kube-system cilium-config -ojsonpath='{.data.bpf-lb-sock}'结果:
false # 使用标准 eBPF LB (非 socket level)kubectlexec-n kube-system cilium-7hjkj -- ciliumservicelist|grep-A5"246.99.91.187"结果:
ID Frontend Service Type Backend 134 246.99.91.187:6379 ClusterIP 1 => 245.0.2.240:7617 (active) 2 => 245.0.1.147:7617 (active)kubectlexec-n kube-system cilium-7hjkj -- bpftool map list|grep-E"cilium.*lb"结果:
929: lru_hash name cilium_lb4_reve flags 0x0 930: hash name cilium_lb4_serv flags 0x1 # Service 映射表 931: hash name cilium_lb4_back flags 0x1 # Backend 映射表 932: hash name cilium_lb4_reve flags 0x1 941: hash name cilium_lb_affin flags 0x1 # 会话亲和 942: lru_hash name cilium_lb4_affi flags 0x0 943: lpm_trie name cilium_lb4_sour flags 0x1kubectl get svc -n qfusion-admin redis-2305e2850 -o yaml|grep-E"sessionAffinity|internalTrafficPolicy"结果:
internalTrafficPolicy: Cluster # 集群内流量可路由到所有节点 sessionAffinity: None # 无会话亲和| 配置项 | 值 | 说明 |
|---|---|---|
| 实现方式 | Cilium eBPF | 内核态直接转发,性能高于 iptables/ipvs |
| 负载均衡算法 | Random (随机) | Cilium 默认,非轮询 |
| Session Affinity | None | 请求随机分发到两个 Pod |
| Backend 状态 | 2 个 active | 双活同时处理流量 |
kubectl get configmap redis-2305e285-predixy-conf -n qfusion-admin -o yamlcluster.conf 配置:
ClusterServerPool { Password MasterReadPriority 60 # 主节点读优先级 StaticSlaveReadPriority 50 # 静态从节点读优先级 DynamicSlaveReadPriority 50 # 动态从节点读优先级 RefreshInterval 1 # 配置刷新间隔(秒) ServerTimeout 1 # 服务器超时(秒) ServerFailureLimit 10 # 故障阈值 ServerRetryTimeout 1 # 重试超时(秒) KeepAlive 120 # 连接保活(秒) Servers { + redis-2305e285.qfusion-admin:6379 } }读写策略:
kubectl get pods -n qfusion-admin -l redis.resource.type=server -o wide|grepredis-2305e285结果:
NAME READY STATUS RESTARTS AGE IP NODE drc-redis-2305e285-0-0 3/3 Running 0 2d17h 245.0.1.48 qfusion2 drc-redis-2305e285-0-1 3/3 Running 0 2d17h 245.0.3.84 qfusion4 drc-redis-2305e285-1-0 3/3 Running 0 2d17h 245.0.0.107 qfusion1 drc-redis-2305e285-1-1 3/3 Running 0 2d17h 245.0.2.168 qfusion3 drc-redis-2305e285-2-0 3/3 Running 0 2d17h 245.0.2.214 qfusion3 drc-redis-2305e285-2-1 3/3 Running 0 2d17h 245.0.3.200 qfusion4kubectl get QfrCluster redis-2305e285 -n qfusion-admin -ojsonpath='{.metadata.annotations}'结果:
drc-redis-2305e285-0-0/info.role: slave drc-redis-2305e285-0-1/info.role: master drc-redis-2305e285-1-0/info.role: slave drc-redis-2305e285-1-1/info.role: master drc-redis-2305e285-2-0/info.role: slave drc-redis-2305e285-2-1/info.role: master架构: 3 分片,每分片 1主1从
| 分片 | 主节点 (Master) | 从节点 (Slave) | 主节点位置 | 从节点位置 |
|---|---|---|---|---|
| shard-0 | drc-redis-2305e285-0-1 | drc-redis-2305e285-0-0 | qfusion4 | qfusion2 |
| shard-1 | drc-redis-2305e285-1-1 | drc-redis-2305e285-1-0 | qfusion3 | qfusion1 |
| shard-2 | drc-redis-2305e285-2-1 | drc-redis-2305e285-2-0 | qfusion4 | qfusion3 |
kubectl get endpoints redis-2305e285 -n qfusion-admin结果:
NAME ENDPOINTS AGE redis-2305e285 245.0.0.107:6379,245.0.1.48:6379,245.0.2.168:6379 + 15 more...kubectl get pod redis-2305e285-predixy-0 -n qfusion-admin -ojsonpath='{.spec.containers[0].livenessProbe}'结果:
{"exec":{"command":["sh","-c","redis-cli -h $(hostname) -p 7617 ping"]},"failureThreshold":3,"initialDelaySeconds":30,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5}kubectl get pod redis-2305e285-predixy-0 -n qfusion-admin -ojsonpath='{.spec.containers[0].readinessProbe}'结果:
{"exec":{"command":["sh","-c","redis-cli -h $(hostname) -p 7617 ping"]},"failureThreshold":5,"initialDelaySeconds":30,"periodSeconds":15,"successThreshold":1,"timeoutSeconds":5}健康检查策略:
| 探针类型 | 检测命令 | 失败阈值 | 周期 | 超时 | 触发动作 |
|---|---|---|---|---|---|
| Liveness | redis-cli ping | 3 次 | 10s | 5s | 重启 Pod |
| Readiness | redis-cli ping | 5 次 | 15s | 5s | 剔除流量 |
Cilium 通过以下机制实现高可用:
| 组件 | Pod-0 位置 | Pod-1 位置 | 节点级容错 |
|---|---|---|---|
| Predixy | qfusion3 | qfusion2 | 是 (不同节点) |
容错能力: 任一节点故障,另一个节点的 Predixy 仍可处理全部流量
Client | v redis-2305e2850 Service (ClusterIP: 246.99.91.187:6379) | +------------+------------+ | | v v +---------------+ +---------------+ | Predixy Pod-0 | | Predixy Pod-1 | | 245.0.2.240 | | 245.0.1.147 | | qfusion3 | | qfusion2 | +---------------+ +---------------+ | | +------------+------------+ | v redis-2305e285.qfusion-admin:6379 | +------------+------------+------------+ | | | | v v v v +--------+ +--------+ +--------+ +--------+ |Shard-0 | |Shard-1 | |Shard-2 | | | |M: qf4 | |M: qf3 | |M: qf4 | | | |S: qf2 | |S: qf1 | |S: qf3 | | | +--------+ +--------+ +--------+ +--------+# 切换集群exportKUBECONFIG=/bpx/.145-admin.conf# 1. 查看 Podskubectl get pods -n qfusion-admin|grepredis-2305e285 kubectl get pods -n qfusion-admin -l redis.resource.type=predixy -o wide# 2. 查看 Services 和 Endpointskubectl get svc -n qfusion-admin|grepredis-2305e285 kubectl get endpoints redis-2305e2850 -n qfusion-admin# 3. 查看 StatefulSetkubectl get statefulset redis-2305e285-predixy -n qfusion-admin# 4. 查看 Predixy 配置kubectl get configmap redis-2305e285-predixy-conf -n qfusion-admin -o yaml# 5. 查看 Cilium 配置kubectl get cm -n kube-system cilium-config -o yaml|grep-E"kube-proxy-replacement|bpf-lb"# 6. 查看 Cilium Service 负载均衡kubectlexec-n kube-system<cilium-pod>-- ciliumservicelist|grepredis-2305e285# 7. 查看 Redis 主从角色kubectl get QfrCluster redis-2305e285 -n qfusion-admin -ojsonpath='{.metadata.annotations}'使用 Predixy Pod 内置的 redis-cli 进行测试:
# 测试入口redis-2305e2850.qfusion-admin:6379# 认证密码x.x.xkubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850.qfusion-admin -p6379-a x.x.xping结果:PONG✓
# 写操作kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850.qfusion-admin -p6379-a x.x.x\SET test:benchmark:001"hello-from-predixy"# 读操作kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850.qfusion-admin -p6379-a x.x.x\GET test:benchmark:001结果:
SET: OK GET: hello-from-predixykubectlexec-n qfusion-admin redis-2305e285-predixy-0 --sh-c' for i in $(seq 1 100); do redis-cli -h redis-2305e2850.qfusion-admin -p 6379 -a x.x.x SET test:load:$i "value-$i" > /dev/null 2>&1 redis-cli -h redis-2305e2850.qfusion-admin -p 6379 -a x.x.x GET test:load:$i > /dev/null 2>&1 done '结果: 200 操作全部成功 ✓
# 从 predixy-0 发起 500 次请求kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --sh-c' for i in $(seq 1 500); do redis-cli -h redis-2305e2850 -p 6379 -a x.x.x PING > /dev/null 2>&1 done'&# 从 predixy-1 发起 500 次请求kubectlexec-n qfusion-admin redis-2305e285-predixy-1 --sh-c' for i in $(seq 1 500); do redis-cli -h redis-2305e2850 -p 6379 -a x.x.x PING > /dev/null 2>&1 done'&结果: 1000 请求全部完成 ✓
foriin$(seq1100);dokubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850 -p6379-a x.x.x PING2>/dev/nulldone结果:
| 指标 | 结果 |
|---|---|
| 成功 | 100 |
| 失败 | 0 |
| 成功率 | 100% |
# 直接访问 Predixy-0kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h245.0.2.240 -p7617ping# 直接访问 Predixy-1kubectlexec-n qfusion-admin redis-2305e285-predixy-1 --\redis-cli -h245.0.1.147 -p7617ping结果: 两个实例均返回PONG✓
# MSET/MGET 批量操作kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850 -p6379-a x.x.x\MSET test:user:1001"Alice"test:user:1002"Bob"test:user:1003"Charlie"# 读取验证kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850 -p6379-a x.x.x\MGET test:user:1001 test:user:1002 test:user:1003结果:Alice,Bob,Charlie✓
# 列表操作 LPUSH/LRANGEkubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850 -p6379-a x.x.x\LPUSH test:queue:tasks"task3""task2""task1"kubectlexec-n qfusion-admin redis-2305e285-predixy-0 --\redis-cli -h redis-2305e2850 -p6379-a x.x.x\LRANGE test:queue:tasks0-1结果:task1,task2,task3✓
kubectlexec-n qfusion-admin drc-redis-2305e285-0-1 -c redis --\redis-cli -p6379-a x.x.x INFO replication结果:
# Replication role:master connected_slaves:1 slave0:ip=245.0.1.48,port=6379,state=online,offset=335685,lag=0 master_failover_state:no-failover master_replid:38577acaafc0f390567d4813bf58500ff291255d master_repl_offset:335685 repl_backlog_active:1| 测试项 | 操作数 | 成功 | 失败 | 成功率 |
|---|---|---|---|---|
| 基本连通性 | 1 | 1 | 0 | 100% |
| 基本读写 | 2 | 2 | 0 | 100% |
| 并发负载 | 200 | 200 | 0 | 100% |
| 双源并发 | 1000 | 1000 | 0 | 100% |
| 连通性验证 | 100 | 100 | 0 | 100% |
| 双活实例 | 2 | 2 | 0 | 100% |
| 复杂数据类型 | 4 | 4 | 0 | 100% |
| 总计 | 1309 | 1309 | 0 | 100% |