原生RedHat OpenStack搭建

news2024/11/24 4:53:39

文章目录

  • OpenStack的搭建方式
  • 实验软件及镜像
  • 实验环境
  • 配置NTP节点
    • 初始化配置
    • 配置本地yum仓库
    • 上传镜像文件至NTP节点
    • 搭建基于http的网络yum源
    • 搭建NTP服务
  • 配置Controller控制节点和Compute计算节点
    • 初始化配置
  • 安装RedHat OpenStack
    • 安装部署OpenStack
  • 配置OVS桥接


OpenStack的搭建方式

  • Allinone
    • 在一台服务节点上安装阉割版的OpenStack,再使用此节点,在其他三个节点上安装不同的组件
  • TrpileO(OpenStack On OpenStack)
  • PackStack(RedHat)
  • Ansbile(自动化运维工具)
  • 原生OpenStack安装时,是手动安装各个组件

实验软件及镜像

  • 镜像【下载】,提取码Bad5
    软件作用
    VMware Workstation Pro用于部署实验主机节点
    Xshell/Putty/Mobaxterm用于远程连接节点主机
    WinSCP用于上传ISO镜像文件至节点主机
    rhel-server-7.1-x86_64-dvd.iso用于安装节点主机的镜像文件
    RHEL7OSP-6.0-2015-02-23.2-x86_64.iso用于安装搭建OpenStack
    small.img用于发放云主机

实验环境

  • 实验使用的为RHEL7.1版本的Linux,网络模式为仅主机模式,桥接到物理主机的VMnet1网卡,VMnnet1网卡的IP作为节点主机的DNS服务器
    主机名IP地址功能配置
    NTP192.168.43.128提供 NTP服务以及网络YUM源2CPU/1G_RAM/200G_Disk
    Controller192.168.43.129作为管理节点和计算节点2CPU/4G_RAM/200G_Disk
    Compute192.168.43.130作为计算节点2CPU/4G_RAM/200G_Disk
    物理主机VMnet1192.168.43.1

配置NTP节点

初始化配置

  • 修改主机名为NTP
  • 关闭SeLinux
  • 配置主机的IP地址、子网掩码、网关以及DNS
  • 禁止NetworkManager开机自启
  • 关闭防火墙并禁止防火墙开机自启,检查防火墙的状态
  • 重启节点主机
[root@localhost ~]# vim /etc/hostname
  NTP
[root@localhost ~]# vim /etc/selinux/config
  SELINUX=disabled
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
  TYPE=Ethernet
  BOOTPROTO=static
  NAME=eno16777736
  DEVICE=eno16777736
  ONBOOT=yes
  IPADDR=192.168.43.128
  NETMASK=255.255.255.0
  GATEWAY=192.168.43.1
  DNS1=192.168.43.1
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# systemctl stop firewall.service
[root@localhost ~]# systemctl disable firewall.service
[root@localhost ~]# systemctl status firewall.service
firewall.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
[root@localhost ~]# reboot

配置本地yum仓库

  • 配置本地yum源文件
  • 挂载RHEL7.1的镜像文件到NTP节点主机的/mnt下
[root@NTP ~]# cd /etc/yum.repos.d/
[root@NTP yum.repos.d]# ls
[root@NTP yum.repos.d]# vim RHEL.repo
  [Base]
  name=RHEL
  baseurl=file:///mnt
  gpgcheck=0
  enable=1
[root@NTP yum.repos.d]# mount /dev/cdrom /mnt/    #将ISO文件挂载到/mnt下
mount: /dev/sr0 is write-protected, mounting read-only
[root@NTP yum.repos.d]# yum clean all     #清除yum缓存
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Cleaning repos: InstallMedia Base
Cleaning up everything
[root@NTP yum.repos.d]# yum repolist    #刷新yum仓库
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base                                                     | 4.1 kB     00:00
(1/2): Base/group_gz                                       | 134 kB   00:00
(2/2): Base/primary_db                                     | 3.4 MB   00:00
repo id                               repo name                           status
Base                                  RHEL                                4,371
repolist: 4,371

上传镜像文件至NTP节点

  • 创建/iso目录,用于存放镜像文件
  • 使用WinSCP或Mobaxterm将镜像文件上传到NTP节点
