CN104038390B - 一种基于netlink的linux服务器集群统一外设事件监听方法 - Google Patents
一种基于netlink的linux服务器集群统一外设事件监听方法 Download PDFInfo
- Publication number
- CN104038390B CN104038390B CN201410287655.1A CN201410287655A CN104038390B CN 104038390 B CN104038390 B CN 104038390B CN 201410287655 A CN201410287655 A CN 201410287655A CN 104038390 B CN104038390 B CN 104038390B
- Authority
- CN
- China
- Prior art keywords
- peripheral hardware
- event
- hardware event
- subprocess
- server end
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明公开一种基于netlink的linux服务器集群统一外设事件监听方法,被监控服务器端服务进程在接收监控服务器端的监控请求之后,创建子进程验证登陆账户信息,由子进程开启相关的外设事件处理进程来监听特定的netlink多播组,等待内核发送来的外设事件;外设事件内核接收模块接收由设备驱动发送来的外设事件,并且按照事件发生的顺序以及优先级发送给用户空间netlink多播组;外设事件处理进程将接收到的外设事件通过子进程传递给被监控服务器端服务进程进而通过网络传递给监控服务器端,最终达到外设事件统一监听的目的。本发明具有多终端同时监听、统一和实时接收服务器内部外设事件且编程方法简单易实现等优点。
Description
技术领域
本发明涉及计算机领域,具体涉及一种基于netlink的linux服务器集群统一外设事件监听方法。
背景技术
在linux服务器集群中,通常存在多台服务器终端,而在大型的服务器架构中,许多服务器终端是分布在不同的地理位置的,在服务器运行过程中,对于像未经允许的可拔插设备访问事件、未经允许的外部存储设备分区挂载事件等外设异步事件缺乏有效而又实时的远程的、统一的监听方法。
目前,现有技术中还不存在一种在linux服务器集群内部统一的外设事件监听方法。
而且,对于单个的服务器内部的外设事件监听而言,主要依靠用户空间的设备文件系统守护进程udevd来搜集外设事件来动态的改变设备文件系统目录/dev下的设备节点信息,不存在其他的、单独的外设事件用户空间接收程序,而设备文件系统守护进程udevd可定制性较差,难以实现通过改变现有的udevd守护进程来统一的监听服务器集群内部的所有重要外设事件的方法。
实现对于内核空间消息的监听以及内核空间与用户空间的信息传递有很多种方法,但是相比较于增加系统调用等方法去实现外设事件监听接口,采用netlink去实现通讯接口,有很多优点,比如说不需要增加内核静态编译代码,不需要重复编译内核,只需要在启动系统的时候动态加载相应的内核模块,而且netlink协议本身实现了事件的异步通知,所以能够保证内核事件接收的实时性,
发明内容
发明目的:本发明的目的在于解决上述技术的不足,提供了一种基于netlink的linux服务器集群统一外设事件监听方法,用以实现对于linux集群内部重要的外设事件的监听,具有多终端同时监听、统一和实时接收服务器内部外设事件且编程方法简单易实现等优点。
技术方案:本发明的一种基于netlink的linux服务器集群统一外设事件监听方法,包括以下步骤:
(1)被监控服务器端在系统启动过程中加载外设事件内核接收模块,并且开启监控进程远程服务进程,等待多个监控服务器端监控进程发送登录请求;
(2)监控服务器端的监控进程向被监控服务器端的远程服务进程发送登录请求;
(3)被监控服务器端远程服务进程接收登录请求并利用fork()系统调用函数创建子进程,子进程验证登陆帐户信息,并由父进程继续监控端口,查看是否有新的登录请求;
(4)被监控服务器端远程服务进程接收到登录请求后,其创建的子进程开启外设事件处理进程,外设事件处理进程监听相关的netlink多播组;
(5)外设事件内核接收模块通过内核线程统一接收相关外设事件,并按照外设事件先后顺序以及优先级发送给相关的netlink多播组;
(6)外设事件处理进程将外设事件通过子进程发送给父进程进而通过网络发送给监控服务器端监控进程。
进一步的,所述的被监控服务器端在linux开机启动时,启动服务进程,监听通讯端口,等待监控服务器端的监控进程通过TCP/IP协议发出登录请求。
进一步的,所述的被监控服务器端远程服务进程通过伪终端与其创建的子进程进行全双工的通讯;所述的被监控服务器端远程服务进程的子进程通过共享内存与其开启的外设事件处理进程进行全双工的通讯。
进一步的,所述步骤(3)中父进程打开伪终端主设备,子进程打开伪终端从设备,父子进程之间的通讯,通过伪终端来实现。
进一步的,所述步骤(4)中子进程通过linux文件系统目录下的/bin/login登录程序验证登录账户信息,子进程首先将监控服务器端发送来的登录账户信息与本地存储的账户信息进行对比验证,如果不一致,则向父进程返回出错信息,由父进程返回给监控服务器端,子进程销毁;如果用户信息一致,子进程开启相应的外设事件处理程序。
进一步的,所述步骤(5)的具体步骤为:外设事件内核接收模块通过对in_interrupt()的判断,如果外设事件是在中断上下文中发出的,那么直接通过netlink_broadcast()广播,若广播失败,则再挂接到内核线程处理队列中去;内核线程将按照外设事件的优先级以及事件触发顺序,通过netlink_broadcast()函数将外设事件广播到相关的多播组。
进一步的,所述步骤(6)中各个子进程所开启的特定的外设事件处理进程接收其所关注的外设事件消息,并且通过被监控服务器端的远程服务模块将外设事件消息发送到相关的监控服务器端集群,实现服务器外设事件统一、实时的监听过程。
有益效果:本发明与现有技术相比具有以下优点:
(1)本发明通过分布在不同物理位置的监控服务器端集群发送来的监控请求,由被监控服务器端中特定的外设事件内核接收程序返回各自监控请求所关注的外设事件,达到了对于服务器集群内部特定的重要外设事件监听的目的。
(2)本发明中,由内核线程统一的接收外设事件,以此提高架构上的独立性,并且采用netlink多播组发送给用户空间,实现多个外设事件处理程序对于特定外设事件的监听处理,同时由于内核线程按照外设事件发生的顺序和优先级发送给多播组,也能够提高外设事件传输的实时性。
(3)本发明用于针对linux服务器集群内部重要外设事件的监听,具有多终端同时监听、统一和实时接收服务器内部外设事件且编程方法简单易实现等优点。
附图说明
图1是本发明的工作流程图;
图2是本发明实施例的结构示意图;
图3是本发明实施例中被监控服务器端的结构示意图;
图4是本发明实施例中被监控端服务器的功能模块结构示意图。
具体实施方式
下面对本发明技术方案结合附图和实施例进行详细说明。
如图1至图4所示,本发明的一种基于netlink的linux服务器集群统一外设事件监听方法,包括以下步骤:
(1)被监控服务器端在系统启动过程中加载外设事件内核接收模块,并且开启监控进程远程服务进程,等待多个监控服务器端监控进程发来登录请求;
(2)监控服务器端的监控进程向被监控服务器端的远程服务进程发送登录请求;
(3)被监控服务器端接收登录请求并利用fork()系统调用函数创建子进程,子进程验证登陆帐户信息,并由父进程继续监控端口,查看是否有新的登录请求;
(4)被监控服务器端远程服务进程接收到登录请求后,其创建的子进程开启外设事件处理进程,外设事件处理进程监听相关的netlink多播组;
(5)外设事件内核接收模块通过内核线程统一接收相关外设事件,并按照外设事件先后顺序以及优先级发送给相关的netlink多播组;
(6)外设事件处理进程将外设事件通过子进程发送给父进程进而通过网络发送给监控服务器端监控进程。
其中,被监控服务器端在linux开机启动时,启动服务进程,监听通讯端口,等待监控服务器端的监控进程通过TCP/IP协议发出登录请求;
上述被监控服务器端远程服务进程通过伪终端与其创建的子进程进行全双工的通讯;所述的被监控服务器端远程服务进程的子进程通过共享内存与其开启的外设事件处理进程进行全双工的通讯。
上述步骤(3)中父进程打开伪终端主设备,子进程打开伪终端从设备,父子进程之间的通讯,通过伪终端来实现。
上述步骤(4)中子进程通过linux文件系统目录下的/bin/login登录程序验证登录账户信息,子进程首先将监控服务器端发送来的登录账户信息与本地存储的账户信息进行对比验证,如果不一致,则向父进程返回出错信息,由父进程返回给监控服务器端,子进程销毁;如果用户信息一致,子进程开启相应的外设事件处理程序。
上述步骤(5)的具体步骤为:外设事件内核接收模块通过对in_interrupt()的判断,如果外设事件是在中断上下文中发出的,那么直接通过netlink_broadcast()广播,若广播失败,则再挂接到内核线程处理队列中去;内核线程将按照外设事件的优先级以及事件触发顺序,通过netlink_broadcast()函数将外设事件广播到相关的多播组。
上述步骤(6)中各个子进程所开启的特定的外设事件处理进程接收所关注的外设事件消息,并且通过被监控服务器端的远程服务模块将外设事件消息发送到相关的监控服务器端集群,实现服务器外设事件统一、实时的监听过程。
综上,本发明的主要工作过程如下:被监控服务器端在开机启动过程时,启动两部分程序模块,一部分是加载外设事件内核接收模块,主要用于接收驱动中的外设事件;第二部分主要是在用户空间中开启监控进程远程服务模块,主要用于接收监控端发送来的监控请求。在监控服务器端发送来了监控请求之后,被监控服务器端接收监控请求,并且创建子进程验证登录账户信息,开启相关的外设事件处理进程;相关的外设事件处理进程监听特定的netlink多播组等待内核发送来的外设事件,外设事件内核接收模块接收由设备驱动发送来的外设事件,并且按照事件发生的顺序以及优先级发送给用户空间netlink多播组;外设事件处理程序接收通过子进程传递给监控进程服务进程进而通过网络传递给监控服务器端,最终达到外设事件统一监听的目的。
实施例:
如图2所示,在linux服务器集群中分为两部分,第一部分是监控服务器端集群,本实施例中有两台监控服务器端,第二部分是被监控服务器端。
对于第一部分监控服务器端集群,将运行监控进程,主要的功能是通过socket通讯向被监控服务器端发送监控请求,并且接收返回的被监控服务器端外设事件,然后将外设事件情况统一的呈现给管理员。
第二部分被监控服务器端主要包含两个模块:用户空间的监控进程远程服务模块和内核空间的外设事件内核接收模块。
其中,监控进程远程服务模块中包含着在监控服务器端linux操作系统启动的时候开启的监控进程远程服务进程。在监控进程远程服务进程接收到监控服务器端监控进程发送来的登录信息的时候,首先用fork()系统调用函数创建子进程,并且打开伪终端主设备,同时服务进程继续等待其他监控服务器端的登录请求,负责对于新的监控服务的响应,而由监控进程远程服务进程创建的子进程负责处理具体的登录请求;子进程首先需要做的就是通过/bin/login登录程序验证登录请求,验证监控服务器端是否在本地被监控服务器端计算机上面有相应的用户账户信息,并且由子进程打开伪终端从设备,在验证通过后,开启外设事件处理进程;若子进程验证出未知或者虚假账户信息,则子程序销毁,父进程继续监听端口,等待登录请求,本模块中父进程与子进程通过伪终端主、从设备进行全双工的通讯。
图2中,监控进程远程服务模块有两个子进程,用以处理登录请求,并且这两个子进程分别关注不同的外设事件处理程序。图2中两个不同的外设事件处理程序,用以监听相同的netlink多播组,能够实现对于相同的外设事件有多个不同外设事件处理程序去处理的实用功能。
内核空间的外设事件内核接收模块用于解决最为关键的外设事件的统一接收问题,如图3所示,本实施例中的外设事件内核接收模块主要提供两部分功能:一是实现hw_event_send(int priority,struct mxc_hw_event new_event)函数对于驱动外设事件按照发生顺序以及优先级向内核线程传递的功能;二是实现kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)内核线程对于外设事件的接收以及按照它的发生顺序向用户空间广播的过程。
对于第一部分功能,本发明主要是通过EXPORT_SYMBOL(hw_event_send)将hw_event_send()函数导出符号,可以在各个外设的驱动中使用该函数,将外设事件按照它的优先级和发生顺序发送给内核线程。设备驱动在使用该函数的时候分了两种情况,如图3设备驱动1在使用该函数传递外设事件的时候处于中断上下文,而设备驱动2和设备驱动3在使用该函数传递外设事件的时候处在非中断上下文中,通过对于in_interrupt()的返回值判断,能够知道当前使用该函数的驱动是否处在中断上下文中;通过对于中断上下文的判断,如果事件是在中断上下文中触发的,则先直接通过函数netlink_broadcast(nl_event_sock,skb,0,HW_EVENT_GROUP,in_interrupt()?GFP_ATOMIC:GFP_KERNEL)去广播;如果广播失败的话,则再挂入内核线程处理队列,使用wake_up()函数唤醒内核线程。
对于第二部分功能,在函数hw_event_send(int priority,struct mxc_hw_eventnew_event)中包含两个参数:一个是外设事件的优先级,另外一个是外设事件形式参数的定义。在hw_event_send()函数中包含着两层判断,一层是上面已经提到的关于中断上下文的判断,一层则是对于外设事件优先级的判断。如果是高优先级的外设事件,同样的,需要首先netlink_broadcast(nl_event_sock,skb,0,HW_EVENT_GROUP,in_interrupt()?GFP_ATOMIC:GFP_KERNEL)去广播到用户空间。对于普通优先级并且是非中断上下文触发的外设事件,则是由内核线程kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)负责接收的,当在外设事件发送函数hw_event_send()中有外设事件需要传递给内核线程的时候,总是会调用wake_up()唤醒函数,去唤醒等待队列,这主要是由于在内核线程等待外设事件的时候,总是会wait_event_interruptible()改变当前的内核线程运行状态为可中断睡眠状态。
如图3所示,本实施例将多播组设置成#define HW_EVENT_GROUP2,在内核模块中通过NETLINK_CB(skb).dst_group=HW_EVENT_GROUP初始化多播组为2,这样在用户空间就可以设置多个外设事件处理进程来监听该多播组,就可以实现多个监控服务器端去监听特定的内核事件的功能。
Claims (3)
1.一种基于netlink的linux服务器集群统一外设事件监听方法,其特征在于包括以下步骤:
(1)被监控服务器端在系统启动过程中加载外设事件内核接收模块,并且开启监控进程远程服务进程,等待多个监控服务器端监控进程发送登录请求;
(2)监控服务器端的监控进程向被监控服务器端的远程服务进程发送登录请求;
(3)被监控服务器端远程服务进程接收登录请求并利用fork()系统调用函数创建子进程,子进程验证登陆帐户信息,并由父进程继续监控端口,查看是否有新的登录请求;父进程打开伪终端主设备,子进程打开伪终端从设备,父子进程之间的通讯,通过伪终端来实现;
(4)被监控服务器端接收到登录请求后,其创建的子进程开启外设事件处理进程,外设事件处理进程监听相关的netlink多播组;子进程通过linux文件系统目录下的/bin/login登录程序验证登录账户信息,子进程首先将监控服务器端发送来的登录账户信息与本地存储的账户信息进行对比验证,如果不一致,则向父进程返回出错信息,由父进程返回给监控服务器端,子进程销毁;如果用户信息一致,子进程开启相应的外设事件处理进程;
(5)外设事件内核接收模块通过内核线程统一接收相关外设事件,并按照外设事件先后顺序以及优先级发送给相关的netlink多播组;外设事件内核接收模块通过对in_interrupt()的判断,如果外设事件是在中断上下文中发出的,那么直接通过netlink_broadcast()广播;若广播失败,则再挂接到内核线程处理队列中去,内核线程将按照外设事件的优先级以及事件触发顺序,通过netlink_broadcast()函数将外设事件广播到相关的多播组;
(6)外设事件处理进程将外设事件通过子进程发送给父进程进而通过网络发送给监控服务器端监控进程;各个子进程所开启的特定的外设事件处理进程接收其所关注的外设事件消息,并且通过被监控服务器端的远程服务模块将外设事件消息发送到相关的监控服务器端集群,实现服务器外设事件统一、实时的监听过程。
2.根据权利要求1所述的基于netlink的linux服务器集群统一外设事件监听方法,其特征在于:所述的被监控服务器端在linux开机启动时,启动服务进程,监听通讯端口,等待监控服务器端的监控进程通过TCP/IP协议发出登录请求。
3.根据权利要求1所述的基于netlink的linux服务器集群统一外设事件监听方法,其特征在于:所述的被监控服务器端远程服务进程通过伪终端与其创建的子进程进行全双工的通讯;所述的被监控服务器端远程服务进程的子进程通过共享内存与其开启的外设事件处理进程进行全双工的通讯。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410287655.1A CN104038390B (zh) | 2014-06-24 | 2014-06-24 | 一种基于netlink的linux服务器集群统一外设事件监听方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410287655.1A CN104038390B (zh) | 2014-06-24 | 2014-06-24 | 一种基于netlink的linux服务器集群统一外设事件监听方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104038390A CN104038390A (zh) | 2014-09-10 |
CN104038390B true CN104038390B (zh) | 2017-10-10 |
Family
ID=51468985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410287655.1A Active CN104038390B (zh) | 2014-06-24 | 2014-06-24 | 一种基于netlink的linux服务器集群统一外设事件监听方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104038390B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106330567A (zh) * | 2016-09-14 | 2017-01-11 | 郑州云海信息技术有限公司 | 一种服务器集群的服务器管理控制方法及系统 |
CN107733692A (zh) * | 2017-09-21 | 2018-02-23 | 烽火通信科技股份有限公司 | 通信设备的1+1冗余备份方法及系统 |
CN109697192B (zh) * | 2017-10-24 | 2020-12-15 | 龙芯中科技术有限公司 | 伪终端日志文件的保存方法及装置 |
CN108173668A (zh) * | 2018-01-30 | 2018-06-15 | 北京坤腾畅联科技有限公司 | 基于Openwrt的WIFI探针实现的方法和设备 |
CN109101281B (zh) * | 2018-07-10 | 2021-07-02 | 厦门亿联网络技术股份有限公司 | 一种通用的热插拔检测方法 |
CN110764827B (zh) * | 2018-07-27 | 2023-05-30 | 中标软件有限公司 | 计算机外围设备的管控系统及方法 |
CN113938475B (zh) * | 2021-12-16 | 2022-03-29 | 深圳市大头兄弟科技有限公司 | 一种数据传输方法 |
CN118509628A (zh) * | 2024-07-18 | 2024-08-16 | 四川天邑康和通信股份有限公司 | Iptv设备的自动化操控方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1619527A (zh) * | 2003-11-22 | 2005-05-25 | 鸿富锦精密工业(深圳)有限公司 | 远程监控通用串行总线设备的系统及方法 |
KR100657329B1 (ko) * | 2005-08-09 | 2006-12-14 | 삼성전자주식회사 | 모니터에 연결된 주변 장치에 대한 원격 접근 제어 방법 및시스템과 그 기록 매체 |
CN102271331A (zh) * | 2010-06-02 | 2011-12-07 | 中国移动通信集团广东有限公司 | 一种检测业务提供商sp站点可靠性的方法及系统 |
CN103338382A (zh) * | 2013-06-21 | 2013-10-02 | 深圳市同洲电子股份有限公司 | 一种远程监控数字电视终端的方法、装置及数字电视系统 |
-
2014
- 2014-06-24 CN CN201410287655.1A patent/CN104038390B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1619527A (zh) * | 2003-11-22 | 2005-05-25 | 鸿富锦精密工业(深圳)有限公司 | 远程监控通用串行总线设备的系统及方法 |
KR100657329B1 (ko) * | 2005-08-09 | 2006-12-14 | 삼성전자주식회사 | 모니터에 연결된 주변 장치에 대한 원격 접근 제어 방법 및시스템과 그 기록 매체 |
CN1956381A (zh) * | 2005-08-09 | 2007-05-02 | 三星电子株式会社 | 远程访问控制方法和系统以及存储计算机程序的记录介质 |
CN102271331A (zh) * | 2010-06-02 | 2011-12-07 | 中国移动通信集团广东有限公司 | 一种检测业务提供商sp站点可靠性的方法及系统 |
CN103338382A (zh) * | 2013-06-21 | 2013-10-02 | 深圳市同洲电子股份有限公司 | 一种远程监控数字电视终端的方法、装置及数字电视系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104038390A (zh) | 2014-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104038390B (zh) | 一种基于netlink的linux服务器集群统一外设事件监听方法 | |
CN109495308B (zh) | 一种基于管理信息系统的自动化运维系统 | |
US20200329091A1 (en) | Methods and systems that use feedback to distribute and manage alerts | |
WO2023142054A1 (zh) | 一种面向容器微服务的性能监控告警方法及告警系统 | |
US20110296000A1 (en) | Systems and methods for exporting usage history data as input to a management platform of a target cloud-based network | |
CN102377814B (zh) | 针对嵌入式操作系统的远程协助服务方法 | |
US20100077063A1 (en) | System and method for emulating a computing device | |
CN101777020B (zh) | 一种用于分布式程序的容错方法和系统 | |
CN111314149A (zh) | 基于多个边缘云平台实现统一监控运维管理的系统 | |
CN104408071A (zh) | 一种基于集群管理器的分布式数据库高可用方法及系统 | |
CN109656690A (zh) | 调度系统、方法和存储介质 | |
CN107682460B (zh) | 一种分布式存储集群数据通信方法及系统 | |
CN107491346A (zh) | 一种应用的任务处理方法、装置及系统 | |
CN108616429A (zh) | 一种推送服务的重连方法及设备 | |
CN102457578B (zh) | 一种基于事件机制的分布式网络监控方法 | |
CN104158707A (zh) | 一种检测并处理集群脑裂的方法和装置 | |
CN105357273A (zh) | 异步通信模式下socket通信与进程管理通用平台及方法 | |
CN104598241A (zh) | 一种窗口监控方法及系统 | |
CN110445700A (zh) | 主从机通信系统、方法及终端设备 | |
CN108667928A (zh) | 一种基于区块链状态机组网运作的数据同步方法 | |
Sun et al. | Republic: Data multicast meets hybrid rack-level interconnections in data center | |
US10331484B2 (en) | Distributed data platform resource allocator | |
CN102891899A (zh) | 一种远程监控隔离设备的系统及监控方法 | |
CN116489214A (zh) | 一种基于微服务网关的统一服务调度方法、装置、介质及设备 | |
CN105930190B (zh) | 一种基于操作系统的程序自启动方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |