Lvs+KeepAlived高可用高性能负载均衡

news2024/11/13 11:53:51

目录

1.环境介绍

2.配置keepalived

 3.测试

1.测试负载均衡

2.测试RS高可用

3.测试LVS高可用

3.1测试lvs主服务宕机

3.2.测试lvs主服务器恢复

4.我在实验中遇到的错误


1.环境介绍

环境:centos7

RS1---RIP1:192.168.163.145

           VIP 192.168.163.200

RS2---RIP2:192.168.163.146

           VIP 192.168.163.200

LVS_MASTER : DIP 192.168.163.144

                           VIP:192.168.163.200

LVS_BACKUP: DIP 192.168.163.150

                             VIP:192.168.163.200

CLIENT :192.168.163.151

我使用的是LVS-DR模式来负载均衡,详情请见http://t.csdn.cn/iiU4s

 ipvsadm 已经在这篇文章搭建好

2.配置keepalived

现在我们需要在两台LVS服务器都下载keepalivd

yum install keepalived -y

下载号后,我们会在/etc/keepalived的目录下找一个配置文件文件

[root@lvs-backup ~]# cd /etc/keepalived/
[root@lvs-backup keepalived]# ll
total 4
-rw-r--r--. 1 root root 1376 Aug 31 12:12 keepalived.conf

