【OceanBase 诊断调优】—— OceanBase 数据库网络速率配置方案

本文介绍 OceanBase 数据库网络速率配置方案。

背景

OceanBase 数据库备份功能按照网络的带宽的百分比做了速率限制。当前,网络带宽的获取有三种方法:

(1)OBServer 代码中的设置默认值 DEFAULT_ETHERNET_SPEED。

(2)操作系统设备节点 /sys/class/net/$(NIC_IFNAME)/speed。

(3)ob_work_dir/etc/nic.rate.config 配置文件的方式。

说明

ob_work_dir 指安装目录,如果是使用 rpm 安装的,则安装目录路径为 /home/admin/oceanbase 。

这三种方法的生效的优先级分别是(3)> (2) > (1)。

现在通过配置文件修改速率存在一些限制,一是配置文件的格式有约束,需要 '\n' 结尾;二是配置文件只在 OBServer 初始化的时候加载一次,后续如果修改了配置文件的值,需要重新启动才能生效。可通过动态加载配置文件的方式来实现。

动态加载配置文件

在 OBServer 增加 timer,每秒检查一次配置文件的内容是否有更新,如果有更新则重置 OBServer 的限速速率(即 observer.bandwidth_throttle_.set_rate(rate))。

配置文件名称和存放目录保持不变,仍然为:ob_work_dir/etc/nic.rate.config。代码会合入 OceanBase 数据库 V2_2_x_release 及之后的版本。

说明
  • 在 OceanBase 数据库 V3.2.3 版本 ob_work_dir/etc/ 目录下没有 nic.rate.config 文件。
  • 用户需要自行创建 nic.rate.config 文件。

配置文件格式

配置文件内容格式不再强制要求末尾必须 '\n' 结尾,具体格式为:$(IF_NAME)=$(SPEED),SPEED 可以是数字 + 单位,也可以是纯数字,纯数字情况下采用默认单位 Mbps。

配置文件示例。

复制代码
bond0=10000
bond0=10000b
bond0=10000bit
bond0=10000k
bond0=10000kb
bond0=10000kbit
bond0=10000m
bond0=10000mb
bond0=10000mbit
bond0=100g
bond0=100gb
bond0=100gbit

以上单位不区分大小写,统一按照 bit 计算。

说明

nic.rate.config 文件只支持写一行。并且 bond0 只是占位用的,并不需要和 OBServer 使用的网卡名相匹配。

日志

修改配置文件速率后可以检查日志确认配置是否正确生效。

速率公式如下。

复制代码
rate = network_speed * sys_bkgd_net_percentage

通过过滤日志中有关网络变更和带宽限制的信息。

复制代码
Bash# grep -E "network speed changed|reload_bandwidth_throttle_limit|init_bandwidth_throttle" log/observer.log.202106101*

输出结果如下:

复制代码
log/observer.log.20210610111947:[2021-06-10 11:10:49.397019] INFO  [SERVER] ob_server.cpp:2018 [72580][0][Y0-0000000000000000-0-0] [lt=8] [dc=0] succeed to init_bandwidth_throttle(sys_bkgd_net_percentage_=60, network_speed=1310720000, rate=786432000)
log/observer.log.20210610111947:[2021-06-10 11:14:44.905396] INFO  [SERVER] ob_server.cpp:2385 [72582][0][Y0-0000000000000000-0-0] [lt=11] [dc=0] network speed changed(from=1310720000, to=1048576000)
log/observer.log.20210610111947:[2021-06-10 11:14:44.905421] INFO  [SERVER] ob_server.cpp:2055 [72582][0][Y0-0000000000000000-0-0] [lt=3] [dc=0] succeed to reload_bandwidth_throttle_limit(old_percentage=60, new_percentage=60, network_speed=1048576000, rate=629145600)

如果日志格式不正确,会收到下面的错误日志。

复制代码
[2021-06-10 15:28:02.999345] ERROR [SERVER] get_network_speed_from_config_file (ob_server.cpp:1979) [99676][0][Y0-0000000000000000-0-0] [lt=14] [dc=0] invalid NIC Config file(ret=-4002) BACKTRACE:0xfbd452b 0x3d6c7f4 0x3eeab15 0x3eea4c2 0x3eea154 0x3ee9b90 0xadfc5c2 0xadfbc57 0xae01372 0xae0118d 0xfb3a316 0x483b9c7 0x483b929 0xf9e59de 0xf9e587d 0xb37edee 0xf9e5d3c 0xf9e5d15 0xf9e50b9 0xf9de0af

适用版本

OceanBase 数据库所有版本。

相关推荐
摇滚侠2 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试2 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
车软学堂3 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
2501_937767163 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
明天也要努力学习4 小时前
IP 协议的相关特性
网络·网络协议·tcp/ip
silvamux_4 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
说实话起个名字真难啊4 小时前
一次中风险漏洞处理复盘:从RSA密钥交换到全面启用TLSv1.3
网络
L0208246 小时前
Kubernetes Ingress|CNI 网络模型|Calico 网络策略|Pod 调度器完整实战教程
运维·网络·云原生·容器·kubernetes
启博网络6 小时前
下一代防火墙是什么意思?下一代防火墙可以抵御哪些网络攻击?
网络·防火墙