0.OBServer 节点架构
OBServer 节点架构
OBServer 节点安装目录结构
OBServer 节点工作目录下通常有 audit、bin、etc、etc2、etc3、log、run、store 这 8 个目录,但这 8 个目录并非都是安装必须的。在启动 OBServer 节点前我们需要保证 etc、log、run、store 这 4 的目录存在,同时 store 下应该有clog、slog、sstable 这 3 个目录。etc2、etc3 是备份配置文件用的,由 OBServer 节点创建。audit 下存放的是审计日志,也由 OBServer 节点创建。bin 目录用于存放 observer binary 文件,方便后续定位。
├─audit
├─bin
├─etc
├─etc2
├─etc3
├─log
├─run
├─store
├─clog
├─slog
├─sstable
配置文件目录
etc、etc2、etc3 都是配置文件目录。这三个目录里的内容是完全一致的,区别是后两个目录是 OBServer 节点创建的,第一个目录是启动前需要准备的。etc2 和 etc3 是配置文件额外保存的目录,由配置项 config_additional_dir 控制。当配置修改以后,除了会写标准的 etc/observer.config.bin 以外,还会额外在这些目录创建配置项文件。server 启动不会读取额外目录的配置项文件,只是作为额外备份。额外目录如果有权限会自动创建,没有权限则日志中报 ERROR。
配置文件中储存了集群和租户级配置项的增量信息。集群配置可以通过连接到数据库上执行 alter system 修改,也可以通过命令行传入配置项。命令行传入配置项会覆盖原有配置。命令行可以通过以下参数修改 OBServer 节点配置项:
-z,--zone ZONE zone name 节点所在的 Zone 的名字
-p,--mysql_port PORT mysql port SQL 服务协议端口号
-P,--rpc_port PORT rpc port 集群内部通信的端口号
-n,--appname APPNAME application name 本 OceanBase 集群名
-c,--cluster_id ID cluster id 本 OceanBase 集群ID
-d,--data_dir DIR OceanBase data directory 存储 SSTable 等数据的目录
-i,--devname DEV net dev interface 服务进程绑定的网卡设备名
-r,--rs_list RS_LIST root service list root service 列表
-l,--log_level LOG_LEVEL server log level 系统日志级别
-o,--optstr OPTSTR extra options string 额外配置项格式为 配置名 = 新值,配置名 = 新值
日志文件目录
log 目录是存放运行日志的目录,里面包含了 observer 日志、RS 日志和选举日志。单个日志文件大小为 256M。
当 enable_syslog_recycle 设置为 true、max_syslog_file_count 大于 0 时自动删除多余的日志文件。其中,enable_syslog_recycle 用于设置是否打开记录 OBServer 节点启动前的旧日志的开关,与 max_syslog_file_count 配合使用,决定回收逻辑是否考虑旧的日志文件。max_syslog_file_count 用于设置每种日志的最大日志数量。
数据文件目录
store 是数据文件目录,包含了 clog、slog、sstable 这 3 个子目录。其中 clog、slog 是事务日志目录,slog 存储静态数据写入的事务日志,clog 存储动态数据写入的事务日志。sstable 是基线数据目录。sstable 目录下会有一个 block_file,这个文件在 OBServer 节点启动后就会被创建,文件的大小由 datafile_size 或 datafile_disk_percentage 控制。
说明
- datafile_size 用于设置数据文件的大小。
- datafile_disk_percentage 表示占用 data_dir 所在磁盘( data_dir 所在磁盘将被 OceanBase 数据库系统初始化用于存储数据)总空间的百分比。
有关两个配置项的详细介绍,参见《OceanBase 数据库参考指南》中的 系统配置项 章节。
配置文件
OceanBase 数据库的配置项分为集群级配置项和租户级配置项。OBServer 节点会将所有的配置项序列化后保存到工作目录下的配置文件 etc/observer.conf.bin 中,之后在这个工作目录下启动 OBServer 节点都会读取这个配置文件。
配置项查询
- 普通租户查询配置项,通过虚拟表的形式展示当前租户的配置项信息,包含集群配置和租户配置。其中集群级配置项都是只读的,租户级配置项根据配置项属性决定是否可以被修改。
普通租户使用 SHOW PARAMETERS 语句查看本租户级配置项信息的 SQL 语句如下:
SHOW PARAMETERS [SHOW_PARAM_OPTS]
- 系统租户查询配置项
系统租户可以使用 SHOW PARAMETERS 语句查看集群级配置项和租户级配置项信息。并可通过增加 TENANT 关键字信息查看指定租户的配置项。 - 如果没有指定 TENANT,则展示系统租户级配置项信息,包含集群配置和租户配置。集群配置和租户配置都根据其属性决定是否可以被修改。
- 如果指定为某个普通租户,则和普通租户展示的配置项内容完全一致。
SQL 语句如下:
SHOW PARAMETERS [SHOW_PARAM_OPTS] TENANT = tenant_name
配置项的详细信息如下表所示:

