Linux 高可用群集HA LVS+Keepalived高可用 NGINX高可用

news2024/9/27 17:34:31

Keepalived及其工作原理 

Keepalived 是一个基于VRRP协议针对LVS负载均衡软件设计的,通过监控集群中各节点的状态以实现LVS服务高可用的软件,可以解决静态路由出现的单点故障问题。

Keepalived除了能够管理LVS软件,还可以对NGINX haproxy MySQL等软件提供高可用解决方案。

VRRP协议:组播地址224.0.0.18 协议号112 主服务器承载VRRP地址接收用户请求并发送VRRP报文(VRRP地址作为所有客户机默认网关),备监听主服务器 若超时未收到VRRP报文,随时顶替成为主服务器,并生成并承载预先定义的主服务器的VRRP地址

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived体系主要模块及其作用

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
        ●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
        ●vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
        ●check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

             健康检测方法(探针)

                        1.发送心跳消息(ping、pong)

                        2.TCP端口检测 向主机IP:PORT发起三次握手连接

                        3.HTTP URL检测 向主机 http://IP:PORT/... URL路径发送http GET方法,主机返回2XX 3XX为正常,4XX 5XX为异常

-------------------------LVS+Keepalived 高可用群集  部署-------------------------

主DR 服务器:192.168.80.101
备DR 服务器:192.168.80.102
Web 服务器1:192.168.80.103
Web 服务器2:192.168.80.104
vip:192.168.80.66
客户端:192.168.80.200

1.配置负载调度器(主、备相同)

关闭防火墙 

systemctl stop firewalld.service
setenforce 0

 安装ipvsadm,keepalived

yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs

(1)配置keeplived(主、备DR 服务器上都要设置)

备份配置 

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

更改keepalive配置文件

此处设置的为抢占式,主服务器从故障恢复后会重新抢占回master位置。

若要设置非抢占式,两服务器需要均设为BACKUP并且nopreempt。此时谁先启动谁当master,若master故障后成为backup,即使故障恢复也仍然为backup,不抢占master。

vim keepalived.conf
......
global_defs {                         #定义全局参数
--10行--修改,邮件服务指向本地
    smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为✨LVS_01,备为✨LVS_02
    router_id LVS_01
--14行--✨注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    #vrrp_strict
}

vrrp_instance VI_1 {                  #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为✨MASTER,备为✨BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的✨ID号,每个热备组保持一致    
    virtual_router_id 10
    #nopreempt        #如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置✨主为100,✨备为90
    priority 100
    advert_int 1                      #通告间隔秒数(心跳频率)
    authentication {                  #定义认证信息,每个热备组保持一致
        auth_type PASS                #认证类型
--27行--修改,指定验证密码,✨主备服务器保持一致
        auth_pass abc123
    }
    virtual_ipaddress {               #指定群集vip地址
        192.168.80.66
    }
}




--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.80.66 80 {
    delay_loop 6                      #健康检查的间隔时间(秒)
    lb_algo rr                        #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0             #连接保持时间(秒) 这里需要显示效果所以0,生产环境需要开启
    protocol TCP                      #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.80.103 80 {
        weight 1                      #节点的权重
--45行--删除,添加以下健康检查方式        
        TCP_CHECK                     #这里使用TCP CHECK(ping tcp端口 url 验证方式三选一)
            connect_port 80           #添加检查的目标端口
            connect_timeout 3         #添加连接超时(秒)
            nb_get_retry 3            #添加重试次数
            delay_before_retry 3      #添加重试间隔
        }
    }

    real_server 192.168.80.104 80 {   #添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {                   
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
##删除后面多余的配置##
}

 开启服务

systemctl start keepalived
systemctl enable keepalived
ip addr
#查看虚拟网卡vip

(2)启动 ipvsadm 服务

--192.168.80.101---

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

--192.168.80.102---

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln

(3)调整 proc 响应参数,关闭Linux 内核的重定向参数响应,避免后续数据包不经过负载均衡器直接发往节点服务器

vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

2.配置节点服务器

关闭防火墙

systemctl stop firewalld
setenforce 0

安装httpd服务 

yum -y install httpd
systemctl start httpd
systemctl enable httpd

配置回环地址承载VIP

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.80.66
NETMASK=255.255.255.255
service network restart
 或 
systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.80.66 dev lo:0

调整Linux内核ARP参数,阻止更新 VIP 的 MAC 地址,避免ARP缓存表混淆,产生冲突

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

