LVS负载均衡

LVS负载均衡

一、LVS是什么

LVS是linux virtual server的简写linux虚拟服务器,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立。

LVS是一种集群(Cluster)技术,现在LVS已经是 Linux标准内核的一部分,采用IP负载均衡技术和基于内容请求分发技术。

二、LVS的作用

  • 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
  • 成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
  • 配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
  • 支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
    支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
  • 应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等

三、lvs的三种工作模式

1.基于NAT的LVS模式负载均衡

LVS负载均衡

NAT(network address translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外王,以及外部用户可以访问位于公司内部的私有的ip主机。

工作过程:

(1):用户通过互联网DNS服务器解析到公司负载均衡设备上的外网地址,相对于真实服务器而言,LVS外网ip又称为vip,用户通过访问vip,即可连接后端的真实服务器,而此时用户对这一切都是不可知的,用户认为自己还在访问真实的后端服务器,也不知道自己访问的vip只是一个调度器。

(2):用户将请求发送至调度器上,此时LVS根据算法选择一个后端的真实服务器,将数据请求包转发给真实服务器,并在转发之前LVS会修改数据包中的目标地址以及目标端口,此时修改为真实的服务器ip地址

(3):真实的服务器将响应的数据包返回给LVS调度器,调度器在响应数据包后会将源地址和源端口修改为vip及调度器相应端口,修改完成后,由调度器响应数据包发送给终端

  • LVS调度器中有一个连接Hash表,该表会记录连接请求及其转发信息,当同一个连接下一个数据包发送给调度器时,该Hash’表可以直接找到之前连接的记录,并根据记录信息选出相同真实服务器及其端口信息。
  • NAT的优点时服务器可以运行在任何支持TCP/IP的操作系统,他只需要在调度器上配置一个ip服务器组可以用私有的ip地址。
  • NAT的缺点时伸缩能力有限,当服务器节点数目上升到20时,调度器本身有可能成为系统的新瓶颈,因为请求和响应的报文都需要经过调度器。

2.基于TUN模式的LVS负载均衡

LVS负载均衡
  • LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。
  • IP(隧道)是一种数据包分装技术,他可以经原始的数据包分装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的vip地址的数据包分装,通过隧道转发给真实的后端服务器,通过将客户端发往调度器的原始数据包分装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务的ip地址以及对应端口),lLVS(Tun)模式要求真实的服务器可以与外部网络连接,真实服务器在受到请求数据包后直接给客户端返回响应数据。
  • LVS(Tun)技术对服务器有要求,即所有服务器必须支持”IP Tunneling”或者IP Encapsulation”协议。目前,VS/TUN 的后端服务器主要运行 Linux 操作系统。

3.LVS(DR)负载模式

LVS负载均衡
  • 在LVS(TUN)模式中,需要LVS调度器与真实的服务器之间创建隧道连接,这样就会增加服务器的负担。DR模式也叫路由模式,该模式中LVS依然仅承担数据的请求以及根据算法调度出合理的后端服务器,最终由后端真实服务器负责响应数据包发送返回给客户端。与隧道模式不同的是,DR模式要求调度器与后端服务器必须在统一个局域网内u,VIP地址需要在调度器与后端所有服务器之间共享,因为最终的真实服务器会给客户端回应数据包时需要设置源IP为VIP,目标IP为客户端IP,这样客户端访问的时调度器VIP地址,回应的源地址也是VIP,这样客户端是感觉不到后端服务器的存在。由于多台计算机都设置了同样的VIP地址,所以在直接路由模式中要求调度器的VIP是对外可见的,客户端将请求数据包发送到调度器主机,而所有的真实服务器的VIP必须配置在Non-ARP的网络上ARP是一个协议。调度器根据算法在选出真实的服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实的MAC地址,通过交换机将该数据帧发给真实的服务器。

四、LVS管理工具

ipvs:内核中的协议栈上实现

ipvs是LVS软件核心,是允许在LB(负载均衡层)上,这是个基于ip层的负载均衡

ipvs的总体结构主要有ip包处理,负载均衡算法,系统配置和管理三个模块以及虚拟服务器与真实服务器链表组成。

ipvs管理集群服务管理服务上的RS(real server)。

一个ipvs主机可以同时定义多个cluster server,但可能会影响调度性格。

一个ipvs服务至少应该有一个RS。

五、LVS调度算法

静态调度算法(4种):

1、轮询调度rr

均等的对待每一台服务器,不管服务器上的实际连接数和系统负载

2、加权论调wrr

调度器可以自动问询真实服务器的负载情况,并动态调整权值

3、源地址散列调度算法 sh
 与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

4、目标地址散列调度算法 dh
 该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

动态调度算法(6种)

1、最少链接 lc
 动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡

