首批通过分布式安全可靠测评,为关键业务系统打造
升级高可用 ODC
更新时间:2026-04-13 15:30:53
停运旧版本 ODC
升级高可用部署的 ODC 应用时,完成更新元数据库后,需要首先停止运行各个节点上旧版本的 ODC。
在宿主机的命令行工具中运行
docker ps -a语句查看正在运行的容器,通过IMAGE列(镜像名称)可以定位到旧版本 ODC 容器的 ID,即对应容器CONTAINER ID列的值。运行结果如下所示: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获得容器 ID 后继续在命令行工具中运行
docker stop <CONTAINER ID>;语句以停止运行旧版本 ODC 的容器。运行结果如下所示:C:\Users\ob>docker stop 8bfecbc1cd03 8bfecbc1cd03在命令行工具中运行
docker rm <CONTAINER ID>;删除旧版本 ODC 镜像以释放旧版本镜像占用的端口。运行结果如下所示:C:\Users\ob>docker rm 8bfecbc1cd03 8bfecbc1cd03
备份元数据库
注意
升级前,请备份元数据库。备份的元数据库可用于升级失败时回滚 ODC 版本。
示例:创建 ~/odcmetadb_backup 为元数据库备份文件路径,并备份 ODC 元数据库。
#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 命令行选项。
加载和运行 ODC 镜像
升级高可用部署的 OceanBase 开发者中心(OceanBase Developer Center,ODC)应用时,在完成元数据库的更新后,需在各个节点上重新拉取和运行 ODC 的镜像。
加载镜像
注意
- ODC V4.2.0 及之后的版本的镜像已同时发布到 Docker Hub,如果运行 ODC 的机器可以访问 Docker Hub,则无需下载镜像,可以直接启动 ODC Docker,具体请参见下述 运行镜像 内容。
- 如果无法直接访问 Docker Hub,则仍需下载和加载镜像文件。
在 OceanBase 软件下载中心 的 运维工具 栏,按需下载 ODC 镜像。
获得镜像文件后,在宿主机的命令行工具中运行下述语句加载镜像:
gunzip -c obodc-{$version}.tar.gz | docker load
运行镜像
在宿主机上获得 ODC 镜像后,在命令行工具中运行镜像的示例语句如下所示:
#!/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 |
|
| --net | 指定容器的网络配置,指定该参数值为 host 即直接使用宿主机网络。 您也可以使用 --publish(-p)参数配置端口映射,但是部分环境可能出现因为 Docker 内 DNS 解析出错而启动容器失败,此时请使用 --net host 方式启动 Docker。 默认端口号:8989。 |
| --cpu-period --cpu-quota | ---cpu-period 用来指定容器对 CPU 的使用要在多长时间内做一次重新分配。单位:微秒。---cpu-quota 用来指定在这个周期内,最多可以有多少时间用来运行当前容器。单位:微秒。 |
| --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)的初始密码。
注意设置的初始密码需要须满足以下条件:
|
除上述参数外,运行镜像时您还可以根据需求使用下述参数:
| 参数 | 说明 |
|---|---|
| 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 镜像。
在宿主机的命令行工具中运行
docker ps -a语句查看正在运行的容器,通过IMAGE列(镜像名称)可以定位到旧版本 Nginx 容器的 ID,即对应容器CONTAINER ID列的值。运行结果如下所示:" 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获得容器 ID 后继续在命令行工具中运行
docker stop <CONTAINER ID>;语句以停止运行旧版本 ODC 的容器。运行结果如下所示:C:\Users\ob>docker stop 8bfecbc1cd03 8bfecbc1cd03在命令行工具中运行
docker rm <CONTAINER ID>;删除旧版本 ODC 镜像以释放旧版本镜像占用的端口。运行结果如下所示:C:\Users\ob>docker rm 8bfecbc1cd03 8bfecbc1cd03
加载新镜像
在宿主机上加载新版本的 Nginx 镜像,目前镜像可通过两种方式获得:
在宿主机上从 Docker 仓库中直接拉取镜像。
下载镜像包到本地,再拷贝至宿主机中解压。
从 Docker 仓库中直接拉取镜像
请确保宿主机上已安装了 Docker 并且可以访问外网,在命令行工具中运行下述语句从 Docker 仓库中拉取 Nginx 镜像:
docker pull nginx
拷贝镜像包至宿主机中解压
在可以访问外网且已安装了 Docker 的机器中运行下述语句,下载镜像包至本地:
docker save nginx:latest | gzip - >nginx.tar.gz
然后,拷贝镜像包至宿主机中,运行下述语句加载镜像:
gunzip -c nginx.tar.gz | docker load
配置 conf 文件
在启动 Nginx 镜像前,需修改配置文件。ODC 的镜像包中已提供配置文件模板,可复制模板到本地并进行编辑。配置文件模板根据您是否已部署自签证书而略有不同,请按需复制对应的模板并进行修改。
配置不包含自签证书的 conf 文件
运行下述语句从镜像包中复制配置文件到宿主机再进行编辑,复制路径可自定义(其中 ~ 是配置文件在本地的路径):
docker cp -a <odc_image_name>:/opt/odc/conf/nginx.conf.template ~/<conf_local_path>
配置文件模板如下所示,请关注文件中注释需修改的部分。
# 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 文件
运行下述语句从镜像包中拷贝配置文件到宿主机再进行编辑,复制路径可自定义(其中 ~ 是配置文件在本地的路径):
docker cp -a <odc_image_name>:/opt/odc/conf/nginx.conf.https.template ~/<conf_local_path>
配置文件模板如下所示,请关注文件中注释需修改的部分。
# Nginx conf template for https 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
}
# 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。 - 设置
proxy_next_upstream off旨在禁止 nginx 将请求转发至下一个 ODC 节点,导致用户需重新登录,且某些功能不可用,如异步任务结果集下载等与文件上传下载相关的功能。
启动镜像
在本地修改配置文件后,在命令行工具中运行下述语句以重启 Nginx 镜像(其中 ~ 是配置文件在本地的路径):
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。 |