IGNORE=1   只响应目的地址为物理网卡地址的ARP请求,不响应回环地址
ANNOUNCE=2 使用发送报文的网卡的IP地址做ARP请求源地址,而不是使用虚拟集群IP
这两条对ARP一进一出做了限制,让VIP虚拟地址无法接受和响应ARP请求以避免arp混乱

sysctl -p

 --192.168.80.103---

echo 'this is xue web!' > /var/www/html/index.html

--192.168.80.104---

echo 'this is benet web!' > /var/www/html/index.html

3.测试验证 

在客户端访问 http://192.168.80.66/ 

ip addr
查看IP #ipvsadm是根据ip生成的 ifconfig查看不了

ipvsadm -ln
查看自动生成的规则 #keepalive是为ipvsadm设计的程序 只要设置keepalive自动配置ipvsadm
curl 192.168.80.66


再在主服务器关闭 keepalived 服务后再测试

systemctl stop keepalived

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?(面试题)

Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。


keepalived的抢占与非抢占模式(面试题)

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。

非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
非抢占式两节点state必须都设置为bakcup,且必须配置nopreempt
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。




解决VRRP的脑裂现象(面试问的多 要知道故障现象^原因 解决方案 预防策略)

故障原因^现象

当主从服务器间的通信链路产生故障,从服务器收不到主服务器的VRRP报文,则认为主服务器已经宕机,自己也成为主服务器。但此时主服务器并未宕机(只是通信链路终端让从服务器觉得主服务器宕机),于是网络中就产生了两个master服务器,都带有VIP地址,造成服务混乱,这就是VRRP的脑裂现象。

解决方法

既然从服务器觉得主服务器宕机,那就索性关闭主服务器keepalive服务 让主服务器变为备服务器,变为既成事实,这样也就解决了脑裂。

预防策略

方法1

主从服务器间增加一条通信链路,除非两条链路都断了,不然不会产生脑裂

方法2

编写脚本让主服务器监听与从服务器的链接是否保持,若连接断开,主服务器自己关闭keepalive服务 成为从服务器。

但这又带来一个问题,如何判断是链路断了还是主机宕机了?由于主从负载均衡服务器与节点服务器在同一个局域网,所以可以让第三方主机(节点服务器)代理检测

ssh 【节点服务器IP】 ping -c 3 【从服务器IP】

编写脚本,主服务器ping另一台负载均衡服务器,若ping不通再使用ssh命令让节点服务器代替自己ping备服务器

  • 主服务器ping不通,节点ping不通,副服务器宕机。主服务器无需关闭自己keepalive只需要发出副服务器宕机的警告。
  • 主服务器ping不通,节点能ping,主从间链路故障,主服务器需要自行关闭自己的keepalived服务,并发出警告主从服务器链路故障。

        这种紫砂脚本在主从服务器上任意一端部署一个即可,不要两个都部署,不然两边就都杀光了。

        不分主从不分抢占非抢占,重点是一方ping另外一方,再让节点服务器也ping另外一方。

方法3

使用zabbix等监控软件,创建监控项,创建触发项测试关闭keepalive服务。











-------------------------通过Keepalived+NGINX实现高可用群集-------------------------

Keepalived除了能够管理LVS软件,还可以对NGINX haproxy MySQL等软件提供高可用解决方案。

NGINX不像LVS一样是基于内核的,NGINX是应用软件。对于LVS来说判断方法很简单,内核没崩LVS就在,ping不通了,自然也就可以判断系统崩了

但是NGINX作为应用软件,有可能系统好好的,只是NGINX崩了,此时就不能通过ping这种方法判断调度器的存活状态。NGINX只能通过编写脚本实现检测NGINX进程是否正常。

对于NGINX,Keepalived只能使用其故障切换功能【图1】,至于调度器的健康检查则需要编写脚本路径写入vrrp—script 并在track—script中引用【图2】

大概原理为,在脚本中检测NGINX运行情况,若异常,则杀死keepalive服务。此后的流程就与LVS的处理一致了,当keepalive服务消失后,从服务器接收不到VRRP报文,进行主从切换。

由于只是调度器的健康检测方式略有不同,最后还是落实到keepalive停止发送vrrp报文导致主从切换,所以NGINX的Keepalived与LVS的Keepalived一样,也需要预防线路中断造成脑裂。

清除刚刚所做的操作(主从服务器都要)