[root@NTP ~]# mkdir /iso
[root@NTP ~]# cd /iso/
[root@NTP iso]# ls
RHEL7OSP-6.0-2015-02-23.2-x86_64.iso  rhel-server-7.1-x86_64-dvd.iso

搭建基于http的网络yum源

  • 安装http服务,启动http服务,并设置开机自启动
  • 查看http服务的状态
  • 创建发布目录,并配置镜像文件开机自动挂载到发布目录
  • 重新配置基于http的网络yum源仓库,并测试网络yum源的可用性(如果在yum仓库的目录中还有系统自动生成的其他.repo的文件,需要全部删掉,避免影响之后的实验)
[root@NTP ~]# yum  -y install httpd
[root@NTP ~]# systemctl start httpd
[root@NTP ~]# systemctl enable httpd
[root@NTP ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since Thu 2023-01-12 15:55:35 CST; 19s ago
 Main PID: 10713 (httpd)
  ......
[root@NTP ~]# mkdir /var/www/html/{ISO,OpenStack}
[root@NTP ~]# cd /var/www/html/
[root@NTP html]# ls
ISO  OpenStack
[root@NTP html]# vim /etc/fstab    #配置开机自动挂载
[root@NTP html]# tail -2 /etc/fstab
/iso/rhel-server-7.1-x86_64-dvd.iso /var/www/html/ISO iso9660 defaults,loop,ro 0 0
/iso/RHEL7OSP-6.0-2015-02-23.2-x86_64.iso /var/www/html/OpenStack iso9660 defaults,loop,ro 0 0
[root@NTP html]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   50G  7.1G   43G  15% /
devtmpfs               481M     0  481M   0% /dev
tmpfs                  490M  140K  490M   1% /dev/shm
tmpfs                  490M  7.1M  483M   2% /run
tmpfs                  490M     0  490M   0% /sys/fs/cgroup
/dev/sda1              497M  124M  373M  25% /boot
/dev/mapper/rhel-home  148G   33M  148G   1% /home
/dev/sr0               3.7G  3.7G     0 100% /mnt
[root@NTP html]# mount -a  #重新读取fstab文件,进行挂载
[root@NTP html]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   50G  7.1G   43G  15% /
devtmpfs               481M     0  481M   0% /dev
tmpfs                  490M  140K  490M   1% /dev/shm
tmpfs                  490M  7.1M  483M   2% /run
tmpfs                  490M     0  490M   0% /sys/fs/cgroup
/dev/sda1              497M  124M  373M  25% /boot
/dev/mapper/rhel-home  148G   33M  148G   1% /home
/dev/sr0               3.7G  3.7G     0 100% /mnt
/dev/loop0             3.7G  3.7G     0 100% /var/www/html/ISO
/dev/loop1             515M  515M     0 100% /var/www/html/OpenStack
[root@NTP html]# cd /etc/yum.repos.d/
[root@NTP yum.repos.d]# vim RHEL.repo
  [Base]
  name=RHEL
  baseurl=http://192.168.43.128/ISO
  gpgcheck=0
  enable=1
[root@NTP yum.repos.d]# vim OpenStack.repo
  [RH7-RHOS-6.0-Installer]
  name=RH7-RHOS-6.0-Installer
  baseurl=http://192.168.43.128/OpenStack/RH7-RHOS-6.0-Installer
  gpgcheck=0
  enabled=1

  [RH7-RHOS-6.0]
  name=RH7-RHOS-6.0
  baseurl=http://192.168.43.128/OpenStack/RH7-RHOS-6.0
  gpgcheck=0
  enabled=1

  [RHEL-7-RHSCL-1.2]
  name=RHEL-7-RHSCL-1.2
  baseurl=http://192.168.43.128/OpenStack/RHEL-7-RHSCL-1.2
  gpgcheck=0
  enabled=1

  [RHEL7-Errata]
  name=RHEL7-Errata
  baseurl=http://192.168.43.128/OpenStack/RHEL7-Errata
  gpgcheck=0
  enabeld=1
[root@NTP yum.repos.d]# yum clean all
[root@NTP yum.repos.d]# yum repolist all
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base                                                     | 4.1 kB     00:00
RH7-RHOS-6.0                                             | 1.3 kB     00:00
RH7-RHOS-6.0-Installer                                   | 1.2 kB     00:00
RHEL-7-RHSCL-1.2                                         | 3.3 kB     00:00
RHEL7-Errata                                             | 2.9 kB     00:00
(1/6): Base/group_gz                                       | 134 kB   00:00
(2/6): Base/primary_db                                     | 3.4 MB   00:00
(3/6): RH7-RHOS-6.0/primary                                | 117 kB   00:00
(4/6): RHEL-7-RHSCL-1.2/primary_db                         | 776 kB   00:00
(5/6): RHEL7-Errata/primary_db                             |  10 kB   00:00
(6/6): RH7-RHOS-6.0-Installer/primary                      |  47 kB   00:00
RH7-RHOS-6.0                                                            393/393
RH7-RHOS-6.0-Installer                                                  194/194
repo id                          repo name                        status
Base                             RHEL                             enabled: 4,371
RH7-RHOS-6.0                     RH7-RHOS-6.0                     enabled:   393
RH7-RHOS-6.0-Installer           RH7-RHOS-6.0-Installer           enabled:   194
RHEL-7-RHSCL-1.2                 RHEL-7-RHSCL-1.2                 enabled: 1,766
RHEL7-Errata                     RHEL7-Errata                     enabled:    11
repolist: 6,735

搭建NTP服务

  • 安装NTP服务
  • 配置NTP服务,将NTP节点主机作为服务端。控制节点和计算节点会向NTP节点进行时间同步
  • 启动NTP服务,并设置开机自启动,查看NTP服务的状态
  • 关闭chrony服务,并禁止开机自启。此服务也可以作为时间同步服务器,会和NTP冲突
[root@NTP yum.repos.d]# cd
[root@NTP ~]# rpm -qa | grep ntp    #查看是否安装了NTP服务
ntpdate-4.2.6p5-19.el7_0.x86_64
fontpackages-filesystem-1.44-8.el7.noarch
[root@NTP ~]# yum -y install ntp
    ....
Installed:
  ntp.x86_64 0:4.2.6p5-19.el7_0

Complete!
[root@NTP ~]# vim /etc/ntp.conf    #将网络时间同步服务器注释,配置自身作为时间同步服务器
  ......
   21 #server 0.rhel.pool.ntp.org iburst
   22 #server 1.rhel.pool.ntp.org iburst
   23 #server 2.rhel.pool.ntp.org iburst
   24 #server 3.rhel.pool.ntp.org iburst
   25
   26 server 127.127.1.0    #配置时间同步服务器为自身
   27 fudge 127.127.1.0 stratum 10    #配置自身作为时间同步服务器
  ......
[root@NTP ~]# systemctl start ntpd
[root@NTP ~]# systemctl enable ntpd    #配置NTP服务开机自启动
ln -s '/usr/lib/systemd/system/ntpd.service' '/etc/systemd/system/multi-user.target.wants/ntpd.service'
[root@NTP ~]# systemctl status ntpd
ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled)
   Active: active (running) since Thu 2023-01-12 16:24:12 CST; 18s ago
 Main PID: 21546 (ntpd)
   CGroup: /system.slice/ntpd.service
           └─21546 /usr/sbin/ntpd -u ntp:ntp -g
  ......