2、加权最少链接 wlc
 调度器可以自动问询真实服务器的负载情况,并动态调整权值带权重的谁不干活就给谁分配,机器配置好的权重高

3、基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

4、复杂的基于局部性最少的连接算法 lblcr
 记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

5、最少期望延迟 sed
 不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙

6、永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去

六、搭建HTTP负载均衡集群

1.搭建搭建lvs-nat模式的http负载集群

环境说明:

主机名 主机作用 IP/DIP VIP DR LVS服务器(DR) 192.168.111.141 172.25.0.100 RS1 apache服务器1(RS) 192.168.111.142 网关为DR网关 RS2 apache服务器2(RS) 192.168.111.143 网关为DR网关 client 客户端(用于测试) 192.168.111.144 客户端不需要VIP

DR配置

#关闭防火墙和selinux
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@DR ~]# setenforce 0
[root@DR ~]# systemctl disable --now firewalld
#添加网卡
#我这里添加的是仅主机模式网卡,以便区分,网段为:172.25.0.0
[root@DR ~]# nmcli connection show
NAME                UUID                                  TYPE      DEVICE
ens33               d169a480-a2e3-4fe5-89ba-f1f0e022a80f  ethernet  ens33
Wired connection 1  d0f7070b-e2d8-324b-b396-d3d13b0c3c4c  ethernet  ens37
[root@DR ~]# nmcli connection modify Wired\ connection\ 1 con-name ens37 ipv4.addresses 172.25.0.100/24 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@DR ~]# nmcli connection up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

