# 跨集群容灾 ## 概述 OushuDB 提供了 `oushudb-dr` 工具,用于实现跨集群数据同步。该工具支持持续增量同步,将一个集群中的数据同步到另一个集群,实现跨集群容灾。 ## 使用 `oushudb-dr` 进行数据同步 ### 1. 配置 `oushudb-dr` 创建 `oushudb-dr` 配置文件(YAML 格式),指定源集群(src)和目标集群(dest)等信息。 示例配置文件: ```yaml include_objects: - "db1" jobs: 4 sync_staging_dir: "hdfs://localhost:9000/hawq_default3" sync_history_limit: -1 # -1 表示保留所有同步历史,或>=1 指定保留的同步次数。 log_dir: "/usr/local/oushu/log/oushudb/dr" cron_schedule: "* 1 * * *" # 每天凌晨 1 点执行 full_sync_every: -1 # -1 表示始终执行增量同步 db_mapping: - "db1=db2" # 若目标集群数据库与源集群同名,则不需要此映射 src: host: "host1" port: 7000 user: "oushu" password: "" dest: host: "host2" port: 7000 user: "oushu" password: "" ``` ### 2. 手动执行同步 ```sh oushudb-dr --config /usr/local/oushu/conf/oushudb/oushudb_br.yaml --manual-sync ``` - **增量同步**:默认按照 `full_sync_every` 配置执行增量同步。 - **全量同步**:如需强制执行全量同步,可添加 `--full` 参数。 ### 3. 自动执行同步 ```sh oushudb-dr --config /usr/local/oushu/conf/oushudb/oushudb_br.yaml --auto-sync ``` ### 4. 停止同步任务 ```sh oushudb-dr --config /usr/local/oushu/conf/oushudb/oushudb_br.yaml --stop ``` ### 5. 查看同步状态 ```sh oushudb-dr --config /usr/local/oushu/conf/oushudb/oushudb_br.yaml --status ``` ## OushuDB 容灾实施注意事项 `oushudb-dr` 仅支持同步库级及以下对象。为了确保容灾切换到备库后,业务 SQL 依赖的元数据对象能够正确运行,用户需自行同步必要的全局级对象。 ### 关键规则 - **配置文件**:按需自行同步。 - **全局元数据**:用户需自行同步,如用户、表空间、资源队列等。 - **库级元数据**:`oushudb-dr` 自动同步。 ### 注意事项 1. 目标集群需提前创建数据库,并配置 **同名的用户和表空间**。 2. 若 `include-object` 仅包含表级或 schema 级对象,则需在目标集群 **预先创建同名的 schema 和 database**。 3. 当前 `sync_staging_dir` 只支持 HDFS 目录,需要主备集群都可访问。 ### Failover 操作 在切换到备集群后,需执行以下命令解除只读模式,使数据库可写: ```sh ALTER DATABASE yourdb SET default_transaction_read_only = off; ``` 完成以上步骤后,业务可继续在目标集群正常运行。