Skip to content

OceanBase 单节点部署

部署场景与适用范围

单节点部署适用于以下场景:

  • 开发测试环境
  • 功能验证
  • 学习和研究 OceanBase
  • 小规模应用部署

硬件要求

硬件类型最低配置推荐配置
CPU4核8核及以上
内存8GB16GB及以上
磁盘100GB200GB SSD
网络千兆网卡万兆网卡

操作系统要求

操作系统版本要求
CentOS7.6 及以上
Red Hat7.6 及以上
Ubuntu18.04 及以上
SUSE12 SP5 及以上

部署前准备

1. 系统依赖安装

bash
# CentOS/RHEL
yum install -y yum-utils device-mapper-persistent-data lvm2 

# Ubuntu
dpkg --add-architecture i386
apt-get update
apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

2. 关闭防火墙和SELinux

bash
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

3. 配置系统参数

编辑 /etc/sysctl.conf,添加以下内容:

txt
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_orphans = 32768

应用系统参数:

bash
sysctl -p

4. 配置用户限制

编辑 /etc/security/limits.conf,添加以下内容:

txt
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft stack 65536
* hard stack 65536

使用 OBD 部署单节点 OceanBase

1. 安装 OBD

OBD(OceanBase Deployer)是 OceanBase 官方提供的部署和管理工具,用于简化 OceanBase 集群的部署、扩容、升级等操作。

bash
# 安装 OBD 依赖包
yum install -y yum-utils
# 添加 OceanBase 官方 YUM 源
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
# 安装 OBD 部署工具
yum install -y ob-deploy

2. 下载 OceanBase 安装包

使用 OBD 镜像功能下载 OceanBase 社区版和 OBProxy 安装包,以便后续部署使用。

bash
# 查看可用的 OceanBase 社区版版本
obd mirror list oceanbase-ce
# 下载指定版本的 OceanBase 社区版,适配 el7.x86_64 平台
obd mirror clone oceanbase-ce-{version} --platform el7.x86_64

# 下载指定版本的 OBProxy,适配 el7.x86_64 平台
obd mirror clone obproxy-{version} --platform el7.x86_64

3. 创建部署配置文件

创建 obd-single-node.yaml 配置文件,定义单节点 OceanBase 集群的部署参数。

yaml
# 部署用户
user: root
# OceanBase 社区版配置
oceanbase-ce:
  # 部署服务器列表,单节点部署使用本地回环地址
  servers:
    - 127.0.0.1
  # 全局配置
  global:
    # OceanBase 安装目录
    home_path: /home/oceanbase
    # 数据存储目录
    data_dir: /data/oceanbase
    # 日志存储目录
    log_dir: /data/oceanbase/log
    # 网络设备名
    devname: eth0
    # MySQL 协议端口
    mysql_port: 2881
    # RPC 通信端口
    rpc_port: 2882
    # 集群 Zone 数量,单节点部署设置为 1
    zone_count: 1
    # 每个 Zone 中的 Observer 数量,单节点部署设置为 1
    observer_count: 1
    # 集群 ID
    cluster_id: 1
    # 内存限制
    memory_limit: 8G
    # 系统预留内存
    system_memory: 4G
    # 线程栈大小
    stack_size: 512K
    # CPU 核心数
    cpu_count: 4
    # 缓存清理阈值
    cache_wash_threshold: 1G
    # 最小资源池内存
    __min_full_resource_pool_memory: 268435456
    # 每 CPU 核心的工作线程数
    workers_per_cpu_quota: 10
    # 架构历史记录过期时间
    schema_history_expire_time: 1d
    # SSL 证书路径
    ssl_cert_path: etc/ssl_dir/server-cert.pem
    # SSL 密钥路径
    ssl_key_path: etc/ssl_dir/server-key.pem
    # SSL CA 证书路径
    ssl_ca_path: etc/ssl_dir/ca.pem
    # root 用户密码
    root_password: 'root@123'
    # proxyro 用户密码(用于 OBProxy 访问)
    proxyro_password: 'proxyro@123'
# OBProxy 配置
obproxy:
  # OBProxy 部署服务器列表
  servers:
    - 127.0.0.1
  # OBProxy 全局配置
  global:
    # OBProxy 安装目录
    home_path: /home/obproxy
    # OBProxy 监听端口
    listen_port: 2883
    # Prometheus 监控端口
    prometheus_listen_port: 2884
    # OceanBase 系统租户密码
    observer_sys_password: 'root@123'
    # 禁用严格的内核版本检查
    enable_strict_kernel_release: false

4. 执行部署

使用 OBD 工具执行部署和启动操作,部署单节点 OceanBase 集群。

bash
# 使用配置文件初始化部署,集群名称为 single-node
obd cluster deploy single-node -c obd-single-node.yaml

# 启动 single-node 集群
obd cluster start single-node

5. 验证部署

部署完成后,验证集群状态和服务可用性。

bash
# 查看集群详细状态信息
obd cluster display single-node