[root@NTP ~]# systemctl stop chrony
[root@NTP ~]# systemctl disable chronyd.service
rm '/etc/systemd/system/multi-user.target.wants/chronyd.service'
[root@NTP ~]# systemctl status chronyd.service
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled)
   Active: inactive (dead)
  ......

NTP节点配置完成

配置Controller控制节点和Compute计算节点

初始化配置

  • 修改主机名为Controller
  • 关闭SeLinux
  • 配置主机的IP地址、子网掩码、网关以及DNS(这里回归了网卡传统命名,所以是ifcfg-eth0)
  • 禁止NetworkManager开机自启
  • 关闭防火墙并禁止防火墙开机自启,检查防火墙的状态
  • 重启节点主机
[root@localhost ~]# vim /etc/hostname
  Controller
[root@localhost ~]# vim /etc/selinux/config
  SELINUX=disabled
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
  TYPE=Ethernet
  BOOTPROTO=static
  NAME=eth0
  DEVICE=eth0
  ONBOOT=yes
  IPADDR=192.168.43.129
  NETMASK=255.255.255.0
  GATEWAY=192.168.43.1
  DNS1=192.168.43.1
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# systemctl stop firewall.service
[root@localhost ~]# systemctl disable firewall.service
[root@localhost ~]# systemctl status firewall.service
firewall.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
[root@localhost ~]# reboot

重启完成后,测试与NTP节点主机的连通性

  • 在NTP节点主机,将配置好的网络yum源仓库文件传给Controller控制节点
[root@NTP ~]# cd /etc/yum.repos.d/
[root@NTP yum.repos.d]# ls
OpenStack.repo  redhat.repo  RHEL.repo
[root@NTP yum.repos.d]# rm -rf redhat.repo
[root@NTP yum.repos.d]# ls
OpenStack.repo  RHEL.repo
[root@NTP yum.repos.d]# scp ./* root@192.168.43.129:/etc/yum.repos.d/
The authenticity of host '192.168.43.129 (192.168.43.129)' can't be established.
ECDSA key fingerprint is e9:ee:b8:50:13:9b:f7:de:70:ef:44:1f:11:35:cb:54.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.43.129' (ECDSA) to the list of known hosts.
root@192.168.43.129's password:
OpenStack.repo                                100%  473     0.5KB/s   00:00
RHEL.repo                                     100%   71     0.1KB/s   00:00
  • 在控制节点测试网络yum源仓库的可用性
[root@Controller ~]# cd /etc/yum.repos.d/
[root@Controller yum.repos.d]# ls
OpenStack.repo  redhat.repo  RHEL.repo
[root@Controller yum.repos.d]# yum clean all
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Cleaning repos: Base RH7-RHOS-6.0 RH7-RHOS-6.0-Installer RHEL-7-RHSCL-1.2
              : RHEL7-Errata
Cleaning up everything
[root@Controller yum.repos.d]# yum repolist all
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base                                                     | 4.1 kB     00:00
RH7-RHOS-6.0                                             | 1.3 kB     00:00
RH7-RHOS-6.0-Installer                                   | 1.2 kB     00:00
RHEL-7-RHSCL-1.2                                         | 3.3 kB     00:00
RHEL7-Errata                                             | 2.9 kB     00:00
(1/6): Base/group_gz                                       | 134 kB   00:00
(2/6): RHEL7-Errata/primary_db                             |  10 kB   00:00
(3/6): RH7-RHOS-6.0-Installer/primary                      |  47 kB   00:00
(4/6): RH7-RHOS-6.0/primary                                | 117 kB   00:00
(5/6): Base/primary_db                                     | 3.4 MB   00:00
(6/6): RHEL-7-RHSCL-1.2/primary_db                         | 776 kB   00:00
RH7-RHOS-6.0                                                            393/393
RH7-RHOS-6.0-Installer                                                  194/194
repo id                          repo name                        status
Base                             RHEL                             enabled: 4,371
RH7-RHOS-6.0                     RH7-RHOS-6.0                     enabled:   393
RH7-RHOS-6.0-Installer           RH7-RHOS-6.0-Installer           enabled:   194
RHEL-7-RHSCL-1.2                 RHEL-7-RHSCL-1.2                 enabled: 1,766
RHEL7-Errata                     RHEL7-Errata                     enabled:    11
repolist: 6,735
  • 在Compute计算节点同样的初始化配置节点主机,并测试连通性
  • 将NTP节点主机的yum源仓库文件上传到Compute计算节点上,并测试网络yum源仓库的可用性

安装RedHat OpenStack

  • 在控制节点安装packstack工具,用于安装部署OpenStack
  • 安装完成后,检查控制节点的DNS是否配置正确。如果配置不正确,需要在网卡的配置文件中重新配置DNS
[root@Controller ~]# yum -y install openstack-packstack
   ......
Installed:
  openstack-packstack.noarch 0:2014.2-0.16.dev1401.gdd19d48.el7ost

