OceanBase数据库日常运维快速上手

发布于:2024-04-19 ⋅ 阅读:(23) ⋅ 点赞:(0)

这里为大家汇总了从租户创建、连接数据库,到数据库的备份、归档、资源配置调整等,在OceanBase数据库日常运维中的操作指南。

创建租户

方法一:通过OCP 创建

  1. 确认可分配资源

想要了解具体可分配的内存量,可以通过【资源管理】功能来查看各节点的剩余资源情况。

2. 新建租户

3. 填写租户信息

zone的优先级主要通过设置primary_zone来确定leader的优先顺序。在优先级完全一致的情况下,leader会均匀地分布在所有节点上。

方法二:手动创建

1. 确认可分配资源

新租户可以分配的内存大小为 memory_limit - system_memory - sys 租户内存,CPU 数量为 cpu_count - sys 租户 cpu。

# 查询参数
show parameters where name in ('memory_limit','system_memory','cpu_count');
# 查询 sys 租户资源
select * from DBA_OB_UNIT_CONFIGS;

2. 创建租户

# 创建资源规格,5C14G,日志40G,IOPS 10000000。
create resource unit unit_1 max_cpu 5, min_cpu 5, memory_size '15G', log_disk_size '50G', max_iops 10000000;
# 创建资源池,指定 资源规格以及 zone_list。
create resource pool pool_1 unit = 'unit_1', unit_num = 1, zone_list = ('zone1','zone2','zone3');
# 创建租户,指定副本数量3,primary_zone,以及资源池和白名单。
create tenant perf replica_num = 3,primary_zone='RANDOM', resource_pool_list=('pool_1') set ob_tcp_invited_nodes='%';

3. 修改 root 用户密码

创建完租户,默认的 root 密码为空,如果需要可以修改密码。

# 租户的 root 用户登陆后执行修改 sql
set password for root=password('xxx');

连接数据库

主要有两种连接方式:

1. 通过 OBServer 直连(默认端口 2881)

mysql -h xxx.xxx.xxx.xxx -uroot@sys -P2881 -p -c -A oceanbase

2. 通过 OBProxy 连接(默认端口2883)

mysql -h xxx.xxx.xxx.xxx -uroot@sys#obdemo -P2883 -p -c -A oceanbase

使用 OBProxy 连接时,用户信息需要包括【用户名@租户名#集群名】;如果是 OBServer 连接,那么只需要包括【用户名@租户名】。

参数和变量

区别:

参数(parameter)可以控制集群的负载均衡、合并时间、合并方式、资源分配和模块开关等功能,主要针对集群、Zone、OBServer 和 租户级别进行配置。

参数分集群级别和租户级别,可以通过查询 SHOW PARAMETERS LIKE'max_syslog_file_count'; 中的scope 列来确定,cluster为集群级别,tenant为租户级别。

变量(variable)可以控制数据库系统的各种行为,如缓存大小、并发连接数等,主要是针对租户级别内 Global 和 Session 级别进行设置。

查看参数和变量

OBServer 参数 :

# 方法一
show parameters like '%enable_rebalance%';
# 方法二
show parameters where name in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage');
# 方法三
select * from oceanbase.GV$OB_PARAMETERS where NAME in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage');

OBProxy 参数:

show proxyconfig like '%query_digest_time_threshold%';

查看变量

show variables like '%timeout%';

修改参数和变量

要注意,这里的参数修改会自动变更到安装目录的 etc 下的配置文件,但是如果是 OBD 创建的集群,不会自动同步到 OBD 的配置文件中,如果后续需要使用 OBD 重启,那么需要手动修改 OBD 的配置,防止启动后配置有差异影响业务。

OBServer 参数 :

alter system set enable_rebalance=False;

OBProxy 参数:

alter proxyconfig set query_digest_time_threshold='101ms';

修改变量

# 设置全局级别变量,当前 session 不生效,新 session 生效。
set global ob_query_timeout=10000000;
# 设置会话级别变量,当前 session 生效,其他 session 不生效。
set session ob_query_timeout=10000000;

转储合并

转储

主动触发转储

## 不带租户则表示所有租户
alter system minor freeze tenant=xxx;

查看进行中的转储任务

SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_PROGRESS WHERE TYPE='MINI_MERGE'\G;

需要关注的字段:

  • TYPE:表示 Compaction 任务的类型。
    • MINOR_MERGE:表示 Minor,多个 Mini SSTable 合成一个 Minor SSTable。
    • MINI_MERGE:表示转储,冻结 MemTable 通过转储变成 Mini SSTable。
    • MEDIUM_MERGE:表示分区级合并。
    • MAJOR_MERGE:表示合并。
    • META_MAJOR_MERGE :Buffer 表转储。
  • STATUS:表示任务状态。任务正在运行中时,该字段值为 NODE_RUNNING。
  • DATA_SIZE:表示需要转储的总数据量。
  • UNFINISHED_DATA_SIZE:表示转储未完成的数据量。
  • ESTIMATED_FINISH_TIME:表示预计完成时间。