里面内容如下

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#上面的配置无需关注,重点关注和修改下面的配置
vrrp_instance VI_1 {
    state MASTER#标识当前lvs是主,根据实际lvs服务器规划确定,可选值MASTER和BACKUP
    interface eth0#lvs服务器提供服务器的网卡,根据实际服务器网卡进行修改
    virtual_router_id 51#lvs提供的服务所属ID,目前无需修改
    priority 100#lvs服务器的优先级,主服务器最高,备份服务器要低于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #virtual_ipaddress用于配置VIP和LVS服务器的网卡绑定关系,一般需要修改
    #示例: 192.168.116.134/24 dev ens33 label ens33:9
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
#配置lvs服务策略,相当于ipvsadm -A -t 192.168.116.134:80 -s rr,一般需要修改
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr#配置lvs调度算法,默认轮询
    lb_kind NAT#配置lvs工作模式,可以改为DR
    persistence_timeout 50#用于指定同一个client在多久内,只去请求第一次提供服务的RS,为查看轮询效                        果,这里需要改为0
    protocol TCP#TCP协议
   #配置RS信息,相当于ipvsadm -a -t 192.168.116.134:80 -r 192.168.116.131 -g
    real_server 192.168.201.100 443 {
        weight 1#当前RS的权重
        SSL_GET {#SSL_GET健康检查,一般改为HTTP_GET
         #两个url可以删除一个,url内的内容改为path /和status_code 200,digest删除
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
#下面的配置实际是两组lvs服务的配置,含义和上面的lvs服务配置一致。如果用不到,下面的配置可以全部删除
virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

在两台机器上修改我们需要修改的配置

LVS_MASTER

[root@lvs ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
         192.168.163.200/24 brd 192.168.163.255  dev ens33 label ens33:200
    }
}

virtual_server 192.168.163.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP

    real_server 192.168.163.145 80 {
        weight 1
        HTTP_GET {
            url {
              path /index.html
	       status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
   real_server 192.168.163.146 80 {
        weight 1
        HTTP_GET {
            url {
              path /index.html
	      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

LVS_BACKUP

[root@lvs-backup keepalived]# cat keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 180
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
         192.168.163.200/24 brd 192.168.163.255  dev ens33 label ens33:200
    }
}

virtual_server 192.168.163.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP

    real_server 192.168.163.145 80 {
        weight 1
        HTTP_GET {
            url {
              path /index.html
	       status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
   real_server 192.168.163.146 80 {
        weight 1
        HTTP_GET {
            url {
              path /index.html
	      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

注意:主服务的优先级要高于备份服务器

在两台服务器上开启keepalived服务

[root@lvs ~]# systemctl restart keepalived

上述步骤执行完毕后,可以在lvs主服务器和备份服务器分别执行ifconfig命令,可以查看到VIP被绑定到了主服务器,如下:

[root@lvs ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.144  netmask 255.255.255.0  broadcast 192.168.163.255
        inet6 fe80::491f:4a6e:f34:a1b9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)
        RX packets 156094  bytes 70487425 (67.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 195001  bytes 16040484 (15.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:200: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.200  netmask 255.255.255.0  broadcast 192.168.163.255
        ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)

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 1000  (Local Loopback)
        RX packets 331  bytes 28808 (28.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 331  bytes 28808 (28.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.163.200:80 rr
  -> 192.168.163.145:80           Route   1      0          0         
  -> 192.168.163.146:80           Route   1      0          0         

 3.测试

1.测试负载均衡

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

2.测试RS高可用


关闭一台RS后(这里可以使用ifconfig 网卡名 down命令暂时关闭网卡),客户端继续发起请求,查看是否可以正常访问,如下:

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

会发现,此时客户端可以正常访问,但只有RS2在提供服务。这说明,keepAlived检测到了RS1服务器异常,将其剔除了。

此时再启动RS1服务器,客户端继续访问,会发现响应结果如下,keepAlived检测到RS1服务器恢复正常,又将其加入服务列表了。

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

3.测试LVS高可用


这里主要进行两个测试

3.1测试lvs主服务宕机

使用ifconfig 网卡名 down命令,关闭主服务器网卡,此时主服务器不能提供服务。观察备份服务器是否将VIP绑定到自己,以及客户端是否可以继续正常访问。如下:

关闭主服务器网卡

[root@lvs ~]# ifconfig ens33 down

观察备份服务器,会发现VIP已经绑定过来了。这里实际是keepAlived检测到了主服务器的异常,而做出的故障转移和自动切换。

[root@lvs-backup keepalived]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.150  netmask 255.255.255.0  broadcast 192.168.163.255
        inet6 fe80::94e3:7456:5dc9:ce5d  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::9aec:8c8f:ee55:a8eb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c0:57:db  txqueuelen 1000  (Ethernet)
        RX packets 43484  bytes 5026535 (4.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12787  bytes 1188939 (1.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:200: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.200  netmask 255.255.255.0  broadcast 192.168.163.255
        ether 00:0c:29:c0:57:db  txqueuelen 1000  (Ethernet)

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 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

用客户进行测试

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

3.2.测试lvs主服务器恢复

上述测试通过后,可以开启主服务器网卡,让其能够提供服务,然后观察VIP是否会回到主服务器。

开启主服务器网卡

[root@lvs ~]# ifconfig ens33 up

我们会发现,在主服务器开启端口后,VIP又换绑到主服务器上了

[root@lvs ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.144  netmask 255.255.255.0  broadcast 192.168.163.255
        inet6 fe80::491f:4a6e:f34:a1b9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)
        RX packets 157697  bytes 70649781 (67.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 200310  bytes 16401598 (15.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:200: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.200  netmask 255.255.255.0  broadcast 192.168.163.255
        ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)

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 1000  (Local Loopback)
        RX packets 331  bytes 28808 (28.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 331  bytes 28808 (28.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@lvs-backup keepalived]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.163.150  netmask 255.255.255.0  broadcast 192.168.163.255
        inet6 fe80::94e3:7456:5dc9:ce5d  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::9aec:8c8f:ee55:a8eb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c0:57:db  txqueuelen 1000  (Ethernet)
        RX packets 43995  bytes 5081851 (4.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13240  bytes 1226592 (1.1 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 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4.我在实验中遇到的错误

在测试阶段,我发现即使我的VIP已经成功和服务器绑定,也有当前ipvs模块中记录的链接,但就是无法通过VIP连接,这是因为在keepalived配置文件中,关于vrrp协议的vrrp_strict是默认打开的我们需要把他注释掉,这样就能顺利连接了

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

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

相关文章

SAP维护货币换算比率 TCODE: OBBS

通过外币做账时&#xff0c;如果系统没有维护好货币换算比率的&#xff0c;系统会提示&#xff1a;维护 SAR/ CNY 的换算率(汇率类型 M)。 维护维护 货币换算率事务代码为&#xff1a; OBBS

【Linux】进程的优先级

我们都知道进程等待需要cpu处理的&#xff0c;那就需要一个数据结构来记录要被cpu处理的进程&#xff0c;那这些进程是按一个什么样的方式在这个结构中进行等待呢&#xff1f;下面就要谈到进程的优先级了&#xff1a; 目录 一、进程的优先级的概念 二、查看进程的优先级 2.1…

浏览器连不上 Flink WebUI 8081 端口

安装 flink-1.17.0 后&#xff0c;start-cluster.sh 启动&#xff0c;发现浏览器连不上 Flink WebUI 的8081端口。 问题排查&#xff1a; command R&#xff0c;输入cmd&#xff0c;检查宿主机能否ping通虚拟机&#xff0c;发现能ping通。 检查是否有flink以外的任务占用8081…

SpringBoot使用i18n国际化

使用的SpringBoot版本是2.3.5 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version><relativePath/> </parent> 一、简单测试…

CentOs8安装jdk

这里使用yum的方式安装jdk 卸载 如果有jdk的话&#xff0c;先卸载&#xff0c;卸载操作&#xff1a;https://blog.csdn.net/a3562323/article/details/107468828 安装 查看可安装的jdk相关版本 yum list java*安装 我这里装的是jdk11 yum install -y java-11-openjdk.x8…

ArcGIS Maps SDK for JavaScript(一):概述与使用

文章目录 1 概述2 如何使用ArcGIS Maps SDK for JavaScript2.1 AMD 模块与 ES 模块2.2 AMD 模块和 ES 模块比较 3 几种安装方式3.1 通过 ArcGIS CDN 获取 AMD 模块3.2 通过 NPM 运行 ES 模块3.3 通过 CDN 获取 ES 模块3.4 本地构建 ES3.5 本地构建 AMD 3 VSCode下载与安装2.1 下…

澳洲留学: 学签将改革移民倾向不再是拒签理由!

目录 1. 澳洲留学: 学签将改革移民倾向不再是拒签理由! 2. GMAT考试: 新版GMAT考试8月29日正式开放报名! AP 学科考试报名时间轴公布 或许native speaker使用的英语没有想象中的那么难 如果有人不相信你&#xff0c;而你想让他们相信你&#xff0c;你需要表现出不可否认…

基于java+springboot+vue的点餐平台网站-lw-源码

​ 系统介绍&#xff1a; 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多商家的之中&#xff0c;随之就产生了“点餐平台网站”&#xff0c;这样就让点餐平台网站更加方便简单。 对于本点餐平台网站的设计来说…

【LeetCode】《LeetCode 101》第十二章:字符串

文章目录 12.1 字符串比较242 . 有效的字母异位词&#xff08;简单&#xff09;205. 同构字符串&#xff08;简单&#xff09;647. 回文子串&#xff08;中等&#xff09;696 . 计数二进制子串&#xff08;简单&#xff09; 12.2 字符串理解224. 基本计算器&#xff08;困难&am…

秋天露营怎么能少得了投影仪,极米Z7X见证你的每一个幸福时刻

秋高气爽&#xff0c;正是露营好时候。作为一种休闲娱乐的方式&#xff0c;露营近年来颇受年轻人喜爱。闲暇之余&#xff0c;约上三五好友&#xff0c;亦可情侣二人&#xff0c;带上野餐烧烤食材&#xff0c;到一处能够放飞自我的大自然中&#xff0c;欣赏风光美景&#xff0c;…

Python Qt学习(八)Treeview

源代码&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file qt_treeview.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not…

乙酰六肽-49——治疗敏感肌肤

简介 敏感性皮肤&#xff08;sensitive skin&#xff09;和“皮肤过敏”是两个不同的概念&#xff0c;皮肤过敏是一种变态反应&#xff0c;由变应原进入机体后&#xff0c;促使机体产生相应的抗体&#xff0c;引发抗原抗体反应&#xff0c;表现为红斑、丘疹、风团等临床客观体…

软件定义网络:重新定义云计算网络架构

文章目录 软件定义网络的基本概念软件定义网络的工作原理软件定义网络在云计算中的应用与优势示例&#xff1a;软件定义网络配置未来发展和挑战结论 &#x1f389;欢迎来到AIGC人工智能专栏~软件定义网络&#xff1a;重新定义云计算网络架构 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&a…

广告宣传片策划的团队分工

一个优秀的广告宣传片制作团队能够结合创意、技术和项目管理能力&#xff0c;为客户提供高质量的宣传片制作服务。在广告宣传片的策划过程中&#xff0c;通常需要共同合作。深圳广告宣传片制作公司老友记小编还为您整理以下常见的广告宣传片策划团队的分工概述&#xff1a; 1.…

做CRM客户管理系统前要分析哪些数据?

01 做CRM客户管理系统前要分析哪些数据&#xff1f; “数据是21世纪的石油” 进行数据分析是做crm至关重要的步骤&#xff0c;根据我们团队的多年经验&#xff0c;本文总结出了两个需要重点考虑的方面&#xff1a; 1、客户基本信息 包括客户的基本档案、经营状况、客户特征…

如何有效防止服务器被攻击?

随着互联网的快速发展&#xff0c;服务器安全问题日益引起人们的关注。近期&#xff0c;全球范围内频繁发生的服务器攻击事件引发了广泛关注。为了保护企业和个人的数据安全&#xff0c;有效防止服务器被攻击已成为迫在眉睫的任务。 首先&#xff0c;及时更新服务器的操作系统和…

电子学会 2023年5月 青少年软件编程Python编程等级考试三级真题解析(选择题+判断题+编程题)

青少年编程Python编程等级考试三级真题解析(选择题+判断题+编程题) 2023年5月 一、选择题(共25题,共50分) 请选择,下面代码运行之后的结果是?( ) a = 2 b = 4 try:c = a * bprint(c) except:print

实战黑马苍穹外卖项目8.1-10.1

文章目录 软件开发的基本流程用户层网关层应用层数据层工具 数据库设计导入准备好的前端和后端工程基础工程代码分析完成员工功能完成菜品功能入门Redis实现店铺营业HttpClient微信小程序开发缓存Spring Cache实现地址功能用户下单实现订单推送状态apache对应的工具使用项目用到…

Python连接SQLite数据库基础教程

SQLite是一种轻量级的嵌入式数据库&#xff0c;常用于小型项目和移动应用程序。Python提供了内置的sqlite3模块&#xff0c;可以方便地连接和操作SQLite数据库。本文将介绍如何使用Python连接SQLite数据库&#xff0c;并进行基本的数据操作。 安装SQLite和sqlite3模块 首先&a…

技术实践|Hive数据迁移干货分享

导语 Hive是基于Hadoop构建的一套数据仓库分析系统&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供完整的SQL查询功能。它的优点是可以通过类SQL语句快速实现简单的MapReduce统计&#xff0c;不用再开发专门的MapReduce应用程序&#xff0c;从而降低…