# 使用 MySQL 客户端连接 OceanBase 集群
# -h: 主机地址,本地部署使用 127.0.0.1
# -P: MySQL 协议端口,对应配置中的 mysql_port
# -u: 用户名,sys 租户的 root 用户
# -p: 密码,对应配置中的 root_password
# -A: 禁用自动重新连接
# oceanbase: 数据库名
mysql -h127.0.0.1 -P2881 -uroot@sys -p'root@123' -A oceanbase

# 执行简单查询验证服务可用性
# 查看所有数据库
SHOW DATABASES;
# 查看所有服务器信息
SELECT * FROM oceanbase.__all_server;

使用 Docker 部署单节点 OceanBase

Docker 部署是一种轻量级的部署方式,适用于快速搭建测试环境。通过 Docker 容器,可以隔离 OceanBase 运行环境,简化部署过程。

1. 安装 Docker

根据不同的操作系统,安装 Docker 引擎。

bash
# CentOS/RHEL 系统安装 Docker
# 安装 Docker 相关包
yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务
systemctl start docker
# 设置 Docker 开机自启
systemctl enable docker

# Ubuntu 系统安装 Docker
# 安装 Docker 包
apt-get install -y docker.io
# 启动 Docker 服务
systemctl start docker
# 设置 Docker 开机自启
systemctl enable docker

2. 拉取 OceanBase 镜像

从 Docker Hub 拉取最新版本的 OceanBase 社区版镜像。

bash
# 拉取 OceanBase 社区版最新镜像
docker pull oceanbase/oceanbase-ce:latest

3. 启动 OceanBase 容器

创建并启动 OceanBase 容器,映射必要的端口和数据目录。

bash
# 创建并启动 OceanBase 容器
# --name: 容器名称,设置为 ob-single-node
# -p: 端口映射,将容器内的 2881 和 2883 端口映射到宿主机
# -v: 数据卷映射,将宿主机的 /data/ob 目录挂载到容器内的 /root/ob 目录
# oceanbase/oceanbase-ce:latest: 使用的镜像名称和标签
docker run -itd --name ob-single-node \
  -p 2881:2881 -p 2883:2883 \
  -v /data/ob:/root/ob \
  oceanbase/oceanbase-ce:latest

4. 初始化 OceanBase

进入容器内部,使用 OBD 工具初始化 OceanBase 集群。

bash
# 进入已启动的 ob-single-node 容器
docker exec -it ob-single-node bash

# 初始化 OceanBase 集群
# 进入工作目录
cd /root/ob
# 使用 OBD 部署单节点集群,使用示例配置文件
./bin/obd cluster deploy single-node -c ./conf/single-node-example.yaml
# 启动单节点集群
./bin/obd cluster start single-node

5. 验证部署

在宿主机上使用 MySQL 客户端连接 OceanBase 集群,验证部署是否成功。

bash
# 连接 OceanBase 集群
# -h: 主机地址,本地部署使用 127.0.0.1
# -P: MySQL 协议端口,映射后的端口为 2881
# -u: 用户名,sys 租户的 root 用户
# -p: 密码,默认为 root@123
# -A: 禁用自动重新连接
# oceanbase: 数据库名
mysql -h127.0.0.1 -P2881 -uroot@sys -p'root@123' -A oceanbase

手动部署单节点 OceanBase

手动部署适用于对 OceanBase 部署过程有深入了解需求的场景,可以更灵活地配置和管理 OceanBase 实例。

1. 准备工作目录

创建 OceanBase 所需的工作目录,包括安装目录、配置目录、日志目录和数据目录。

bash
# 创建 OceanBase 安装目录结构
mkdir -p /home/oceanbase/{bin,conf,log}
# 创建数据存储目录
mkdir -p /data/oceanbase/data

2. 下载并解压安装包

从 OceanBase 官方镜像站下载安装包,并进行安装。

bash
# 下载 OceanBase 安装包
# 从阿里云镜像站下载指定版本的 OceanBase 社区版 RPM 包
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-{version}.rpm

# 安装 OceanBase
# 使用 rpm 命令安装下载的 RPM 包
rpm -ivh oceanbase-ce-{version}.rpm

3. 配置 OceanBase

创建 observer.conf 配置文件,定义 OceanBase 实例的各项参数。

txt
# 应用名称,固定为 observer
appname=observer
# 集群 ID,单节点部署设置为 1
cluster_id=1
# Zone 名称,单节点部署设置为 zone1
zone=zone1
tier_id=0
# 角色,固定为 observer
role=observer
# 网络设备名
devname=eth0
# MySQL 协议端口
mysql_port=2881
# RPC 通信端口
rpc_port=2882
# 安装目录
home_path=/home/oceanbase
# 数据存储目录
data_dir=/data/oceanbase/data
# 日志存储目录
log_dir=/home/oceanbase/log
# 内存限制
memory_limit=8G
# 系统预留内存
system_memory=4G
# CPU 核心数
cpu_count=4
# 线程栈大小
stack_size=512K
# 每 CPU 核心的工作线程数
workers_per_cpu_quota=10
# 缓存清理阈值
cache_wash_threshold=1G
# 最小资源池内存
__min_full_resource_pool_memory=268435456
# 架构历史记录过期时间
schema_history_expire_time=1d
# root 用户密码
root_password=root@123
# proxyro 用户密码(用于 OBProxy 访问)
proxyro_password=proxyro@123