Dependency Installed:
  PyYAML.x86_64 0:3.10-11.el7
  libyaml.x86_64 0:0.1.4-11.el7_0
  openstack-packstack-puppet.noarch 0:2014.2-0.16.dev1401.gdd19d48.el7ost
  openstack-puppet-modules.noarch 0:2014.2.8-2.el7ost
    ......
Complete!
[root@Controller ~]# cat /etc/resolv.conf
nameserver 192.168.43.1

安装部署OpenStack

  • 生成应答文件,并修改该应答文件
  • 利用应答文件,使用packstack工具安装OpenStack
[root@Controller ~]# packstack --gen-answer-file=/root/ans.txt
Packstack changed given value  to required value /root/.ssh/id_rsa.pub
[root@Controller ~]# cd /root/
[root@Controller ~]# ls
anaconda-ks.cfg  Desktop    Downloads             Music     Public     Videos
ans.txt          Documents  initial-setup-ks.cfg  Pictures  Templates
[root@Controller ~]# vim ans.txt
  ......
  67 CONFIG_NTP_SERVERS=192.168.43.128  #配置NTP服务器节点
  ......
  85 CONFIG_CONTROLLER_HOST=192.168.43.129  #配置控制节点
  ......
  89 CONFIG_COMPUTE_HOSTS=192.168.43.129,192.168.43.130  #配置多计算节点,控制节点复用
  ......
  93 CONFIG_NETWORK_HOSTS=192.168.43.129  #配置网络节点,控制节点暂代
  ......
  246 CONFIG_KEYSTONE_ADMIN_PW=badboy  #配置Web界面管理员登录密码 
  ......
  560 CONFIG_HORIZON_SSL=y   #配置加密通信的Web界面
  ......
  629 CONFIG_PROVISION_DEMO=n  #配置不创建演示环境
  ......
[root@Controller ~]# packstack --answer-file=/root/ans.txt
Welcome to the Packstack setup utility

The installation log file is available at: /var/tmp/packstack/20230112-173134-eqBcat/openstack-setup.log

Installing:
Clean Up                                             [ DONE ]
root@192.168.43.129's password:
root@192.168.43.130's password:
Setting up ssh keys                                  [ DONE ]
Discovering hosts' details                           [ DONE ]
  ......
Applying 192.168.43.130_postscript.pp
192.168.43.130_postscript.pp:                        [ DONE ]
192.168.43.129_postscript.pp:                        [ DONE ]
Applying Puppet manifests                            [ DONE ]
Finalizing                                           [ DONE ]

 **** Installation completed successfully ******

Additional information:
  ......

登录OpenStack首页测试:https://192.168.43.129/dashboard,登录成功后无需做配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置OVS桥接

  • 修改控制节点的网卡配置文件
  • 先将网卡配置文件做备份 , 防止出现故障时无法恢复
  • 创建OVS桥接,修改网卡配置文件
  • 修改网卡桥接,重启网络服务
[root@Controller ~]# cd /etc/sysconfig/network-scripts/
[root@Controller network-scripts]# cp ifcfg-eth0 ifcfg-eth0.bak
[root@Controller network-scripts]# cp ifcfg-eth0 ifcfg-br-ex
[root@Controller network-scripts]# vim ifcfg-br-ex
  TYPE=OVSBridge
  NAME=br-ex
  DEVICE=br-ex
  ONBOOT=yes
  DEVICETYPE=ovs
  OVS_BRIDGE=br-ex
  IPADDR=192.168.43.129
  NETMASK=255.255.255.0
  GATEWAY=192.168.43.1
  DNS1=192.168.43.1
[root@Controller network-scripts]# vim ifcfg-eth0
  TYPE=OVSPort
  NAME=eth0
  DEVICE=eth0
  ONBOOT=yes
  DEVICETYPE=ovs
  OVS_BRIDGE=br-ex
