KFS实时同步模块之占用资源限制
关键字:
Kingbase FlySync、Extractor、资源限制、人大金仓
关于KFS的占用资源限制
KFS同步程序在开启状态下会实时同步源端数据库的增量数据到目标端数据库,在同步过程中需要消耗IO、CPU和内存等计算机资源。在现场项目中,客户自身业务将业务数据写入数据库,并且业务存在高峰期和低谷期,在业务低谷期,机器资源可以同时支持业务数据的写入和数据同步,但是在业务高峰期,客户希望将更多机器的资源应用在自身业务中,而对数据同步的实时性要求较低。此时,KFS系统运行所占用的资源可能会影响到自身业务,因此客户希望在对源端和目标端数据同步实时性要求不高的系统中,控制源端解析和目标端入库的执行时间和效率,在不人为操作开启或停止系统的情况下,使源端解析和目标端入库执行定时计划,从而在客户业务高峰期让出机器资源。
资源限制类型
资源限制手段:
1、 KFS暂停运行(online/offline)
2、 Cgroup(Linux Control Group)
Linux环境下运行程序,可以通过cgroup限制程序对CPU、内存、磁盘资源的使用。
3、 流量控制
通过控制解析数据的速度限制程序对网络IO的占用
4、 线程池和连接池
通过设置线程数量和连接数量限制程序对资源的占用
Cgroup原理
综合考虑各种资源限制方法,Cgroup可以提供包括CPU、内存、网络、IO在内的多方面的限制,可以对程序占用资源进行精细化控制,因此可以选用Cgroup作为KFS资源占用限制的方法。Cgroup(Control Group)称为控制组,是Linux内核提供的物理资源限制隔离机制,始于Linux的2.6内核,由Google公司主导引入,是Linux内核实现资源虚拟化的技术基石,Linux Containers和docker容器所用到的资源隔离技术正是基于Cgroup,通过这种机制,可以实现对Linux进程或者进程组的资源限制、隔离和统计功能。
Cgroup的核心思想是将一组进程组织到一个cgroup中,并为这个cgroup组分配一定的系统资源,这种资源可以包括CPU、内存、磁盘I/O、网络宽带等。通过这种机制,系统管理员可以更精确的控制和分配系统资源,确保不同的应用程序或服务在共享主机时能够稳定运行。Cgroup支持层次结构,允许用户创建多层嵌套的cgroup。这使得资源的继承和覆盖更加灵活,可以根据实际需求组织和管理进程。
Cgroup中提供了一下子系统:
- cpu:限制进程的cpu
- cpuacct:可以统计cgroup中的进程的cpu使用报告
- cpuset:为cgroup中的进程分配单独的cpu节点或者内存节点
- memory:限制进程的内存使用量
- blkio:限制进程的块设备io
- devices:控制进程能够访问某些设备
- net_cls:标记cgroup中进程的网络数据包,然后可以使用traffic control模块对数据包进行控制
- net_prio:限制进程网络流量的优先级
- huge_tlb:限制HugeTBL的使用
- freezer:挂起或者恢复cgroup中的进程
- ns:控制cgroup中的进程使用不同的namespace
资源限制的使用
目前KFS资源限制仅支持KFS运行在内核大于2.6.24版本的Linux系统中。
1、安装cgroup(root)
检查机器是否安装cgroup:grep cgroup /proc/filesystems
安装cgroup:yum install libcgroup
2、初始化cgroup(root)
执行命令:replicator initcgroup
执行kfs同步程序资源控制组的初始化后,需要修改kfs程序的service.properties配置文件,当前资源占用限制由参数replicator.limit.enable控制,默认为false,处于关闭状态,将参数值置为true,并在参数replicator.limit.cpu、replicator.limit.disk、replicator.limit.memory上面分别配置想要限制的CPU、IO、内存。重启KFS服务,即可实现kfs服务在限制资源的情况下执行。