4. 启动 OceanBase

使用配置文件启动 Observer 进程。

bash
# 启动 Observer 进程
# -c: 指定配置文件路径
# &: 后台运行
/home/oceanbase/bin/observer -c /home/oceanbase/conf/observer.conf &

5. 初始化集群

连接到 OceanBase 实例,执行 bootstrap 命令初始化集群。

bash
# 连接到 OceanBase 实例
mysql -h127.0.0.1 -P2881 -uroot -p -A oceanbase

# 初始化集群
# bootstrap: 初始化集群命令
# ZONE 'zone1': 指定 Zone 名称
# SERVER '127.0.0.1:2882': 指定服务器地址和 RPC 端口
ALTER SYSTEM bootstrap ZONE 'zone1' SERVER '127.0.0.1:2882';

部署后验证

1. 检查集群状态

sql
-- 检查集群状态
SELECT * FROM oceanbase.__all_server;

-- 检查 Zone 状态
SELECT * FROM oceanbase.__all_zone;

-- 检查资源池
SELECT * FROM oceanbase.__all_resource_pool;

2. 创建租户和数据库

sql
-- 创建资源单元
CREATE RESOURCE UNIT sys_unit_config
MAX_CPU=4,
MEMORY_SIZE='4G',
MAX_IOPS=10000,
MIN_IOPS=1000,
IOPS_WEIGHT=2,
LOG_DISK_SIZE='10G';

-- 创建资源池
CREATE RESOURCE POOL sys_pool
UNIT='sys_unit_config',
UNIT_NUM=1,
ZONE_LIST=('zone1');

-- 创建 MySQL 租户
CREATE TENANT IF NOT EXISTS test_tenant
charset='utf8mb4',
replica_num=1,
zone_list=('zone1'),
primary_zone='zone1',
resource_pool_list=('sys_pool');

-- 切换到 test_tenant
ALTER SESSION SET current_tenant = test_tenant;

-- 创建数据库
CREATE DATABASE test_db;
USE test_db;

-- 创建表并插入数据
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'OceanBase');
SELECT * FROM test_table;

常见问题(FAQ)

Q1: 部署过程中遇到 "insufficient memory" 错误怎么办?

A1: 这个错误通常是由于内存配置不足导致的。请检查以下几点:

  • 确保服务器实际内存大于配置文件中 memory_limit 的值
  • 调整 memory_limitsystem_memory 的值,确保它们的总和不超过服务器实际可用内存
  • 关闭其他占用大量内存的进程

Q2: 如何查看 OceanBase 的日志?

A2: OceanBase 的日志位于配置文件中 log_dir 指定的目录下,主要日志文件包括:

  • observer.log:主日志文件
  • rootservice.log:RootService 日志
  • election.log:选举日志

可以使用 tail -f 命令实时查看日志:

bash
tail -f /home/oceanbase/log/observer.log

Q3: 如何重启单节点 OceanBase?

A3: 使用 OBD 部署的集群可以通过以下命令重启:

bash
obd cluster restart single-node

手动部署的集群可以通过以下步骤重启:

  1. 停止 Observer 进程:pkill observer
  2. 启动 Observer 进程:/home/oceanbase/bin/observer -c /home/oceanbase/conf/observer.conf &

Q4: 如何修改 OceanBase 的配置参数?

A4: 可以通过 OBD 或 SQL 命令修改配置参数:

使用 OBD 修改:

bash
obd cluster edit-config single-node

使用 SQL 命令修改:

sql
ALTER SYSTEM SET parameter_name = 'value' [SCOPE = {MEMORY | SPFILE | BOTH}];

Q5: 部署后无法连接到 OceanBase 怎么办?

A5: 请检查以下几点:

  • 确认 OceanBase 进程是否正在运行:ps -ef | grep observer
  • 检查防火墙是否开放了 2881 和 2882 端口
  • 确认连接命令中的 IP、端口和密码是否正确
  • 查看 OceanBase 日志,检查是否有错误信息

Q6: 如何卸载单节点 OceanBase?

A6: 使用 OBD 部署的集群可以通过以下命令卸载:

bash
obd cluster destroy single-node

手动部署的集群可以通过以下步骤卸载:

  1. 停止 Observer 进程:pkill observer
  2. 删除安装目录:rm -rf /home/oceanbase /data/oceanbase
  3. 卸载 RPM 包:rpm -e oceanbase-ce

Q7: 单节点部署是否支持数据持久化?

A7: 是的,单节点部署支持数据持久化。数据存储在配置文件中 data_dir 指定的目录下。如果使用 Docker 部署,需要将数据目录挂载到宿主机上,以确保容器重启后数据不会丢失。

Q8: 如何升级单节点 OceanBase 版本?

A8: 使用 OBD 部署的集群可以通过以下命令升级:

bash
obd cluster upgrade single-node -c obd-single-node.yaml

升级前请务必备份数据,以防止升级失败导致数据丢失。