【全网首发】Mogdb 5.0.6新特性:CM双网卡生产落地方案

在写这篇文章的时候,刚刚加班结束,顺手写了这篇文章。

前言

某大型全国性行业核心系统数据库需要A、B两个物理隔离的双网卡架构方案,已成为行业标准。而最新发布的MogDB 5.0.6的CM新增支持流复制双网段部署,用于网卡级高可用容灾(PTK 1.4及更高版本)。支持双网段后,某个节点在发生单网段故障后仍然能保证正常工作,提供网段级故障的高可用管理能力,保驾了数据库底座的稳定运行。

CM简介

CM(Cluster Manager)是一款集群资源管理软件。支持自定义资源 监控,提供了数据库主备的状态监控、网络通信故障监控、文件系统 故障监控、故障自动主备切换等能力。 MogDB数据库和CM是解耦的,可以分开安装。CM为数据库 集群提供管理服务,功能十分强大。

CM功能特性

  • 数据库实例主备角色仲裁
  • CM自身高可用仲裁
  • 数据库实例运行状态监控
  • 数据库实例所在节点资源检测
  • 数据库集群、节点、实例的启动、停止
  • 数据库集群状态查询、状态更新
  • 数据库集群数据库实例switchover、failover
  • 支持双网虚拟ip(VIP)
  • CM支持两节点部署
  • CM事件触发器
  • CM支持双网段

生产落地方案

alt 如图为完整架构方案,MogDB支持主备双机房的方案,A和B网络物理隔离,分别联通独立的A和B交换机,两者不互通,并且在A和B上挂载两个vip,对应用服务器供服务。

流复制网络方案

C和D网卡做Bond0,再通过A和B两个交换机中单独虚拟出一个vlan,通过VLAN Trunking技术做堆叠,提供流复制网络的交换机高可用,为流复制网络提供通讯。

本次落地的方案

此次方案为一主一备的架构。同样A和B网络提供业务网络。 C和D网卡做Bond0+VLAN Trunking技术做堆叠,为流复制提供冗余。 alt

安装部署

主机业务A网业务B网流复制网
mogdb110.130.0.510.130.4.5192.168.100
mogdb210.130.0.710.130.4.7192.168.101

配置config

PTK对CM实现了适配,安装时在config.yaml文件中配置参数ha_ips即可实现双网段部署。需要下载PTK 1.4及更高版本。

  • PTK下载地址: https://www.mogdb.io/downloads/ptk/all
vi config.2024-04-01T17_37_01.yaml

global:
  cluster_name: ats_cs
  user: omm506
  group: omm506
  db_password: pTk6YmQwZmY1ODU8QDw9PUM/Q085ZDFjV2g5dGZFQVRpSlJfQ2tGeG1GTzB3WjRfa3lDSmpsdjVTcVdVLUE=
  db_port: 28000
  base_dir: /opt/mogdb506
  db_conf:
    log_min_messages: 'DEBUG5'
  ssh_option:
    port: 22
    user: root
    key_file: "/root/.ssh/id_rsa"
  cm_option:
    cm_server_port: 15300
    cm_server_conf:
      ddb_type: 1
      enable_ssl: on
      third_party_gateway_ip: 10.130.7.254,10.130.3.254
      cms_enable_failover_on2nodes: 'true'
      cms_enable_db_crash_recovery: 'true'
      log_min_messages: 'DEBUG5'
    cm_agent_conf:
      enable_ssl: on
      log_min_messages: 'DEBUG5'
db_servers:
  - host: 10.130.4.5
    role: primary
    az_name: AZ1
    az_priority: 1
    ha_ips: [10.130.0.5]
    ssh_option:
      password: pTk6MzkzYTk5ZTg8QDw9PUM/REpvRHhwYk1LWGRjS3dER0I5RC1NNFVnMFNjalU1NUpQSGVCWXFHTU5LLVU=
  - host: 10.130.4.7
    role: standby
    az_name: AZ1
    az_priority: 1
    ha_ips: [10.130.0.7]
    ssh_option:
      password: pTk6MzkzYTk5ZTg8QDw9PUM/REpvRHhwYk1LWGRjS3dER0I5RC1NNFVnMFNjalU1NUpQSGVCWXFHTU5LLVU=

查看网卡的网关

