皮皮网
皮皮网

【string 的源码分析】【lcx源码原理】【网页对战源码】ntp系统源码

来源:网络源码铺子 发表时间:2024-11-25 09:51:23

1.linux 编译生成的统源NTP为什么不能校时
2.ntpdate失败报错“the NTP socket is in use, exiting”
3.OpenHPC的安装
4.2020-08-25
5.深夜写完的代码——快速实现.NET(.net framework/.net core+)动态访问webservice服务
6.ntpdc命令如何在交互模式下执行对等体列表操作?

ntp系统源码

linux 编译生成的NTP为什么不能校时

       因为你没有启动ntpd服务

       直接执行的话,应该是统源这样:

       #/usr/local/bin/ntpd &

       然后客户端校时应该这样:

       #./ntpdate ntp.fudan.edu.cn(一个时间服务器)

       (先cd到ntpdate的目录)

       -----

       每天定时校时:

       修改crontab文件:

       #crontab -e

       加入:

       5 * * * * /usr/sbin/ntpdate ntp.fudan.edu.cn

       表明每5分钟校时一次。

ntpdate失败报错“the NTP socket is 统源in use, exiting”

       今天,我被老大要求处理产品部署失败的统源问题。产品是统源云容器平台,部署中遇到了同步时间的统源string 的源码分析挑战。代码调用ntpdate,统源但遇到报错“the NTP socket is 统源in use, exiting”。我首先尝试搜索解决方案,统源发现在停用ntpd服务后问题得以解决。统源然而,统源为了解决根本问题,统源我深入研究了ntpdate的统源源码。

       通过访问ntpdate的统源官方网站并查看源码下载地址,我了解到ntpdate的统源代码实际上在GitHub上。这表明,使用ntpdate时应直接获取其源代码,而非依赖旧版本。

       在源码中,我找到了导致错误的NTP socket使用的端口号是。通过查阅代码,我发现此端口号是lcx源码原理硬编码的,这表明作者在设计时可能并未考虑到代码的可维护性。

       为了定位到端口号被占用的进程,我检查了当前服务器上的所有进程。结果发现,进程与ntpd服务相关联,且该进程由父进程1启动。通过进一步的排查,我确定了正是ntpd服务占用了端口号。

       最终,我关闭了ntpd服务,从而解决了ntpdate失败的问题。这个过程虽然解决了当前问题,但更重要的是,它提供了面对类似情况时的思考方式和解决策略。下次遇到类似问题时,我们就可以根据所学方法,快速定位并解决端口占用的问题。

OpenHPC的安装

       OpenHPC是一个基于Linux的HPC社区驱动的自由及开放源代码软件工具,适用于构建HPC Linux集群。其提供了大量通用软件,包括系统工具、网页对战源码资源管理、I/O客户端、开发工具和各种科学库。这些软件在构建时考虑了HPC集成,同时满足Linux发行版标准。

       OpenHPC的安装流程可从官方网站(openhpc.community)开始,源码托管在github上(github.com/openhpc/ohpc)。安装步骤包括下载安装包,配置安装环境,安装基础操作系统,添加hosts信任主机,关闭防火墙和SELinux,配置NTP服务,并重启系统。然后,安装OpenHPC组件,启用OpenHPC源码库供本地使用。在管理节点上,通过直接从OpenHPC构建服务器安装ohpc安装包,或者通过tar存档文件在无法访问外网的管理节点本地安装源库。

       管理节点还需要访问CentOS7.7基础操作系统和EPEL存储库。wms erp源码使用ohpc指令实现裸机系统安装和配置openhpc系统。此外,要添加资源管理服务,比如PBS Pro软件包。在完成管理节点的基本Warewulf设置后,定义并定制系统映像,为计算节点创建映像。

       在安装过程中,可以添加额外的管理工具,如系统日志集中转发、Nagios监控、Ganglia监控、Sensys监控、ClusterShell、mrsh、genders、ConMan和GEOPM等。配置计算节点日志集中转发,添加Nagios监控,配置Ganglia监控,安装ClusterShell,空空狐 源码添加genders,安装ConMan,以及资源管理器节点运行状况检查(NHC)。

       完成计算节点镜像配置后,使用wwvnfs命令组装VNFS容器,并使用wwnodescan自动注册新的计算节点。在配置中,需要添加用户账号文件到计算节点,并为计算节点磁盘配置分区和格式化,以承载VNFS映像。最后,启动计算节点,安装OpenHPC开发组件,如开发工具、编译器、MPI性能工具等。

       在安装OpenHPC后,启动资源管理器服务,运行测试作业,确保集群能够正常运行。在集群环境中,用户可以使用资源管理器交互运行作业或提交作业脚本以实现批处理执行。通过这些步骤,可以成功构建和配置OpenHPC HPC集群。