恢复配置文件

mv keepalived.conf.bak keepalived.conf

查看LVS负载均衡配置,清空

ipvsadm -ln
ipvsadm -C

主服务器配置

 由于主从服务器均使用NGINX服务,NGINX服务自带轮询,所以这里就不使用keepalive配置文件中的real—server选项进行服务器节点轮询设置,将其注释或删除。

本示例将使用NGINX服务的轮询。设置nginx.conf文件,在http块上方添加一个stream块进行NGINX四层负载均衡反向代理,指向主从负载均衡服务器后的两个WEB服务器。

vim /etc/keepalived/keepalived.conf


global_defs {             #定义全局参数
    smtp_server 127.0.0.1 #邮件服务指向本地
    router_id NGINX01     #指定服务器(路由器)的名称,主备服务器名称须不同,主为✨NGINX01,备为✨NGINX02
    #vrrp_strict          #✨注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
}

#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                                 #(检测脚本执行的间隔,单位是秒)
    weight 2                                   #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.80.66            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

从服务器配置 

由于主从服务器均使用NGINX服务,NGINX服务自带轮询,所以这里就不使用keepalive配置文件中的real—server选项进行服务器节点轮询设置,将其注释或删除。

本示例将使用NGINX服务的轮询。设置nginx.conf文件,在http块上方添加一个stream块进行NGINX四层负载均衡反向代理,指向主从负载均衡服务器后的两个WEB服务器。

 

vim /etc/keepalived/keepalived.conf

global_defs {             #定义全局参数
    smtp_server 127.0.0.1 #邮件服务指向本地
    router_id NGINX02     #指定服务器(路由器)的名称,主备服务器名称须不同,主为✨NGINX01,备为✨NGINX02
    #vrrp_strict          #✨注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
}

#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                                 #(检测脚本执行的间隔)
    weight 2                                   #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state BACKUP                        # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33                     # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66                # 虚拟路由编号,主从要一直
    priority 99                         # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1                        # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port                   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.80.66                   # 定义虚拟ip(VIP),可多设,每行一个
    }
}

检测脚本 主从都要设置

要检测NGINX进程的存在,可以使用killall -0查看返回值,或是netstat/ss筛选80端口,或是ps aux查看是否有NGINX进程

vim /usr/local/src/check_nginx_pid.sh

#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header | wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      systemctl start nginx               #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi
chmod 775 check_nginx_pid.sh
或者
chmod +x check_nginx_pid.sh

测试

访问vip,主负载均衡服务器响应,主服务器中NGINX通过轮询发送给后端的两个WEB服务器

curl http://192.168.80.66:8080

查看两机IP,发现主服务器拥有vip,备服务器没有

ip addr

关闭nginx,keepalive中设置的脚本发现nginx进程消失,杀死主机的keepalive进程。从服务器超时未收到vrrp报文,变为主服务器 

systemctl stop nginx

 查看两机IP,发现vip已经转移到备服务器,备服务器成为主服务器

ip addr

若想还原故障的主服务器,需要先打开nginx,再打开keepalive。由于脚本中设置没有nginx就会杀死keepalive、

systemctl start nginx
systemctl start keepalived

 查看两机IP,主服务器回复后vip恢复,备服务器vip消失

ip addr


总结 (面试题)

keepalive基于什么协议?

VRRP协议:组播地址224.0.0.18 协议号112

keepalive怎么选举master?

Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

 keepalive怎么生成VIP?

主服务器通过IP命令生成预先设置的VIP

keepalive怎么故障切换?

主服务器承载VRRP地址接收用户请求并发送VRRP报文(VRRP地址作为所有客户机默认网关)

备监听主服务器 若超时未收到VRRP报文,顶替成为主服务器,并生成并承载预先定义的主服务器的VRRP地址

keepalive抢占模式和非抢占模式如何工作?

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。

非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。

怎么设置非抢占模式?

非抢占式两节点state必须都设置为bakcup,且必须配置nopreempt。
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

脑裂现象如何?

主备服务器都有VIP地址

产生脑裂原因?

主备服务器间通信链路断开,主服务器仍在运行,但备服务器由于通信链路原因误认为主服务器宕机

脑裂解决方法?

主备服务器任选一台,关闭keepalived服务

脑裂预防方案?

1 增加一条通信线路

