---
title: "升级高可用 ODC - 开发者中心 ODC V4.3.4 | OceanBase 文档中心"
description: 升级高可用 ODC 停运旧版本 ODC 升级高可用部署的 ODC 应用时，完成更新元数据库后，需要首先停止运行各个节点上旧版本的 ODC。 在宿主机的命令行工具中运行 docker ps -a 语句查看正在运行的容器，通过 IMAGE 列（镜像名称）可以定位到旧版本 ODC 容器的 ID，即对应容器 CONTAINE…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*lqS5SYzz_YEAAAAAAAAAAAAADiGDAQ/original) 开发者中心 ODCV 4.3.4

# 升级高可用 ODC

更新时间：2026-04-13 15:30:53

[编辑](https://github.com/oceanbase/odc-doc/edit/V4.3.4/zh-CN/1200.upgrade-guide/400.upgrade-high-availability-odc.md)  

## 停运旧版本 ODC

升级高可用部署的 ODC 应用时，完成更新元数据库后，需要首先停止运行各个节点上旧版本的 ODC。

1. 在宿主机的命令行工具中运行 `docker ps -a` 语句查看正在运行的容器，通过 `IMAGE` 列（镜像名称）可以定位到旧版本 ODC 容器的 ID，即对应容器 `CONTAINER ID` 列的值。运行结果如下所示：

   ```javascript
   C:\Users\ob>docker ps -a
   CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                                      NAMES
   8bfecbc1cd03        acs-reg.alipay.com/oceanbase/obodc:2.0.1   "/bin/sh -c '/usr/bi..."   13 days ago         Up 13 days          80/tcp, 8080/tcp, x.x.x.x:8989->8989/tcp   obodc

   ```
 2. 获得容器 ID 后继续在命令行工具中运行 `docker stop <CONTAINER ID>;` 语句以停止运行旧版本 ODC 的容器。运行结果如下所示：

   ```javascript
   C:\Users\ob>docker stop 8bfecbc1cd03
   8bfecbc1cd03

   ```
 3. 在命令行工具中运行 `docker rm <CONTAINER ID>;` 删除旧版本 ODC 镜像以释放旧版本镜像占用的端口。运行结果如下所示：

   ```javascript
   C:\Users\ob>docker rm 8bfecbc1cd03
   8bfecbc1cd03

   ```

## 备份元数据库

#### 注意

升级前，请备份元数据库。备份的元数据库可用于升级失败时回滚 ODC 版本。

示例：创建 `~/odcmetadb_backup` 为元数据库备份文件路径，并备份 ODC 元数据库。

```shell
#create backup directory
mkdir -p ~/odcmetadb_backup

#backup odc metadb
./obdumper --thread 1 -h <host> -P <port> -u <username> -c <cluster_name> -t <tenant_name> -D <database_name> --ddl --csv --no-sys --all -f ~/odcmetadb_backup

```

#### 说明

备份使用的参数说明请参见 [OBDUMPER 命令行选项](https://www.oceanbase.com/docs/enterprise-oceanbase-dumper-loader-cn-1000000000076556)。

## 加载和运行 ODC 镜像

升级高可用部署的 OceanBase 开发者中心（OceanBase Developer Center，ODC）应用时，在完成元数据库的更新后，需在各个节点上重新拉取和运行 ODC 的镜像。

### 加载镜像

#### 注意

- ODC V4.2.0 及之后的版本的镜像已同时发布到 Docker Hub，如果运行 ODC 的机器可以访问 Docker Hub，则无需下载镜像，可以直接启动 ODC Docker，具体请参见下述 **运行镜像** 内容。
 - 如果无法直接访问 Docker Hub，则仍需下载和加载镜像文件。

1. 在 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 的 **运维工具** 栏，按需下载 ODC 镜像。
 2. 获得镜像文件后，在宿主机的命令行工具中运行下述语句加载镜像：

   ```javascript
   gunzip -c obodc-{$version}.tar.gz | docker load

   ```

### 运行镜像

在宿主机上获得 ODC 镜像后，在命令行工具中运行镜像的示例语句如下所示：

```javascript
#!/usr/bin/env bash
docker run -v /var/log/odc:/opt/odc/log -v /var/data/odc:/opt/odc/data \
-d -i --net host --cpu-period 100000 --cpu-quota 400000 --memory 8G --name "obodc" \
-e "DATABASE_HOST=xxx.xx.xx.xx" \
-e "DATABASE_PORT=60805" \
-e "DATABASE_USERNAME=[用户名]@[租户名称]#[集群名称]" \
-e "DATABASE_PASSWORD=******" \
-e "DATABASE_NAME=odc_metadb" \
-e "ODC_PROFILE_MODE=alipay" \
-e "ODC_ADMIN_INITIAL_PASSWORD=******" \
oceanbase/odc:4.2.2

```

#### 注意

Shell 环境下，字符串中包含 `!`、`$` 等特殊字符时，变量值需要使用单引号。例如：`DATABASE_PASSWORD='11111!'`。

参数说明如下表所示：

| 参数 | 说明 |
| --- | --- |
| -v | - 宿主机的 `/var/log/odc` 目录映射到 ODC 容器内的 `/opt/odc/log` 目录。 `/var/log/odc` 为宿主机的目录，如不存在需先创建，创建目录的参考命令 `mkdir -p /var/log/odc`。 - 宿主机的 `/var/data/odc` 目录挂载到 ODC 容器内的 `/opt/odc/data` 目录。`/var/data/odc` 为宿主机的目录，可自定义，如不存在需先创建，创建目录的参考命令 `mkdir -p /var/data/odc`。 |
| --net | 指定容器的网络配置，指定该参数值为 `host` 即直接使用宿主机网络。 您也可以使用 `--publish`（`-p`）参数配置端口映射，但是部分环境可能出现因为 Docker 内 DNS 解析出错而启动容器失败，此时请使用 `--net host` 方式启动 Docker。    默认端口号：8989。 |
| --cpu-period --cpu-quota | - `---cpu-period` 用来指定容器对 CPU 的使用要在多长时间内做一次重新分配。单位：微秒。 - `---cpu-quota` 用来指定在这个周期内，最多可以有多少时间用来运行当前容器。单位：微秒。  配合使用可指定容器使用的 CPU 核数。cpu-quota/cpu-period 的值即为 Docker 可以使用的 CPU 核数，示例语句中 400000/100000=4 表示最多可以使用 4 个核。 |
| --memory | 设置容器使用的内存最大值。 |
| --name | 指定容器名称。 |
| DATABASE_HOST | 元数据库 IP 地址。 |
| DATABASE_PORT | 元数据库端口号。   默认端口号：8989。 |
| DATABASE_USERNAME | 元数据库用户名。OceanBase 数据库用户名的格式：db_user@tenant_name#cluster_name。 |
| DATABASE_PASSWORD | 连接数据库的密码。 |
| DATABASE_NAME | 元数据库名。 |
| ODC_PROFILE_MODE | 指定模式。默认指定：`alipay`。 |
| ODC_ADMIN_INITIAL_PASSWORD | 指定 ODC 管理员账号（admin）的初始密码。   #### 注意    设置的初始密码需要须满足以下条件：    - 至少 2 个数字。 - 至少 2 个大写字母。 - 至少 2 个小写字母。 - 至少 2 个特殊字符，特殊字符的范围为 ._+@#$%。 - 不包含空格和其他特殊字符，长度为 8-32。 |

除上述参数外，运行镜像时您还可以根据需求使用下述参数：

| 参数 | 说明 |
| --- | --- |
| ODC_LOG_DIR | 指定日志目录，默认路径为 `/opt/odc/log`。 |
| ODC_JVM_HEAP_OPTIONS | 指定 JVM 内存配置。默认值：`-XX:MaxRAMPercentage=60.0 -XX:InitialRAMPercentage=60.0`，表示使用 60% 的的内存，可通过指定参数 `ODC_JVM_HEAP_OPTIONS` 自定义 JVM 内存配置。例如：配置为 `-Xmx2048m -Xms2048m`，表示设置堆内存为 2G。 |
| ODC_JVM_GC_OPTIONS | 指定 JVM GC 策略。默认指定：`-XX:+UseG1GC -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/opt/odc/log/gc.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=50M -XX:NumberOfGCLogFiles=5`。 |
| ODC_JVM_OOM_OPTIONS | 指定 JVM OutOfMemory 策略。默认指定：`-XX:+ExitOnOutOfMemoryError`。 |
| ODC_JVM_EXTRA_OPTIONS | 指定其它需要的 JVM 配置参数。默认值：空。 |
| ODC_SERVER_PORT | 指定 ODC-Server 的 HTTP 监听端口。默认值：8989。 |
| ODC_HOST | 指定 ODC 运行时的 IP 地址，该参数在高可用部署场景下做为远程过程调用的目的地址。 |
| ODC_MAPPING_PORT | 指定 ODC 运行时的端口号，避免因部署环境导致的端口号无法使用的问题。该参数适用于在 Docker 中部署 ODC 时进行端口映射的场景。 |
| ODC_APP_EXTRA_ARGS | 其它需要指定的 App 参数。    例如 `--server.servlet.session.timeout=10m`，表示 Session 过期时间为 10 分钟。默认值：空。 |

## 升级 Nginx 镜像

升级 Web 版 ODC 时，可按需选择是否将 Nginx 镜像也升级到最新版本。升级 Nginx 镜像，需首先停运并删除旧镜像，然后在宿主机上获得新版本镜像后重新进行部署 Nginx 代理的操作。

### 停运删除旧镜像

部署新版本 Nginx 镜像前，需在宿主机上先停运并删除当前运行的旧版本 Nginx 镜像。

1. 在宿主机的命令行工具中运行 `docker ps -a` 语句查看正在运行的容器，通过 `IMAGE` 列（镜像名称）可以定位到旧版本 Nginx 容器的 ID，即对应容器 `CONTAINER ID` 列的值。运行结果如下所示：

   ```javascript
   "  C:\Users\ob>docker ps -a
   CONTAINER ID        IMAGE            COMMAND                  CREATED             STATUS              PORTS                                      NAMES
   8bfecbc1cd03        bdd6f8916e8b    "/bin/sh -c '/usr/bi... 13 days ago            Up 13 days          80/tcp, 8080/tcp, x.x.x.x:8989->8989/tcp   nginx

   ```

### 加载新镜像

在宿主机上加载新版本的 Nginx 镜像，目前镜像可通过两种方式获得：

- 在宿主机上从 Docker 仓库中直接拉取镜像。
 - 下载镜像包到本地，再拷贝至宿主机中解压。

#### 从 Docker 仓库中直接拉取镜像

请确保宿主机上已安装了 Docker 并且可以访问外网，在命令行工具中运行下述语句从 Docker 仓库中拉取 Nginx 镜像：

```javascript
docker pull nginx

```

#### 拷贝镜像包至宿主机中解压

在可以访问外网且已安装了 Docker 的机器中运行下述语句，下载镜像包至本地：

```unknow
docker save nginx:latest | gzip - >nginx.tar.gz

```

然后，拷贝镜像包至宿主机中，运行下述语句加载镜像：

```javascript
gunzip -c nginx.tar.gz | docker load

```

### 配置 conf 文件

在启动 Nginx 镜像前，需修改配置文件。ODC 的镜像包中已提供配置文件模板，可复制模板到本地并进行编辑。配置文件模板根据您是否已部署自签证书而略有不同，请按需复制对应的模板并进行修改。

#### 配置不包含自签证书的 conf 文件

运行下述语句从镜像包中复制配置文件到宿主机再进行编辑，复制路径可自定义（其中 ~ 是配置文件在本地的路径）：

```javascript
docker cp -a <odc_image_name>:/opt/odc/conf/nginx.conf.template  ~/<conf_local_path>

```

配置文件模板如下所示，请关注文件中注释需修改的部分。

```javascript
# Nginx conf template for http deployment
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    #set 0 to disable request body size check, for support large size file upload
    client_max_body_size 0;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # for websocket configuration
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    # load balancing configuration
    # notice under_score character are not allowed for upsteram name, 400 Bad Request happens if used
    # please use ip_hash strategy
    # one server line for each odc-server node
    upstream odcbackends {
      ip_hash;
      # PLEASE CHANGE to real odc-server address
      # 请修改为实际的 odc-server 地址（非必改内容）
      server xxx.x.x.x:8989;
      # add more servers here
    }

    #https server, proxy to odc-server 8989 port
    server {
        listen 80;
        # uncomment below if ipv6 enabled
        # 如启用 ipv6，请取消以下注释
        #listen [::]:80;

        # PLEASE CHANGE to your site domain
        # 请修改为实际的站点域名（非必改内容）
        server_name  odc.oceanbase.com;

        location / {
            proxy_pass http://odcbackends;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_read_timeout 1800;
            proxy_send_timeout 1800;
            proxy_connect_timeout 75;
            proxy_next_upstream off;
        }
    }

}

```

#### 配置包含自签证书的 conf 文件

运行下述语句从镜像包中拷贝配置文件到宿主机再进行编辑，复制路径可自定义（其中 ～ 是配置文件在本地的路径）：

```javascript
docker cp -a <odc_image_name>:/opt/odc/conf/nginx.conf.https.template  ~/<conf_local_path>

```

```unknow
# Nginx conf template for https deployment
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/

    # for websocket configuration
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    # load balancing configuration
    # notice under_score character are not allowed for upsteram name, 400 Bad Request happens if used
    # please use ip_hash strategy
    # one server line for each odc-server node
    upstream odcbackends {
      ip_hash;
      # PLEASE CHANGE to real odc-server address
      # 请修改为实际的 odc-server 地址（非必改内容）
      server xxx.x.x.x:8989;
      #add more servers here
    }

    # redirect http to https
    server {
        listen 80 default_server;

        # uncomment below if ipv6 enabled
        # 如启用 ipv6，请取消以下注释
        #listen [::]:80 default_server;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    # https server, proxy to odc-server 8989 port
    server {
        listen 443 ssl http2;
        # uncomment below if ipv6 enabled
        # 如启用 ipv6，请取消以下注释
        #listen [::]:443 ssl http2;

        # PLEASE CHANGE to your site domain
        # 请修改为实际的站点域名（非必改内容）
        server_name  odc.oceanbase.com;

        # you can use /opt/odc/bin/generate-odc-ssl-certificate.sh
        # to generate self certificated SSL certificates
        # 您可以使用 /opt/odc/bin/generate-odc-ssl-certificate.sh 生成自签证书

        # PLEASE CHANGE certificate file location if unmatched
        # 如不匹配，请修改证书文件路径
        ssl_certificate /etc/pki/nginx/odcserver.crt;
        ssl_certificate_key /etc/pki/nginx/odcserver.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
        ssl_session_tickets off;

        # intermediate configuration
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;

        # HSTS (ngx_http_headers_module is required) (63072000 seconds)
        add_header Strict-Transport-Security "max-age=63072000" always;

        location / {
            proxy_pass http://odcbackends;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_read_timeout 1800;
            proxy_send_timeout 1800;
            proxy_connect_timeout 75;
            proxy_next_upstream off;
        }
    }

}

```

#### 说明

- 修改负载均衡配置，确保 proxy 超时配置时长充足，修改配置后需重启 nginx 。建议 `proxy_connect_timeout` 参数不超过 75 秒，请参见 [proxy_connect_timeout](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout)。
 - 设置 `proxy_next_upstream off` 旨在禁止 nginx 将请求转发至下一个 ODC 节点，导致用户需重新登录，且某些功能不可用，如异步任务结果集下载等与文件上传下载相关的功能。

### 启动镜像

在本地修改配置文件后，在命令行工具中运行下述语句以重启 Nginx 镜像（其中 ～ 是配置文件在本地的路径）：

```shell
docker run --network host --name nginx -v ～/<conf_local_path>:/etc/nginx/nginx.conf -v /etc/pki/nginx/:/etc/pki/nginx/ -d nginx

```

语句中的参数说明如下所示：

| 参数 | 说明 |
| --- | --- |
| --network host | 表示使用宿主机网络端口，无需配置端口映射。 如不希望直接使用宿主机端口，可使用 `-p` 参数配置端口映射。例如 `-p 8080:80` 表示宿主机的 8080 端口映射为 Docker 内的 80 端口，`-p 8443:443` 表示宿主机的 8443 端口映射为 Docker 内的 443 端口。 |
| --name nginx | 指定容器的名称为 nginx，方便后续管理，或可使用其它名称，如 odc-nginx。 |
| -v ~/<conf_local_path>:/etc/nginx/nginx.conf | 进行磁盘挂载，将宿主机内的本地文件映射到 Docker 内。 其中 `<conf_local_path>` 为配置 conf 文件时复制到宿主机的本地路径，然后将其映射至 Docker 内的 /etc/nginx/nginx.conf 文件中。 |
| -v /etc/pki/nginx/:/etc/pki/nginx/ | 将宿主机的 /etc/pki/nginx/ 路径映射到 Docker 内的 /etc/pki/nginx/ 路径。 |
| -d nginx | 表示后台运行 Docker。 |

 上一篇 下一篇 ![有帮助](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) 咨询热线
