`

Linux高可用性方案之Heartbeat日志查看(原创)

阅读更多

日志是我们跟踪系统和应用程序最好的方式,在Heartbeat中日志可以自定义输出位置,只需在ha.cf文件配置即可,具体可参见笔者的
http://czmmiao.iteye.com/blog/1174010

下面跟着笔者我们来看详细看下Heartbeat的日志
启动主机Heartbeat服务

#/etc/init.d/heartbeat start
Heartbeat启动时,通过"tail -f /var/log/ messages"查看主节点系统日志信息,输出如下:
# tail -f /var/log/messages 
    Nov 26 07:52:21 node1 heartbeat: [3688]: info:
    Configuration validated. Starting heartbeat 2.0.8 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    heartbeat: version 2.0.8 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    Heartbeat generation: 3 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    G_main_add_TriggerHandler: Added signal manual handler 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    G_main_add_TriggerHandler: Added signal manual handler 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    glib: UDP Broadcast heartbeat started on port 694 (694) interface eth1 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    glib: UDP Broadcast heartbeat closed on port 694 interface eth1 - Status: 1 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    glib: ping heartbeat started. 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    G_main_add_SignalHandler: Added signal handler for signal 17 
    Nov 26 07:52:21 node1 heartbeat: [3689]: info:
    Local status now set to: 'up' 
    Nov 26 07:52:22 node1 heartbeat: [3689]: info:
    Link node1:eth1 up. 
    Nov 26 07:52:23 node1 heartbeat: [3689]: info:
    Link 192.168.60.1:192.168.60.1 up. 
    Nov 26 07:52:23 node1 heartbeat: [3689]: info:
    Status update for node 192.168.60.1: status ping

此段日志是Heartbeat在进行初始化配置,例如,Heartbeat的心跳时间间隔、UDP广播端口和ping节点的运行状态等,日志信息到这里会暂停,等待120秒之后,Heartbeat会继续输出日志,而这个120秒刚好是ha.cf中"initdead"选项的设定时间。此时Heartbeat的输出信息如下:
    Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: node node2: is dead 
    Nov 26 07:54:22 node1 heartbeat: [3689]: info:
    Comm_now_up(): updating status to active 
    Nov 26 07:54:22 node1 heartbeat: [3689]: info:
    Local status now set to: 'active' 
    Nov 26 07:54:22 node1 heartbeat: [3689]: info:
    Starting child client "/usr/lib/heartbeat/ipfail" (694,694) 
    Nov 26 07:54:22 node1 heartbeat: [3689]: WARN:
    No STONITH device configured. 

    Nov 26 07:54:22 node1 heartbeat: [3689]: WARN:
    Shared disks are not protected. 
    Nov 26 07:54:22 node1 heartbeat: [3689]: info:
    Resources being acquired from node2. 
    Nov 26 07:54:22 node1 heartbeat: [3712]: info:
    Starting "/usr/lib/heartbeat/ipfail" as uid 694  gid 694 (pid 3712)

在上面这段日志中,由于node2还没有启动,因此会给出"node2: is dead"的警告信息,接下来启动了Heartbeat插件ipfail。由于我们在ha.cf文件中没有配置STONITH,因此日志里也给出了"No STONITH device configured"的警告提示。
继续看下面的日志:
    Nov 26 07:54:23 node1 harc[3713]: info: Running /etc/ha.d/rc.d/status status 
    Nov 26 07:54:23 node1 mach_down[3735]: info: /usr/lib/
    heartbeat/mach_down: nice_failback: foreign resources acquired 
    Nov 26 07:54:23 node1 mach_down[3735]: info: mach_down
    takeover complete for node node2. 
    Nov 26 07:54:23 node1 heartbeat: [3689]: info: mach_down takeover complete. 
    Nov 26 07:54:23 node1 heartbeat: [3689]: info: Initial
    resource acquisition complete (mach_down) 
    Nov 26 07:54:24 node1 IPaddr[3768]: INFO:  Resource is stopped 
    Nov 26 07:54:24 node1 heartbeat: [3714]: info: Local Resource
    acquisition completed. 
    Nov 26 07:54:24 node1 harc[3815]: info: Running /etc/ha.
    d/rc.d/ip-request-resp ip-request-resp 
    Nov 26 07:54:24 node1 ip-request-resp[3815]: received ip-
    request-resp 192.168.60.200/24/eth0 OK yes 
    Nov 26 07:54:24 node1 ResourceManager[3830]: info: Acquiring
    resource group: node1 192.168.60.200/24/eth0 Filesystem:
    :/dev/sdb5::/webdata::ext3 
    Nov 26 07:54:24 node1 IPaddr[3854]: INFO:  Resource is stopped 
    Nov 26 07:54:25 node1 ResourceManager[3830]: info: Running
    /etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 start 
    Nov 26 07:54:25 node1 IPaddr[3932]: INFO: Using calculated
    netmask for 192.168.60.200: 255.255.255.0 
    Nov 26 07:54:25 node1 IPaddr[3932]: DEBUG: Using calculated
    broadcast for 192.168.60.200: 192.168.60.255 
    Nov 26 07:54:25 node1 IPaddr[3932]: INFO: eval /sbin/ifconfig
    eth0:0 192.168.60.200 netmask 255.255.255.0 broadcast 192.168.60.255 
    Nov 26 07:54:25 node1 avahi-daemon[1854]: Registering new
    address record for 192.168.60.200 on eth0. 
    Nov 26 07:54:25 node1 IPaddr[3932]: DEBUG: Sending Gratuitous
    Arp for 192.168.60.200 on eth0:0 [eth0] 
    Nov 26 07:54:26 node1 IPaddr[3911]: INFO:  Success 

    Nov 26 07:54:26 node1 Filesystem[4021]: INFO:  Resource is stopped 
    Nov 26 07:54:26 node1 ResourceManager[3830]: info: Running
    /etc/ha.d/resource.d/ Filesystem/dev/sdb5 /webdata ext3 start 
    Nov 26 07:54:26 node1 Filesystem[4062]: INFO: Running start
    for /dev/sdb5 on /webdata 

    Nov 26 07:54:26 node1 kernel: kjournald starting.  Commit interval 5 seconds 
    Nov 26 07:54:26 node1 kernel: EXT3 FS on sdb5, internal journal 
    Nov 26 07:54:26 node1 kernel: EXT3-fs: mounted
    filesystem with ordered data mode. 
    Nov 26 07:54:26 node1 Filesystem[4059]: INFO:
    Success 
    Nov 26 07:54:33 node1 heartbeat: [3689]: info:
    Local Resource acquisition completed. (none) 
    Nov 26 07:54:33 node1 heartbeat: [3689]: info:
    local resource transition completed

上面这段日志是进行资源的监控和接管,主要完成haresources文件中的设置,在这里是启用集群虚拟IP和挂载磁盘分区。
此时,通过ifconfig命令查看主节点的网络配置,可以看到,主节点已经自动绑定集群IP地址,在HA集群之外的主机上通过ping命令检测集群IP地址192.168.60.200,已经处于可通状态,也就是该地址变得可用。
同时查看磁盘分区的挂载情况,共享磁盘分区/dev/sdb5已经被自动挂载。
启动备份节点的Heartbeat
启动备份节点的Heartbeat,与主节点方法一样,使用如下命令:
#/etc/init.d/heartbeat start 
或者执行:
#service heartbeat start 
备用节点的Heartbeat日志输出信息与主节点相对应,通过"tail -f /var/log/messages"可以看到如下输出:
    Nov 26 07:57:15 node2 heartbeat: [2110]: info: Link node1:eth1 up. 
    Nov 26 07:57:15 node2 heartbeat: [2110]: info: Status update
    for node node1: status active 
    Nov 26 07:57:15 node2 heartbeat: [2110]: info: Link node1:eth0 up. 
    Nov 26 07:57:15 node2 harc[2123]: info: Running /etc/ha.d/rc.d/status status 
    Nov 26 07:57:15 node2 heartbeat: [2110]: info: Comm_now_up():
    updating status to active 
    Nov 26 07:57:15 node2 heartbeat: [2110]: info: Local
    status now set to: 'active' 
    Nov 26 07:57:15 node2 heartbeat: [2110]: info: Starting
    child client "/usr/lib/heartbeat/ipfail" (694,694) 
    Nov 26 07:57:15 node2 heartbeat: [2110]: WARN: G
    _CH_dispatch_int: Dispatch function for read child
    took too long to execute: 70 ms (> 50 ms) (GSource: 0x8f62080) 
    Nov 26 07:57:15 node2 heartbeat: [2134]: info:
    Starting "/usr/lib/heartbeat/ipfail" as uid 694  gid 694 (pid 2134)

备份节点检测到node1处于活动状态,没有可以接管的资源,因此仅仅启动了网络监听插件ipfail,监控主节点的心跳。

测试Heartbeat
如何才能得知HA集群是否正常工作,模拟环境测试是个不错的方法。在把Heartbeat高可用性集群放到生产环境中之前,需要做如下5个步骤的测试,从而确定HA是否正常工作。
1、正常关闭和重启主节点的Heartbeat
首先在主节点node1上执行"service heartbeat stop"正常关闭主节点的Heartbeat进程,此时通过ifconfig命令查看主节点网卡信息。正常情况下,应该可以看到主节点已经释放了集群的服务IP地址,同时也释放了挂载的共享磁盘分区。然后查看备份节点,现在备份节点已经接管了集群的服务IP,同时也自动挂载上了共享的磁盘分区。
在这个过程中,使用ping命令对集群服务IP进行测试。可以看到,集群IP一致处于可通状态,并没有任何延时和阻塞现象,也就是说在正常关闭主节点的情况下,主备节点的切换是无缝的,HA对外提供的服务也可以不间断运行。
接着,将主节点Heartbeat正常启动。Heartbeat启动后,备份节点是否自动释放资源将取决于auto_failback
中的设置,本文将顶设置为on,备份节点将自动释放资源,而主节点将再次接管集群资源。其实备份节点释放资源与主节点绑定资源是同步进行的,因而,这个过程也是一个无缝切换。
2、在主节点上拔去网线
拔去主节点连接公共网络的网线后,Heartbeat插件ipfail通过ping测试可以立刻检测到网络连接失败,接着自动释放资源。而就在此时,备用节点的ipfail插件也会检测到主节点出现网络故障,在等待主节点释放资源完毕后,备用节点马上接管了集群资源,从而保证了网络服务不间断持续运行。
同理,当主节点网络恢复正常时,由于设置了"auto_failback on"选项,集群资源将自动从备用节点切会主节点。
在主节点拔去网线后日志信息如下:
    Nov 26 09:04:09 node1 heartbeat: [3689]: info: Link node2:eth0 dead. 
    Nov 26 09:04:09 node1 heartbeat: [3689]: info:
    Link 192.168.60.1:192.168.60.1 dead. 
    Nov 26 09:04:09 node1 ipfail: [3712]: info: Status update:
    Node 192.168.60.1 now has status dead 
    Nov 26 09:04:09 node1 harc[4279]: info: Running /etc/ha.d/rc.d/status status 

    Nov 26 09:04:10 node1 ipfail: [3712]: info: NS: We are dead. :<
    Nov 26 09:04:10 node1 ipfail: [3712]: info: Link Status
    update: Link node2/eth0 now has status dead 
    …… 中间部分省略  …… 

    Nov 26 09:04:20 node1 heartbeat: [3689]: info: node1 wants to go standby [all] 
    Nov 26 09:04:20 node1 heartbeat: [3689]: info: standby:
    node2 can take our all resources 
    Nov 26 09:04:20 node1 heartbeat: [4295]: info: give up all
    HA resources (standby). 
    Nov 26 09:04:21 node1 ResourceManager[4305]: info: Releasing
    resource group: node1 192.168.60.200/24/eth0 Filesystem::/dev/sdb5::/webdata::ext3 
    Nov 26 09:04:21 node1 ResourceManager[4305]: info: Running
    /etc/ha.d/resource.d/ Filesystem/dev/sdb5 /webdata ext3 stop 
    Nov 26 09:04:21 node1 Filesystem[4343]: INFO: Running stop for /dev/sdb5 on /webdata 
  
  Nov 26 09:04:21 node1 Filesystem[4343]: INFO: Trying to unmount /webdata 
    Nov 26 09:04:21 node1 Filesystem[4343]: INFO: unmounted /webdata successfully 
    Nov 26 09:04:21 node1 Filesystem[4340]: INFO:  Success 
    Nov 26 09:04:22 node1 ResourceManager[4305]: info: Running
    /etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 stop 
    Nov 26 09:04:22 node1 IPaddr[4428]: INFO: /sbin/ifconfig eth0:0 192.168.60.200 down 
    Nov 26 09:04:22 node1 avahi-daemon[1854]: Withdrawing
    address record for 192.168.60.200 on eth0. 
    Nov 26 09:04:22 node1 IPaddr[4407]: INFO:  Success

备用节点在接管主节点资源时的日志信息如下:
    Nov 26 09:02:58 node2 heartbeat: [2110]: info: Link node1:eth0 dead. 
    Nov 26 09:02:58 node2 ipfail: [2134]: info: Link Status
    update: Link node1/eth0 now has status dead 
    Nov 26 09:02:59 node2 ipfail: [2134]: info: Asking
    other side for ping node count. 
    Nov 26 09:02:59 node2 ipfail: [2134]: info: Checking remote count of ping nodes. 
    Nov 26 09:03:02 node2 ipfail: [2134]: info: Telling other
    node that we have more visible ping nodes. 
    Nov 26 09:03:09 node2 heartbeat: [2110]: info: node1
    wants to go standby [all] 
    Nov 26 09:03:10 node2 heartbeat: [2110]: info: standby:
    acquire [all] resources from node1 
    Nov 26 09:03:10 node2 heartbeat: [2281]: info: acquire all HA resources (standby). 
    Nov 26 09:03:10 node2 ResourceManager[2291]: info: Acquiring
    resource group: node1 192.168.60.200/24/eth0 Filesystem::/dev/sdb5::/webdata::ext3 
    Nov 26 09:03:10 node2 IPaddr[2315]: INFO:  Resource is stopped 
    Nov 26 09:03:11 node2 ResourceManager[2291]: info: Running
    /etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 start 
    Nov 26 09:03:11 node2 IPaddr[2393]: INFO: Using calculated
    netmask for 192.168.60.200: 255.255.255.0 
    Nov 26 09:03:11 node2 IPaddr[2393]: DEBUG: Using calculated
    broadcast for 192.168.60.200: 192.168.60.255 
    Nov 26 09:03:11 node2 IPaddr[2393]: INFO: eval /sbin/ifconfig
    eth0:0 192.168.60.200 netmask 255.255.255.0 broadcast 192.168.60.255 
    Nov 26 09:03:12 node2 avahi-daemon[1844]: Registering new
    address record for 192.168.60.200 on eth0. 
    Nov 26 09:03:12 node2 IPaddr[2393]: DEBUG: Sending Gratuitous
    Arp for 192.168.60.200 on eth0:0 [eth0] 
    Nov 26 09:03:12 node2 IPaddr[2372]: INFO:  Success 
    Nov 26 09:03:12 node2 Filesystem[2482]: INFO:  Resource is stopped 
    Nov 26 09:03:12 node2 ResourceManager[2291]: info: Running
    /etc/ha.d/resource.d/ Filesystem/dev/sdb5 /webdata ext3 start 
    Nov 26 09:03:13 node2 Filesystem[2523]: INFO: Running start for /dev/sdb5 on /webdata 
    Nov 26 09:03:13 node2 kernel: kjournald starting.  Commit interval 5 seconds 
    Nov 26 09:03:13 node2 kernel: EXT3 FS on sdb5, internal journal 
    Nov 26 09:03:13 node2 kernel: EXT3-fs: mounted filesystem with ordered data mode. 
    Nov 26 09:03:13 node2 Filesystem[2520]: INFO:  Success

3、在主节点上拔去电源线
在主节点拔去电源后,备用节点的Heartbeat进程会立刻收到主节点已经shutdown的消息。如果在集群上配置了Stonith设备,那么备用节点将会把电源关闭或者复位到主节点。当Stonith设备完成所有操作时,备份节点才能拿到接管主节点资源的所有权,从而接管主节点的资源。
在主节点拔去电源后,备份节点有类似如下的日志输出:
    Nov 26 09:24:54 node2 heartbeat: [2110]: info:
    Received shutdown notice from 'node1'. 
    Nov 26 09:24:54 node2 heartbeat: [2110]: info:
    Resources being acquired from node1. 
    Nov 26 09:24:54 node2 heartbeat: [2712]: info:
    acquire local HA resources (standby). 
    Nov 26 09:24:55 node2 ResourceManager[2762]:
    info: Running /etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 start 
    Nov 26 09:24:57 node2 ResourceManager[2762]:
    info: Running /etc/ha.d/resource.d/ Filesystem /dev/sdb5 /webdata ext3 start

4、切断主节点的所有网络连接
在主节点上断开心跳线后,主备节点都会在日志中输出"eth1 dead"的信息,但是不会引起节点间的资源切换。此时出现脑裂现象,主备节点都认为对方宕机,如果再次拔掉主节点连接公共网络的网线,网络资源由于连通性问题切换到备机,但存储资源没有顺利切换到备机。此时,就会重现很严重的问题,即备机点对外提供服务,但主节点挂载存储,很有可能导致数据的不一致。连上主节点的心跳线,观察系统日志,可以看到,备用节点的Heartbeat进程将会重新启动,进而再次控制集群资源。最后,连上主节点的对外网线,集群资源再次从备用节点转移到主节点。这就是整个切换过程。
5、在主节点上非正常关闭Heartbeat守护进程
在主节点上可通过"killall -9 heartbeat"命令关闭Heartbeat进程。由于是非法关闭Heartbeat进程,因此Heartbeat所控制的资源并没有释放。备份节点在很短一段时间没有收到主节点的响应后,就会认为主节点出现故障,进而接管主节点资源。在这种情况下,就出现了资源争用情况,两个节点都占用一个资源,造成数据冲突。针对这个情况,可以通过Linux提供的内核监控模块watchdog来解决这个问题,将watchdog集成到Heartbeat中。如果Heartbeat异常终止,或者系统出现故障,watchdog都会自动重启系统,从而释放集群资源,避免了数据冲突的发生。
本章节我们没有配置watchdog到集群中,如果配置了watchdog,在执行"killall -9 heartbeat"时,会在/var/log/messages中看到如下信息:
    Softdog: WDT device closed unexpectedly. WDT will not stop!
这个错误告诉我们,系统出现问题,将重新启动。

日志中的bug

在Heartbeat 2.0.7版本中,如果启用了crm,则会出现如下报错

ccm[22165]: 2011/08/30_15:18:29 ERROR: REASON: can't send message to IPC: Success
           cib[22166]: 2011/08/30_15:18:29 WARN: validate_cib_digest:io.c No on-disk digest present
           ccm[22165]: 2011/08/30_15:18:29 ERROR: Initialization failed. Exit
           cib[22166]: 2011/08/30_15:18:29 info: readCibXmlFile: [on-disk] <cib admin_epoch="0" epoch="0" num_updates="0" have_quorum="false">
           heartbeat[22155]: 2011/08/30_15:18:29 WARN: Exiting /usr/lib64/heartbeat/ccm process 22165 returned rc 1.
           cib[22166]: 2011/08/30_15:18:29 info: readCibXmlFile: [on-disk] <configuration>
           heartbeat[22155]: 2011/08/30_15:18:29 ERROR: Respawning client "/usr/lib64/heartbeat/ccm":
           heartbeat[22155]: 2011/08/30_15:18:28 WARN: G_SIG_dispatch: Dispatch function for SIGCHLD took too long to execute: 150 ms (> 10 ms) (GSource: 0x156837f8)
           heartbeat[22155]: 2011/08/30_15:18:28 WARN: duplicate client add request [ccm] [22165]
           heartbeat[22155]: 2011/08/30_15:18:28 ERROR: api_process_registration_msg: cannot add client()

有英文网站解释如下,处于笔者英文水平有限,无法准确翻译,请读者自己理解
This is a bug in the heartbeat API library. I'm pretty sure it has an implicit assumption that no child will connect via the heartbeat API if its parent connected before the fork, and there was no intervening exec() call...
具体网址:http://lists.linux-ha.org/pipermail/linux-ha-dev/2005-September/011785.html


参考至:http://book.51cto.com/art/200912/168038.htm

           http://lists.linux-ha.org/pipermail/linux-ha-dev/2005-September/011785.html

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

0
1
分享到:
评论

相关推荐

    Rain Water Algorithm雨水优化算法附matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于springboot+vue的房屋租赁出售系统

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    杭电-[数据结构(c语言版)]复习题纲杭州电子科技大学.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

    年医院医生个人工作总结.docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    阿里巴巴笔试题目.docx

    校园招聘笔试题目及答案

    顺从宗族联动机器人matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip

    基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python的图像阴影检

    Android阅读器源码

    Android阅读器源码是用于在Android平台上开发电子书阅读器应用的源代码。阅读器可以支持多种电子书格式,如EPUB、PDF、TXT等,并提供诸如翻页、搜索、书签、夜间模式等功能。

    该项目包含为与用户合作的微电网能源管理系统的多目标优化而开发的matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    人力资源数据分析看版.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    MS15-058 SQL Server 2008 R2 Service Pack 3 补丁包

    MS15-058 SQL Server 2008 R2 Service Pack 3 SQLServer2008R2-KB3045314-x64 不太好找,找到了,就分享一下吧

    基于LabView+MATLAB的说话人识别系统.zip

    labview 与 C 和BASIC 一样,LabVIEW [2]也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW [3]的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW [3]也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。 LabVIEW [2](Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而 LabVIEW 则采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是 LabVIEW 的程序模块。 LabVIEW [2] 提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在 LabVIEW 中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。

    JavaSE技术题Java开发过程中的面试

    JavaSE技术题Java开发过程中的面试

    Python实现基于深度学习的预测区域电力负荷模型源码+项目说明(高分项目).zip

    Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于

    会创意年会策划.docx

    年会班会资料,节目策划,游戏策划,策划案,策划方案,活动方案,筹办,公司年会,开场白,主持人,策划主题,主持词,小游戏。

    基于物联网MQTT协议的智能停车场管理系统

    基于物联网MQTT协议的智能停车场管理系统 本项目为Eclipse搭建的Maven Web项目 前端采用BootStrap框架 后端采用SSM框架 主要特点: 1.管理员与用户两大功能组 2.基于Apache Apollo服务器的MQTT通信,用于实现地锁装置与管理系统的通信 3.采用第三方微信支付BufPay

    com.baidu.netdisk_12.9.6.apk

    com.baidu.netdisk_12.9.6.apk

    合并两个有序链表是一个常见的编程问题.txt

    两个有序链表的合并pta

    ASP.NET Core 运行时 6.0.29

    ASP.NET Core 运行时 6.0.29

    计算机科学与技术专业数据结构试题 2002年7月杭州电子科技大学期末考试题.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

Global site tag (gtag.js) - Google Analytics