摘要:按 8 个步骤完成离线单节点部署与租户读写验收。
适用:普通麒麟 V10 ARM64,全新安装 OceanBase CE 4.2.5.6,MySQL 模式,单节点实验验证,无高可用。本文未完成真实麒麟服务器的端到端实装测试。
实施前填写
| 项目 | 本文约定 |
|---|---|
| 实际 IP | 替换全文的 192.0.2.10 |
| 安装包 | aarch64 all-in-one;记录版本、构建号、SHA-256 |
| SSH | obadmin,22 端口,私钥 /data/obadmin/.ssh/id_ed25519 |
| 本例资源 | 可分配 8 CPU;建议总内存 ≥32 GiB、available ≥24 GiB;数据盘可用 ≥400 GiB |
| 密码 | 准备 sys 管理密码和业务租户密码,不写入公开表格 |
先备齐依赖和 SSH,分步执行,报错即停。
步骤 1:检查环境与安装包类型
执行身份:root。
bash
cat /etc/os-release
uname -m
uname -r
ldd --version | head -n 1
LC_ALL=C lscpu | grep -w atomics
getconf PAGESIZE
free -h
nproc
ip -br addr
findmnt --mountpoint /data
df -hT / /data
ss -lntp | grep -E ':(2881|2882|2886)\b'
通过条件: aarch64;数据盘已挂载且允许执行;资源达标、IP 正确、三个数据库端口空闲。
- 有
atomics用普通包;没有时查grep '^Features' /proc/cpuinfo,确认无 LSE 后另备匹配的 nonlse 包及依赖,all-in-one 不含它。
**未通过:**补齐缺项;选包不明时查参数速查篇。
步骤 2:准备用户、目录和系统参数
执行身份:root;修改前须确认影响范围。
先查用户与目录;已存在则停,不接管旧数据:
bash
getent passwd obadmin
ls -ld /data/obadmin /data/ob-install /data/oceanbase
确认不存在后:
bash
useradd -m -U -d /data/obadmin -s /bin/bash obadmin
install -d -m 0750 -o obadmin -g obadmin /data/ob-install /data/oceanbase
install -d -m 0750 -o obadmin -g obadmin \
/data/oceanbase/{observer,data,redo,config}
安装包放到 /data/ob-install;管理员下发同机 SSH 密钥。
已有文件先读、备份。 编辑 /etc/security/limits.d/99-oceanbase.conf:
text
obadmin soft nofile 655350
obadmin hard nofile 655350
obadmin soft nproc 655360
obadmin hard nproc 655360
obadmin soft stack unlimited
obadmin hard stack unlimited
查现值后编辑 /etc/sysctl.d/99-oceanbase.conf,保留更高合规限额:
text
fs.aio-max-nr = 1048576
fs.file-max = 6573688
vm.max_map_count = 655360
vm.overcommit_memory = 0
vm.swappiness = 0
kernel.numa_balancing = 0
vm.zone_reclaim_mode = 0
加载配置;THP 路径存在且获批时执行关闭:
bash
sysctl -p /etc/sysctl.d/99-oceanbase.conf
sysctl fs.aio-max-nr fs.file-max vm.max_map_count
printf 'never\n' > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
**通过条件:**属主正确,配置生效,THP 为 [never],所需通信已放行。
**未通过:**查权限和策略,不用 777 或关闭安全控制。THP 重启复查,core 沿用受控策略。
步骤 3:验证部署用户和同机 SSH
执行身份:root 切换到 obadmin;后续 shell 均用 obadmin。
私钥权限 600;首次 SSH 核对指纹后登记,再做 BatchMode 检查。替换实际 IP:
bash
su - obadmin
export OB_IP='192.0.2.10'
id
printf '%s\n' "$HOME"
ssh -i /data/obadmin/.ssh/id_ed25519 "obadmin@$OB_IP" true
ssh -o BatchMode=yes -i /data/obadmin/.ssh/id_ed25519 \
"obadmin@$OB_IP" 'id; ulimit -n; ulimit -u; ulimit -s'
**通过条件:**两端为 obadmin、HOME 正确、无需交互认证;nofile ≥655350、nproc ≥655360、stack unlimited。
**未通过:**查账户、密钥、PAM。非 22 端口同步改 SSH/YAML;新终端重设 OB_IP。
步骤 4:安装工具并导入离线镜像
执行身份:obadmin。
bash
PKG='/data/ob-install/替换为实际aarch64安装包.tar.gz'
sha256sum "$PKG"
tar -tzf "$PKG" | head -n 20
SHA-256 须与可信记录一致,顶层为 oceanbase-all-in-one 且无同名旧目录,再解压:
bash
tar -xzf "$PKG" -C /data/ob-install
cd /data/ob-install/oceanbase-all-in-one/rpms
rpm -qp --qf '%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n' *.rpm
OB_RPM='/data/ob-install/oceanbase-all-in-one/rpms/替换为实际主包.rpm'
rpm -qpR "$OB_RPM"
版本、架构与依赖匹配后安装:
bash
cd /data/ob-install/oceanbase-all-in-one/bin
./install.sh
source "$HOME/.oceanbase-all-in-one/bin/env.sh"
command -v obd
obd --version
obd mirror disable remote
cd /data/ob-install/oceanbase-all-in-one/rpms
obd mirror clone -y *.rpm
obd mirror list local
**仅无 LSE 时:**专用目录放匹配的 nonlse 包和依赖,核对后导入:
bash
obd mirror clone -y /data/ob-install/nonlse/*.rpm
obd mirror list local
**通过条件:**OBD 可用、镜像及依赖匹配、LSE 类型正确。已有镜像不清库。
**未通过:**补匹配依赖,不换 glibc 或用 --nodeps;env.sh 位置看安装输出。
步骤 5:填写 YAML
执行身份:obadmin。
obd cluster list 无同名部署,observer/data/redo 目录为空,才继续:
bash
umask 077
vi /data/oceanbase/config/ob-single.yaml
chmod 600 /data/oceanbase/config/ob-single.yaml
yaml
user:
username: obadmin
key_file: /data/obadmin/.ssh/id_ed25519
port: 22
oceanbase-ce:
version: 4.2.5.6
servers:
- name: ob1
ip: 192.0.2.10
global:
home_path: /data/oceanbase/observer
data_dir: /data/oceanbase/data
redo_dir: /data/oceanbase/redo
mysql_port: 2881
rpc_port: 2882
obshell_port: 2886
zone: zone1
cluster_id: 1
memory_limit: 16G
system_memory: 4G
cpu_count: 8
datafile_size: 64G
datafile_next: 16G
datafile_maxsize: 256G
log_disk_size: 64G
production_mode: false
syslog_level: WARN
enable_syslog_wf: false
enable_syslog_recycle: true
max_syslog_file_count: 20
root_password: 'REPLACE_WITH_NEW_DB_PASSWORD'
**通过条件:**填实际 IP、版本和新 sys 密码;权限 600、目录可写。YAML 不展开变量。
**未通过:**修正配置和引号转义,不公开已填密码的文件。
步骤 6:部署、启动和检查集群
执行身份:obadmin;SQL 使用 root@sys。
bash
obd cluster deploy ob-single -c /data/oceanbase/config/ob-single.yaml
deploy 成功且实际选包正确,再执行:
bash
obd cluster start ob-single -S
obd cluster list
仅有已接受的实验共盘警告 且其他检查全通过时,才用 obd cluster start ob-single;不能用于绕过其他错误。
集群 running 后连接,交互输入 sys 密码:
bash
MYSQL_HISTFILE=/dev/null obclient -h"$OB_IP" -P2881 \
-u'root@sys' -p -Doceanbase -A
sql
SELECT VERSION();
SELECT SVR_IP, STATUS, ZONE FROM oceanbase.DBA_OB_SERVERS;
**通过条件:**集群 running、版本正确、节点 ACTIVE、Zone 为 zone1;保留 SQL 会话。
**未通过:**查首条错误,不加 -f 或销毁重装;输出外发前脱敏。
步骤 7:创建业务租户
执行身份:当前 root@sys SQL 会话。
仅新集群维护窗口执行。先查门槛、资源与重名:
sql
SELECT VALUE FROM oceanbase.GV$OB_PARAMETERS
WHERE NAME='__min_full_resource_pool_memory';
SELECT * FROM GV$OB_SERVERS;
SELECT NAME FROM DBA_OB_UNIT_CONFIGS WHERE NAME='app_unit';
SELECT NAME FROM DBA_OB_RESOURCE_POOLS WHERE NAME='app_pool';
SELECT TENANT_NAME FROM DBA_OB_TENANTS WHERE TENANT_NAME='app_tenant';
须无重名、内存门槛 ≤5G;按 CAPACITY-ASSIGNED 核对余量:内存 ≥5 GiB、日志盘 ≥16 GiB、CPU 下限/上限 ≥1/2。不足则停;门槛纯数字按字节读,5 GiB=5368709120,空结果不算通过。
满足后逐条执行,失败即停:
sql
CREATE RESOURCE UNIT app_unit
MEMORY_SIZE='5G', MAX_CPU=2, MIN_CPU=1, LOG_DISK_SIZE='16G';
CREATE RESOURCE POOL app_pool
UNIT='app_unit', UNIT_NUM=1, ZONE_LIST=('zone1');
CREATE TENANT app_tenant
RESOURCE_POOL_LIST=('app_pool'), PRIMARY_ZONE='zone1', LOCALITY='F@zone1'
SET ob_compatibility_mode='mysql', ob_tcp_invited_nodes='127.0.0.1';
SELECT TENANT_NAME, STATUS FROM DBA_OB_TENANTS WHERE TENANT_NAME='app_tenant';
**通过条件:**租户 NORMAL;初始 root 空密码、仅限回环。立即做下一步,不对外开放。
**未通过:**查资源、Zone 和已建对象,不整段重跑或自动删除。
步骤 8:设置密码并验证读写
执行身份:obadmin;SQL 使用 root@app_tenant。
在 sys 执行 exit; 返回 shell,连接新租户:
bash
MYSQL_HISTFILE=/dev/null obclient -h127.0.0.1 -P2881 -u'root@app_tenant' -A
受控会话中替换新密码后执行,不保存为脚本:
sql
SET PASSWORD = PASSWORD('REPLACE_WITH_NEW_TENANT_PASSWORD');
exit;
此环境变量只关客户端历史,不关闭录屏或服务端审计。用新密码重新连接:
bash
MYSQL_HISTFILE=/dev/null obclient -h127.0.0.1 -P2881 -u'root@app_tenant' -p -A
先查 SHOW DATABASES LIKE 'ob_deploy_verify';,无同名库再执行:
sql
CREATE DATABASE ob_deploy_verify;
USE ob_deploy_verify;
CREATE TABLE connectivity_check (id BIGINT PRIMARY KEY, note VARCHAR(32));
INSERT INTO connectivity_check VALUES (1, 'created');
UPDATE connectivity_check SET note='updated' WHERE id=1;
SELECT id, note FROM connectivity_check WHERE id=1;
**通过条件:**新密码登录成功,最后返回 1 / updated,完成本机功能验收。
**未通过:**查失败语句,不删库表。业务接入另配最小权限账号和来源;自启、备份恢复未配置。