---
title: "读写分离 | OceanBase 文档中心"
description: 读写分离 OceanBase 数据库支持读写分离部署，可以将客户端的写请求路由到 ReadWrite Zone，将读请求路由到 ReadOnly Zone，此功能强依赖 OBProxy 的 LDC 功能。 说明 由于 OceanBase 数据库不是所有 Zone 里的副本数据都是实时一致的，因此业务的只读操作为弱一致…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 读写分离

更新时间：2025-01-16 11:01:34

OceanBase 数据库支持读写分离部署，可以将客户端的写请求路由到 ReadWrite Zone，将读请求路由到 ReadOnly Zone，此功能强依赖 OBProxy 的 LDC 功能。

> **说明**
>
>  
>
> 由于 OceanBase 数据库不是所有 Zone 里的副本数据都是实时一致的，因此业务的只读操作为弱一致性读。

读写分离的部署需要进行以下 4 个步骤：

1. OceanBase 集群的 LDC 配置。
 2. OBProxy 的 LDC 配置。
 3. OBProxy 的集群配置。
 4. 应用配置弱一致性读。

## OceanBase 集群的 LDC 配置

1. 在客户端中使用 root 用户登录集群的 sys 租户。
 2. 执行以下示例语句配置 LDC，其中 `region` 通常设置为城市名（大小写敏感）。 `idc` 代表该 Zone 所处的机房信息，通常设置为机房名（小写），`z1` 为当前设置的 Zone 的名称。它们的关系是一个 OceanBase 集群中有若干个 Region，一个 Region 有若干个 Zone，一个 Zone 对应一个 IDC 属性。

   ```sql
    ALTER SYSTEM MODIFY zone "z1" set region ='SHANGHAI';

   ```

   ```sql
    ALTER SYSTEM MODIFY zone "z1" set idc = 'zue';

   ```
 3. 检查 OBServer 中 LDC 设置内容是否生效，查询语句如下所示，查看返回结果中对应 Zone 的 Region 和 IDC 项的值是否符合您的设置值。

   ```sql
    SELECT * FROM __all_zone;

   ```

## OBProxy 的 LDC 配置

读写分离部署时，OBProxy 仅需正确设置好 LDC 即可。OBProxy 的 LDC 配置有两种方式，其中 `zue` 为示例机房。

1. OBProxy 进程启动时通过参数指定进行配置（推荐方式），示例语句如下所示。

   ```shell
   cd /opt/taobao/install/obproxy-1.5.5
   ./bin/obproxy -o proxy_idc_name=zue

   ```
 2. 在 OceanBase 支持的客户端工具中运行 `ALTER` 语句修改 OBProxy 配置项，示例语句如下所示。

   ```sql
    ALTER PROXYCONFIG SET proxy_idc_name='zue';

   ```

   以示例 `zue` 机房为例，为 OBProxy 配置 LDC 后，如果应用部署在上海 `zue` 机房，当应用逻辑发起弱一致性读时，请求都是优先发往上海机房。

   为 OBProxy 配置 LDC 后可通过下述语句检查配置是否生效。

   ```sql
    SHOW PROXYINFO IDC;

   ```

   返回结果如下所示：

   ![返回结果](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/6525858951/p147038.png)

## OceanBase 集群配置

在 OceanBase 数据库支持的客户端中使用 root 用户登录到集群的业务租户，运行下述语句设置 Global 级别系统变量 `ob_route_policy` 为对应取值即可，默认取值为 `readonly_zone_first`。

```sql
 SET @@global.ob_route_policy=readonly_zone_first;

```

## 应用配置弱一致性读

读写分离部署时，需要应用决策是否进行只读操作（弱一致性读）。应用通过以下 3 种方式告知数据库需要进行只读操作：

- 在 SQL 中携带 Hint 来指定（仅对该条 SQL 生效），示例语句如下所示。

  ```sql
   SELECT /*+read_consistency(weak)*/ * FROM t1;

  ```
 - 设置 Session 级别的系统变量来指定（仅对当前 Session 生效），示例语句如下所示。

  ```sql
   SET @@ob_read_consistency='weak';

  ```
 - 设置全局级别的系统变量来指定（对该租户的所有连接都会生效），示例语句如下所示。

  ```sql
   SET @@global.ob_read_consistency='weak';

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