配置项修改
集群级配置项仅支持在系统租户下配置。
MySQL 模式下,修改配置项的 SQL 语法如下:
ALTER SYSTEM [SET] parameter_name = expression [PARAM_OPTS]
系统租户下,可以通过指定 TENANT 关键字来修改全部或指定租户的配置项。SQL 语法如下:
执行成功以后,所有被指定的租户的配置项均会被修改。
ALTER SYSTEM [SET] parameter_name = expression [PARAM_OPTS] TENANT = all|all_user|all_meta|tenant_name
说明
- all:从 V4.2.1 版本开始,tenant = all 和 tenant = all_user 具有相同的语义,都表示对所有用户租户生效。all 语法即将被废除,不再推荐使用。
- all_user:对所有用户租户生效。
- all_meta:对所有 META 租户生效。
Oracle 模式下,修改配置项的 SQL 语法如下:
ALTER SYSTEM SET parameter_name = expression [PARAM_OPTS]
PARAM_OPTS 表示设置配置项所使用的其它限定条件,比如:指定 Zone、指定 OBServer 节点等。
配置项存储
OBServer节点在持久化时使用配置文件,而在运行时,则会维护内部表。
配置项有两种实体表:集群级配置项表和每个租户的租户级配置项表。当用户执行 SQL 修改配置项时修改集群级配置项时就写入集群级配置项表,否则写入对应的租户级配置项表。读取时,集群级配置项只需要使用集群级配置项表,租户级配置项则需要读取租户级配置项表。
配置文件格式
ObRecordHeader
[CLUSTER]
CLUSTER_PARAMETER_UPDATES
[TENANT_ID1]
TENANT_ID1_PARAMETER_UPDATES
[TENANT_ID2]
TENANT_ID2_PARAMETER_UPDATES
更新
更新是指各个 OBServer 节点根据需要,从内部表或者配置文件读取持久化的增量修改加载到内存中的过程。当 observer 进程刚启动的时候,它会从配置文件中加载配置项;正常运行过程中如果用户主动修改了配置项,OBServer 节点则会从内部表中进行加载。
从配置文件中加载
- OBServer 节点启动的时候配置项会优先在配置文件中进行加载。加载配置项的顺序是:
- 根据代码内容和运行环境计算出默认配置。
- 使用配置文件中的配置逐项设置。
- 租户级配置项是从集群级配置项克隆一份后再使用租户配置值进行覆盖。
- 根据命令行参数传入的配置项值进行设置。
从内部表加载
配置项最主要的更新场景还是从内部表进行加载,也就是当前已经拥有一份可正常运行的配置项的同时,需要修改某些配置项的值。
当一条 ALTER SYSTEM SET 的 SQL 通过验证以后,对应配置项所在的内部表会进行更新,并且 RS 会通过心跳的方式通知各 OBServer 节点需要重新读取配置项内部表以更新它们的配置项。当 OBServer 节点收到 RS 的通知以后,后台线程会启动一个"更新配置项"的任务。该任务主要流程是:
- 读取内部表中的配置项值。
- 克隆一份当前配置项。
- 将内部表中的配置项逐项应用到克隆出来的配置项副本中。
- 结束后检查副本配置项的值是否合法。
- 将内部表值持久化到配置文件。
- 使用配置项副本代替原来配置项。
- 租户级配置项的流程和集群级配置项一致,唯一的区别是配置项所在的内部表不同。

浙公网安备 33010602011771号