本文介绍 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 数据库所有版本。