支持自定义UDP端口
关键字:
端口、UDP、TCP、stats collector、
1.特性说明
在主版本中,在数据库启动的时候会发送一条UDP协议的测试信息,成功后才会开启stat collector进程,进一步开启autovacuum进程。在这个过程中使用的UDP端口号是随机的。
在应用现场中,因网络安全需求,除指定端口外其他端口全部禁用。针对这种场景,stat collector进程随机选择的UDP端口号可能导致KES服务器无法正常启动。故需要有以上需求:新增GUC参数用于支持通过指定的UDP端口开启stat collector进程。
2.测试方案
按边界值指定最大、最小端口号,禁用部分端口号后启用随机值,验证数据库是否正常启动,检查日志信息是否正常,查看端口占用情况及stats collector进程的启动情况。
端口号范围 0 - 65535
0(默认):使用随机端口
1-65535:使用指定端口号。
3.特性测试示例
3.1 GUC参数配置
1、正常场景验证:
(1) 在kingbase.conf中配置GUC参数:stats_collector_port = 0
① 启动数据库 ② 查看日志(sys_log) ③ 切换至root用户:su root ④ 执行ps -ef | grep kingbase查看进程情况 ⑤ 执行lsof -ni |grep kingbase检查UDP占用情况
(2) 在kingbase.conf中配置GUC参数:stats_collector_port = 65535
① 启动数据库 ② 查看日志(sys_log) ③ 切换至root用户:su root ④ 执行ps -ef | grep kingbase查看进程情况 ⑤ 执行lsof -ni |grep kingbase检查UDP占用情况
(3) 在kingbase.conf中配置GUC参数:stats_collector_port = 32766
① 启动数据库 ② 查看日志(sys_log) ③ 切换至root用户:su root ④ 执行ps -ef | grep kingbase查看进程情况 ⑤ 执行lsof -ni |grep kingbase检查UDP占用情况
2、异常场景验证:
(1)在kingbase.conf中配置GUC参数:stats_collector_port = -1,并重启数据库服务
(2)在kingbase.conf中配置GUC参数:stats_collector_port = 65536,并重启数据库服务
(3)在kingbase.conf中配置GUC参数:stats_collector_port = ,并重启数据库服务
(4)在kingbase.conf中配置GUC参数:stats_collector_port = 'abc',并重启数据库服务
(5)在kingbase.conf中配置GUC参数:stats_collector_port = true,并重启数据库服务
3.2 会话中修改GUC参数
1、设置GUC参数,启动数据库
stats_collector_port = 65534
./bin/sys_ctl -D data start
2、检查UDP占用情况(root用户)
lsof -ni |grep kingbase
3、连接ksql,修改参数后重启
alter system set stats_collector_port = 65535
./bin/sys_ctl -D data restart
4、检查UDP占用情况(root用户)
lsof -ni |grep kingbase
3.3 UDP端口已被占用
1、手动占用UDP端口
(1)手动占用UDP端口:nc -l -p 65535 -u &
(2)设置GUC参数,启动数据库
stats_collector_port = 65535
./bin/sys_ctl -D data start
(3)检查UDP占用情况(root用户):lsof -ni |grep kingbase
(4)检查进程情况:ps -ef |grep kingbase
2、手动占用TCP端口
(1)手动占用TCP端口:nc -l -p 65535 &
(2)设置GUC参数,启动数据库
stats_collector_port = 65535
./bin/sys_ctl -D data start
(3)检查UDP占用情况(root用户):lsof -ni |grep kingbase
(4)检查进程情况:ps -ef |grep kingbase
3.4 自动撤销端口占用
1、设置GUC参数,启动数据库
stats_collector_port = 65535
./bin/sys_ctl -D data start
2、检查UDP占用情况(root用户):lsof -ni |grep kingbase
3、关闭数据库后,检查UDP端口占用情况
./bin/sys_ctl -D data stop
lsof -i:65535
4、启动数据库,检查UDP端口占用情况
./bin/sys_ctl -D data start
lsof -ni |grep kingbase
5、杀掉数据库,检查UDP端口占用情况
kill -9 [数据库PID]
lsof -i:65535
4.测试注意事项
1、lsof 要在root用户下执行,普通用户只能查看当前用户下的占用情况,查看其他用户权限不够;
2、环境用自己的虚拟机,不要使用公用机器;
3、只杀死 stats collector 进程,不会释放UDP端口;
4、强制抢占端口的脚本如下:
5、TCP和UDP可以绑定相同的端口,当TCP和UDP在不同进程同时使用时,不会对本功能造成影响(建议手册里有对应说明);
6、有一些特殊的端口号,使用GUC参数配置,占用该端口时,执行“lsof -ni | grep kingbase”的结果,UDP端口位置显示的不是端口号的数字,而是其服务名称,例如:32768—filenet-tms(建议在手册中进行说明)。
7、端口号在1-1023范围内,需要root权限才能使用。 更多信息,参见https://help.kingbase.com.cn/v8/index.html