2 编写脚本,主服务器ping另一台负载均衡服务器,若ping不通再使用ssh命令让节点服务器代替自己ping备服务器

  • 都无法ping通则为副服务器宕机,主服务器无需关闭自己keepalive只需要发出副服务器宕机的警告。
  • 若主负载均衡服务器不能ping通副负载均衡服务器,但是节点服务器可以ping通副服务器,则为链路故障,此时脑裂产生,主服务器需要自行关闭自己的keepalived服务,并发出警告主从服务器链路故障

        这种紫砂脚本在主从服务器上任意一端部署一个即可,不要两个都部署,不然两边就都杀光了。

        不分主从不分抢占非抢占,重点是一方ping另外一方,再让节点服务器也ping另外一方。

3 使用zabbix等监控软件,创建监控项,创建触发项测试关闭keepalive服务。

如何健康检查 调度器和节点服务器?

如果是LVS这种内核级别的做健康检测

调度器无需特别管理,keepalive会自动切换,因为LVS是基于内核,系统崩了LVS也就自己掉了

节点服务器则通过检查tcp端口,或http请求查看返回状态码(也是在keepalive配置文件中修改,设置轮询后还要设置健康检测方式)

如果是NGINX这种应用程序做健康检查

调度器需要编写脚本检查应用程序进程是否存在,不存在就把自己的keepalive进程结束

节点服务器无需特别管理,因为NGINX自带节点的健康检查方式(只需要设置轮询,失败次数,超时时间。用不着指定通过啥方式健康检查)

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

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

相关文章

HbuilderX--小程序运行配置

安装 HbuilderX 官网下载安装程序 【传送门】 微信小程序开发者工具官网下载 【传送门】 小程序配置 ① 点击顶部工具按钮跳出弹框,弹框第一个设置或者直接使用快捷键 ctrlalt, ② 在配置页面点击运行配置往下划,其余配置如下 微信小程序 将小程序的…

[迁移学习]域自适应

一、定义 1.源域和目标域 源域(Source)和目标域(Target)之间不同但存在联系(different but related)。迁移学习的人物是从源域学习到知识并使其在目标域中取得较好的成绩。 迁移学习可以分为正迁移(postive transfer)和负迁移(negtive transfer),划分依据是迁移学习…

有哪些好用抠图软件?这几种抠图工具简单又高效

有什么好用的抠图软件呢?通过抠图技术将不同的元素组合在一起,创造出独特的艺术效果。我们日常中也会经常需要进行照片抠图,如拍出的照片背景不满意,想要抠出图片中的人物放到新的背景中,这些都是需要进行抠图才能够完…

微服务_Hystrix

在每个服务中引用该组件,监控当前组件。可被GateWay、Fegin集成。简介 作用:防止服务雪崩 Hystrix是一个由Netflix开源的容错框架,它主要用于分布式系统中的服务间通信。Hystrix通过在调用服务的过程中添加各种容错机制,来保护系…

hbuilderX uni-app 自定义快捷键无效、无法生效解决方法(附:好用的常用的快捷键自定义代码片段)

