Skip to content

OceanBase OBServer节点

核心功能

OBServer是OceanBase数据库的核心节点,所有的SQL执行、数据存储和事务处理都在OBServer节点上完成。每个OBServer节点都是一个独立的进程,包含了完整的SQL引擎、存储引擎和事务引擎。

主要功能

  • SQL处理:解析、优化和执行SQL语句
  • 数据存储:管理内存和磁盘数据
  • 事务处理:确保分布式事务的ACID特性
  • 副本管理:维护数据副本的一致性
  • 节点间通信:与其他OBServer节点进行数据同步和协作

节点架构

核心模块组成

每个OBServer节点包含以下核心模块:

  1. SQL引擎:负责SQL语句的解析、优化和执行
  2. 存储引擎:负责数据的存储和管理
  3. 事务引擎:负责分布式事务的处理
  4. 网络模块:负责节点间的通信
  5. 监控模块:负责节点状态的监控和报告

进程结构

OBServer节点运行时包含一个主进程和多个线程:

  • 主进程:负责节点的启动、初始化和资源管理
  • SQL线程池:处理客户端SQL请求
  • 存储IO线程池:处理磁盘IO操作
  • 网络线程池:处理网络通信
  • 后台线程:执行Compaction、Checkpoint等后台任务

OBServer节点部署

硬件要求

配置项最低要求推荐要求
CPU8核16核以上
内存32GB64GB以上
磁盘500GB SSD1TB SSD以上
网络千兆网卡万兆网卡

软件要求

  • 操作系统:CentOS 7.6+ 或 Ubuntu 18.04+
  • 内核版本:3.10.0+ (推荐4.19+)
  • 依赖库:glibc 2.17+,libaio 0.3.112+

部署步骤

  1. 环境准备

    bash
    # 安装依赖库
    yum install -y libaio-devel glibc-devel
    
    # 关闭SELinux
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
    # 关闭防火墙(生产环境建议配置规则)
    systemctl stop firewalld
    systemctl disable firewalld
  2. 创建用户和目录

    bash
    # 创建obuser用户
    useradd -m -d /home/obuser -s /bin/bash obuser
    
    # 设置密码
    passwd obuser
    
    # 创建数据目录
    mkdir -p /data/observer/{data,redo,log}
    chown -R obuser:obuser /data/observer
  3. 安装OBServer

    bash
    # 切换到obuser用户
    su - obuser
    
    # 下载OceanBase安装包
    wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-4.2.3.0-100000052024041610.el7.x86_64.rpm
    
    # 安装
    rpm -ivh oceanbase-ce-4.2.3.0-100000052024041610.el7.x86_64.rpm
  4. 初始化OBServer

    bash
    # 初始化命令
    /home/obuser/oceanbase-ce/bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -d /data/observer/data -r '192.168.1.100:2882:2881;192.168.1.101:2882:2881;192.168.1.102:2882:2881' -c 1001 -n obcluster -o "memory_limit=64G,system_memory=10G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,max_syslog_file_count=4,enable_syslog_wf=false,enable_syslog_recycle=true"

OBServer节点配置

核心配置参数

参数名描述推荐值
memory_limit节点内存限制总内存的80%
system_memory系统预留内存10G-20G
cpu_countCPU核心数物理CPU核心数
datafile_size数据文件大小200G+
log_disk_size日志磁盘大小100G+
net_thread_count网络线程数4-8
max_connections最大连接数10000-50000

动态配置调整

可以通过SQL语句动态调整OBServer节点的配置:

sql
-- 修改节点级配置
ALTER SYSTEM SET memory_limit = '64G' SCOPE = BOTH;

-- 修改集群级配置
ALTER SYSTEM SET cpu_count = 16 SCOPE = GLOBAL;

OBServer节点管理

启动OBServer节点

bash
# 启动命令
/home/obuser/oceanbase-ce/bin/observer -c 1001 -n obcluster -o "memory_limit=64G,system_memory=10G"

# 或者使用systemd管理
systemctl start oceanbase

停止OBServer节点

bash
# 优雅停止
/home/obuser/oceanbase-ce/bin/observer -c 1001 -n obcluster -o "graceful_stop_timeout=300" --stop

# 或者使用systemd管理
systemctl stop oceanbase

查看节点状态

sql
-- 查看节点状态
SELECT * FROM oceanbase.DBA_OB_SERVERS;

-- 查看节点负载
SELECT * FROM oceanbase.GV$OB_SERVER_LOAD;

-- 查看节点资源使用情况
SELECT * FROM oceanbase.GV$OB_SERVERS WHERE status = 'ACTIVE';

OBServer节点监控

关键监控指标

指标类别关键指标描述
资源使用CPU使用率、内存使用率、磁盘IOPS、磁盘吞吐量节点资源使用情况
SQL性能QPS、TPS、慢查询数、SQL响应时间SQL执行性能
存储状态MemTable使用率、SSTable数量、Compaction次数存储引擎状态
事务状态活跃事务数、事务等待时间、死锁数量事务处理状态
网络状态网络带宽使用率、连接数、数据包丢失率网络通信状态

监控工具

  • OCP:OceanBase Cloud Platform,提供图形化的节点监控
  • Prometheus+Grafana:通过导出的监控指标进行自定义监控
  • 内置视图:通过查询系统视图获取节点状态