查看转储历史

SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_HISTORY WHERE TYPE='MINI_MERGE'\G

合并

手动触发合并

## 不带租户则表示所有租户
ALTER SYSTEM MAJOR FREEZE TENANT = xxx;

查看租户各个zone的合并过程

SELECT*FROM oceanbase.CDB_OB_ZONE_MAJOR_COMPACTION\G

查看所有租户的合并信息

SELECT*FROM oceanbase.CDB_OB_MAJOR_COMPACTION\G

查看合并历史

SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_HISTORY where type='MAJOR_MERGE' order by START_TIME desc limit 5\G

问题分析常用

查看耗时超过 5s 的转储合并任务。

SELECT * FROM GV$OB_MERGE_INFO WHERE tenant_id=1002 AND (END_TIME-START_TIME)>5 LIMIT 10;

查看某张表的合并记录。

SELECT * FROM GV$OB_TABLET_COMPACTION_HISTORY WHERE TABLET_ID IN (SELECT TABLET_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TABLE_NAME = 'sbtest1') ORDER BY START_TIME DESC;

查看转储次数以及内存阈值

select * from gv$ob_memstore;

查看转储配置

show parameters where name in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage','memory_limit');

备份归档

备份

查看备份信息

查看当前所有租户的备份任务

select * from  CDB_OB_BACKUP_TASKS\G
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS\G

查看历史备份任务

SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY\G
SELECT * FROM oceanbase.CDB_OB_BACKUP_TASK_HISTORY\G

查看备份路径信息

SELECT*FROM oceanbase.CDB_OB_BACKUP_PARAMETER\G

查看备份集的文件状态

SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_FILES

操作备份任务

指定备份路径

ALTER SYSTEM SET DATA_BACKUP_DEST='data_backup_path'  [TENANT = mysql_tenant];

启动备份

ALTER SYSTEM BACKUP DATABASE [TENANT = mysql_tenant];  // 系统租户发起则全部租户,业务租户发起则自己

停止备份

ALTER SYSTEM CANCEL BACKUP [TENANT = mysql_tenant];

强制停止备份

ALTER SYSTEM CANCEL BACKUP FORCE;

更改备份目的端。

一定要先停止备份任务,并且保证新的备份目的端所在的目录为空以后再更改

ALTER SYSTEM SET DATA_BACKUP_DEST='data_backup_path'  [TENANT = mysql_tenant];

日志归档

查看归档信息

查看租户的归档模式

SELECT TENANT_NAME, LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_TYPE ='USER‘

查看 piece信息

SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG_PIECE_FILES\G

查看归档状态

SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG\G

查看归档历史

SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG_SUMMARY\G

查看归档参数

SELECT * FROM oceanbase.CDB_OB_ARCHIVE_DEST;

操作日志归档

配置归档目的端

ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOG_ARCHIVE_DEST'  [TENANT = mysql_tenant];

设置归档目的端的状态

# 启动
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='ENABLE' TENANT = tenant_name;
# 暂停
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='DEFER' TENANT = tenant_name;

启动日志归档

ALTER SYSTEM ARCHIVELOG [TENANT = mysql_tenant];	

停止日志归档

ALTER SYSTEM NOARCHIVELOG [TENANT = mysql_tenant];

更改归档目的端,跟更改备份目的端同理,一定要先关闭归档,再改目的端

强制取消数据备份+日志备份:

ALTER SYSTEM CANCEL ALL BACKUP FORCE; 

物理恢复

可以参考官网

OceanBase分布式数据库-海量数据 笔笔算数

调整资源占用大小

调整 OBServer 的资源占用

CPU扩缩容

注意:集群下的其他配置可能会影响该配置项的生效方式。建议在该配置项配置后,在 GV$OB_SERVERS 内部表中查看 CPU_CAPACITY 字段实际生效的值。若未动态生效,需要重启整个集群。

ALTER SYSTEM SET cpu_count=32; 

内存扩缩容

ALTER SYSTEM SET memory_limit='32G';   // 优先级最高
或者
ALTER SYSTEM SET memory_limit_percentage='80';

缩容的话需要注意,memory_limit 的值必须大于 OBServer 节点实际已使用的内存。

SELECT value/1024/1024/1024 used_gb FROM v$sysstat WHERE name LIKE '%observer memory%' AND con_id = 1 AND stat_id=140008 AND name='observer memory used size';

磁盘扩容

ALTER SYSTEM SET datafile_size='80G';  // 优先级最高
或者
ALTER SYSTEM SET datafile_disk_percentage=90;

磁盘缩容

只有单zone情况下不支持缩减磁盘空间,多zone情况下可以缩减磁盘空间;多zone的模式的话,可以先下线observer,然后再上线,上线时可以指定参数启动;