[root@Controller network-scripts]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@Controller network-scripts]# ifconfig
br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.129  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::742d:32ff:fe73:e74f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:52:94:1d  txqueuelen 0  (Ethernet)
        RX packets 93  bytes 7953 (7.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 137  bytes 17053 (16.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-int: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::14b6:b1ff:fe67:294e  prefixlen 64  scopeid 0x20<link>
        ether 16:b6:b1:67:29:4e  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe52:941d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:52:94:1d  txqueuelen 1000  (Ethernet)
        RX packets 212126  bytes 219696484 (209.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 106409  bytes 18842452 (17.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 496279  bytes 74615394 (71.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 496279  bytes 74615394 (71.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

以上内容均属原创,如有不详或错误,敬请指出。

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

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

相关文章

大赛启幕:2023数字中国创新大赛启动发布会在福州召开

2023年1月10日&#xff0c;由数字中国建设峰会组委会主办&#xff0c;福建省数字办、福建省工信厅、福建省通信管理局、福州市政府、泉州市政府、三明市政府、龙岩市政府等共同承办的2023数字中国创新大赛在福建省福州市盛大启幕。 十二届全国政协副主席王钦敏发来书面致辞。中…

Windows 10随机性死机怎么办?

在诸多的电脑问题中&#xff0c;死机算是格外恼人。尤其是当你正在编辑文档&#xff0c;正在做图&#xff0c;正在玩游戏&#xff0c;电脑突然死机&#xff0c;万一再加上没保存…… 如果你在使用Win10系统的过程中遇到随机性死机的问题&#xff0c;赶紧看看这篇文章。 小编整…

LeetCode 113. 路径总和 II

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 113. 路径总和 II&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode …

简单通讯录的实现

这次我们来实现一个简单的通讯录 目录 1.基本框架及的实现 2.相关结构体的实现 3.通讯录的初始化 4.新建联系人 5.显示所有联系人信息 6.删除联系人 7.查找指定联系人 8.修改联系人信息 9.对联系人进行排序 10.完整代码 既然是通讯录&#xff0c;我们要实现以下内容 …

内存泄漏调优案列

案列背景 最近在做公司项目核心接口压测和稳定性压测时&#xff0c;各接口的成功率不足99.99%&#xff0c;通过分割压测之后发现&#xff0c;在压测A服务时&#xff0c;内存上升明显&#xff0c;且伴有频繁的fgc发生 jvm老年代内存使用率已经达到了100%且应用的fgc有5000次&am…

离散数学与组合数学-02二元关系上

文章目录离散数学与组合数学-02二元关系上2.1 序偶和笛卡尔积2.1.1 有序组的定义2.1.2 笛卡儿积笛卡儿积的性质2.2 关系的定义2.2.1 二元关系定义与案例2.2.2 二元关系的数学符号定义案例枚举二元关系2.2.3 定义域和值域2.2.4 二元关系概念的推广2.3 关系的表示2.3.1 集合表示法…

RS-485/RS-422收发器芯片DP3085 兼容替代MAX3085EESA

什么是RS-485 典型的串行通讯标准是RS232和RS485&#xff0c;它们定义了电压,阻抗等&#xff0c;但不对软件协议给予定义。RS-485总线标准规定了总线接口的电气特性标准即对于2个逻辑状态的定义&#xff1a;正电平在2V&#xff5e;6V之间&#xff0c;表示一个逻辑状态&#xf…

【基于动态内存+文件操作】通讯录管理系统

前言 每一个项目文件的功能说明 打印基本菜单1.创建一个适合存放联系人信息的结构体和通讯录结构体2.初始化通讯录&#xff08;加载上次的联系人&#xff0c;检查容量是否充足&#xff09; 枚举常量内部内容 (1)增加联系人信息 (2)删除某个联系人信息 (3)查找联系人信息 …

CY5.5-Dextran Cy5.5菁染料标记葡聚糖

产品名称&#xff1a;荧光Cy5.5菁染料标记葡聚糖 英文名称&#xff1a;CY5.5-Dextran 外观状态&#xff1a;紫色粉末 质量&#xff1a;90% 荧光波长&#xff1a;684nm-710nm 溶解性Dextran葡聚糖&#xff08;右旋糖酐Dextran&#xff09;,是一类具支链葡萄糖高聚物&#xff0c;…

系分 - 案例分析 - 需求分析(FAST分析)

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录案例分析 - 需求分析&#xff08;FAST分析&#xff09;FAST1 范围定义2 问题分析鱼骨图帕累托图制定系统改进目标3 需求分析定义需求PIECES方法4 逻辑设计5 决策分析6 物理设计和集成/构造和测试/安装和发…

考虑写出一个不抛异常的swap 函数

目录 一.标准库中的swap函数 二.针对于非模板类&#xff0c;设计全特化的std::swap() 三.针对模板类 四.合理使用using 五.swap成员函数不能抛出异常 六.swap函数总结 一.标准库中的swap函数 在C11中有move函数&#xff0c;它可以是一个左值变为右值&#xff0c;在许多场…

mybatis进阶

Mybatis的各种查询功能 MyBatis的各种查询功能&#xff1a; * 1、若查询出的数据只有一条 * a>可以通过实体类对象接收 * b>可以通过list集合接收 * c>可以通过map集合接收 * 结果&#xff1a;{password123456, sex男, id3, age23, email12345qq.com, usernameadmin} …

STM32 按键模块化

文章目录前言一、按键的原理图二、按键的GPIO配置总结前言 本篇文章将继续带大家学习模块化编程&#xff0c;今天主要给大家讲解按键的模块化。 一、按键的原理图 我们可以看到按键分别接到了板子的PE3和PE4引脚。 按键的具体原理这里我就不多讲了&#xff0c;大家可以看我之…

星光starfive2开发板的gpio使用

starfive2开发板是riscv平台不错的板子。 发展非常快。在starfive1的基础上有大量的改进和提升。 板子上的GPIO引脚定义是这样定义的&#xff1a;如下图所示 右侧6&#xff0c;8&#xff0c;10是调试用的串口&#xff0c;跟树莓派是一致的。 GPIO引脚的编号跟树莓派不一样。…

Java多线程:多线程同步安全问题的 “三“ 种处理方式 ||多线程 ”死锁“ 的避免 || 单例模式”懒汉式“的线程同步安全问题

Java多线程&#xff1a;多线程同步安全问题的 “三“ 种处理方式 ||多线程 ”死锁“ 的避免 || 单例模式”懒汉式“的线程同步安全问题 每博一文案 常言道&#xff1a;“不经一事&#xff0c;不懂一人”。 一个人值不值得交往&#xff0c;在关键时候才能看得清。看过这样的一个…

ESP32设备驱动-HMC5883L磁场传感器驱动

HMC5883L磁场传感器驱动 1、HMC5883L介绍 霍尼韦尔 HMC5883L 是一款表面贴装、多芯片模块,专为低场磁场传感而设计,具有数字接口,适用于低成本罗盘和磁力计等应用。 HMC5883L 包括我们先进的高分辨率 HMC118X 系列磁阻传感器和一个 ASIC,该 ASIC 包含放大、自动消磁带驱动…

二叉平衡树之AVL树【手动实现代码】

目录 1、AVL树的概念 2、AVL树定义节点 3、AVL树的插入 4、AVL树的旋转 4.1、新节点插入较高左子树的左侧——右单旋 4.2、新节点插入较高右子树的右侧——左单旋 4.3、新节点插入较高左子树的右侧——左右双旋 4.4、新节点插入较高右子树的左侧——右左双旋 5、AVL树…

【LeetCode】1807. 替换字符串中的括号内容

1807. 替换字符串中的括号内容 题目描述 给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你…

2023 年 The Sandbox 生态系统将迎来什么?

2022 年对于 The Sandbox 来说是多么美好的一年&#xff01;不仅是对我们的团队来说&#xff0c;对所有与我们建立业务的合作伙伴、才华横溢的创作者、工作室和代理机构来说也是这样。感谢大家让今年最喜欢的时刻成为现实&#xff0c;并成为这个社区的一部分。我们正在共同构建…

25w粉拿下1600w播放,仅用一周时间出圈B站!

2022年&#xff0c;B站举办了第四次跨年晚会《最美的夜》&#xff0c;艾薇儿登台唱起《Complicated》的瞬间&#xff0c;B站跨晚的直播间人气峰值到达3亿。在过去的一年里&#xff0c;平台持续变化带来亮眼成绩&#xff0c;月活用户破3亿、直播开通购物专区、竖屏模式增长播放等…