摘要:
network.xml;atc_mdp_offline.xml;atc_qnh_offline.xml;route -n;nmcli;mysqldump;mariadbd;ClusterIP;WorkloadGroup;localhost;nsswitch.conf;NOTFOUND=return;128 系列退出码(128+n
);ctr -n=k8s.io;Unix Domain Sockets ;TCP sockets;sandbox;config.toml
- 如何在 Debian 12 系统上分配静态 IP 地址 ? - 知乎 (zhihu.com)
- Linux 中退出码的含义 | Linux 中国 - 知乎 (zhihu.com)
- Unix Domain Socket简介_unix socket-CSDN博客
- Unix domain socket - 倾越 - 博客园 (cnblogs.com)
Tip:
- *:SDD上network.xml和mid.xml中服务器主机名称大小写须一致(都改成小写),否则SDD为红色EMG模式;
- pv不属于任何命名空间,PVC是命名空间对象; 动态创建PV,PVC不能加 labels,否则由于不匹配,Bound失败;
- secret有命名空间限制;
- AirNet系统MySQL数据库的IP在/home/cdatc/AirNet/config/atc_global_offline.xml配置;端口程序内置固定3306,没有作为参数;
- VM加入服务网格,测试不满足集群内外都可用的需求——即不满足使用域名和ClusterIP以及宿主机IP都OK的需求
- 服务器主备状态的控制与组播通信正常与否也有关。
- SMC监控数据库状态,各节点的mnt进程从/home/cdatc/AirNet/config/atc_global_offline.xml读取配置数据库节点IP,节点的IP一样的话,该节点的mnt检测MySQL状态,并告知SMC。
- fdp/mdp进程读取配置文件/home/cdatc/AirNet/config/atc_global_offline.xml连接数据库,测试value值不支持域名,只能是数据库所在主机的IP,所以导致数据库主机也不能启用istio加入网格(启用istio后不支持宿主机IP,只能是域名)。
- SMC监控时不时变灰,应该是监控周期太短导致,但周期时间是写死的,监控数据是500毫秒,扇区数据是50毫秒。
1、测试,将虚拟机FDP1主机名改为fdp-1,value="FDP-1"这里不区分大小写,主要是主机名加字符杠:- ;此外,SMC的network.xml中hostname="fdp-1"也得改,否则监控不到。
- SMC上network.xml可以写域名ip_a="sdfp-1.sdfp.vm-airnet",但是其它服务进程不行,因为监控是别人给他发消息,他不给别人发消息,SMC是观察者,别人无法收到他的数据。
1、/home/cdatc/AirNet/config/network.xml
<node hostname="fdp-1" showname="fdp-1" ......
<nport nportid="1" ip="192.168.10.30" netname="A" showname="NPORT-A" relatednode="FDP-1" position="ACC">
2、/home/cdatc/AirNet/config/atc_mdp_offline.xml
<node param="MDP1HOSTNAME" tip="服务器1主机名" value="FDP-1"/>
3、/home/cdatc/AirNet/config/atc_qnh_offline.xml
<node param="QNH1HOSTNAME" tip="服务器1主机名" value="FDP-1"/>
- network.xml中例如fdp-1和fdp-2的ip_a="x.x.x.x"双向IP必须配置通,否则SMC上两个fdp-1和fdp-2都是主态;原因是mnt从network.xml获取对方的IP,建立TCP链接互通主备状态。
2、主用和备用FDP的mnt进程都会判断afp,rfp的状态,两个都down,系统判断逻辑为应急EMG(SMC上显示状态);/home/AirNet/config/gconf/mid/mid.xml,也要修改该文件的主机名hostname="sdfp-1......",主机名称(包括大小写)一致后,SMC上状态显示NORM。
- 这里区分大小写,否则提示:check local model success,all pro[0][afp,rfp,brfp,bafp] is down。
<!--系统本地模式判断 多个hostname以逗号隔开,程序名能配置多个,ALL程序down了算down,最底层标签之间或关系判判断 -->
<systemmode>
<degradeds position="ACC">
<degraded hostname="fdp-1,fdp2" proname="fdp"/>
<degraded hostname="fdp-1,fdp2" proname="mdp"/>
<degraded hostname="msdp-1,msdp-2" proname="snet"/>
</degradeds>
<bypasses position ="ACC">
<bypass hostname="sdfp-1,sdfp-2" proname="afp,rfp"/>
<bypass hostname="msdp-1,msdp-2" proname="msdp"/>
<bypass hostname="msdp-1,msdp-2" proname="adp,rdp"/>
</bypasses>
<emergencys position ="ACC">
<emergency hostname="sdfp-1,sdfp-2,BSFP1" proname="afp,rfp,brfp,bafp"/>
<emergency hostname="sdfp-1,sdfp-2,BSDP1" proname="afp,rfp,brdp,badp"/>
<emergency hostname="sdfp-1,sdfp-2,BSDP1" proname="afp,rfp,bsdp"/>
<emergency hostname="msdp-1,msdp-2,BSDP1" proname="msdp,bsdp"/>
<emergency hostname="msdp-1,msdp-2,BSFP1" proname="msdp,brfp,bafp"/>
<emergency hostname="msdp-1,msdp-2,BSDP1" proname="adp,rdp,brdp,badp"/>
<emergency hostname="msdp-1,msdp-2,BSFP1" proname="adp,rdp,brfp,bafp"/>
</emergencys>
</systemmode>
右图是SDD上network.xml和mid.xml主机名称都改成小写后的显示
- 如上右图显示,是因为SDD目前不支持小写的主机名:右图窗口里状态如果更新过来的主机名是小写的,就更新不了,sdd内部用的主机名是大写的;这里sdd上计划切到loc模式了,但是后台是正常的, 实际上计划的状态跟显示的不一样,测试数据是写到后台了,SDD上创建修改计划,FDD上都会更新到。修改代码支持小写主机名后(md5sum sdd:ac567b3f8d37d70825b923b7c4cbc047--> daf60f03020d5a84db7e27a09313b7e2),如下图,状态OK!
- SDD上network.xml和mid.xml中服务器主机名称大小写须一致(都改成小写),否则SDD为红色EMG模式。
- fdp服务器的mnt日志“check local model success,all pro[0][afp,rfp,brfp,bafp] is down”,mnt是通过组播端口40001获取进程状态的,抓包显示:rfp*.NORMAL
[root@fdp-1 log]# tail -f fdp-1_mnt_20240220.log |grep local
2024-02-20 08:04:26 debug check local model success,all pro[0][afp,rfp,brfp,bafp] is down
[root@k8s-node02 ~]# tcpdump -i enp4s0f0 port 40001 -n -vv -XX
15:56:18.749023 IP (tos 0xb8, ttl 31, id 32289, offset 0, flags [DF], proto UDP (17), length 431)
192.168.31.220.24021 > 225.1.0.1.40001: [udp sum ok] UDP, length 403
0x0000: 0100 5e01 0001 ac16 2db0 4cd8 0800 45b8 ..^.....-.L...E.
0x0010: 01af 7e21 4000 1f11 19de c0a8 1fdc e101 ..~!@...........
0x0020: 0001 5dd5 9c41 019b 411a 704d 9c41 0400 ..]..A..A.pM.A..
0x0030: 2721 fc98 2a93 2a0c 017b 0000 4875 0000 '!..*.*..{..Hu..
0x0040: 486d 0000 ff00 0000 0000 0001 7000 3130 Hm..........p.10
0x0050: 3030 3170 726f 6461 7461 0000 0000 0000 001prodata......
0x00e0: 0000 0000 0000 0000 0000 0041 4343 0000 ...........ACC..
0x00f0: 0000 0000 bc7f 4699 7f00 0031 0a4b 0a04 ......F....1.K..
0x0100: 3130 3030 1206 7364 6670 2d31 1a0d 3137 1000..sdfp-1..17
0x0110: 322e 3237 2e32 392e 3133 3022 0c31 3932 2.27.29.130".192
0x0120: 2e31 3638 2e36 2e35 302a 0c31 3932 2e31 .168.6.50*.192.1
0x0130: 3638 2e37 2e35 303a 0132 4206 4d61 7374 68.7.50:.2B.Mast
0x0140: 6572 4804 5203 4143 4312 1a08 98ee 0310 erH.R.ACC.......
0x0150: 0922 036d 6964 2a06 4e4f 524d 414c 3205 .".mid*.NORMAL2.
0x0160: 322e 302e 3612 1c08 dcee 0310 0518 0122 2.0.6.........."
0x0170: 0372 6670 2a06 4e4f 524d 414c 3205 312e .rfp*.NORMAL2.1.
0x0180: 302e 3312 1c08 e0ee 0310 0518 0222 0361 0.3..........".a
0x0190: 6670 2a06 4e4f 524d 414c 3205 312e 302e fp*.NORMAL2.1.0.
0x01a0: 3312 1a08 c3ed 0318 0322 036d 6e74 2a06 3........".mnt*.
0x01b0: 4e4f 524d 414c 3205 322e 312e 31 NORMAL2.2.1.1
3、路由的问题,在k8s-node02上直接加路由route add -net 192.168.10.0/24 dev enp4s0f0,ping不通,加同网段IP:ip addr add 192.168.10.160/24 dev enp4s0f0,有的能Ping通(在k8s-node04上:192.168.10.159)有的不行(Nport:192.168.10.30),检查由于加同网段IP自动又生成一个相同的路由,删除只留下一个后OK。
[root@k8s-node02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp4s0f0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp4s0f0
[root@k8s-node02 ~]# ip route del 192.168.10.0/24 dev enp4s0f0 //del后没有全删除,只剩一个
[root@k8s-node02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 enp4s0f0
4、将Linux debian 6.1.0-15-amd64作为二所数据库服务器,使用默认安装的MariaDB Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12;首先按网上方法添加root的密码,否则登录不上去。
root@debian:/home# mysql -u root -pabc
> GRANT ALL ON *.* TO 'fdd'@'%' IDENTIFIED BY 'abc'; FLUSH PRIVILEGES; //按二所文档,添加多个用户
> Create database atcdb;
# mysql -uroot -pabc -f atcdb < airnetdb.sql
- Debian添加静态IP命令 : "/etc/NetworkManager/system-connections/Wired connection 1"
nmcli connection modify 'Wired connection 1' ipv4.address 192.168.5.58/24
5、selector VM的workloadentry,Service不能是clusterIP: None,域名只能解析到ClusterIP,解析不到VM的IP;在加入服务网格的FDP2使用域名测试OK,使用ClusterIP测试也OK,说明需要使用域名解析到ClusterIP使用。不能使用VM的IP。
# selector VM的workloadentry,Service不能是clusterIP: None,域名只能解析到ClusterIP,解析不到VM的IP
apiVersion: v1
kind: Service
metadata:
name: db-istio
labels:
app: airnet-db
namespace: vm-airnet
spec:
selector:
app: airnet-db
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
- name: http
port: 80
protocol: HTTP
targetPort: 8080
type: ClusterIP
---
# kv exec -ti tool-97f9cfd66-4j9b2 -- nslookup db-istio.vm-airnet.svc.cluster.local //OK
# kv exec -ti tool-97f9cfd66-4j9b2 -- curl http://db-istio.vm-airnet.svc.cluster.local:/api/users //OK
# root@mysql-7fd7c45564-hn8cr:/# mysql -uroot -pabc -h db-istio.vm-airnet
# mysql: [Warning] Using a password on the command line interface can be insecure.
# root@debian:/home# curl http://localhost/api/users //OK
# root@debian:/home# curl http://db-istio.vm-airnet.svc.cluster.local/api/users //OK
# [root@k8s-master01 home]# k exec -ti mysql-7fd7c45564-hn8cr -- mysql -ufdd -pabc -h db-istio.vm-airnet
# [root@k8s-master01 home]# mysql -ufdd -pabc -h 192.168.31.222 //NOK
# [root@FDP2 log]# mysql -ufdd -pabc -h db-istio.vm-airnet //在加入服务网格的FDP2使用域名测试OK,,说明需要使用域名!!!
# [root@FDP2 ~]# mysql -ufdd -pabc -h 10.16.225.28 //在加入服务网格的FDP2使用ClusterIP测试也OK,说明需要使用ClusterIP!!!
# [root@FDP2 ~]# mysql -ufdd -pabc -h 192.168.31.222 // IP不行
# mysql: [Warning] Using a password on the command line interface can be insecure.
# [root@k8s-master01 debian-222]# k exec -ti mysql-7fd7c45564-hn8cr -- mysql -ufdd -pabc -h 192.168.31.222 //NOK
# mysql: [Warning] Using a password on the command line interface can be insecure.
6、debian VM加入sitio,使用域名和ClusterIP不通;使用宿主机IP则OK。ISTIO_INBOUND_PORTS=6666或注释掉时都一样。
/var/lib/istio/envoy/sidecar.env
ISTIO_INBOUND_PORTS=6666
--->以下不通 (FDP2是虚拟机,加入了网格)
[root@FDP2 fdp2-airnet]# curl db-istio.vm-airnet.svc.cluster.local:6666
[root@FDP2 fdp2-airnet]# curl 10.16.225.28:6666
curl: (56) Recv failure: 连接被对方重设
[root@k8s-master01 /]# curl 10.16.225.28:6666
curl: (7) Failed connect to 10.16.225.28:6666; 拒绝连接
[root@k8s-master01 /]# k -n vm-airnet exec -ti tool-97f9cfd66-4j9b2 -- curl 10.16.225.28:6666
[root@k8s-master01 /]# k -n vm-airnet exec -ti tool-97f9cfd66-4j9b2 -- curl db-istio.vm-airnet.svc.cluster.local:6666
curl: (56) Recv failure: Connection reset by peer
command terminated with exit code 56
--->以下通
[root@FDP2 fdp2-airnet]# curl 192.168.5.222:6666
[root@FDP2 fdp2-airnet]# curl 192.168.31.222:6666
[root@k8s-master01 /]# k -n vm-airnet exec -ti tool-97f9cfd66-4j9b2 -- curl 192.168.5.222:6666
- 但是对于INBOUND的端口,使用域名和ClusterIP ok;使用宿主机IP则不通。
- stop istio后,域名和ClusterIP不通,宿主机IP通。
/var/lib/istio/envoy/cluster.env
ISTIO_INBOUND_PORTS='8080,3306'
---> db-istio服务中定义port: 80 targetPort: 8080
[root@FDP2 fdp2-airnet]# curl 10.16.225.28:80/api/healthz
[root@FDP2 fdp2-airnet]# curl db-istio.vm-airnet.svc.cluster.local:80/api/healthz
[root@k8s-master01 /]# k -n vm-airnet exec -ti tool-97f9cfd66-4j9b2 -- curl 10.16.225.28:80/api/healthz
Nok[root@k8s-master01 /]# k -n vm-airnet exec -ti tool-97f9cfd66-4j9b2 -- curl 192.168.31.222:80/api/healthz
upstream connect error or disconnect/reset before headers. reset reason: remote connection failure, transport failure reason: delayed connect error: 111
Nok[root@k8s-master01 /]# k exec -ti mysql-7fd7c45564-hn8cr -- mysql -ufdd -pabc -h 192.168.31.222
mysql: [Warning] Using a password on the command line interface can be insecure.
--->systemctl stop istio后,以下OK!
[root@k8s-master01 /]# k exec -ti mysql-7fd7c45564-hn8cr -- mysql -ufdd -pabc -h 192.168.31.222
- 针对VM加入服务网格,集群内外都可用的需求——即不满足使用域名和ClusterIP以及宿主机IP都OK的需求。要使用域名和ClusterIP,service的PORT(S)按需添加,例如以下访问MySQL数据库需添加:3306/TCP
# k exec -ti mysql-7fd7c45564-hn8cr -- mysql -usa -pabc -h fdp2-istio.vm-airnet.svc.cluster.local
7、SMC监控Surveillance没有雷达列表:雷达状态端口40202
- 原因是SMC的/home/cdatc/AirNet/config/atc_sfp_radar_offline.xml中,SDFP主机名称不对,改成sdfp-1就有了。但是一直是灰色的。
<node param="HOSTNAME" tip="服务器名称" value="sdfp-1"/>
- 使用工具测试,输入./mid_test smc打开之后,接收测试,数据类型里面输入202,能收到数据,如下图。
[root@SMC1 bin]# md5sum mid_test //md5sum为f5772897f471d795f8ade38e15ae469e的mid_test,加参数smc运行异常core
94383e3339d0c1f54a5426a949f861fb
./mid_test smc
- SMC上鼠标点开“About”,在窗口按一下,Ctrl+Shift+d,smc日志里面有更多的Debug内容,Ctrl+Shift+i关闭。
8、在Linux上,当使用 localhost 来连接数据库的时候,Mysql会使用Unix domain socket来传输数据,这是一种进程内通信(IPC)机制,不需要经过网络协议栈,因此速度会更快。而使用 127.0.0.1 时,Mysql仍然会使用TCP/IP协议栈来进行数据传输。
- 测试,ifdown掉网卡,ping不通127.0.0.1,Mysql也不能使用127.0.0.1,因为需经过网络协议栈,但协议栈关闭了;这时Mysql可以使用 localhost,说明是使用Unix domain socket来传输数据。(Unix域套接字的平均延迟为2微秒,而TCP套接字为6微秒)
- unix域套接字(Unix domain socket有时简称为unix套接字)在一台机器上运行。侦听套接字位于文件系统层次结构中,对它们的访问可以由文件系统权限控制。不是通过 “IP地址 + TCP或UDP端口号” 的方式进程通信,而是使用 socket 类型的文件来完成通信。
- TCP/IP套接字用于通过TCP/IP网络进行通信。连接的TCP套接字通过本地IP、本地端口、远程IP和远程端口的组合来标识。侦听TCP套接字由本地端口和可能的本地IP标识。TCP/IP套接字通过使用环回接口与在同一台计算机上运行的进程进行通信: TCP 环回接口可以跳过完整 TCP/IP 网络堆栈的一些复杂性,但它保留了许多其他(ACK、TCP 流量控制等)功能,这些复杂性是为可靠的跨机器通信而设计的,但在单个主机上它们是不必要的负担。
9、外网断开后,SMC主机的mnt运行失败:
/etc/nsswitch.conf --->重启 restart network 生效;files指/etc/hosts
hosts: myhostname files [NOTFOUND=return] dns
//必须在files后加[NOTFOUND=return]或者删除 dns ,否则断公网后network.xml使用域名时运行mnt有以下报错,且mid运行失败:
[ERROR] writedata failed,datatype=1,reason=zmq_send data failed : [Socket is invavilable in a non-blocking manner]
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
- 必须在files后加[NOTFOUND=return]或者删除 dns ,否则断公网后network.xml使用域名时运行mnt报错,且mid运行失败:
10、ctr命令格式记录:
ctr -n=k8s.io i export pause.tar registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
ctr -n=k8s.io i import pause.tar
ctr -n=k8s.io i ls |grep pause
core.harbor.domain/mizy/pause:3.7
ctr -n=k8s.io i tag --force registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7 core.harbor.domain/mizy/pause:3.7
# ctr -n=k8s.io i push -k -u admin:Harbor12345 --platform linux/amd64 core.harbor.domain/mizy/pause:3.7
11、互联网断开后Pod重启状态Init:0/2,describe提示:
Warning FailedCreatePodSandBox 53s (x19357 over 4d23h) kubelet (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
修改对应node节点的containerd配置文件/etc/containerd/config.toml,使用内网的镜像,然后systemctl restart containerd,OK!
sandbox_image = "core.harbor.domain/mizy/pause:3.7"