架构简介
PolarDB-X 采纳 Shared-nothing 与存储拆散计算架构进行设计,零碎由4个外围组件组成。
- 计算节点(CN, Compute Node) 计算节点是零碎的入口,采纳无状态设计,包含 SQL 解析器、优化器、执行器等模块。负责数据分布式路由、计算及动静调度,负责分布式事务 2PC 协调、全局二级索引保护等,同时提供 SQL 限流、三权分立等企业级个性。
- 存储节点(DN, Data Node) 存储节点负责数据的长久化,基于多数派 Paxos 协定提供数据高牢靠、强统一保障,同时通过 MVCC 保护分布式事务可见性。
- 元数据服务(GMS, Global Meta Service) 元数据服务负责保护全局强统一的 Table/Schema, Statistics 等零碎 Meta 信息,保护账号、权限等平安信息,同时提供全局授时服务(即 TSO)。
- 日志节点(CDC, Change Data Capture) 日志节点提供齐全兼容 MySQL Binlog 格局和协定的增量订阅能力,提供兼容 MySQL Replication 协定的主从复制能力。
开源地址:[https://github.com/polardb/polardbx-sql]
试验阐明
PolarDB-X在22年11月份,公布开源v2.2新版本,这是一个重要的里程碑版本,重点推出合乎分布式数据库金融规范下的企业级和国产化适配,共包含八大外围个性,全面晋升 PolarDB-X
分布式数据库在金融、通信、政务等行业的普适性。 版本公布文档:PolarDB-X v2.2: 企业级和国产ARM适配 开源重磅降级分布式数据库最重要的个性就是线性扩大,目前PolarDB-X现有用户生产部署有64~256节点的规模,思考将来5~10年的倒退诉求,冀望分布式能至多撑持4~5倍的容量扩大,因而咱们须要验证下分布式下更大规模的扩展性。
本试验次要通过polardbx-operator,借助阿里云ACK容器服务,疾速部署和体验PolarDB-X的大规模分布式(1024节点),通过常见的sysbench/tpc-c等benchmark工具来初步验证大规模节点下的稳定性。
部署架构
阐明:
PolarDB-X采纳存储计算拆散的架构,CN和DN是能够独立部署,本实验设计部署1024个DN节点,比方私有云PolarDB-X单个DN节点可反对3TB,那超大规模节点下可反对 1024 * 3TB = 3PB本实验设计为了可低成本的复现,节点规格上采纳了压缩部署的模式,比方DN节点抉择了最小的1C8GB (1024节点下也须要8TB的内存),通过k8s的多租户cgroup技术,采纳24台高配ECS进行部署,单个ECS均匀须要承载40+的PolarDB-X CN/DN节点。本实验所须要的测试资源的老本,24台ECS按量付费 288元/小时,测试工夫1天左右,预计破费7000元。
1.部署k8s集群 (阿里云ACK)
创立ACK托管(k8s集群)
创立集群节点池 (24个高配ECS节点)
k8s集群配置
通过kubectl get nodes,返回了ECS集群列表,阐明k8s环境已装置结束
主机参数配置
批改sysctl.conf和limits.conf的内容。倡议通过ansible工具对每个主机进行批改。
sysctl.conf
配置内容:
net.ipv4.neigh.default.gc_stale_time=120# see details in https://help.aliyun.com/knowledge_detail/39428.htmlnet.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_announce=2net.ipv4.conf.all.arp_announce=2# see details in https://help.aliyun.com/knowledge_detail/41334.htmlnet.ipv4.tcp_max_tw_buckets = 5000net.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_syn_backlog = 1024net.ipv4.tcp_synack_retries = 2net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1kernel.sysrq=1net.core.somaxconn = 256net.core.wmem_max = 262144net.ipv4.tcp_keepalive_time = 20net.ipv4.tcp_keepalive_probes = 60net.ipv4.tcp_keepalive_intvl = 3net.ipv4.ip_local_port_range = 1024 65535net.ipv4.tcp_fin_timeout = 15#perfkernel.perf_event_paranoid = 1fs.aio-max-nr = 1048576
将文件保留为/etc/sysctl.conf,而后执行
sysctl -p /etc/sysctl.conf
limits.conf
配置内容:
#* hard rss 10000#@student hard nproc 20#@faculty soft nproc 20#@faculty hard nproc 50#ftp hard nproc 0#@student - maxlogins 4# End of fileroot soft nofile 655350root hard nofile 655350* soft nofile 655350* hard nofile 655350* soft nproc 655350* hard nproc 655350admin soft nofile 655350admin hard nofile 655350admin soft nproc 655350admin hard nproc 655350alidb soft nofile 655350alidb hard nofile 655350alidb soft nproc 655350alidb hard nproc 655350
将文件保留到/etc/security/limits.conf
2.装置 polardbx-operator
helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.comhelm install --namespace polardbx-operator-system --set imageRepo=docker.mirrors.sjtug.sjtu.edu.cn/polardbx polardbx-operator polardbx/polardbx-operator
3.创立 polardb-x 实例
将以下内容保留为polardbx.yaml文件kind:
PolarDBXClustermetadata: name: p1024spec: config: cn: static: EnableCoroutine: true RPCProtocolVersion: 2 ServerProperties: galaxyXProtocol: 0 dynamic: TRANSACTION_POLICY: TSO CONN_POOL_XPROTO_STORAGE_DB_PORT: 0 CONN_POOL_XPROTO_MAX_CLIENT_PER_INST: 8 CONN_POOL_XPROTO_MAX_SESSION_PER_CLIENT: 256 CONN_POOL_XPROTO_MIN_POOLED_SESSION_PER_INST: 32 CONN_POOL_XPROTO_MAX_POOLED_SESSION_PER_INST: 128 XPROTO_MAX_DN_WAIT_CONNECTION: 1000 XPROTO_MAX_DN_CONCURRENT: 2000 RECORD_SQL: "false" SHARD_DB_COUNT_EACH_STORAGE_INST: 1 MPP_METRIC_LEVEL: 0 topology: rules: components: dn: rolling: replicas: 1 nodes: gms: template: image: docker.mirrors.sjtug.sjtu.edu.cn/polardbx/polardbx-engine:80-8.0.18-20221208170957 hostNetwork: false resources: limits: cpu: 16 memory: 32Gi imagePullPolicy: IfNotPresent cn: replicas: 16 template: image: docker.mirrors.sjtug.sjtu.edu.cn/polardbx/polardbx-sql:5.4.15-20221129135549 hostNetwork: false resources: limits: cpu: 16 memory: 16Gi imagePullPolicy: IfNotPresent dn: replicas: 1024 template: image: docker.mirrors.sjtug.sjtu.edu.cn/polardbx/polardbx-engine:80-8.0.18-20221208170957 hostNetwork: false resources: limits: cpu: 1 memory: 8Gi imagePullPolicy: IfNotPresent cdc: replicas: 2 template: image: docker.mirrors.sjtug.sjtu.edu.cn/polardbx/polardbx-cdc:5.4.15-2022110310 hostNetwork: false resources: limits: cpu: 16 memory: 16Gi imagePullPolicy: IfNotPresent
执行创立命令:
kubectl apply -f polardbx.yaml
可通过如下命令查看创立进度:
kubectl get pxc -w
创立实现后,可参考 连贯PolarDB-X数据库 连贯数据库 阐明:如果遇到个别节点POD长时间创立不进去,能够尝试kubectl delete pod xx触发从新创立
4.数据库体验和压测
PolarDB-X提供了benchmark一键压测工具,可参考文档:应用Benchmark Boot进行压测
一键装置命令:
在前端机器的浏览器上,拜访 http://{前端机器IP}:4121/,呈现 Benchmark-Boot 首页,证实部署胜利。 参考benchmark boot工具的操作指南,通过页面实现: 配置数据库连贯 -> TPCC数据导入 -> TPCC压测
失常的TPC-C运行日志
show stats查问运行指标,均匀RT在0.67ms,体现比拟安稳
数据库验证体验项:
阐明:本试验采纳了24台ECS部署,并非关注性能摸高,重点模仿1024节点下的数据库稳定性,比方30~50万 tps下的均匀rt、以及12小时的低压长稳测试,仅供用户参考和复现试验操作。
图4.1
图4.2
图4.3
图4.4
图4.5
总结
分布式数据库主打线性扩大的能力,能够在满足OLTP高并发下提供海量PB级别的存储能力,在超大规模的集群架构下会带来蛮多技术挑战,比方:
元数据收缩。治理大规模的1024个物理节点,须要关注节点高可用、以及元数据的存储,比方分布式的DAL、DDL,在工作执行上下文以及分布式聚合时会带来更大的内存开销。比方,batch insert场景下的分布式事务,会波及1024个节点的分支事务管理,分布式事务的上下文和并发提交都会带来肯定的挑战。
TCP连贯风暴。 分布式share-nothing架构,不可避免会产生数据分片路由和转发,这里就会波及节点之间的相互拜访,比方PolarDB-X每个CN节点都要和DN节点建设RPC申请,在低压并发下节点之间须要RPC的连接池来晋升性能(比方8~16个TCP连贯),通过1024个DN节点的放大,每个CN节点可能会呈现几万的TCP连贯,须要对RPC连贯进行无效治理。本试验中,PolarDB-X CN配置16GB的内存来撑持1024节点的RPC连贯。
分布式并发死锁。 分布式下不带分片条件的查问,因为无奈命中分区裁剪,会带来全分片的查问(简称为:跨分片查问)。比方10个并发的跨分片查问,通过1024个DN节点的放大,会产生刹时几万的分片并发查问,简单的并发申请会产生相互期待的并发死锁的状况,造成更大的爆炸半径。比方,DDL操作的MDL锁获取,会因为个别长事务未提交而始终卡主,进一步阻塞后续其余的SQL,因为跨分片查问下的个别查问被锁住,在大规模节点下容易放大影响。
CDC多流日志合并。分布式数据库会通过CDC组件,向上游提供相似mysql binlog的机制,技术实现上都须要采集集群中的所有节点日志,进行采集和归并解决。通过1024个DN节点的放大,本来1024分之的归并排序无奈满足性能和稳定性要求,须要引申出多流归并、以及内存swap机制。
实际是测验真知的唯一标准,通过本试验的设计,联合阿里云的云服务,能够疾速且低成本的验证PolarDB-X在超大规模1024节点,在百万级别的TPS下满足业务应用的稳定性。
作者:七锋、不俗
原文链接
本文为阿里云原创内容,未经容许不得转载。