--

       Prometheus 实现邮件告警(Prometheus+Alertmanager+QQ邮箱或者网易邮箱,目前测试过这两种邮箱都可以发送告警邮件)

        Prometheus实现邮件告警原理如下:

        Prometheus官方有一个附带的中间件:alertmanager,通过设置rules规则和路由转发可以实现邮件告警,前提是你需要有一个可以发送邮件的邮件服务端(可以自建或者使用互联网公司提供的免费邮箱)

        告警原理图

       Prometheus完整架构图

        我之前得出的错误结论如下:

        推荐直接在虚拟机操作系统上直接安装Prometheus和Alertmanager,不推荐其中任何一方在容器中运行,因为测试过在容器中运行Prometheus和alertmanager,结果出现如下错误情况

        第一种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus却提示节点依然在线?有时候却能够正常显示节点掉线跌机,生成告警发送邮件

        第二种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus提示节点掉线,告警生成,但是没有发送邮件,我手动恢复node-exporter后,告警解除,邮件能正常发送邮件提示告警已经解除。。。。

        第三种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus提示节点掉线,告警生成,正常成功发送邮件,我手动恢复node-exporter后,告警解除,邮件没有发送出来。。。。

        以上三种情况之前经常出现,当时第一步以为是自己设置的scrape_interval不合理导致的,结果调试几次,问题没有解决,第二步以为是自己的服务器时间没有做到精确同步,然后我去设置和阿里云的ntp服务器同步,结果问题依然没有解决,第三步,换个方向,把alertmanager迁移到虚拟机操作系统上安装运行,问题解决!

       åŒ—京时间是GMT+8小时,有些同志的时间可能是UTC的,但是如果是在要求不太十分精确的情况下,UTC时间是刚刚好等于GMT时间

        为了避免时区的混乱,prometheus所有的组件内部都强制使用Unix时间,对外展示使用GMT时间。

        要改时区有两个办法

        1 .修改源码,重新编译。

       2. 使用 docker 运行 Prometheus,挂载本地时区文件

        docker run --restart always -e TZ=Asia/Shanghai --hostname prometheus --name prometheus-server -d -p : -v /data/prometheus/server/data:/prometheus -v /data/prometheus/server/conf/prometheus.yml:/etc/prometheus/prometheus.yml -u root prom/prometheus:v2.5.0

        正文开始

        安装alertmanager

        容器安装方式:

        docker run -d --name alertmanager -p : -v /usr/local/Prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest

        先在宿主机/usr/local/Prometheus下创建一个文件夹alertmanager,然后在文件夹里创建alertmanager.yml配置文件,待会才能映射到alertmanager容器里的/etc/alertmanager目录下

       global:全局配置

           resolve_timeout: 问题解决的超时时间

           smtp_from: 发送告警邮件的邮箱账号

           smtp_smarthost: é‚®ç®± SMTP 服务地址,这里是以QQ邮箱为例,也可以用网易邮箱,这个和我之前设置zabbix邮件告警时的配置一样

           smtp_auth_username: 如果没有设置邮箱别名,那就是账户名

           smtp_auth_password:  邮箱的授权码,不是 账户密码,你可以在QQ邮箱或者网易邮箱网页端设置,开启 POP3/SMTP æœåŠ¡æ—¶ä¼šæç¤ºï¼Œå’Œé…ç½®zabbix邮件告警的时候几乎一样

           smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。

       templates: 告警模板目录,可以不编写模板,有默认模板

            Subject: '{ { template "email.default.subject" . }}'

            html: '{ { template "email.default.html" . }}'

       route:报警的分发设置

            group_by:分组

            group_wait: 分组等待时间

            group_interval: 5m 每组时间间隔

            repeat_interval: m 重复间隔

            receiver: 接收方式,请注意!这里的名字要对应下面receivers中的任何一个名字,不然会报错,这里其实就是选择方式,有邮箱,企业微信,wehook,victorops等等

       receivers:接受方式汇总,即告警方式汇总

        例子:

        receivers:

        - name:'default-receiver' 

        email_configs:

        - to:'whiiip@.com'    

          html: '{ { template "alert.html" . }}'    

          headers: { Subject: "[WARN] 报警邮件test"}

       inhibit_rules:   æŠ‘制规则

        当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

        包括源匹配和目标匹配

        alertmanager官方是这样说的

        Inhibition

        Inhibition is a concept of suppressing notifications for certain alerts if certain other alerts are already firing.

        Example:  An alert is firing that informs that an entire cluster is not reachable. Alertmanager can be configured to mute all other alerts concerning this cluster if that particular alert is firing. This prevents notifications for hundreds or thousands of firing alerts that are unrelated to the actual issue.

        Inhibitions are configured through the Alertmanager's configuration file.

        当存在与另一组匹配器匹配的警报(源)时,禁止规则会使与一组匹配器匹配的警报(目标)静音。目标警报和源警报的equal列表中的标签名称都必须具有相同的标签值。

        在语义上,缺少标签和带有空值的标签是同一件事。因此,如果equal源警报和目标警报都缺少列出的所有标签名称,则将应用禁止规则。

        为了防止警报禁止自身,与规则的目标和源端 都 匹配的警报不能被警报(包括其本身)为真来禁止。但是,我们建议选择目标匹配器和源匹配器,以使警报永远不会同时匹配双方。这很容易进行推理,并且不会触发此特殊情况。

        接着是规则rules

       ä¸è§£é‡Šäº†ï¼Œè‡ªå·±ç ”究官方文档

       alertmanager的非容器安装方式是

         wget /prometheus/alertmanager/releases/download/v0..0/alertmanager-0..0.linux-amd.tar.gz

        tar xf alertmanager-0..0.linux-amd.tar.gz

       mv alertmanager-0..0.linux-amd /usr/local/alertmanager

       vim /usr/lib/systemd/system/alertmanager.service

       [Unit]

       Description=alertmanager

        Documentation=/prometheus/alertmanager

        After=network.target

        [Service]

        Type=simple

        User=root

        ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml

        Restart=on-failure

        [Install]

        WantedBy=multi-user.target

        Alertmanager 安装目录下默认有 alertmanager.yml 配置文件,可以创建新的配置文件,在启动时指定即可。

        其余方式和上面一样

        接着是Prometheus,我之前的博客里有写了容器安装和非容器安装的方法,自己去翻阅

        然后是在prometheus.yml里修改相关配置

        首先去掉alertmanager的注释,改成IP加你设置的端口号,默认是

       æŽ¥ç€åœ¨rule_files: 下面写下规则文件的绝对路径,可以是具体文件名,也可以是*,也可以分几级文件,*默认是全部匹配

       æŽ¥ç€æ˜¯è¢«ç›‘控项的设置,这里设置完成可以在Prometheus网页里的targets里看得到

        请注意,这里设置的参数名字要和rule规则中设置的参数名字一模一样,否则你的prometheus服务会无法启动,然后报错

        如果不在特定的job下设置scrape_interval(优先级高于全局),则默认采用gobal下的scrape_interval

       æœ€åŽæ¨¡æ‹ŸèŠ‚点掉线,手动关闭node-exporter或者Cadvisor

        docker stop node-exporter 或者容器ID

        docker stop cadvisor æˆ–者容器ID

        或者把up{ { job='prometheus'}} == 1 设置成1,反向设置,不用关掉服务,就可以看看告警成不成功

       è¯´æ˜Žä¸€ä¸‹ Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。

        Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。

        Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。

        Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警报解除,则将状态转到 Inactive,如此循环。

       æ²¡æœ‰é…ç½®å‘Šè­¦æ¨¡æ¿æ—¶çš„默认告警格式是这样的

       èŠ‚点恢复后邮件告知是这样的

       å†™äº†æ¨¡æ¿åŽæ˜¯è¿™æ ·çš„

       è¿˜è¦é‡æ–°æ˜ å°„模板文件夹路径到alertmanager容器里的相对路径,然后重启alertmanager,当然,如果目录下没有模板文件,则不显示

       å‘Šè­¦æ¨¡æ¿

       åœ¨alertmanager.yml中修改相关设置

        重启alertmanager

        docker restart alertmanager

        最终效果不是很好