在最后加上 ,"override": true 才能让原有默认的快捷键被覆盖 好用的常用的快捷键自定义代码片段 [//打开快捷键设置{"key": "altshiftk","command": "workbench.action.openGlobalKeybindings","override": tr…

信息专业求职个人简历最新版

信息专业求职个人简历最新版1 个人信息 _ 性 别: 男 婚姻状况: 已婚 民 族: 汉族 户 籍: 江苏-宜兴 年 龄: 34 现所在地: 江苏-宜兴 身 高: 175cm 希望地区: 江苏-常州、 江苏-…

微软发布自己的 Linux 发行版:Azure Linux

导读在内部使用两年并自 2022 年 10 月起以公共预览版运行后,微软终于在日前正式公开发布了其 Azure Linux 的发行版。 在内部使用两年并自 2022 年 10 月起以公共预览版运行后,微软终于在日前正式公开发布了其 Azure Linux 的发行版。 微软 Azure Lin…

二叉树的层序遍历以及队列的实现

思维导图: 一,什么是层序遍历 层序遍历,顾名思义就是一层一层的遍历。比如我的这棵二叉树: 如果使用层序遍历的话它的结果就会是这样的: 1->5->9->7->10->13->8,这就是一层一层的遍历,一…

SciencePub学术 | 计算机类重点SCIEI征稿中

SciencePub学术 刊源推荐: 计算机类重点SCI&EI征稿中!影响因子高,对国人非常友好。信息如下,录满为止: 一、期刊概况: 计算机类重点SCI&EI 📌【期刊简介】IF:7.5-8.0,JCR…

IDEA 关闭 SonarLint 自动扫描

进入Settings → 搜索 SonarLint → 将Automatically trigger analysis取消勾选 即可。

Unity入门2——Unity工作原理

一、工具栏 文件操作:新建工程,新建场景,工程打包等等 编辑操作:对象编辑操作相关,工程设置,引擎设置相关 资源操作:基本等同于 Project 窗口中右键相关功能 对象操作:基本等同于 Hi…

151-B-DC24V、252-B-AC220V气压控制方向阀

151-B-DC24V、252-B-AC220V、332-B-DC24V、453-B-AC220V、232-B-AC110V、351-B-DC24V、431-B-DC12V、253-B-DC24V气动电磁阀体积小,流量大,外形美观,性能可靠.使用寿命长.适用于机电一体化领域.有多重规格和产品颜色可选择,规格G1/8、G1/4、G3/8、G1/2、电控方式&am…

干洗店洗护软件,洗鞋店软件,洗鞋店小程序,

干洗店洗护软件,洗鞋店软件,洗鞋店小程序,水洗标打印标签打印,上门取送,拍照上传,多门店多网点,用户端,骑手端,门店端,网点端。具有以下非常强大的功能和优势…

亚马逊美国站 儿童珠宝首饰CPC认证 ASTM F2923标准CPSIA检测报告

为什么越来越多人爱送珠宝给宝宝? 1、有人说每个小孩子都是来自神的恩典,他们就像父母最珍贵的珠宝值得用一生的时间去呵护与珍藏。 2、西班牙人认为,儿童珠宝作为他们的第一份礼物,会庇佑孩子们未来过上非常幸福,繁荣而成功的…

算法模板(5):数学(4):其他数学

线性代数 高斯消元 ( O ( n 3 ) ) (O(n^3)) (O(n3)) 883. 高斯消元解线性方程组 步骤&#xff1a;枚举每一列&#xff1a;找到绝对值最大的一行&#xff0c;将改行换到最上面&#xff0c;将该行第一个数变成1&#xff0c;将下面所有行的第c列变成0. #include<cstdio>…

年薪80万程序员被鄙视,不如二本教书老师…

“程序员好还是老师好&#xff1f;” 这个问题一直困扰着许多网友&#xff0c;毕竟这两个工作都是让人羡慕的。 程序员普遍收入高&#xff0c;有挑战性&#xff1b;老师是个铁饭碗&#xff0c;休假日多&#xff0c;还有退休金。 也有程序员曾经发帖&#xff0c;表示自己现在…

Go-fastdfs 任意文件上传(CVE-2023-1800)

ZoomEye搜索"go-fastdfs" sjqzhang go-fastdfs 是一个开源分布式文件系统&#xff0c;专为存储和共享大文件而设计。 它是用 Go 编写的&#xff0c;由开发者 sjqzhang 在 GitHub 上维护。 在 sjqzhang go-fastdfs 1.4.3 之前发现了一个被归类为严重的漏洞。 受此问题…

保姆级攻略!Elsevier期刊投稿教程,手把手操作建议收藏!

目前所投的期刊绝大多数为Elsevier旗下的期刊&#xff0c;如Acta、JAC、MSEA、JMST等&#xff0c;以JAC为例。以下分享逐步投稿操作流程&#xff1a;&#xff08;以一本Elsevier旗下期刊为例&#xff09; 0. 进入期刊投稿主页&#xff0c;一般打开期刊主页&#xff0c;点击【S…

Python+ffmpeg实现视频录制功能

UI自动化通常是在无人值守特别是非工作时间执行&#xff0c;但是因为网络、产品性能、产品不稳定&#xff08;偶现缺陷&#xff09;等问题导致UI自动化失败&#xff0c;第二天分析失败原因时有的失败情况从报告中并不能分析出失败的具体原因&#xff08;即使有截图&#xff09;…

图书推荐|大数据从业人人必备的Excel大数据处理分析

《Excel大数据处理&分析》为活页式新形态教材&#xff0c;介绍了Excel 2016的数据表基本操作、数据输入、数据获取、数据排序、数据筛选、分类汇总、公式与函数、日期和时间函数、数学和统计函数、查找和引用函数、数据透视表、图表的可视化分析、宏和VBA、数据分析工具的应…