#开启转发功能
[root@DR ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1

RS1配置

#关闭防火墙和selinux
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld

#配置ip
[root@RS1 ~]# nmcli connection modify ens33 ipv4.addresses 192.168.111.142/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@RS1 ~]# nmcli connection up ens33
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

#配置好httpd,配置网站首页
[root@RS1 ~]# dnf -y install httpd
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd

RS2配置

#关闭防火墙和selinux
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld

#配置ip
[root@RS2 ~]# nmcli connection modify ens33 ipv4.addresses 192.168.111.143/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@RS2 ~]# nmcli connection up ens33
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

#配置好httpd,配置网站首页
[root@RS2 ~]# dnf -y install httpd
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd

配置好好两台web服务器后,最后再安装ipvsadm并添加规则

[root@DR ~]# dnf -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 172.25.0.100:80 -s rr
[root@DR ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.111.142:80 -m
[root@DR ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.111.143:80 -m
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.0.100:80 rr
  -> 192.168.111.142:80           Masq    1      0          0
  -> 192.168.111.143:80           Masq    1      0          0
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm
[root@DR ~]# systemctl enable ipvsadm

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl http://172.25.0.100
RS2
[root@client ~]# curl http://172.25.0.100
RS1
[root@client ~]# curl http://172.25.0.100
RS2
[root@client ~]# curl http://172.25.0.100
RS1

2.搭建搭建lvs-dr模式的http负载集群

环境说明:

主机名 主机作用 IP/DIP VIP DR LVS服务器(DR) 192.168.111.141 lo:192.168.111.200 RS1 apache服务器1(RS) 192.168.111.142 lo:192.168.111.200 RS2 apache服务器2(RS) 192.168.111.143 lo:192.168.111.200 client 客户端 (用于测试) 192.168.111.144 客户端不需要VIP

配置DR

#关闭防火墙和selinux
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@DR ~]# setenforce 0
[root@DR ~]# systemctl disable --now firewalld

#配置lo网卡ip
[root@DR ~]# dnf -y install net-tools
[root@DR ~]# ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up
[root@DR ~]# ip a |grep lo
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 192.168.111.200/0 brd 192.168.111.200 scope global lo

#&#x6C38;&#x4E45;&#x751F;&#x6548;lo&#x7F51;&#x5361;&#x914D;&#x7F6E;
[root@DR ~]# echo "ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local
[root@DR ~]# chmod +x /etc/rc.d/rc.local
</loopback,up,lower_up>

RS1配置

#&#x5173;&#x95ED;&#x9632;&#x706B;&#x5899;&#x548C;selinux
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld

#RS1&#x4E0A;&#x914D;&#x7F6E;&#x5185;&#x6838;&#x53C2;&#x6570;
[root@RS1 ~]# 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
[root@RS1 ~]# sysctl -p
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

#&#x914D;&#x7F6E;VIP
[root@RS1 ~]# dnf -y install net-tools
[root@RS1 ~]# ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up

#&#x6C38;&#x4E45;&#x751F;&#x6548;lo&#x7F51;&#x5361;&#x914D;&#x7F6E;
[root@RS1 ~]# echo "ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local
[root@RS1 ~]# chmod +x /etc/rc.d/rc.local

#&#x6DFB;&#x52A0;&#x8DEF;&#x7531;
[root@RS1 ~]# route add -host 192.168.111.200/32 dev lo

#&#x5B89;&#x88C5;httpd&#x670D;&#x52A1;&#xFF0C;&#x7136;&#x540E;&#x914D;&#x7F6E;&#x597D;&#x7F51;&#x7AD9;&#x9996;&#x9875;
[root@RS1 ~]# dnf -y install httpd
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd

RS2配置

#&#x5173;&#x95ED;&#x9632;&#x706B;&#x5899;&#x548C;selinux
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld

#RS2&#x4E0A;&#x914D;&#x7F6E;&#x5185;&#x6838;&#x53C2;&#x6570;
[root@RS2 ~]# 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
[root@RS2 ~]# sysctl -p
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

#&#x914D;&#x7F6E;VIP
[root@RS2 ~]# dnf -y install net-tools
[root@RS2 ~]# ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up

#&#x6C38;&#x4E45;&#x751F;&#x6548;lo&#x7F51;&#x5361;&#x914D;&#x7F6E;
[root@RS2 ~]# echo "ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local
[root@RS2 ~]# chmod +x /etc/rc.d/rc.local

#&#x6DFB;&#x52A0;&#x8DEF;&#x7531;
[root@RS2 ~]# route add -host 192.168.111.200/32 dev lo

#&#x5B89;&#x88C5;httpd&#x670D;&#x52A1;&#xFF0C;&#x7136;&#x540E;&#x914D;&#x7F6E;&#x597D;&#x7F51;&#x7AD9;&#x9996;&#x9875;
[root@RS2 ~]# dnf -y install httpd
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd

配置好好两台web服务器后,最后再安装ipvsadm并添加规则

[root@RS2 ~]# ipvsadm -A -t 192.168.111.200:80 -s rr
[root@RS2 ~]# ipvsadm -a -t 192.168.111.200:80 -r 192.168.111.142:80 -g
[root@RS2 ~]# ipvsadm -a -t 192.168.111.200:80 -r 192.168.111.143:80 -g
[root@RS2 ~]# 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.111.200:80 rr
  -> 192.168.111.142:80           Route   1      0          0
  -> 192.168.111.143:80           Route   1      0          0
[root@RS2 ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@RS2 ~]# systemctl restart ipvsadm
[root@RS2 ~]# systemctl enable ipvsadm

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl 192.168.111.200
RS1
[root@client ~]# curl 192.168.111.200
RS2
[root@client ~]# curl 192.168.111.200
RS1
[root@client ~]# curl 192.168.111.200
RS2

3.搭建搭建lvs-dr模式的https负载集群

环境说明:

主机名 主机作用 IP/DIP VIP DR LVS服务器(DR) 192.168.111.141 lo:192.168.111.200 RS1 apache服务器1(RS) 192.168.111.142 lo:192.168.111.200 RS2 apache服务器2(RS) 192.168.111.143 lo:192.168.111.200 client 客户端 (用于测试) 192.168.111.144 客户端不需要VIP

DR配置

#&#x5173;&#x95ED;&#x9632;&#x706B;&#x5899;&#x548C;selinux
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@DR ~]# setenforce 0
[root@DR ~]# systemctl disable --now firewalld

#&#x914D;&#x7F6E;lo&#x7F51;&#x5361;ip
[root@DR ~]# dnf -y install net-tools
[root@DR ~]# ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up
[root@DR ~]# ip a |grep lo
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 192.168.111.200/0 brd 192.168.111.200 scope global lo

#&#x6C38;&#x4E45;&#x751F;&#x6548;lo&#x7F51;&#x5361;&#x914D;&#x7F6E;
[root@DR ~]# echo "ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local
[root@DR ~]# chmod +x /etc/rc.d/rc.local
</loopback,up,lower_up>

RS1配置

`

关闭防火墙和selinux

[root@RS1 ~]# sed -ri ‘s/^(SELINUX=).*/\1disabled/g’ /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable –now firewalld

RS1上配置内核参数

[root@RS1 ~]# 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
[root@RS1 ~]# sysctl -p
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

配置VIP

[root@RS1 ~]# dnf -y install net-tools
[root@RS1 ~]# ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up

永久生效lo网卡配置

[root@RS1 ~]# echo “ifconfig lo 192.168.111.200/32 broadcast 192.168.111.200 netmask 255.255.255.255 up” >> /etc/rc.d/rc.local
[root@RS1 ~]# chmod +x /etc/rc.d/rc.local

添加路由

[root@RS1 ~]# route add -host 192.168.111.200/32 dev lo

安装httpd服务,然后配置好网站首页

[root@RS1 ~]# dnf -y install httpd mod_ssl
[root@RS1 ~]# vim /etc/httpd/conf.modules.d/00-base.conf
LoadModule ssl_module modules/mod_ssl.so
[root@RS1 ~]# mkdir /etc/httpd/ssl
[root@RS1 ~]# cd /etc/httpd/ssl
[root@RS1 ssl]# openssl genrsa -out httpd.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
……..+++++
…………………………………………+++++
e is 65537 (0x010001)
[root@RS1 ssl]# openssl req -new -key httpd.key -out httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.

Original: https://www.cnblogs.com/Their-own/p/16735490.html
Author: 事愿人为
Title: LVS负载均衡

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573882/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Centos7安装Redis

    下载 wget http://download.redis.io/releases/redis-5.0.0.tar.gz 解压 tar xvf redis-5.0.0.tar.gz…

    Linux 2023年5月28日
    086
  • 远程小工具PuTTY

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。我们连接服务器一般用ssh或者telnet,这…

    Linux 2023年5月27日
    091
  • redis中key和value的存储大小限制

    String类型:一个String类型的value最大可以存储512M List类型:list的元素个数最多为2^32-1个,也就是4294967295个。 Set类型:元素个数最…

    Linux 2023年5月28日
    0120
  • ADB和Fastboot最新版的谷歌官方下载链接

    最新ADB及Fastboot版本说明(SDK Platform Tools 版本说明) ADB和Fastboot for Windows ADB和Fastboot for Mac …

    Linux 2023年6月7日
    091
  • Mac Mini 安装Ubuntu20.04 KVM

    在一台 Mac Mini mid 2011上安装Ubuntu20.04并配置KVM环境, 过程也适用于其他版本的Mac主机. I5 2415, 内存8G*2, 硬盘 SSD 500…

    Linux 2023年5月27日
    098
  • Python 批处理sql插入 %s 占位符报错

    语法错误 在查询表达式 ‘%s’ 中。 (-3100) (SQLPrepare)”) 语法错误 在查询表达式 ‘%s’ …

    Linux 2023年6月7日
    0108
  • Redis集群-哨兵模式

    Sentinel(哨岗、哨兵)是Redis的主从架构的高可用性解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)监视任意多个R…

    Linux 2023年6月7日
    080
  • IDEA 构建 mybatis 源码

    mybatis 源码构建 mybatis-source 下载 mybatis源码下载 mybatis-parent 版本信息 mybatis-parent 下载 mybatis-p…

    Linux 2023年6月13日
    084
  • 嵌入式软件开发之程序架构设计-任务调度

    1 前言 在嵌入式MCU软件开发过程中,程序任务调度架构的搭建尤为重要,直接关系到该程序能支持多少功能(随着功能越多系统响应能力越弱,好的任务调度架构能够在保持相同的系统响应能力前…

    Linux 2023年6月7日
    0106
  • redis 入门安装流程

    redis安装流程 安装linux的Redis [官网下载即可][ https://redis.io/download/ ] 一般会移动到opt目录下 mv redis-7.0.4…

    Linux 2023年6月7日
    096
  • Linux 最小安装与 Xshell 远程工具的使用

    写在前面:本篇文章介绍了CtenOS的最小安装方法,以及使虚拟机使用VMware的桥接模式的方法。桥接模式下的虚拟机,相当于和物理机处于同一物理网络(网线、WIFI等)下。在多台物…

    Linux 2023年6月8日
    0104
  • 【pycharm】Cannot find reference ‘XXX‘ in ‘__init__.py‘ 解决办法

    Cannot find reference ‘XXX’ in ‘init.py’ 解决办法 File -> Editor -&…

    Linux 2023年6月8日
    0100
  • Docker部署Dotnet

    方法一:打包+镜像 部署 将要部署的项目及其依赖的项目上传至指定文件夹下 要部署的项目添加Docker支持,生成Dockerfile文件 将生成的Dockerfile文件上传至要部…

    Linux 2023年6月13日
    0105
  • Java基础系列–08_集合1

    集合当中有很多都是应用到泛型的技术,所以在讲集合之前,应该先将泛型的概念普及一下。 泛型:(1)泛型是一种类型,但是这种类型是在编译或者调用方法时才确定。(2)格式: (3)好处:…

    Linux 2023年6月7日
    087
  • 【Linux】CMake源码编译安装教程

    步骤: 卸载旧版本 官网下载安装包 CMake源码编译安装 检查是否安装成功 Linux下,默认安装方式: sudo apt install cmake 如果使用默认的安装方式,这…

    Linux 2023年6月13日
    098
  • Redis 生产架构选型对比,一文整治选择困难症

    前言 在写开源项目的时候,想到了要支持多种redis部署方式,于是对于这块的生产环境的架构选型展开调研。 一、引擎版本 推荐使用更新的引擎版本以支持更多的特性, Redis 6.0…

    Linux 2023年6月8日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球