OBServer节点故障处理

常见故障类型

  1. 节点宕机:OBServer进程意外终止
  2. 网络中断:节点间通信失败
  3. 资源耗尽:CPU、内存或磁盘空间不足
  4. IO故障:磁盘IO错误导致数据读写失败

故障恢复流程

  1. 节点宕机恢复

    bash
    # 检查节点状态
    systemctl status oceanbase
    
    # 启动节点
    systemctl start oceanbase
    
    # 验证节点恢复
    SELECT * FROM oceanbase.DBA_OB_SERVERS WHERE status = 'ACTIVE';
  2. 网络故障恢复

    bash
    # 检查网络连接
    ping 192.168.1.101
    
    # 检查端口连通性
    telnet 192.168.1.101 2882
    
    # 重启网络服务(如需要)
    systemctl restart network
  3. 资源耗尽处理

    sql
    -- 查看资源使用情况
    SELECT * FROM oceanbase.GV$OB_SERVER_LOAD;
    
    -- 调整资源配置
    ALTER SYSTEM SET memory_limit = '80G' SCOPE = BOTH;

OBServer节点扩容与缩容

节点扩容

  1. 准备新节点:按照部署步骤准备新的OBServer节点
  2. 添加节点到集群
    sql
    ALTER SYSTEM ADD SERVER '192.168.1.103:2882:2881' ZONE 'zone3';
  3. 等待节点状态变为ACTIVE
    sql
    SELECT * FROM oceanbase.DBA_OB_SERVERS WHERE server_ip = '192.168.1.103';
  4. 调整副本分布:将部分副本迁移到新节点

节点缩容

  1. 检查节点上的副本分布
    sql
    SELECT * FROM oceanbase.DBA_OB_UNITS WHERE server_ip = '192.168.1.103';
  2. 迁移副本:将节点上的副本迁移到其他节点
  3. 移除节点
    sql
    ALTER SYSTEM DELETE SERVER '192.168.1.103:2882:2881';
  4. 验证节点已移除
    sql
    SELECT * FROM oceanbase.DBA_OB_SERVERS WHERE server_ip = '192.168.1.103';

最佳实践

部署最佳实践

  • 硬件选择:使用高性能SSD磁盘,推荐NVMe SSD
  • 网络配置:使用万兆网卡,配置 bond 模式提高可靠性
  • 操作系统优化:关闭不必要的服务,调整内核参数
  • 数据与日志分离:将数据文件和日志文件放在不同的磁盘上

配置最佳实践

  • 内存配置:memory_limit 建议设置为总内存的80%
  • CPU配置:cpu_count 建议设置为物理CPU核心数
  • 连接数设置:max_connections 根据业务需求调整,避免设置过大
  • 日志配置:开启日志轮转,控制日志文件大小

运维最佳实践

  • 定期巡检:定期检查节点状态和资源使用情况
  • 备份配置:定期备份节点配置,以便快速恢复
  • 监控告警:配置合理的监控告警阈值,及时发现问题
  • 版本升级:定期升级OBServer版本,获取新特性和bug修复

常见问题(FAQ)

Q1: OBServer节点启动失败怎么办?

A1: 首先检查日志文件(默认位于 /home/obuser/oceanbase-ce/log),查看具体错误信息。常见的启动失败原因包括:

  • 端口被占用
  • 配置参数错误
  • 目录权限问题
  • 依赖库缺失

根据日志中的错误信息进行相应的调整,例如释放占用的端口、修正配置参数、调整目录权限或安装缺失的依赖库。

Q2: 如何优化OBServer节点的性能?

A2: 可以从以下几个方面优化OBServer节点性能:

  • 调整内存配置,确保足够的内存用于SQL执行和数据缓存
  • 优化磁盘IO,使用高性能SSD磁盘并合理配置IO调度策略
  • 调整CPU配置,确保足够的CPU资源用于SQL处理
  • 优化网络配置,提高网络带宽和降低延迟
  • 调整SQL执行计划,优化慢查询

Q3: OBServer节点可以部署在虚拟机上吗?

A3: 可以。OBServer节点支持部署在物理机、虚拟机和容器环境中。在虚拟机环境中部署时,需要注意以下几点:

  • 确保虚拟机分配了足够的CPU、内存和磁盘资源
  • 配置虚拟机的网络为桥接模式,确保节点间通信顺畅
  • 禁用虚拟机的内存气球技术,避免内存资源被动态调整
  • 开启虚拟机的CPU嵌套虚拟化,提高SQL执行性能

Q4: 如何查看OBServer节点的版本信息?

A4: 可以通过以下方式查看OBServer节点的版本信息:

sql
-- 查看版本信息
SELECT version();

-- 查看详细版本信息
SELECT * FROM oceanbase.DBA_OB_PARAMETERS WHERE name = 'version';

Q5: OBServer节点之间的通信协议是什么?

A5: OBServer节点之间使用自定义的二进制协议进行通信,主要包括:

  • Paxos协议:用于副本之间的数据同步和一致性保证
  • RPC协议:用于节点间的远程过程调用
  • 心跳协议:用于节点状态检测和故障发现

这些协议都经过了优化,具有高性能和低延迟的特点,能够满足分布式数据库的通信需求。