外观
OceanBase 单节点部署
部署场景与适用范围
单节点部署适用于以下场景:
- 开发测试环境
- 功能验证
- 学习和研究 OceanBase
- 小规模应用部署
硬件要求
| 硬件类型 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核及以上 |
| 内存 | 8GB | 16GB及以上 |
| 磁盘 | 100GB | 200GB SSD |
| 网络 | 千兆网卡 | 万兆网卡 |
操作系统要求
| 操作系统 | 版本要求 |
|---|---|
| CentOS | 7.6 及以上 |
| Red Hat | 7.6 及以上 |
| Ubuntu | 18.04 及以上 |
| SUSE | 12 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 lib32ncurses52. 关闭防火墙和SELinux
bash
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 03. 配置系统参数
编辑 /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 -p4. 配置用户限制
编辑 /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-deploy2. 下载 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_643. 创建部署配置文件
创建 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: false4. 执行部署
使用 OBD 工具执行部署和启动操作,部署单节点 OceanBase 集群。
bash
# 使用配置文件初始化部署,集群名称为 single-node
obd cluster deploy single-node -c obd-single-node.yaml
# 启动 single-node 集群
obd cluster start single-node5. 验证部署
部署完成后,验证集群状态和服务可用性。
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 docker2. 拉取 OceanBase 镜像
从 Docker Hub 拉取最新版本的 OceanBase 社区版镜像。
bash
# 拉取 OceanBase 社区版最新镜像
docker pull oceanbase/oceanbase-ce:latest3. 启动 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:latest4. 初始化 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-node5. 验证部署
在宿主机上使用 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/data2. 下载并解压安装包
从 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}.rpm3. 配置 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@1234. 启动 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_limit和system_memory的值,确保它们的总和不超过服务器实际可用内存 - 关闭其他占用大量内存的进程
Q2: 如何查看 OceanBase 的日志?
A2: OceanBase 的日志位于配置文件中 log_dir 指定的目录下,主要日志文件包括:
- observer.log:主日志文件
- rootservice.log:RootService 日志
- election.log:选举日志
可以使用 tail -f 命令实时查看日志:
bash
tail -f /home/oceanbase/log/observer.logQ3: 如何重启单节点 OceanBase?
A3: 使用 OBD 部署的集群可以通过以下命令重启:
bash
obd cluster restart single-node手动部署的集群可以通过以下步骤重启:
- 停止 Observer 进程:
pkill observer - 启动 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手动部署的集群可以通过以下步骤卸载:
- 停止 Observer 进程:
pkill observer - 删除安装目录:
rm -rf /home/oceanbase /data/oceanbase - 卸载 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升级前请务必备份数据,以防止升级失败导致数据丢失。
