【OceanBase系列】—— 常用运维操作(备忘)

作者简介:

花名:绪宁,OceanBase 数据库解决方案架构师

创建租户

方法一:OCP 创建

  1. 确认可分配资源

具体可以分配多少内存,可以通过【资源管理】查看各节点的剩余资源

  1. 新建租户
  1. 填写租户信息

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;
  1. 创建租户

    创建资源规格,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='%';

  2. 修改 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;';
相关推荐
Logan Lie34 分钟前
Web服务监听地址的取舍:0.0.0.0 vs 127.0.0.1
运维·后端
Y淑滢潇潇1 小时前
RHCE 防火墙实验
linux·运维·rhce
稻谷君W1 小时前
Ubuntu 远程访问 Win11 WSL2 并固定访问教程
linux·运维·ubuntu
泡沫·1 小时前
4.iSCSI 服务器
运维·服务器·数据库
悠悠121382 小时前
告别Zabbix?我用Netdata只花10分钟就搞定了50台服务器的秒级监控(保姆级实战)
运维·服务器·zabbix
天庭鸡腿哥3 小时前
大小只有4K的软件,可让系统瞬间丝滑!
运维·服务器·windows·microsoft·everything
虚伪的空想家3 小时前
华为昇腾Atlas 800 A2物理服务器开启VT-d模式
运维·服务器·ubuntu·kvm·vt-d·直通
学渣676563 小时前
服务器端口映射
运维·服务器
红袜子i3 小时前
【问题】实验室服务器恢复记录,一个主板挂两张显卡,
运维·服务器
S***q1923 小时前
DevOps在云中的云计算
运维·云计算·devops