DNS:DNS问题故障排查

写在前面


  • 分享一些 DNS 排故的笔记给小伙伴
  • 博文内容涉及 DNS 解析顺序,常见排故顺序
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


排故DNS问题

名称解析遇到问题时,应考虑从以下几点来解决:

  • 客户端上 /etc/hosts/etc/resolv.conf
  • 客户端使用的缓存名称服务器的操作
  • 向缓存名称服务器提供数据的权威名称服务器的操作
  • 权威名称服务器上的数据
  • 用于在这些系统之间通信的网络配置

DNS 解析顺序

DNS是系统最常用的名称解析方法, 但DNS不是系统解析主机名和IP地址的唯一方法。/etc/nsswitch.conf 文件中的hosts行控制查找主机名的方式。hosts: files dns myhostname

[root@serverb ~]# cat /etc/nsswitch.conf  | grep host
#     hosts: files dns
#     hosts: files dns  # from user file
hosts:      files dns myhostname
[root@serverb ~]#

files:首先在本地 /etc/hosts 文件中查找,可以手动指定主机名与 IP 地址之间的映射关系。如果主机名在该文件中找到匹配项,系统将直接使用该 IP 地址,不进行 DNS 查询。

[root@serverb ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6172.25.254.254  classroom.example.com classroom
172.25.254.254  content.example.com content
172.25.254.254  materials.example.com materials
172.25.250.254  workstation.lab.example.com workstation
### rht-vm-hosts file listing the entries to be appended to /etc/hosts172.25.250.254  bastion.lab.example.com bastion
172.25.250.9    workstation.lab.example.com workstation
172.25.250.10   servera.lab.example.com servera
172.25.250.11   serverb.lab.example.com serverb
172.25.250.12   serverc.lab.example.com serverc
172.25.250.13   serverd.lab.example.com serverd[root@serverb ~]#

dns:然后执行DNS域名解析查找/etc/resolv.conf,如果在 /etc/hosts 文件中找不到匹配项,系统将使用 DNS 解析器进行域名解析。解析器会检查 /etc/resolv.conf 文件以获取 DNS 服务器的配置信息。

[root@serverb ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search lab.example.com example.com
nameserver 172.25.250.254
[root@serverb ~]#
  • search lab.example.com example.com 指定了DNS搜索域名,即在解析主机名时,会自动添加这些域名后缀。
  • nameserver 172.25.250.254 指定了DNS服务器的IP地址,即在解析主机名时,会向该IP地址的DNS服务器发送查询请求。如果第一个 DNS 服务器无法提供解析结果,解析器将尝试后续的 DNS 服务器,直到找到匹配的解析结果或遍历完所有配置的 DNS 服务器

myhostname:最后使用查找本地配置系统主机名,表示系统将使用本地主机名来解析主机名。本地主机名可以通过 /etc/hostname 文件或通过网络配置获得。使用 myhostname 关键字时,系统将尝试将主机名解析为本地主机名的 IP 地址。

模拟普通应用程序 DNS 解析过程

glibc-common 软件包中的 getent 命令,会按照/etc/nsswitch.conf所指定的主机名称解析顺序执行名称解析。这种解析过程也是大多数应用程序解析的过程

使用方式

root@servera ~]# getent hosts classroom.example.com
172.25.254.254 classroom.example.com classroom

servera.blog.liruilong.com 进行解析,没有得到任何信息

[root@serverb ~]# getent hosts servera.blog.liruilong.com

/etc/hosts 文件添加,解析成功

[root@serverb ~]# echo "192.168.0.10 servera.blog.liruilong.com" >> /etc/hosts
[root@serverb ~]# getent hosts servera.blog.liruilong.com
192.168.0.10    servera.blog.liruilong.com
[root@serverb ~]#

通过域名解析工具可以正常解析,这里我们指定了解析的 DNS 服务器

[root@serverb ~]# host servera.blog.liruilong.com 172.25.250.11
Using domain server:
Name: 172.25.250.11
Address: 172.25.250.11#53
Aliases:servera.blog.liruilong.com has address 172.25.250.10

如何没有指定,则提示解析失败

[root@serverb ~]# dig servera.blog.liruilong.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> servera.blog.liruilong.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 14280
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: e53c16c7ad16ce3a13c1014064c684340c193df2aea1f352 (good)
;; QUESTION SECTION:
;servera.blog.liruilong.com.    IN      A;; Query time: 1205 msec
;; SERVER: 172.25.250.254#53(172.25.250.254)
;; WHEN: Sun Jul 30 23:39:32 CST 2023
;; MSG SIZE  rcvd: 83

status: SERVFAIL表示DNS服务器返回了SERVFAIL的错误状态码,即无法处理该查询请求。

我们在 /etc/resolv.conf 添加对应的 解析 DNS 服务器

[root@serverb ~]# vim /etc/resolv.conf
[root@serverb ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search lab.example.com example.com
nameserver 172.25.250.254
nameserver 172.25.250.11
[root@serverb ~]#

在次解析,解析成功

[root@serverb ~]# dig servera.blog.liruilong.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> servera.blog.liruilong.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1345
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 0b410e7fc0c1426dafcd22d864c684a68204bd8e1cf907f2 (good)
;; QUESTION SECTION:
;servera.blog.liruilong.com.    IN      A;; ANSWER SECTION:
servera.blog.liruilong.com. 300 IN      A       172.25.250.10;; AUTHORITY SECTION:
blog.liruilong.com.     300     IN      NS      serverb.blog.liruilong.com.;; ADDITIONAL SECTION:
serverb.blog.liruilong.com. 300 IN      A       172.25.250.11;; Query time: 1 msec
;; SERVER: 172.25.250.11#53(172.25.250.11)
;; WHEN: Sun Jul 30 23:41:26 CST 2023
;; MSG SIZE  rcvd: 137
[root@serverb ~]# getent hosts servera.blog.liruilong.com
172.25.250.10   servera.blog.liruilong.com
[root@serverb ~]#

dig 默认解析的 A记录,并且默认使用 /etc/resolv.conf 配置的 DNS 进行查询,如果 getent 的结果与 dig 产生的结果不同,则可以清楚地表明,是 DNS 以外的其他原因导致了意外的名称解析结果,即 DNS 的解析结果 可能和 /etc/hosts 的结果不同。

网络连接问题

为了使DNS名称解析正常工作,客户端必须能够与解析名称服务器正常通行,当然解析名称服务器与其他权威名称服务器正常通信。

例如: dig无法到达 /etc/resolv.conf 中的任何DNS服务器,则会发生以下错误

[root@serverb ~]# dig blog.liruilong.com A @8.8.8.8; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> blog.liruilong.com A @8.8.8.8
;; global options: +cmd
;; connection timed out; no servers could be reached
[root@serverb ~]# dig blog.liruilong.com A @114.114.114.114; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> blog.liruilong.com A @114.114.114.114
;; global options: +cmd
;; connection timed out; no servers could be reached

可能的原因: 名称服务器已关闭,客户端上的网络或防火墙出现问题或/etc/resolv.conf的配置错误。

[root@serverb ~]# ping -c3 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
From 172.25.252.254 icmp_seq=1 Destination Net Unreachable
From 172.25.252.254 icmp_seq=2 Destination Net Unreachable
From 172.25.252.254 icmp_seq=3 Destination Net Unreachable--- 114.114.114.114 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 7ms[root@serverb ~]#

如果涉及防火墙,则必须确保客户端可以与名称服器UDP和TCP上53端口通信。 如果名称服务器只允许端口53/UDP上的流量通过,不允许端口53/TCP上的流量通过,则当响应的大小超过512字节 (支持DNS扩展机制 (EDNS) 的服务器为4096字节) 时,解析器必须从UDP切换到TCP并重试查询,您会看到截断通知以及主机无法访问的错误:

[root@servera ~]# dig @dns.example.com A labhost1.example.com
;; Truncated, retrying in TCP mode.
;; Connection to 172.25.1.11#53(172.25.1.11) for labhost1.example.com failed:
host unreachable.

dig 命令可以指定tcp或vc选项,强制使用TCP查询记录,而不是默认行为: 先使用UDP,然后仅对于大响应才使用TCP

[root@servera ]~# dig +tcp A example.com

DNS 响应代码说明

NOERROR 表示查询成功

[root@serverb ~]# dig A servera.blog.liruilong.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> A servera.blog.liruilong.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 173
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: d12897e63585d13c02dc879064c68b93e0350fa4cb0b5e22 (good)
;; QUESTION SECTION:
;servera.blog.liruilong.com.    IN      A;; ANSWER SECTION:
servera.blog.liruilong.com. 300 IN      A       172.25.250.10;; AUTHORITY SECTION:
blog.liruilong.com.     300     IN      NS      serverb.blog.liruilong.com.;; ADDITIONAL SECTION:
serverb.blog.liruilong.com. 300 IN      A       172.25.250.11;; Query time: 1 msec
;; SERVER: 172.25.250.11#53(172.25.250.11)
;; WHEN: Mon Jul 31 00:10:59 CST 2023
;; MSG SIZE  rcvd: 137[root@serverb ~]#

SERVFAIL:伺服失败,名称服务器在处理查询时遇到问题。

[root@serverb ~]# dig A liruilong.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> A liruilong.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 5501
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c5abce0d58f38ad379ab40ba64c68b5468a9b60530e59887 (good)
;; QUESTION SECTION:
;liruilong.com.                 IN      A;; Query time: 7 msec
;; SERVER: 172.25.250.254#53(172.25.250.254)
;; WHEN: Mon Jul 31 00:09:56 CST 2023
;; MSG SIZE  rcvd: 70

NXDOMAIN : 查询的名称不存在于区域中。

┌──[hp@hp-ProLiant-SL270s-Gen8-SE]-[~]
└─$dig liruilong.com A; <<>> DiG 9.18.12-0ubuntu0.22.04.2-Ubuntu <<>> liruilong.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 45394
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;liruilong.com.                 IN      A;; AUTHORITY SECTION:
com.                    570     IN      SOA     a.gtld-servers.net. nstld.verisign-grs.com. 1690734225 1800 900 604800 86400;; Query time: 184 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sun Jul 30 12:24:18 EDT 2023
;; MSG SIZE  rcvd: 115

SERVFAIL和NXDOMAIN是DNS服务器返回的两种不同的响应状态码,它们分别表示以下情况:

  • SERVFAIL表示DNS服务器无法处理该查询请求,通常是由于服务器故障、网络问题或其他错误导致的。这种情况下,DNS服务器没有返回任何答案、授权或附加信息。

  • NXDOMAIN表示DNS服务器已经处理了该查询请求,但无法找到与查询请求匹配的域名记录。这种情况下,DNS服务器返回了一个包含授权信息的响应,但没有任何答案记录。

因此,SERVFAIL和NXDOMAIN的区别在于,前者表示DNS服务器无法处理查询请求,而后者表示DNS服务器已经处理了查询请求,但没有找到匹配的记录

REFUSED:由于策略限制,名称服务器拒绝了客户端的DNS请求。

[root@serverb ~]# dig A servera.blog.liruilong.com @serverc; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> A servera.blog.liruilong.com @serverc
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 25684
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 1914c2b482142e19fd901ec464c68ff64f464af36f2bcff4 (good)
;; QUESTION SECTION:
;servera.blog.liruilong.com.    IN      A;; Query time: 3 msec
;; SERVER: 172.25.250.12#53(172.25.250.12)
;; WHEN: Mon Jul 31 00:29:42 CST 2023
;; MSG SIZE  rcvd: 83[root@serverb ~]#
[root@serverc ~]# cat /etc/named.conf | grep allowallow-query     { localhost;172.25.250.254; 192.168.0.0/24; };
[root@serverc ~]#

跟踪 DNS 查询

通过 dig +trace 命令可以跟踪 DNS 解析过程

┌──[hp@hp-ProLiant-SL270s-Gen8-SE]-[~]
└─$dig +trace liruilongs.github.io; <<>> DiG 9.18.12-0ubuntu0.22.04.2-Ubuntu <<>> +trace liruilongs.github.io
;; global options: +cmd
.                       7105    IN      NS      e.root-servers.net.
.                       7105    IN      NS      f.root-servers.net.
.                       7105    IN      NS      a.root-servers.net.
.                       7105    IN      NS      m.root-servers.net.
.                       7105    IN      NS      g.root-servers.net.
.                       7105    IN      NS      h.root-servers.net.
.                       7105    IN      NS      i.root-servers.net.
.                       7105    IN      NS      c.root-servers.net.
.                       7105    IN      NS      d.root-servers.net.
.                       7105    IN      NS      j.root-servers.net.
.                       7105    IN      NS      b.root-servers.net.
.                       7105    IN      NS      l.root-servers.net.
.                       7105    IN      NS      k.root-servers.net.
;; Received 239 bytes from 127.0.0.53#53(127.0.0.53) in 0 msio.                     172800  IN      NS      c0.nic.io.
io.                     172800  IN      NS      a2.nic.io.
io.                     172800  IN      NS      a0.nic.io.
io.                     172800  IN      NS      b0.nic.io.
io.                     86400   IN      DS      57355 8 2 95A57C3BAB7849DBCDDF7C72ADA71A88146B141110318CA5BE672057 E865C3E2
io.                     86400   IN      RRSIG   DS 8 1 86400 20230812140000 20230730130000 11019 . PQxqrG5/DAsu9RBIZN4Ol4lzzGkMBzyDxsC0lI+l8HDz5qTocF2tx8+F CYOeqJ235GhJI6cqMs0qFSMd9yHKupIllXOvrIBTgcJ/a8hoyXxoWyQL iwFJ8lj3+Wc3VSdHGvkqWYMZ52Ny9orne3zqTOzpGV1xtyxAiw+a9h92 hufkRTmoki6jMdiIFlVhQIHzqtc4MY/HmuUhOjbn0/b3432XAeeJx+uw sRqaFgs6K//QdvllYATpgnXoZ2RdgJuIsmEF1HfDY2vg+O3y4DMW4htU EkQiBqHx6aVPCAaCK5nkp7UEzZfgfhkugxGl1ikxaXn0mBt8awkkCIaa H9l2rw==
;; Received 636 bytes from 202.12.27.33#53(m.root-servers.net) in 68 ms;; UDP setup with 2a01:8840:9e::17#53(2a01:8840:9e::17) for liruilongs.github.io failed: network unreachable.
;; UDP setup with 2a01:8840:9e::17#53(2a01:8840:9e::17) for liruilongs.github.io failed: network unreachable.
;; UDP setup with 2a01:8840:9e::17#53(2a01:8840:9e::17) for liruilongs.github.io failed: network unreachable.
;; communications error to 65.22.160.17#53: timed out
github.io.              3600    IN      NS      dns1.p05.nsone.net.
github.io.              3600    IN      NS      dns2.p05.nsone.net.
github.io.              3600    IN      NS      dns3.p05.nsone.net.
github.io.              3600    IN      NS      ns-692.awsdns-22.net.
github.io.              3600    IN      NS      ns-1622.awsdns-10.co.uk.
0d790076pp5pfktg2hrthj5bj6ckckcb.io. 3600 IN NSEC3 1 1 10 332539EE7F95C32A 0D7N522D3BFMA1LA01BUIOBUK6MROGMU NS SOA RRSIG DNSKEY NSEC3PARAM
0d790076pp5pfktg2hrthj5bj6ckckcb.io. 3600 IN RRSIG NSEC3 8 2 3600 20230820161400 20230730151400 47703 io. eJVfgk+RJy6pJULS8AGI5vdwg5l5aheH3AXAAEedhWaDV2RZ5wkjG55M NnnWLDfRYPSCJjQwlDeYLqxLbwcIZVKFYAI2bGcMp5gwF+3N8GKobO0J fufmVtT2feylQnFVC414+dRVmfswmycKiVqYz+R5evDJVvlba47Nw2jk +uw=
0jehpe7obc68rhh4ntet0u9o44qmosmo.io. 3600 IN NSEC3 1 1 10 332539EE7F95C32A 0JES1F5OD9SG1E4CCRGBS865PMBUV4PC NS DS RRSIG
0jehpe7obc68rhh4ntet0u9o44qmosmo.io. 3600 IN RRSIG NSEC3 8 2 3600 20230815155455 20230725145455 47703 io. YGikk+waO8SYkaBCCNiFjRwXRmjJWGhfk7g1iTAPUz3a8WHtZ/MJSjMc uQPhpbfl7h2Bq0//Gcl657brOnAGL4/pa8Bo0gyWhDLQDPGQe+DNPm+t LFNAd4V/oJw747ch2bAJW4U+zSkCmY/WVlCwuht82Z37mMrRRilt7HZ9 UnQ=
;; Received 686 bytes from 65.22.162.17#53(c0.nic.io) in 120 ms;; UDP setup with 2600:9000:5306:5600::1#53(2600:9000:5306:5600::1) for liruilongs.github.io failed: network unreachable.
;; UDP setup with 2620:4d:4000:6259:7:5:0:1#53(2620:4d:4000:6259:7:5:0:1) for liruilongs.github.io failed: network unreachable.
liruilongs.github.io.   3600    IN      A       185.199.108.153
liruilongs.github.io.   3600    IN      A       185.199.109.153
liruilongs.github.io.   3600    IN      A       185.199.110.153
liruilongs.github.io.   3600    IN      A       185.199.111.153
;; Received 113 bytes from 198.51.44.69#53(dns3.p05.nsone.net) in 48 ms

根据dig命令的输出结果,可以看出在查询名为liruilongs.github.io的主机名时,返回了一个包含以下信息的响应:

status: NOERROR 表示DNS服务器成功处理了该查询请求。
ANSWER: 4 表示DNS服务器返回了4个答案。

Zone数据问题

有时,名称解析问题是由于权威名称服务器上区域中错误配置引起的。

  • 负响应(缓存的影响)
  • 得到不同的答案: DNS轮询,DNS负载均衡

DNS轮询是一种负载均衡的技术,可以将客户端的请求分配到多个服务器中,从而提高系统的可用性和性能。

在DNS服务器上创建多个A记录,每个记录对应一个服务器的IP地址。例如,假设有3个服务器的IP地址分别为192.168.1.1、192.168.1.2和192.168.1.3,则需要在DNS服务器上创建3个A记录,分别对应这些IP地址。

针对每个A记录,设置相同的域名和TTL值,以确保客户端每次查询时都会得到相同的结果。

在BIND DNS服务器中,可以使用round-robin关键字启用轮询功能

编辑BIND配置文件,并在example.com区域中添加以下行:

zone "example.com" {type master;file "example.com.zone";rrset-order { random; };
};

在该区域中添加rrset-order选项,并将其设置为random或cyclic。其中,random表示随机轮询,cyclic表示顺序轮询。

  • 反向查询失败: 缺少PTR记录,No PTR record found: 表示DNS服务器未找到与该IP地址对应的PTR记录
  • 获取记录不存在的响应
  • 名称中看到两次FQDN以及相关错误(.为 当前zong,如果不加会默认加上)
  • 识别循环的CNAME记录
  • 从权威服务器获得不同的答案

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知


https://www.isc.org/bind/

<RH358 授课课堂笔记>


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UML-构件图

目录 1.概述 2.构件的类型 3.构件和类 4.构件图 1.概述 构件图主要用于描述各种软件之间的依赖关系&#xff0c;例如&#xff0c;可执行文件和源文件之间的依赖关系&#xff0c;所设计的系统中的构件的表示法及这些构件之间的关系构成了构件图 构件图从软件架构的角度来描述…

leetcode357周赛

2810. 故障键盘 核心思想&#xff1a;自己想的笨办法&#xff0c;枚举s&#xff0c;然后遇到i就翻转。比较好的方法就是双端队列&#xff0c;遇到i字母原本往后加的就往前加&#xff0c;然后读的时候反过来读&#xff0c;往前加的就往后加&#xff0c;读的话就从前往后&#x…

git 版本控制与合并

一 git概述&#xff1a; - Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理软件开发项目中的代码变更。 - 它允许多人协同工作&#xff0c;记录代码历史变更&#xff0c;并轻松管理多个项目版本。 **Git的主要特点**包括&#xff1a; 1. **分布式系统**&#xff1a;…

小研究 - MySQL 分区分表的设计及实(一)

随着信息技术的快速发展&#xff0c;数据量越来越大&#xff0c;海量的表查询操作需要消耗大量的时间&#xff0c;成为影响数据库访问性能提高的主要因素。为了提升数据库操作的查询效率和用户体验&#xff0c;在关系型数据库管理系统(MySQL)中通过 range 分区和 Merge 存储&am…

c++:day4

1.思维导图 2.shell函数获取uid和gid&#xff0c;并用变量接 #!/bin/bashfunction fun() {read -p "输入用户名" necho uid:id -u $necho gid:id -g $n } afun echo $a3.冒泡、选择和快排代码整理 /**************************************************************…

嵌入式一开始该怎么学?学习单片机

学习单片机&#xff1a; 模电数电肯定必须的&#xff0c;玩单片机大概率这两门课都学过&#xff0c;学过微机原理更好。 直接看野火的文档&#xff0c;芯片手册&#xff0c;外设手册。 学单片机不要纠结于某个型号&#xff0c;我认为stm32就OK&#xff0c;主要是原理和感觉。…

窥探系列之Mybatis-plus XML分页查询

mybatisPlus分页查询原理 searchCount字段控制是否查询总记录数 com.baomidou.mybatisplus.plugins.PaginationInterceptor 该插件拦截sql&#xff0c;如果searchCounttrue&#xff0c;则使用sql解析包jsqlparser根据原sql生成count语句&#xff0c;另外关键

分布式应用:Zookeeper 集群与kafka 集群部署

目录 一、理论 1.Zookeeper 2.部署 Zookeeper 集群 3.消息队列 4.Kafka 5.部署 kafka 集群 6.FilebeatKafkaELK 二、实验 1.Zookeeper 集群部署 2.kafka集群部署 3.FilebeatKafkaELK 三、问题 1.解压文件异常 2.kafka集群建立失败 3.启动 filebeat报错 4.VIM报错…

服务器数据恢复-raid5同步过程中又有一块磁盘报警的数据恢复案例

服务器数据恢复环境&#xff1a; 某研究院一台DELL存储&#xff0c;15块硬盘搭建的一组RAID5磁盘阵列。 该RAID5阵列只有一个卷组&#xff0c;该卷组占用了阵列的全部空间&#xff1b;该卷组只有一个起始位置为0扇区的XFS裸分区。 服务器故障&初检&分析&#xff1a; 该…

设计模式十:装饰器(Decorator)

现实生活中&#xff0c;常常需要对现有产品增加新的功能或美化其外观&#xff0c;如房子装修、相片加相框等&#xff0c;都是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在运行时为对象动态地添加额外的行为或功能…

Android前沿技术?Jetpack如何?

Jetpack Compose是Android开发领域的一项前沿技术&#xff0c;它提供了一种全新的方式来构建用户界面。近年来&#xff0c;Jetpack Compose在各大招聘等网站上的招聘岗位逐渐增多&#xff0c;薪资待遇也相应提高。本文将从招聘岗位的薪资与技术要求入手&#xff0c;分析Jetpack…

多线程的创建,复习匿名内部类,Thread的一些方法,以及lambda的变量捕捉,join用法

一、&#x1f49b; Java的Thread类表示线程 1.创建类&#xff0c;继承Thread重写run方法 2.创建类&#xff0c;实现Runnable重写run方法 3.可以继承Thread重写run基于匿名内部类 4.实现Runnable重写run基于匿名内部类 5.lamdba表达式表示run方法的内容&#xff08;推荐&#x…

适配器模式

**适配器模式&#xff08;Adapter Pattern&#xff09;**是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口&#xff0c;从而使原本由于接口不兼容而无法一起工作的类能够一起工作。 适配器模式主要有三个角色&#xff1a; 目标接口&…

16-3_Qt 5.9 C++开发指南_使用QStyle 设置界面外观_实现不同系统下的界面效果的匹配

文章目录 1. QStyle的作用&#xff08;实现不同系统下的界面效果的匹配&#xff09;2. Qt内置样式的使用3. 源码3.1 可视化UI设计3.2 mainwindow.cpp 1. QStyle的作用&#xff08;实现不同系统下的界面效果的匹配&#xff09; Qt 是一个跨平台的类库&#xff0c;相同的界面组件…

算法与数据结构-跳表

文章目录 什么是跳表跳表的时间复杂度跳表的空间复杂度如何高效的插入和删除跳表索引动态更新代码示例 什么是跳表 对于一个单链表来讲&#xff0c;即便链表中存储的数据是有序的&#xff0c;如果我们要想在其中查找某个数据&#xff0c;也只能从头到尾遍历链表。这样查找效率…

虚继承中对象占用的内存空间

1、虚继承中对象占用的内存空间1 #include <iostream> using namespace std;class AA {void show() {}int max(int a, int b) { return a > b ? a : b; } }; //函数并不占用内存空间class A {}; //占位符class B {int c; }; //含有一个int型数据成员class C :vi…

1. 软件生命周期C/S、B/S 架构

目录 1. 软件生命周期 2. 面向对象 2.1 面向对象分析 2.2 面向对象设计 2.3 面向对象编程 3. C/S、B/S 架构 3.1 CS 架构 3.2 BS 架构 1. 软件生命周期 软件生命周期中划分为可行性研究、需求分析、概要设计、详细设计、实现、组装(集成)测试、 确认测试、使用、维护…

如何在shell脚本将node_modules里的文件复制一份到public文件里

项目背景&#xff1a;由于公司网络不连接公网&#xff0c;所以在绘制地图大屏项目时&#xff0c;需要我们将边界线数据包也部署起来&#xff0c;来获取边界线数据 解决方案&#xff1a; 1.让后端写个接口或者找个地方将数据包放到服务器即可 2.将数据包放到vue项目的public文…

LiveGBS流媒体平台GB/T28181常见问题-无法注册不上海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查

LiveGBS无法注册不上海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查 1、设备注册后查看不到1.1、是否是自带物联网卡的摄像头1.2、关闭萤石云1.3、防火墙排查1.4、端口排查1.5、IP地址排查1.6、设备TCP/IP配置排查1.7、设备多网卡排查1.…

【C++从0到王者】第十七站:手把手教你写一个stack和queue及deque的底层原理

文章目录 一、stack1.利用适配器2.栈的实现 二、queue三、deque1.deque介绍2.deque的接口3.deque的基本使用4.deque的效率5.deque的原理 一、stack 1.利用适配器 我们不可能写了一份数组栈以后&#xff0c;还要在手写一个链式栈&#xff0c;这样显得太冗余了。于是我们可以利…