【全网首发】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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Meta 向第三方开放 MR 操作系统;黄仁勋:人形机器人成本可能比人们预期要低得多丨 RTE 开发者日报 Vol.190

开发者朋友们大家好: 这里是「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有…

大厂产品专家是做晋升述职的?

在大厂里,晋升都是需要述职的。与年终述职不同,晋升述职要求严格很多。这种情况下,如何完美表达自己才是适合晋升的人选?这篇文章,值得即将晋升和准备晋升的各位看看。 之前学姐写了一篇文章,讲怎么做年度述职,反响还不错~有兴趣的童鞋可以戳这里复习。今天学姐来讲一个…

25计算机考研院校数据分析 | 上海交通大学

上海交通大学电子信息与电气工程学院成立于2001年12月,其前身可湖源至百年前的电机专科,具有中国电气工程师“摇篮”之美称。50年代根据学科发展需要分为电工与计算机科学系(三系)和电子工程系(四系)。1985年,三系和四系合并,成立…

【LeetCode:216. 组合总和 III + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

类之间的关系

文章目录 一、横向关系复合(组合)委托(聚合)依赖关联 二、纵向关系(继承)继承下构造析构执行的顺序继承方法继承中的作用域多重继承 总结 一、横向关系 复合(组合) 包含与被包含黑色…

跟着野火从零开始手搓FreeRTOS(6)多优先级的配置

在 FreeRTOS 中,数字优先级越小,逻辑优先级也越小。 之前提过,就绪列表其实就是一个数组, 里面存的是就绪任务的TCB(准确来说是 TCB 里面的 xStateListItem 节点),数组的下标对应任务的优先级&a…

mmclassification 训练自己的数据集

文章目录 从源码安装数据集准备config文件训练附录 从源码安装 git clone https://github.com/open-mmlab/mmpretrain.git cd mmpretrain pip install -U openmim && mim install -e .下面是我使用的版本 /media/xp/data/pydoc/mmlab/mmpretrain$ pip show mmcv mmpr…

npm install 卡在still idealTree buildDeps不动

前言 再使用npm install 安装包依赖时 发现一直卡住 停留在 观察node_cache下的_logs文件 发现一直在拉取包 37 silly idealTree buildDeps 38 silly fetch manifest riophae/vue-treeselect0.4.0尝试解决 尝试设置了taobao镜像源 依然如此 获取已经设置的镜像源 确实是ta…

6.3 实现Session 共享

1. Session 共享配置 2. Nginx 负载均衡 3. 测试请求分发 经过如上步骤 ,就完成了利用 Redis 实现 Session 共享的功能. 基本上不需要额外配置,开箱即用

【SpringBoot】-MyBatis详解+单表操作

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【Framework】 主要内容:什么是MyBatis框架?MyBatis框架有什么用?MyBatis实现查询步骤详解。MyBatis实现单表的增删查改。MyBatis模糊查询&…

LeetCode刷题实战4:寻找两个正序数组的中位数

题目内容 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.0…

微博评论爬取

import requests import csv# 打开CSV文件以写入数据 f open(data.csv, modea, encodingutf-8-sig, newline) csv_writer csv.DictWriter(f, fieldnames[昵称, 性别, 归属地, 内容]) csv_writer.writeheader()# 定义一个函数用于获取评论内容 def GetContent(max_id):# 设置请…

SRS服务接入华为云CDN

CDN简介: CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网…

为何3C电子精密件测量首选闪测仪?

在工业生产中,精密件的测量是至关重要的环节,它直接关系到产品的质量和性能。大部分3c电子工厂以及精密五金加工厂中,产品质检环节中大部分测量仪器都采用闪测仪。为什么呢? 测量精度与稳定性 闪测仪能够提供更高的测量精度和稳定…

window11上修改字符编码方式

windos11字符编码方式为gbk。我们有时候要用cmd命令行检测中文的代码里面含有中文的时候就会出现乱码,将gbk更改为utf-8后便可以解决这一情况。 步骤: 1、windows上【设置】-【时间和语言】【语言与区域】-【管理语言设置】 打开区域界面,点…

Linux 终端中的目录切换

目录 ⛳️推荐 前言 理解 Linux 中的路径 利用 cd 命令变更目录 故障解决 文件或目录不存在 非目录错误 特殊目录符号 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…

PCB走线宽度、PCB走线宽度计算、PCB走线宽度和电流

目录 一、什么是PCB走线宽度? 二、什么是走线? 三、哪些因素对走线宽度至关重要? 1、信号走线 2、电源走线 3、直线宽度和信号反射 四、怎么计算PCB走线宽度? 1、使用PCB走线宽度计算器 2、使用方程式 五、怎么计算PCB 走…

Java 【数据结构】 二叉树(Binary_Tree)【神装】

登神长阶 第五神装 二叉树 Binary-Tree 目录 🎷一.树形结构 🪗1.概念 🎸2.具体应用 🎹 二.二叉树(Binary Tree) 🎺1.概念 🎻2.表现形式 🪕3.特殊类型 &#x1f941…

【C语言__基础概念__复习篇8】

目录 前言 一、C语言是什么 二、C语言的发展历史 三、编译器的选择 3.1 编译和链接 3.2 编译器的对比 3.3 VS如何使用 四、main函数 五、关键字 六、字符和ASCII编码 七、字符串和\0 八、转义字符 九、注释 十、数据类型 10.1 数据类型的介绍 10.2 数据类型大小的计…

互联网大佬座位排排坐:马化腾第一,雷军第二

关注卢松松,会经常给你分享一些我的经验和观点。 这是马化腾、雷军、张朝阳、周鸿祎的座位,我觉得是按照互联网地位排序的。 马化腾坐头把交椅,这个没毛病,有他在的地方,其他几位都得喊声“大哥”。雷军坐第二把交椅…