摘要
数据放置策略(Data Placement Policy)是分布式数据库中控制数据物理存储位置的核心机制。在数据合规要求日趋严格的背景下,TiDB 的 Placement Rules 提供了精细化的数据放置能力,支持跨地域、跨云的数据隔离与合规管理。本文详解数据放置策略的概念、法规要求、TiDB 实现方案和审计实践。
本文适合谁:合规负责人、数据架构师、数据库运维负责人,以及处理跨境业务或受行业监管的 TiDB 用户。
一、数据放置策略概念
1.1 什么是数据放置策略
数据放置策略是分布式数据库中将逻辑数据映射到物理存储位置的规则集。在分布式系统中,数据被划分为多个副本(Replica),放置策略决定每个副本存储在哪些节点、哪些机房、哪些地域。
核心要素:
| 要素 | 说明 | 示例 |
|---|---|---|
| Leader 放置 | 主副本所在位置,影响读写延迟 | Leader 放在北京机房 |
| Follower 放置 | 从副本所在位置,影响可用性和灾备 | Follower 分布在上海和广州 |
| 副本数量 | 每份数据的副本总数 | 3 副本(高可用最小要求) |
| 标签约束 | 基于机房、区域、云厂商等标签的放置规则 | 指定 Region 数据存储在华南节点 |
| 数据隔离 | 特定表/库的数据独立于其他数据 | 金融数据存储在专属节点 |
1.2 为什么需要数据放置策略
┌─────────────────┐
│ 数据放置策略 │
└────────┬────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 合规要求 │ │ 性能优化 │ │ 成本控制 │
└──────────┘ └──────────┘ └──────────┘
数据不出境 就近读写 冷热分离
区域存储 分区裁剪 降配存储
行业隔离 降低延迟 按需扩缩
二、法规要求与数据合规背景
2.1 主要数据合规法规
| 法规/标准 | 管辖范围 | 核心要求 | 对数据放置的影响 |
|---|---|---|---|
| 《数据安全法》 | 中国 | 重要数据境内存储,出境需评估 | 中国用户数据必须存储在境内 |
| 《个人信息保护法》 | 中国 | 个人信息跨境需取得单独同意 | 个人信息数据不可随意复制到境外 |
| GDPR | 欧盟 | 个人数据传输需充分保护 | 欧盟公民数据应在欧盟存储 |
| PCI DSS | 全球金融 | 支付数据加密存储与访问控制 | 支付卡数据需物理隔离 |
| HIPAA | 美国医疗 | 受保护健康信息的安全存储 | 医疗数据需访问审计和隔离 |
| 《银行业金融机构数据治理指引》 | 中国金融 | 重要数据境内存储 | 金融数据必须境内部署 |
2.2 常见合规场景
| 行业 | 合规要求 | 典型约束 |
|---|---|---|
| 金融 | 数据不出境,物理隔离 | 所有交易数据存储在境内指定机房 |
| 医疗 | 患者数据本地化 | 患者信息不可跨境传输 |
| 政务 | 数据主权,安全等级 | 不同安全等级数据分区存储 |
| 电商 | 用户隐私保护 | 用户个人信息存储在注册地所在区域 |
三、TiDB Placement Rules 数据合规应用
3.1 Placement Rules 基本概念
TiDB 使用 Placement Rules 来精确控制数据的物理存储位置:
- Placement Rule:一条放置规则,定义数据到物理位置的映射
- Placement Group:一组相关的放置规则
- Label:节点标签,如 `region=beijing`、`zone=cn-bj-1a`、`dc=china`
- Region:TiDB 的最小数据分片单元,每个 Region 的大小约 96MB
3.2 节点标签配置
在 TiDB 中,为每个节点配置标签:
# TiKV 节点配置(server.labels)
labels:
zone: cn-bj-1a
region: beijing
dc: china
compliance: financial
# 通过 pd-ctl 查看节点标签
pd-ctl config show | grep labels
3.3 Placement Rules 配置示例
场景 1:指定数据库存储在特定区域
{
"group_id": "financial_data_bj",
"group_name": "financial_data_beijing",
"group_index": 0,
"rules": [
{
"group_id": "financial_data_bj",
"rule_id": "financial_leader_bj",
"role": "leader",
"label_constraints": [
{"key": "region", "op": "in", "values": ["beijing"]},
{"key": "compliance", "op": "in", "values": ["financial"]}
],
"count": 1
},
{
"group_id": "financial_data_bj",
"rule_id": "financial_follower_bj",
"role": "follower",
"label_constraints": [
{"key": "region", "op": "in", "values": ["beijing", "shanghai"]}
],
"count": 2
}
]
}
场景 2:通过 SQL 语句直接指定表级放置策略(TiDB 6.1+)
-- 将金融数据表指定存储在北京区域
ALTER TABLE financial_transactions
PLACEMENT POLICY = 'beijing_policy';
-- 创建放置策略
CREATE PLACEMENT POLICY beijing_policy
LEADER_CONSTRAINTS = '[+region=beijing, +compliance=financial]'
FOLLOWER_CONSTRAINTS = '[+region=beijing], [+region=shanghai]'
FOLLOWERS = 2;
场景 3:数据库级别的默认策略
-- 为整个数据库设置默认放置策略
ALTER DATABASE financial_db
PLACEMENT POLICY = 'cn_policy';
-- 创建仅限中国存储的策略
CREATE PLACEMENT POLICY cn_policy
LEADER_CONSTRAINTS = '[+dc=china]'
FOLLOWER_CONSTRAINTS = '[+dc=china]'
FOLLOWERS = 2;
3.4 验证数据放置
-- 查看表的放置策略
SHOW PLACEMENT;
-- 查看特定 Region 的放置详情
SELECT * FROM information_schema.tikv_region_status
WHERE db_name = 'financial_db'
LIMIT 10;
-- 通过 pd-ctl 验证
pd-ctl region top --limit 10
四、跨地域数据同步策略
4.1 同城双活
{
"group_id": "cross_zone_bj",
"rules": [
{
"role": "leader",
"label_constraints": [{"key": "zone", "op": "in", "values": ["cn-bj-1a"]}],
"count": 1
},
{
"role": "follower",
"label_constraints": [{"key": "zone", "op": "in", "values": ["cn-bj-1a", "cn-bj-1b"]}],
"count": 2
}
]
}
4.2 跨地域灾备(不违反数据不出境)
对于不需要数据出境的场景,TiDB 的 Raft 副本可以直接放置在不同地域:
{
"group_id": "cross_region_cn",
"rules": [
{
"role": "leader",
"label_constraints": [{"key": "region", "op": "in", "values": ["beijing"]}],
"count": 1
},
{
"role": "follower",
"label_constraints": [{"key": "region", "op": "in", "values": ["shanghai", "guangzhou"]}],
"count": 2
}
]
}
4.3 严格隔离场景
对于有严格数据隔离要求的场景(如不同客户的敏感数据):
-- 为每个客户创建独立的放置策略
CREATE PLACEMENT POLICY customer_a_policy
LEADER_CONSTRAINTS = '[+zone=zone-a, +customer=a]'
FOLLOWERS = 2;
-- 隔离不同客户数据到不同物理节点
ALTER TABLE customer_a_orders
PLACEMENT POLICY = 'customer_a_policy';
五、合规审计与证明
5.1 审计日志
TiDB 提供完整的审计日志能力,支持合规审查:
-- 开启审计日志
SET GLOBAL tidb_enable_audit_log = ON;
-- 配置审计事件
INSERT INTO mysql.audit_log_filters (FILTER_NAME, CONTENT)
VALUES ('compliance_audit', '{"enable": true, "filter_rules": [{"event": "ALL", "table_names": ["financial_db.%"]}}]');
5.2 数据位置证明
-- 查询数据分布情况,生成合规报告
SELECT
db_name,
table_name,
COUNT(*) AS region_count,
SUM(approximate_keys) AS total_rows
FROM information_schema.tikv_region_status
WHERE db_name IN ('financial_db', 'personal_info_db')
GROUP BY db_name, table_name;
5.3 访问控制
-- 基于角色的访问控制,满足最小权限原则
CREATE ROLE compliance_reader;
GRANT SELECT ON financial_db.* TO compliance_reader;
-- 行级安全(Row-Level Security)用于更细粒度的访问控制
CREATE TABLE financial_records (
id BIGINT,
data_region VARCHAR(50),
amount DECIMAL(15,2),
-- ...
) WITH VALIDATION;
FAQ
Q1:TiDB Placement Rules 如何保证数据不会被意外复制到境外节点? Placement Rules 通过 PD 强制执行。只有符合标签约束的节点才能存储对应数据的副本。只要所有境外节点不包含境内数据的标签匹配条件,数据就不会被调度到境外。建议配合网络隔离策略,确保物理层面也阻断跨境数据传输。
Q2:Placement Rules 是否支持动态调整? 支持。可以通过 `ALTER PLACEMENT POLICY` 或更新 PD 配置来动态修改放置规则,PD 会自动调度 Region 到符合新规则的位置。整个过程在线进行,不需要停机。
Q3:TiDB 的合规能力是否经过第三方认证? TiDB 已通过多项安全认证和合规评估,包括 SOC 2 Type II 等。对于金融行业客户,PingCAP 可以提供详细的合规技术方案和安全白皮书。
Q4:在多云部署场景下,TiDB 如何实现数据放置? TiDB 的标签体系支持任意维度的自定义标签,包括云厂商(`cloud=aws/aliyun/tencent`)、可用区(`zone=cn-bj-1a`)等。通过 Placement Rules 可以精确控制数据在不同云之间的分布。
总结
数据放置策略是分布式数据库合规管理的基础设施。TiDB 通过 Placement Rules 提供了从节点级到表级的精细化数据放置控制能力,能够满足数据不出境、区域存储、物理隔离等多种合规要求。结合审计日志和访问控制,TiDB 为金融、医疗、政务等强监管行业提供了完整的数据合规解决方案。对于有跨境业务和合规需求的团队,建议在架构设计阶段就规划好数据放置策略。
下一步行动
- 获取合规方案咨询:联系 PingCAP 合规专家 — 免费获取行业合规数据放置方案
- 下载安全白皮书:TiDB 安全与合规白皮书 — 了解完整的安全架构与合规能力
- 试用 TiDB Placement Rules:TiDB 免费试用 — 在实际环境中体验数据放置策略配置