云原生存储与数据库选型实战:从传统数据库到云原生数据库的演进
云原生存储与数据库选型实战从传统数据库到云原生数据库的演进大家好我是迪哥。随着业务从传统架构向云原生架构演进存储和数据库的选型变得越来越重要。从 MySQL 到 TiDB从 Redis 到 Dragonfly从本地存储到分布式存储我们经历了多次技术选型的纠结。今天就和大家聊聊云原生时代的存储和数据库选型策略。存储架构演进传统存储 → 分布式存储 → 云原生存储 SAN/NAS Ceph/Gluster CSI/Cloud Storage云原生存储方案对比方案适用场景特点Local PV单节点状态应用高性能低延迟HostPath开发测试环境简单不推荐生产NFS多节点共享兼容性好性能一般Ceph大规模分布式存储高可用弹性伸缩CSI Volume云厂商存储托管服务省心CSI 配置示例apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: csi-disk数据库选型策略关系型数据库数据库适用场景特点MySQL通用场景成熟稳定生态完善PostgreSQL复杂查询功能强大支持JSONTiDB分布式事务水平扩展强一致CockroachDB全球分布式多活强一致NoSQL 数据库数据库适用场景特点Redis缓存/会话高性能支持多种数据结构Dragonfly替代Redis更高性能兼容Redis协议MongoDB文档存储灵活schema水平扩展Cassandra时序/日志高写入分布式选型决策树┌─────────────────┐ │ 需要事务吗 │ └────────┬────────┘ │ ┌─────────────┴─────────────┐ │ │ Yes │ │ No ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ 需要水平扩展 │ │ 数据结构 │ └────────┬────────┘ └────────┬────────┘ │ │ ┌──────┴──────┐ ┌─────────┴─────────┐ │ │ │ │ Yes │ │ No Key-Value Document ▼ ▼ ▼ ▼ TiDB/CRDB MySQL Redis/Dragonfly MongoDBTiDB 实战配置apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: basic spec: version: v6.5.0 timezone: UTC pvReclaimPolicy: Retain discovery: {} tikv: baseImage: pingcap/tikv replicas: 3 storageClaims: - resources: requests: storage: 100Gi tidb: baseImage: pingcap/tidb replicas: 2 service: type: NodePortDragonfly 替代 Redis# Dragonfly 配置 apiVersion: v1 kind: Deployment metadata: name: dragonfly spec: replicas: 3 selector: matchLabels: app: dragonfly template: spec: containers: - name: dragonfly image: docker.dragonflydb.io/dragonflydb/dragonfly args: - --dbfilenamedragonfly - --dir/data - --bind0.0.0.0 - --port6379 ports: - containerPort: 6379 volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: dragonfly-pvc数据库高可用配置MySQL 主从复制apiVersion: v1 kind: Service metadata: name: mysql spec: selector: app: mysql ports: - name: mysql port: 3306 --- apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: replicas: 3 selector: matchLabels: app: mysql serviceName: mysql template: spec: containers: - name: mysql image: mysql:8.0 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: password ports: - containerPort: 3306 volumeMounts: - name: data mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: data spec: accessModes: [ReadWriteOnce] resources: requests: storage: 50Gi备份与恢复Velero 备份配置apiVersion: velero.io/v1 kind: Schedule metadata: name: daily-backup spec: schedule: 0 0 * * * template: includedNamespaces: - default - prod snapshotVolumes: true ttl: 720h最佳实践清单维度最佳实践存储使用 CSI Volume避免 HostPath数据库关键业务用 TiDB缓存用 Dragonfly高可用至少 3 副本跨 AZ 部署备份定期备份测试恢复流程监控监控存储使用率、IOPS、延迟说到存储我家那只叫 Docker 的哈士奇最近学会了分布式存储——把玩具藏到家里各个角落美其名曰数据备份这备份策略比我们的 Velero 还强 我是迪哥我们下期再见