深夜写完的代码——快速实现.NET(.net framework/.net core+)动态访问webservice服务

       访问webservice服务时,通常采用服务引用方式,然而此法较为繁琐,尤其在服务更新时,需要手动更新引用并重新发布,极为不便。现今,已有多例展示了在.NET Framework环境中实现动态访问webservice服务,却鲜少见到适用于.NET Core及更高版本的案例。本篇文章旨在提供一个通用解决方案,支持.NET Framework、.NET Core或以上环境的动态访问webservice服务接口,以供参考。

       首先,创建一个webservice服务作为测试平台。该服务提供三种接口:无参数接口、字符串参数接口、包含多个实体类参数(实体类包含嵌套和集合)及返回带有嵌套和集合的返回数据。此设计基本涵盖了webservice服务的主要场景。

       测试实体类已备好,用于验证服务接口。

       服务已启动并就绪。

       接下来,开发请求端程序,支持.NET Framework 4.6.1+、.NET Core+及.NET 5+所有版本。可以通过NuGet引入Wesky.Net.OpenTools包,确保使用最新版本以获取完善功能。本文以.NET 8控制台为例,使用者可根据需求自行调整引用。

       程序中实例化WebserviceHelper对象,对于使用IOC容器的项目(如asp.net core),可进行依赖注入的注册;对于无需IOC容器的项目,直接new对象即可。获取asmx的url地址,并在结尾添加?wsdl。

       设定要访问的服务名称,例如“HelloWorld”,然后调用接口。无参数情况下,参数设为null。

       运行程序调用接口,获取xml文档返回值。

       调用返回类型为OpenToolResult,该类型包含基础类型值解析方法。解析后得到的最终返回消息为“Hello World”。

       基础类型值解析方法定义了获取返回值、节点名称(一般为方法名称+“Result”)及命名空间的过程。命名空间在调用时会被存储在OpenWebserviceInfo的OpenWebservice集合中,通过url地址和接口方法名匹配到对应的命名空间。

       OpenWebserviceDocCache类型定义了存储和管理命名空间的结构。

       接着,尝试传入一个基础类型参数,访问“Hola”方法,传入“Wesky”,成功获取返回值“Wesky World”。

       随后,模拟多个实体类参数的调用,服务应返回一个包含其他实体类的消息。

       回顾TestService服务接口实现,确认动态访问是成功的。

       访问webservice方法定义如下:支持0个或多个参数,参数个数需与解析wsdl地址的方法服务匹配。Result.IsSuccess为true表示请求成功,解析错误或请求失败时返回false,并附带具体错误描述。

       返回值为实体类时,需要调用ExtractCustomerValueFromXml方法进行解析。以ResultInfo类型为例,此方法可处理返回实体类数据。

       关键代码片段已列出,若本教程对你有所助益,请分享给需要的朋友,并关注公众号:Dotnet Dancer。如有需要,公众号后台回复“动态接口”获取演示代码和webservice测试源码。

       OpenTools系列文章链接如下,新版本与旧版本完全兼容,无需更新任何代码即可使用:

       版本1.0.:如何一行C#代码实现解析类型的Summary注释(适用于数据字典快速生成)

       版本1.0.:C#/.NET一行代码将实体类类型转换为Json数据字符串

       版本1.0.8:上位机与工控必备!用.NET快速搞定Modbus通信的方法

       版本1.0.7:揭秘!.Net如何在5分钟内快速实现物联网扫码器通用扫码功能?

       版本1.0.6:.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)

       版本1.0.5:C#使用P/Invoke实现注册表的增删改查功能

       版本1.0.3:C#实现转Base字符串,以及Base字符串在Markdown文件内的复原演示

       版本1.0.2:C#实现Ping远程主机功能(支持IP和域名)

       版本1.0.1:开始开源项目OpenTools的创作(第一个功能:AES加密解密)

       备注此包版本完全开源,无第三方依赖,适用于.net framework 4.6+、任意其他跨平台.net版本环境。

ntpdc命令如何在交互模式下执行对等体列表操作?

       ntpdc 是一个强大的工具,专门用于监控和管理 NTP 服务(ntpd)的状态。它采用源代码中定义的 NTP mode 7 控制消息格式,支持交互式操作和命令行参数输入。通过 ntpdc,用户可以获取丰富的状态和统计信息,包括配置选项,这些选项在 ntpd 启动时以及运行时都能进行设置。

       使用 ntpdc 的基本语法是输入其命令后跟相关参数。以下是几个常见的用法:

       在远程主机执行特定命令:ntpdc -c command

       强制进入交互模式:ntpdc -i

       获取对等体列表,显示为点阵数字格式:ntpdc -n

       查看服务器已知对等体及其状态:ntpdc -p 和 ntpdc -s,后者提供略有不同的输出格式

       通过这些实例,你可以在 Linux 系统中轻松地获取和管理 NTP 服务的相关信息。无论是实时监控还是配置调整,ntpdc 都是 NTP 管理不可或缺的实用程序。

相关栏目:百科