架构简介

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下满足业务应用的稳定性。

作者:七锋、不俗

原文链接

本文为阿里云原创内容,未经容许不得转载。