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)

大家都在看

  • UWP 自定义密码框控件

    1. 概述 微软官方有提供自己的密码控件,但是控件默认的行为是输入密码,会立即显示掩码,比如 *。如果像查看真实的文本,需要按查看按钮。 而我现在自定义的密码控件是先显示你输入的字…

    Linux 2023年6月13日
    091
  • elasticsearch集群部署

    Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮…

    Linux 2023年6月7日
    085
  • SpringBoot的文件上传&下载

    前言:不多BB直接上代码 文件上传 pom依赖添加commons-io <!– 上传/下载jar https://mvnrepository.com/artifact/co…

    Linux 2023年6月14日
    0105
  • 使用Linux Deploy将闲置的安卓手机改造简易服务器

    本文将介绍我在自己闲置的小米4手机安装CentOS系统的过程。手机配置信息:MIUI 9开发版(方便ROOT)、Android 6、架构 ARMv7(arm32) 准备工作 1、手…

    Linux 2023年6月8日
    0109
  • MySQL日志管理之二进制日志

    二进制日志采用二进制格式(01)来存储日志信息(导致数据发生变化的SQL语句),二进制日志记录整个数据库的修改过程。 MySQL的二进制日志主要就是起一个备份的功能。二进制日志≈备…

    Linux 2023年6月7日
    0103
  • 什么是虚拟计算机集群

    这个问题来自近期几位网友的私信,他们不约而同问到一个问题:什么是虚拟计算机集群?Laxcus分布式操作系统是如何做的?下面就正式回答一下这个问题。 在我们传统的认知里,或者大家平常…

    Linux 2023年6月6日
    0108
  • 【文件格式探究】EP.1 对ePub文件格式的初探

    这是”文件格式探究”专题的第 1 期——初探 “ePub” 文件格式。这个专题将会给各位读者呈现笔者探索各种文件格式的过程,具体则是…

    Linux 2023年6月13日
    0183
  • 人人都写过的5个Bug!

    大家好,我是良许。 计算机专业的小伙伴,在学校期间一定学过 C 语言。它是众多高级语言的鼻祖,深入学习这门语言会对计算机原理、操作系统、内存管理等等底层相关的知识会有更深入的了解,…

    Linux 2023年5月27日
    0134
  • 04-MySQL锁

    数据库锁 1、SQL语言包括那几个部分 SQL语言包括 数据定义(DDL)、数据操纵(DML)、数据控制(DCL)和数据查询(DQL)四个部分 2、每部分都有哪些操作关键词 数据定…

    Linux 2023年6月7日
    0148
  • Java实现动态数组【数据结构与算法】

    1、数组 类型固定、长度固定 连续的内存空间 顺序存储、随机读取 查询快、新增删除慢。 最好初始化的时候就指定数组大小。这样就可以避免一定的数组扩容出现的内存消耗。 import …

    Linux 2023年6月14日
    098
  • 电脑常用快捷键大全>(收藏)

    在互联网飞速发展的时代,我们或多或少都会跟电脑打上交道,但是还有很多小伙伴对电脑还不太熟悉,并且不能够流畅的去操作电脑,那这个时候掌握一些基础简单的电脑 常用快捷键 的使用还是很有…

    Linux 2023年6月6日
    092
  • 007 Linux 命令三剑客之-awk

    Linux 命令三剑客,sed、grep、awk。 sed:擅长数据修改。 grep:擅长数据查找定位。 awk:擅长数据切片,数据格式化,功能最复杂。 awk 更适合格式化文本,…

    Linux 2023年5月27日
    091
  • 了解CFS完全公平调度器

    CFS模拟理想多任务调度 公平,即对于n个正在运行的任务,当这些任务同时不断地运行时,CPU会尽可能分配给他们1/n的处理时间。 CFS是一种基于加权公平排队思想的调度算法。 精确…

    Linux 2023年6月7日
    0111
  • nodejs调用shell

    shelljs https://github.com/shelljs/shelljs 实例 var shell = require(‘shelljs’); if (!shell.w…

    Linux 2023年5月28日
    0107
  • JAVA反射机制详解

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 何为反射? 实例的创建 .cl…

    Linux 2023年6月6日
    0149
  • Go-channel

    (1)channel本质就是一个数据结构——队列 (2)数据先进先出 (3)线程安全,多goroutine访问时,不需要加锁,channel本身就是线程安全的 (4)channel…

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