bin/observer -o "datafile_size='100G'"

调整租户的资源占用

举例:ALTER RESOURCE UNIT unit1 MAX_CPU 2, MEMORY_SIZE '5G';

语法:

ALTER RESOURCE UNIT unit_name
MEMORY_SIZE [=] 'size_value',
MAX_CPU [=] cpu_num,
[MIN_CPU [=] cpu_num,]
[MAX_IOPS [=] iops_num,]
[MIN_IOPS [=] iops_num,]
[IOPS_WEIGHT [=]iopsweight,]
[LOG_DISK_SIZE [=] 'size_value'];

统计信息

手动收集

方法一:

# 收集 test 库下的 test3 表
call dbms_stats.gather_table_stats('test','test3');
# 收集 test 下的所有表,并且并行度 128
call dbms_stats.gather_schema_stats('test', degree=>128);

方法二:

ALTER SYSTEM SET enable_sql_extension = true;
ANALYZE TABLE test3 COMPUTE STATISTICS;

详情参照:

OceanBase分布式数据库-海量数据 笔笔算数

查看表的统计信息

select * from DBA_TAB_STATISTICS

执行计划缓存

查看

select * from oceanbase.GV$OB_PLAN_CACHE_PLAN_stat where query_sql like '%xx%';

清空缓存

1、清空指定的计划缓存。

ALTER SYSTEM FLUSH PLAN CACHE sql_id='xxxxxxxxxxx'  global;   // 不加 global 只会清理本地的plan cache

2、清空 aa、bb两个租户的所有计划缓存

ALTER SYSTEM FLUSH PLAN CACHE TENANT = 'aa','bb' global;

3、清空租户下面某个库的所有计划缓存

ALTER SYSTEM FLUSH PLAN CACHE databases='myob1' tenant='tenant1' GLOBAL;

日志保留

修改方式

通过 ALTER SYSTEM SET enable_syslog_recycle=True;

相关参数

  • enable_syslog_wf控制是否生成独立的wf结尾的日志,wf指warn级别以上的日志,关闭这个效果是只存在observer.log了。

注意:关闭后实际还会有一个observer.log.wf,但以时间戳结尾的历史日志文件不会再有对应的wf文件,实现的小问题

  • max_syslog_file_count:控制的磁盘里历史日志的最大保留数量。
  • enable_syslog_recycle:用于设置是否开启回收系统日志,仅当 max_syslog_file_count设置为非 0 正数时生效。
  • enable_async_syslog:是否启用异步写日志功能,默认为 True。关闭后将使用同步方式写日志,可以保证 observer 宕机前写完所有日志,但性能较差,不建议关闭。
  • syslog_io_bandwidth_limit:日志限流量,默认为 30M。
  • syslog_level:打印的日志的最低级别,日志级别见上文,默认为 WDIAG。

实例启动

启动命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib

cd /home/admin/oceanbase && bin/observer

配置调整

调整租户配置

修改 primary_zone

ALTER TENANT xxx PRIMARY_ZONE=RANDOM;

修改 unit_num

调大 unit

ALTER RESOURCE TENANT mysql001 UNIT_NUM =2;

调小 unit

unit group 可以通过 DBA_OB_UNITS 查询

方法一:随机删除 unit group

ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1;

方法二:指定 unit group 删除实现调小

ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1 DELETE UNIT_GROUP =(1006);

查看执行状态

SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_RESOURCE_TENANT_UNIT_NUM' AND TENANT_ID=1006;

确认迁移后的信息

SELECT * FROM oceanbase.DBA_OB_UNITS WHERE UNIT_ID =1006;

迁移 unit

租户 mq_t1 中 UNIT_ID = 1006 的 Unit 迁移到同 Zone 的另一个节点。

ALTER SYSTEM migrate unit =1006 destination ='xx.xx.xx.158:2882';

查看状态

SELECT * FROM oceanbase.DBA_OB_UNIT_JOBS WHERE JOB_TYPE ='MIGRATE_UNIT';

确认迁移后的信息

SELECT * FROM oceanbase.DBA_OB_UNITS WHERE UNIT_ID =1006;

修改 Locality

修改

ALTER TENANT mq_t1 locality="F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3";

查看状态

SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE ='ALTER_TENANT_LOCALITY';

确认修改结果

SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS;

RS 切换

切换rs leader

alter system switch rootservice leader zone='z1';

查看 RS 任务

select * from __all_rootservice_event_history order by 1 desc limit 10;

日志流切主

命令

alter system switch replica leader ls=1 server='$z3_ip:$z3_port' tenant='sys';

查询leader的位置

select * from __all_virtual_log_stat where tenant_id=1;

OBProxy

开启后observer show create table输出会完全兼容mysql的语法,建议设置为租户级别。

alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';