两节点部署(一主一备),需要在yaml配置文件中配置third_party_gateway_ip参数作为仲裁ip(单网段的三方网关)为双网段参数,以逗号分隔。这里配置如下: third_party_gateway_ip :10.130.7.254、10.130.3.254

[root@mogdb1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.130.7.254     0.0.0.0         UG    102    0        0 em1
0.0.0.0         10.130.3.254     0.0.0.0         UG    103    0        0 em2
10.130.0.0       0.0.0.0         255.255.252.0   U     103    0        0 em2
10.130.4.0       0.0.0.0         255.255.252.0   U     102    0        0 em1
192.168.1.0     0.0.0.0         255.255.255.0   U     300    0        0 bond0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

安装数据库

加上参数 --install-cm表示同数据库一起安装cm,也可以单独部署。

ptk install -f config.2024-04-01T17_37_01.yaml  --install-cm -p MogDB-5.0.6-Kylin-x86_64-all.tar.gz


INFO[2024-04-22T16:21:59.149] PTK 版本: 1.4.1 release                        
INFO[2024-04-22T16:21:59.149] 从 config.2024-04-01T17_37_01.yaml 加载配置       
如果您选择继续安装软件,
就代表您接受该软件的许可协议。

  [Y]: 接受并继续
  [C]: 显示许可协议内容
  [N]: 中止安装并退出

✔ 请输入 (默认: Y): y
INFO[2024-04-22T16:22:00.884] CM 启用, 但 cm_servers 为空,默认使用数据库的服务器作为 CM 服务器  
集群将包含 2 个 CM 节点,所以请确认以下 cms 的配置:
- (Optional) db_service_vip=""
- (Required) third_party_gateway_ip="10.130.7.254,10.130.3.254"
- (Optional) cms_enable_failover_on2nodes="true"
- (Optional) cms_enable_db_crash_recovery="true"
✔ 请输入虚拟 IP (仅支持 IPv4): 10.130.4.6,10.130.0.6
现在这些配置的值是:
- db_service_vip="10.130.4.6,10.130.0.6"
- third_party_gateway_ip="10.130.7.254,10.130.3.254"
- cms_enable_failover_on2nodes="true"
- cms_enable_db_crash_recovery="true"
✔ 您想修改它们吗 (默认 n) [y/n]: n
集群名:"ats_cs"
+--------------+------------+----------------+----------+------------+-----------------------+----------+
| az(priority) |     ip     |  user(group)   |   port   |    role    |       data dir        | upstream |
+--------------+------------+----------------+----------+------------+-----------------------+----------+
| AZ1(1)       | 10.130.4.7  | omm506(omm506) | db:28000 | db:standby | db:/opt/mogdb506/data | -        |
|              |            |                | cm:15300 |            | cm:/opt/mogdb506/cm   |          |
|              | 10.130.4.5 | omm506(omm506) | db:28000 | db:primary | db:/opt/mogdb506/data | -        |

MogDB和CM安装完毕。

添加VIP

建议添加参数--log-level debug方便查看和分析报错。ptk会自动判断把vip挂载同网段的地址上,简单易用。

ptk cluster -n ats_cs load-cm-vip --vip 10.130.4.6 --action install  --log-level debug
ptk cluster -n ats_cs load-cm-vip --vip 10.130.0.6 --action install  --log-level debug

添加完后,会在 cd /opt/mogdb506/cm/cm_agent的下新增cm_resource.json的配置文件,"float_ip": "10.130.4.6","float_ip": "10.130.0.6"已经添加。

{
 "resources": [{
   "name""VIP_az996037",
   "resources_type""VIP",
   "instances": [{
     "node_id": 1,
     "res_instance_id": 6001,
     "inst_attr""base_ip=10.130.4.5"
    }, {
     "node_id": 2,
     "res_instance_id": 6002,
     "inst_attr""base_ip=10.130.4.7"
    }],
   "float_ip""10.130.4.6"
  }, {
   "name""VIP_az40655",
   "resources_type""VIP",
   "instances": [{
     "node_id": 1,
     "res_instance_id": 6001,
     "inst_attr""base_ip=10.130.0.5"
    }, {
     "node_id": 2,
     "res_instance_id": 6002,
     "inst_attr""base_ip=10.130.0.7"
    }],
   "float_ip""10.130.0.6"

cm_ctl show命令查看vip信息 vip:10.130.4.6挂载到10.130.4.5 ,vip:10.130.0.5挂载到10.130.0.6上面。

[omm506@mogdb1 cm_agent]$ cm_ctl show

[  Network Connect State  ]

Network timeout:       6s
Current CMServer time: 2024-04-22 18:29:06
Network stat('Y' means connected, otherwise 'N'):
|  \  |  Y  |
|  Y  |  \  |


[  Node Disk HB State  ]

Node disk hb timeout:    200s
Current CMServer time: 2024-04-22 18:29:07
Node disk hb stat('Y' means connected, otherwise 'N'):
|  N  |  N  |

[  FloatIp Network State  ]

node      instance base_ip    float_ip_name float_ip  
------------------------------------------------------
1  mogdb1 6001     10.130.4.5 VIP_az996037  10.130.4.6 
1  mogdb1 6001     10.130.0.5 VIP_az40655   10.130.0.6 

修改流复制ip

两台机器的postgresql.con都修改replconninfo[1-2]参数,如下。

replconninfo1 = 'localhost=192.168.1.100 localport=28001 localheartbeatport=26005 localservice=28004 remotehost=192.168.1.101 remoteport=28001 remoteheartbeatport=28005 remoteservice=28004'        
replconninfo2 = 'localhost=192.168.1.101 localport=28001 localheartbeatport=28005 localservice=28004 remotehost=192.168.1.100 remoteport=28001 remoteheartbeatport=28005 remoteservice=28004'         

修改pg_hba

添加互信,不然会出现Forbid remote connection with initia1 user的报错,添加#add MogDB那部分内容。

# "local" is for Unix domain socket connections only
local   all             all                                     trust
host    all    omm506    10.130.0.5/32    trust
host    all    omm506    10.130.4.5/32    trust
host    all    omm506    10.130.0.7/32    trust
host    all    omm506    10.130.4.7/32    trust

# add MogDB
host    all    omm506    192.168.1.101/32    trust
host    all    omm506    192.168.1.100/32    trust

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all    all    10.130.0.5/32    sha256
host    all    all    10.130.4.5/32    sha256
host    all    all    10.130.0.7/32    sha256
host    all    all    10.130.4.7/32    sha256

# add MogDB
host    all    all    192.168.1.101/32    sha256
host    all    all    192.168.1.100/32    sha256

host all all 10.130.4.6/32 sha256
host all all 10.130.0.6/32 sha256
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     omm506                                trust
#host    replication     omm506        127.0.0.1/32            trust
#host    replication     omm506        ::1/128                 trust

# add MogDB
host    all    all    0.0.0.0/0    md5

修改local_bind_address参数

设置为*。

vi /opt/mogdb506/data/postgresql.conf

local_bind_address = '*'

重启生效

这里能看到流复制通道为:192.168.1.100:28001-->192.168.1.101:56732,cm接管的为业务ip:10.130.4.5,10.130.0.5,10.130.4.7,10.130.0.7,大功告成。

[root@mogdb1 ~]# ptk cluster -n ats_cs status  --detail
[   Cluster State   ]
cluster_name                   : ats_cs
cluster_state                  : Normal
database_version               : MogDB 5.0.6 (build 8b0a6ca8)
active_vip                     : 10.130.4.6,10.130.0.6

[  CMServer State   ]
  id |          ip           | port  | hostname |  role    
-----+-----------------------+-------+----------+----------
  1  | 10.130.4.5,10.130.0.5 | 15300 | mogdb1   | primary  
  2  | 10.130.4.7,10.130.0.7   | 15300 | mogdb2   | standby  

[  Datanode State   ]
  cluster_name |  id  |     ip     | port  |  user  | nodename | db_role | state  |  uptime  | upstream  
---------------+------+------------+-------+--------+----------+---------+--------+----------+-----------
  ats_cs       | 6001 | 10.130.4.5 | 28000 | omm506 | dn_6001  | primary | Normal | 00:02:16 | -         
               |      | 10.130.0.5 |       |        |          |         |        |          |           
               | 6002 | 10.130.4.7  | 28000 | omm506 | dn_6002  | standby | Normal | 00:02:17 | -         
               |      | 10.130.0.7  |       |        |          |         |        |          |           

[  DataNode Detail  ]
--------------- 10.130.4.5:28000(dn_6001) ---------------
role                           : primary
data_dir                       : /opt/mogdb506/data
az_name                        : AZ1

[Senders Info]:

sender_pid                     : 3158066
local_role                     : Primary
peer_role                      : Standby
peer_state                     : Normal
state                          : Streaming
sender_sent_location           : 0/5E95998
sender_write_location          : 0/5E95998
sender_flush_location          : 0/5E95998
sender_replay_location         : 0/5E95998
receiver_received_location     : 0/5E95998
receiver_write_location        : 0/5E95998
receiver_flush_location        : 0/5E95998
receiver_replay_location       : 0/5E95998
sync_percent                   : 100%
sync_state                     : Sync
sync_priority                  : 1
sync_most_available            : On
channel                        : 192.168.1.100:28001-->192.168.1.101:56732

--------------- 10.130.4.7:28000(dn_6002) ---------------
role                           : standby
data_dir                       : /opt/mogdb506/data
az_name                        : AZ1

[Receiver Info]:

receiver_pid                   : 3121372
local_role                     : Standby
peer_role                      : Primary
peer_state                     : Normal
state                          : Normal
sender_sent_location           : 0/5E95AB8
sender_write_location          : 0/5E95AB8
sender_flush_location          : 0/5E95AB8
sender_replay_location         : 0/5E95AB8
receiver_received_location     : 0/5E95AB8
receiver_write_location        : 0/5E95AB8
receiver_flush_location        : 0/5E95AB8
receiver_replay_location       : 0/5E95AB8
sync_percent,channel           : 100%

CM双网高可用测试

测试场景:

    1. 备库单网卡故障
    1. 主库A网卡故障
    1. 主库B网卡故障

预期:

    1. 无影响,不影响主备同步,不影响业务
    1. 主库A网故障,无影响,不影响主备同步,不影响业务
    1. 主库B网故障,进行主备切换,备库升主(switchover)

备库业务单网故障

[root@mogdb2 dn_6002]# ifdown em2
WARN      : [ifdown] 您正在使用由 ‘network-scripts’ 所提供的 ‘ifdown’,这一命令现在不推荐使用。
WARN      : [ifdown] ‘network-scripts’ 将在不久的将来的发行版中被移除。
WARN      : [ifdown] 建议切换到 ‘NetworkManager’ 作为代替,它也提供了 ‘ifup/ifdown’ 脚本。

[root@mogdb1 ~]# ptk cluster -n ats_cs status  --detail
[   Cluster State   ]
cluster_name                   : ats_cs
cluster_state                  : Normal
database_version               : MogDB 5.0.6 (build 8b0a6ca8)
active_vip                     : 10.130.4.6,10.130.0.6

[  CMServer State   ]
  id |          ip           | port  | hostname |  role    
-----+-----------------------+-------+----------+----------
  1  | 10.130.4.5,10.130.0.5 | 15300 | mogdb1   | primary  
  2  | 10.130.4.7,10.130.0.7   | 15300 | mogdb2   | standby  

[  Datanode State   ]
  cluster_name |  id  |     ip     | port  |  user  | nodename | db_role | state  |  uptime  | upstream  
---------------+------+------------+-------+--------+----------+---------+--------+----------+-----------
  ats_cs       | 6001 | 10.130.4.5 | 28000 | omm506 | dn_6001  | primary | Normal | 00:03:16 | -         
               |      | 10.130.0.5 |       |        |          |         |        |          |           
               | 6002 | 10.130.4.7  | 28000 | omm506 | dn_6002  | standby | Normal | 00:03:17 | -         
               |      | 10.130.0.7  |       |        |          |         |        |          |           

[  DataNode Detail  ]
--------------- 10.130.4.5:28000(dn_6001) ---------------
role                           : primary
data_dir                       : /opt/mogdb506/data
az_name                        : AZ1

[Senders Info]:

sender_pid                     : 3158066
local_role                     : Primary
peer_role                      : Standby
peer_state                     : Normal
state                          : Streaming
sender_sent_location           : 0/5E95998
sender_write_location          : 0/5E95998
sender_flush_location          : 0/5E95998
sender_replay_location         : 0/5E95998
receiver_received_location     : 0/5E95998
receiver_write_location        : 0/5E95998
receiver_flush_location        : 0/5E95998
receiver_replay_location       : 0/5E95998
sync_percent                   : 100%
sync_state                     : Sync
sync_priority                  : 1
sync_most_available            : On
channel                        : 192.168.1.100:28001-->192.168.1.101:56732

--------------- 10.130.4.7:28000(dn_6002) ---------------
role                           : standby
data_dir                       : /opt/mogdb506/data
az_name                        : AZ1

[Receiver Info]:

receiver_pid                   : 3121372
local_role                     : Standby
peer_role                      : Primary
peer_state                     : Normal
state                          : Normal
sender_sent_location           : 0/5E95AB8
sender_write_location          : 0/5E95AB8
sender_flush_location          : 0/5E95AB8
sender_replay_location         : 0/5E95AB8
receiver_received_location     : 0/5E95AB8
receiver_write_location        : 0/5E95AB8
receiver_flush_location        : 0/5E95AB8
receiver_replay_location       : 0/5E95AB8
sync_percent,channel           : 100%

无影响,不影响主备同步,不影响业务,集群一切正常。

主库A网故障

down掉A网。

[root@mogdb1 ~]# ifdown em1
WARN      : [ifdown] 您正在使用由 ‘network-scripts’ 所提供的 ‘ifdown’,这一命令现在不推荐使用。
WARN      : [ifdown] ‘network-scripts’ 将在不久的将来的发行版中被移除。
WARN      : [ifdown] 建议切换到 ‘NetworkManager’ 作为代替,它也提供了 ‘ifup/ifdown’ 脚本。

数据库同步正常

[2024-04-23 19:44:12.469][944266][][gs_ctl]: gs_ctl query ,datadir is /opt/mogdb506/data 
 HA state:           
 local_role                     : Primary
 static_connections             : 2
 db_state                       : Normal
 detail_information             : Normal

 Senders info:       
 sender_pid                     : 226949
 local_role                     : Primary
 peer_role                      : Standby
 peer_state                     : Normal
 state                          : Streaming
 sender_sent_location           : 0/A1575E8
 sender_write_location          : 0/A1575E8
 sender_flush_location          : 0/A1575E8
 sender_replay_location         : 0/A1575E8
 receiver_received_location     : 0/A1575E8
 receiver_write_location        : 0/A1575E8
 receiver_flush_location        : 0/A1575E8
 receiver_replay_location       : 0/A1575E8
 sync_percent                   : 100%
 sync_state                     : Sync
 sync_priority                  : 1
 sync_most_available            : On
 channel                        : 192.168.1.100:28001-->192.168.1.101:41842

 Receiver info:      
No information 

主库B网故障

down掉B网。

[root@mogdb1 ~]#  ifdown em2
WARN      : [ifdown] 您正在使用由 ‘network-scripts’ 所提供的 ‘ifdown’,这一命令现在不推荐使用。
WARN      : [ifdown] ‘network-scripts’ 将在不久的将来的发行版中被移除。
WARN      : [ifdown] 建议切换到 ‘NetworkManager’ 作为代替,它也提供了 ‘ifup/ifdown’ 脚本。
成功断开设备 "em2"

主库数据库被cm关闭。

[omm506@mogdb1 ~]$ cm_ctl query -Cvi
[  CMServer State   ]

node      node_ip                         instance state
----------------------------------------------------------
cm_ctl: [DoConnCmserver] ip 10.130.4.5 is not reachable.
cm_ctl: [DoConnCmserver] ip 10.130.0.5 is not reachable.
cm_ctl: [DoConnCmserver] ip 10.130.4.7 is not reachable.
cm_ctl: [DoConnCmserver] ip 10.130.0.7 is not reachable.
1  mogdb1 10.130.4.5,10.130.0.5           1        Down
2  mogdb2 10.130.4.7,10.130.0.7             2        Down

cm_ctl: can't connect to cm_server.
Maybe cm_server is not running, or timeout expired. Please try again.

主库数据库被cm关闭。

[omm506@mogdb1 ~]$ ps -ef |grep mogdb
pcp         2823       1  0 19:27 ?        00:00:00 /usr/bin/pmie -b -h local: -l /var/log/pcp/pmie/mogdb1/pmie.log -c config.default
omm506      8941       1  0 19:28 ?        00:00:05 /opt/mogdb506/app/bin/om_monitor -L /opt/mogdb506/log/cm/om_monitor
omm506      8945    8941  5 19:28 ?        00:01:18 /opt/mogdb506/app/bin/cm_agent
omm506      8988       1  0 19:28 ?        00:00:00 mogdb fenced UDF master process
omm506   1115099 1114674  0 19:51 pts/1    00:00:00 grep mogdb
[omm506@mogdb1 ~]$ gsql -r 
failed to connect /opt/mogdb506/tmp:28000.

cm_ctl query -Cvi查看集群状态,可以看出备库已经是Primary Normal,已经升主。

[  CMServer State   ]

node      node_ip                         instance state
----------------------------------------------------------
cm_ctl: [DoConnCmserver] ip 10.130.4.5 is not reachable.
cm_ctl: [DoConnCmserver] ip 10.130.0.5 is not reachable.
1  mogdb1 10.130.4.5,10.130.0.5           1        Down
2  mogdb2 10.130.4.7,10.130.0.7             2        Primary

[   Cluster State   ]

cluster_state   : Degraded
redistributing  : No
balanced        : No
current_az      : AZ_ALL

[  Datanode State   ]

node      node_ip                         instance state            | node      node_ip                         instance state
--------------------------------------------------------------------------------------------------------------------------------------------
1  mogdb1 10.130.4.5,10.130.0.5           6001     P Down    Unknown | 2  mogdb2 10.130.4.7,10.130.0.7             6002     S Primary Normal

cm_ctl show查看vip状态,全部漂移到mogdb2的A和B网上,对业务透明无感知。

[omm506@mogdb2 ~]$ cm_ctl show
cm_ctl: [DoConnCmserver] ip 10.130.4.5 is not reachable.
cm_ctl: [DoConnCmserver] ip 10.130.0.5 is not reachable.

[  Network Connect State  ]

Network timeout:       6s
Current CMServer time: 2024-04-23 19:52:21
Network stat('Y' means connected, otherwise 'N'):
|  \  |  N  |
|  N  |  \  |


[  Node Disk HB State  ]

Node disk hb timeout:    200s
Current CMServer time: 2024-04-23 19:52:22
Node disk hb stat('Y' means connected, otherwise 'N'):
|  N  |  N  |

[  FloatIp Network State  ]

node      instance base_ip    float_ip_name float_ip  
------------------------------------------------------
2  mogdb2 6002     10.130.4.7  VIP_az996037  10.130.4.6 

总结

MogDB 5.0.6特性CM支持双网段,在某个节点在发生单网段故障后仍然能保证正常工作,提供网段级故障的高可用管理能力。Mogdb首先实现了对Oracle传统双网方案的兼容,并且为保证双网方案具有较好的业务切换体验,还实现了IT环境解耦,持续稳定支撑核心系统。

本文由 mdnice 多平台发布

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

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

相关文章

【Linux开发实用篇】备份与恢复

备份 实体机无法做快照,我们可以使用备份和恢复技术 第一种方式 把需要的文件(或者分区)用TAR打包就好,下次恢复的时候进行解压 第二种方式 使用dump 和 restore 指令: 首先安装这两个指令 yum -y install dump, …

参数传递 的案例

文章目录 12 1 输出一个int类型的数组,要求为: [11,22,33,44,55] package com.zhang.parameter; //有关方法的案例 public class MethodTest3 {public static void main(String[] args) {//输出一个int类型的数组,要求为: [11,…

Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project

Android studio顶部app红叉- Moudle ‘XX.app’ dosen’t exist in project 1、现象: 运行老项目或者有时候替换项目中的部分代码,明明没有错但是Android studio就编译报错了。 1.1 Android studio顶部app红叉。 1.2 点击Build没有clear菜单&#xff0…

行为审计软件合集|3款好用的上网行为管控软件推荐

网络技术的快速发展使得企业对于员工上网行为的管控需求也日益增强。 上网行为管控软件不仅可以有效监控员工的网络活动,提高工作效率,还可以防止敏感信息的泄露,保障企业的网络安全。 本文将为您推荐三款好用的上网行为管控软件&#xff1a…

『视觉感官盛宴』3D线上商场全方位展示商品与互动购买体验

随着技术的进步和消费者需求的多样化,3D线上商场作为一种新兴的电子商务平台,正逐渐改变传统的在线购物模式。 一、商品展示革命 在3D线上商场中,商品展示不再局限于静态图片和文字描述。借助先进的3D建模技术,商家能够创建商…

1557.可以到达所有点的最少点数目

题目 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以…

电磁仿真--基本操作-CST-(2)

目录 1. 回顾基操 2. 操作流程 2.1 创建工程 2.2 修改单位 2.3 创建 Shape 2.4 使用拉伸 Extrude 2.5 修改形状 Modify Locally 2.6 导入材料 2.7 材料解释 2.8 材料分配 2.9 查看已分配的材料 2.10 设置频率、背景和边界 2.11 选择 Edge,设置端口 2.…

【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序(万字博文)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 目录 …

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略,传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下,海特伟业紧跟时代步伐,凭借其深厚…

linux常用非基础命令/操作

本篇用于总结蒟蒻博主在使用linux系统的过程中会经常用到但老实记不住的一些非基础命令和操作,方便遗忘时查阅 一,关闭指定端口的进程以释放端口 每个端口都有一个守护进程,kill掉这个守护进程就可以释放端口 ①使用命令【netstat -anp | gre…

[大模型]Qwen-Audio-chat FastApi 部署调用

Qwen-Audio-chat FastApi 部署调用 Qwen-Audio 介绍 Qwen-Audio 是阿里云研发的大规模音频语言模型(Large Audio Language Model)。Qwen-Audio 可以以多种音频 (包括说话人语音、自然音、音乐、歌声)和文本作为输入,并以文本作为…

GoJudge环境部署本地调用云服务器部署go-judge判题机详细部署教程go-judge多语言支持

前言 本文基于go-judge项目搭建,由于go-judge官网项目GitHub - criyle/go-judge: Sandbox Server in REST / gRPC API. Based on Linux container technologies.,资料太少,而且只给了C语言的调用样例,无法知道其他常见语言比如&am…

【Unity学习笔记】第十三 · tag与layer(运行时创建tag和layer)

参考: Unity手册 标签Unity手册 LayersIs it possible to create a tag programmatically?脚本自动添加tag和Layer 注:本文使用Unity版本是2022.3.23f1 转载引用请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/de…

【JavaScriptthreejs】对于二维平面内的路径进行扩张或缩放

目标 对指定路径 [{x,y,z},{x,y,z},{x,y,z},{x,y,z}.........]沿着边缘向内或向外扩张,达到放大或缩小一定范围的效果,这里我们获取每个点(这里是Vector3(x,y,z)),获取前后两个点和当前点的坐标,计算前后两点的向量&a…

Ubuntu 安装 Harbor

一、安装 docker 原文参考传送门 1st 卸载系统自带的 docker 应用 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 2nd 设置Docker 的apt源 # Add Dockers official GPG key: sudo…

漫谈-AI 时代的信息模型

模型化- 数字化转型的重要基石 在各行各业推行数字化转型过程中,构建信息化模型十分重要,它是数字化转型的基石。事实上,数字化转型的核心是“万物皆模型”,在工业领域,以德国为主导的工业4.0 发展进程中,…

条件编译 #和##运算符

目录 1. #运算符2. ##运算符3. 条件编译4. 题目分享总结 正文开始 前言: 本章为C语言语法完结撒花, 下文将进行C语言中#和##操作符以及条件编译的讲解, 来进一步让我们了解C语言. 作者主页: 酷酷学!!! 1. #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带…

海外仓系统能做什么?提升仓库盈利能力,不再低效经营!

海外仓管理系统和机械设备不同,这句话看似有点矛盾,但是还真就是这么回事儿。 当机械设备出现故障的时候,你会明确的知道他无法运转,已经影响到你的生产效率了。但是海外仓系统不会,它看似还可以运转,但是…

洛基计划project loki加速器推荐 免费低延迟联机加速器分享

洛基计划project loki加速器推荐 免费低延迟联机加速器分享 《洛基计划》是一款团队PVP游戏,融合有动作、英雄设计、大逃杀等元素,由前拳头游戏、Bungie和暴雪娱乐员工创立的新工作室Theorycraft Games共同发布。《洛基计划》汇集了一些大型团队PVP游戏…

基于51单片机的数码管显示的proteus仿真

文章目录 一、数码管二、单个数码管显示0~F仿真图仿真程序 三、数码管静态显示74HC138译码器74HC245缓冲器仿真图仿真程序 四、数码管动态显示仿真图仿真程序 三、总结 一、数码管 数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。它的基…