OAT 数据刷新功能未正常同步MetaDB组件修改后的启动参数信息

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OAT 管理者工具
【 使用版本 】v4.2.0 bp1
【问题描述】
metadb组件缩容system_memory内存资源,当前通过黑屏方式连接 metadb 的sys进行修改。
alter system set system_memory=‘5G’;并通过OAT数据刷新功能实现数据同步。
但实际在使用过程中,通过OCP平台或者黑屏修改metadb组件参数后,OAT数据刷新未修正OAT控制台中的metadb组件记录。

【复现路径】
1.修改metadb集群system_memory内存大小

-- 将metadb集群system_memory值从10GB大小调整为5GB
MySQL [(none)]> ALTER SYSTEM SET system_memory='5GB';

MySQL [(none)]> select zone,svr_ip,svr_port,name,value,scope,edit_level from 
oceanbase.__all_virtual_sys_parameter_stat where name like 'system_memory';
+-------------+--------------+----------+---------------+-------+---------+-------------------+
| zone        | svr_ip       | svr_port | name          | value | scope   | edit_level        |
+-------------+--------------+----------+---------------+-------+---------+-------------------+
| META_ZONE_1 | 10.186.71.11 |     2882 | system_memory | 5G    | CLUSTER | DYNAMIC_EFFECTIVE |
+-------------+--------------+----------+---------------+-------+---------+-------------------+
1 row in set (0.003 sec)

2.OAT数据刷新

实际在进行数据刷新时,system_memory被调整为初始化安装metadb组件时的内存大小,通过扩容或缩容内存都是固定在10GB大小,观测到OAT数据刷新未正常同步修改后的配置项信息。

【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

refresh_metadb.py 刷新脚本

根据OAT任务中心提示的check requirement 检查环境时,在调用refresh_metadb.py脚本,该脚本在oat容器中/oat/task_engine/dags路径下保存。

因为对python源代码不熟悉,所以想确认两个问题:
1、默认读取的参数信息是从oat.oat_component 元数据表中获取的,还是通过连接metadb库读取的?
2、怎么将OAT数据进行同步刷新的?

# get_current_context获取上下文信息,从哪里获取的?
with DAG(dag_id='refresh_metadb',
         default_args=default_args,
         schedule_interval=None,
         ) as dag:

    @task(doc='forbid_skip')
    def check_requirements():
        ctx = get_current_context()
        logger.info('params is %s', ctx['params'])
        hook = utils.get_oat_hook()
        server_id_list = ctx['params']['server_id_list']
        for server_id in server_id_list:
            with ServerRemoteExecute(server_id=server_id, hook=hook) as client:
                ret_code, ret = client.remote_execute('docker info')
                if ret_code != 0:
                    raise RuntimeError(f'docker info command return {ret_code}')
        return server_id_list

目前想到的解决方法

1、登录OAT容器,进入mariadb元数据库

--  登录 OAT 容器
docker exec -it oat bash

-- 登录 mariadb 数据库
python3 /oat/manage.py dbshell

2、修改 oat_component 元数据表信息

-- 备份原信息
MariaDB [oat]> create table oat_component_20240506bak like oat_component;
MariaDB [oat]> insert into oat_component_20240506bak select * from oat_component;   

-- 修改配置项
-- 将 {"name": "system_memory", "value": "10G"} system_memory 对应的记录值修改为5G大小,与metadb集群配置项保持一致
 MariaDB [oat]> update oat_component set config='{"name": "metadb", "image": 1, "servers": [3], "sys_root_password": "aaBB11@@", "container_name": "metadb", "cpu": 16, "memory": 28, "cluster_name": "metadb_cluster", "install_dir": "/home/admin/oceanbase", "data_dir": "/data/1", "log_dir": "/data/log1", "mysql_port": 2881, "rpc_port": 2882, "obproxy_port": 2883, "ob_parameters": [{"name": "system_memory", "value": "5G"}, {"name": "__min_full_resource_pool_memory", "value": "1073741824"}, {"name": "datafile_disk_percentage", "value": "50"}], "obproxy_parameters": [{"name": "automatic_match_work_thread", "value": "false"}, {"name": "enable_strict_kernel_release", "value": "false"}, {"name": "work_thread_num", "value": "16"}, {"name": "proxy_mem_limited", "value": "4G"}, {"name": "client_max_connections", "value": "16384"}, {"name": "log_dir_size_threshold", "value": "10G"}], "sshd_port": 2022, "sshd_root_password": "6EfdxNYT8jVx#-Md", "proxyro_password_sha1": "285a71f8c3ded40913c19ab8b757b067051e94c3", "proxysys_password_sha1": "8ab6aaae2672371f4ac098fc9990a4626594e4a5", "cluster_id": 1710774332, "zone_list": [{"zone_name": "META_ZONE_1", "root_server": 3, "idc": 1, "servers": [3]}], "arbitration_service_address": null}' where id=1 and name='metadb';                                       

3、刷新OAT平台页面,查看修改后的信息

是企业版420bp1嘛?

是的

各个版本是多少呢?比如oat ocp ob版本。

ocp 用的社区版:v 4.2.1
metadb 用的企业版本:OceanBase 2.2.77

OAT4.1.2之前版本进行metadb资源变更可能OB实际的memory和cpu未生效,是个已知问题,OAT4.1.2进行了修复。

OAT资源变更这个问题我了解,但是在企业版 OAT 4.1.1 及以上版本中,产品服务新增了数据刷新功能

看功能说明是当运维人员未通过OAT变更OAT中的产品或组件相关配置时,需要手工进行数据刷新,目前测试下来后台修改(ocp白屏或黑屏改metadb system_memory内存)数据刷新未同步成功。并且如果不修正OAT中记录,会对后续OCP、OB运维有影响吗?

OceanBase企业版范围内的功能细节。建议你通过以下方式寻求帮助:
1.如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;
2.如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。
OceanBase官网商务咨询

已提OB工单确认。当前OAT的数据刷新功能不对集群参数化的信息作同步,只对产品或组件等容器资源的变更进行管理。 refresh_metadb.py 刷新脚本时配置项是从容器的 OPTSTR 环境变量继承的,如果环境变量和OB内部实际的没对上就会有这个问题。

例如:通过黑屏方式修改metadb容器的CPU配额。

# 黑屏方式调整 metadb容器的CPU配额
docker update --cpu-period=100000 --cpu-quota=1300000 metadb

# 查看调整后的结果
docker inspect --format='{{json .HostConfig.CpuQuota}}' metadb

登录OAT平台,进入metadb组件页面,执行数据刷新修正OAT中的记录。该方式不会重启容器,在刷新页面后可以看到CPU资源已经显示为修改后的数值。