Nginx 学习(九)集群概述与LVS工作模式的配置

 一  集群

1  概述

  • 通过高速网络将很多服务器集中起来一起提供同一种服务,在客户端看来就像是只有一个服务器
  • 可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
  • 任务调度是集群系统中的核心技术

2  目的

  • 提高性能。如计算密集型应用,如:天气预报、核试验模拟
  • 降低成本。相对百万美元级的超级计算机,价格便宜
  • 提高可扩展性。只要增加集群节点即可
  • 增强可靠性。多个节点完成相同功能,避免单点失败

3  分类

高性能计算集群HP。通过以集群开发的并行应用程序,解决复杂的科学问题

负载均衡(LB)集群。客户端负载在计算机集群中尽可能平均分摊。

高可用(HA)集群。避免单点故障,当一个系统发生故障时,可以快速迁移。

二  LVS

1  概述

  • Linux虚拟服务器 (LVS) 是章文嵩在国防科技大学就读博士期间创建的
  • LVS可以实现高可用的、可伸缩的Web、Mail、Cache和Media等网络服务
  • 最终目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群

2  组成

前端:负载均衡层。由一台或多台负载调度器构成

中间:服务器群组层。由一组实际运行应用服务的服务器组成

底端:数据共享存储层。提供共享存储空间的存储区域

3  术语

Director Server: 调度服务器,将负载分发到Real Server的服务器

Real Server:真实服务器-真正提供应用服务的服务器

VIP:虚拟IP地址-公布给用户访问的虚拟IP地址

DIP:调度器连接后端节点服务器的IP地址

RIP:真实IP地址。集群节点上使用的IP地址

4  工作模式

 VS/NAT(网络地址转换)

  • 通过网络地址转换实现的虚拟服务器
  • 大并发访问时,调度器的性能成为瓶颈

VS/DR(路由模式)

  • 直接使用路由技术实现虚拟服务器
  • 节点服务器需要配置VIP,注意MAC地址广播

VS/TUN(隧道模式)

  • 通过隧道方式实现虚拟服务器

5  负载均衡调度算法

LVS目前实现了10种调度算法

常见的调度算法

  • 轮询rr:Real Server轮流提供服务
  • 加权轮询wrr:根据服务器性能设置权重,权重大的得到的请求更多
  • 最少连接lc:根据Real Server的连接数分配请求
  • 加权最少连接wlc:类似于wrr,根据权重分配请求

 

 

 三  配置

 1  LVS NAT模式

  • 架构图

  • 环境准备

client1eth0->192.168.88.10网关192.168.88.5
lvs1

eth0 -> 192.168.88.5

eth1 -> 192.168.99.5

web1eth1->192.168.99.100网关192.168.99.5
web2eth1->192.168.99.200网关192.168.99.5
# 创建4台虚拟机
[root@myhost ~]# vm clone client1 lvs1 web{1..2}# 初始化虚拟机
[root@myhost ~]# virsh console client1  # 连接client1控制台
localhost login: root
Password: a
# 登陆之后,将以下内容粘贴到终端
hostnamectl set-hostname client1
nmcli connection modify "System eth0" con-name eth0
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.10/24 autoconnect yes ipv4.gateway 192.168.88.5
nmcli connection down eth0
nmcli connection up eth0# 退出
[root@localhost ~]# exit
# 退出之后,按ctrl+]可回到真机# 真机通过ssh连接client1
[root@myhost ~]# rm -f ~/.ssh/known_hosts 
[root@myhost ~]# ssh 192.168.88.10# 配置第2台机器作为lvs1
[root@myhost ~]# virsh console lvs1
localhost login: root
Password: a# 登陆之后,将以下内容复制到命令行
hostnamectl set-hostname lvs1
nmcli connection modify "System eth0" con-name eth0
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24 autoconnect yes
nmcli connection down eth0
nmcli connection up eth0rm -f /etc/sysconfig/network-scripts/ifcfg-eth1
nmcli connection add con-name eth1 ifname eth1 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.99.5/24
reboot     # 重启系统,使得eth1网卡生效# 按ctrl+]可回到真机# 真机通过ssh连接lvs1
[root@myhost ~]# ssh 192.168.88.5# 配置第3台机器作为web1
[root@myhost ~]# virsh console web1
localhost login: root
Password: a# 登陆之后,将以下内容复制到命令行
hostnamectl set-hostname web1
nmcli connection modify "System eth0" con-name eth0
nmcli connection modify eth0 autoconnect no
rm -f /etc/sysconfig/network-scripts/ifcfg-eth1
nmcli connection add con-name eth1 ifname eth1 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.99.100/24 ipv4.gateway 192.168.99.5
reboot# 按ctrl+]可回到真机# 真机通过ssh连接web1
[root@myhost ~]# ssh 192.168.99.100# 配置第4台机器作为web2
[root@myhost ~]# virsh console web2
localhost login: root
Password: a# 登陆之后,将以下内容复制到命令行
hostnamectl set-hostname web2
nmcli connection modify "System eth0" con-name eth0
nmcli connection modify eth0 autoconnect no
rm -f /etc/sysconfig/network-scripts/ifcfg-eth1
nmcli connection add con-name eth1 ifname eth1 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.99.200/24 ipv4.gateway 192.168.99.5
reboot# 按ctrl+]可回到真机# 真机通过ssh连接web2
[root@myhost ~]# ssh 192.168.99.200
  • 虚拟机已关闭selinux和防火墙 。
  • 在pubserver上准备管理环境
# 创建工作目录
[root@pubserver ~]# mkdir cluster
[root@pubserver ~]# cd cluster/#创建主配置文件
[root@pubserver cluster]# vim ansible.cfg
[defaults]
inventory = inventory
host_key_checking = false  # 不检查主机密钥# 创建主机清单文件及相关变量
[root@pubserver cluster]# vim inventory
[clients]
client1 ansible_host=192.168.88.10[webservers]
web1 ansible_host=192.168.99.100
web2 ansible_host=192.168.99.200[lb]
lvs1 ansible_host=192.168.88.5[all:vars]   # all是ansible自带的组,表示全部主机
ansible_ssh_user=root
ansible_ssh_pass=a# 创建文件目录,用于保存将要拷贝到远程主机的文件
[root@pubserver cluster]# mkdir files# 编写yum配置文件
[root@pubserver cluster]# vim files/local88.repo
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0[rpms]
name = rpms
baseurl = ftp://192.168.88.240/rpms
enabled = 1
gpgcheck = 0
[root@pubserver cluster]# vim files/local99.repo
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.99.240/dvd/BaseOS
enabled = 1
gpgcheck = 0[AppStream]
name = AppStream
baseurl = ftp://192.168.99.240/dvd/AppStream
enabled = 1
gpgcheck = 0[rpms]
name = rpms
baseurl = ftp://192.168.99.240/rpms
enabled = 1
gpgcheck = 0# 编写用于上传yum配置文件的playbook
[root@pubserver cluster]# vim 01-upload-repo.yml
---
- name: config repos.dhosts: alltasks:- name: delete repos.d  # 删除repos.d目录file:path: /etc/yum.repos.dstate: absent- name: create repos.d  # 创建repos.d目录file:path: /etc/yum.repos.dstate: directorymode: '0755'- name: config local88      # 上传repo文件到88网段hosts: clients,lbtasks:- name: upload local88copy:src: files/local88.repodest: /etc/yum.repos.d/- name: config local99      # 上传repo文件到99网段hosts: webserverstasks:- name: upload local99copy:src: files/local99.repodest: /etc/yum.repos.d/[root@pubserver cluster]# ansible-playbook 01-upload-repo.yml

2  配置LVS NAT模式步骤 

<1> 操作流程

Real Server:

        -  配置WEB服务器

Director Server:

        -  在上安装并启用ipvsadm- 创建虚拟服务器

        -  向虚拟服务器中加入节点

Client:

        -  连接虚拟服务器测试

<2> 实施

  • 配置2台web服务器
# 创建首页文件,文件中包含ansible facts变量
[root@pubserver cluster]# vim files/index.html
Welcome from {{ansible_hostname}}# 配置web服务器
[root@pubserver cluster]# vim 02-config-webservers.yml
---
- name: config webservershosts: webserverstasks:- name: install nginx  # 安装nginxyum:name: nginxstate: present- name: upload index   # 上传首页文件到web服务器template:src: files/index.htmldest: /usr/share/nginx/html/index.html- name: start nginx    # 启动服务service:name: nginxstate: startedenabled: yes[root@pubserver cluster]# ansible-playbook 02-config-webservers.yml# 在lvs1上测试到web服务器的访问
[root@lvs1 ~]# curl http://192.168.99.100
Welcome from web1
[root@lvs1 ~]# curl http://192.168.99.200
Welcome from web2
  • 确保lvs1的ip转发功能已经打开。该功能需要改变内核参数
# 查看ip转发功能的内核参数
[root@lvs1 ~]# sysctl -a    # 查看所有的内核参数
[root@lvs1 ~]# sysctl -a | grep ip_forward  # 查看ip_foward参数
net.ipv4.ip_forward = 1   # 1表示打开转发,0表示关闭转发# 设置打开ip_forward功能
[root@pubserver cluster]# vim 03-sysctl.yml
---
- name: config sysctlhosts: lbtasks:- name: set ip_forwardsysctl:   # 用于修改内核参数的模块name: net.ipv4.ip_forward       # 内核模块名value: '1'        # 内核模块的值sysctl_set: yes   # 立即设置生效sysctl_file: /etc/sysctl.conf   # 配置写入文件[root@pubserver cluster]# ansible-playbook 03-sysctl.yml# 测试从客户端到服务器的访问
[root@client1 ~]# curl http://192.168.99.100
Welcome from web1
[root@client1 ~]# curl http://192.168.99.200
Welcome from web2
  • 安装LVS
[root@pubserver cluster]# vim 04-inst-lvs.yml
---
- name: install lvshosts: lbtasks:- name: install lvs  # 安装lvsyum:name: ipvsadmstate: present[root@pubserver cluster]# ansible-playbook 04-inst-lvs.yml

ipvsadm使用说明

-A: 添加虚拟服务器
-E: 编辑虚拟服务器
-D: 删除虚拟服务器
-t: 添加tcp服务器
-u: 添加udp服务器
-s: 指定调度算法。如轮询rr/加权轮询wrr/最少连接lc/加权最少连接wlc-a: 添加虚拟服务器后,向虚拟服务器中加入真实服务器
-r: 指定真实服务器
-w: 设置权重
-m: 指定工作模式为NAT
-g: 指定工作模式为DR

ipvsadm命令用法

  1. 使用命令添加基于TCP一些的集群服务
  2. 在集群中添加若千台后端真实服务器
  3. 实现同一客户端访问,调度器分配固定服务器
  4. 会使用ipvsadm实现规则的增、删、改保存ipvsadm规则
  • 配置LVS
# 为web服务器创建虚拟服务器,使用rr调度算法
[root@lvs1 ~]# ipvsadm -A -t 192.168.88.5:80 -s rr
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln  # L是列出,n是使用数字,而不是名字# 向虚拟服务器中添加RIP
[root@lvs1 ~]# ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -w 1 -m
[root@lvs1 ~]# ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.200 -w 2 -m
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln# 验证
[root@client1 ~]# for i in {1..6}
> do
> curl http://192.168.88.5
> done
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web1# 删除配置。(如果配置有错,用以下命令删除重配置)
[root@lvs1 ~]# ipvsadm -D -t 192.168.88.5:80# 修改调度模式为加权轮询
[root@lvs1 ~]# ipvsadm -E -t 192.168.88.5:80 -s wrr
# 验证配置
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.5; done
Welcome from web2
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web2
Welcome from web1

3  LVS DR模式

  • 架构图

  • LVS DR模式,LVS主机和web服务器都是单网卡。它们连在同一网络中

  • 修改实验环境

client1eth0-> 192.168.88.10
lvs1eth0->192.168.88.5删除eth1的IP
web1eth0->192.168.88.100删除eth1的IP
web2eth0->192.168.88.200删除eth1的IP
# 删除lvs虚拟服务器配置
[root@lvs1 ~]# ipvsadm -D -t 192.168.88.5:80
[root@lvs1 ~]# ipvsadm -Ln# 删除lvs1上eth1的配置
[root@lvs1 ~]# nmcli connection modify eth1 ipv4.method disabled ipv4.addresses ''
[root@lvs1 ~]# nmcli connection down eth1# 修改web1的配置:停掉eth1的地址。配置eth0的地址为192.168.88.100
# 进入网卡配置文件目录
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
# eth0网卡的配置文件叫ifcfg-eth0
[root@web1 network-scripts]# ls ifcfg-eth*
ifcfg-eth0  ifcfg-eth1
# 配置eth0地址
[root@web1 network-scripts]# vim ifcfg-eth0
TYPE=Ethernet             # 网络类型为以太网
BOOTPROTO=none            # IP地址是静态配置的,也可以用static
NAME=eth0                 # 为设备重命名
DEVICE=eth0               # 网卡设备名
ONBOOT=yes                # 开机激活网卡
IPADDR=192.168.88.100     # IP地址
PREFIX=24                 # 子网掩码长度
GATEWAY=192.168.88.254    # 网关[root@web1 ~]# systemctl restart NetworkManager    # 重启网络服务# 在web1上停掉eth1
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=no
[root@web1 ~]# nmcli connection down eth1     # 终端卡住,关掉它,在新终端重新连# 修改web2的网络
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.88.200
PREFIX=24
GATEWAY=192.168.88.254
[root@web2 ~]# systemctl restart NetworkManager
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=no
[root@web2 ~]# nmcli connection down eth1# 修改pubserver的主机清单文件
[root@pubserver cluster]# cp inventory inventory.bak
[root@pubserver cluster]# vim inventory
[clients]
client1 ansible_host=192.168.88.10[webservers]
web1 ansible_host=192.168.88.100
web2 ansible_host=192.168.88.200[lb]
lvs1 ansible_host=192.168.88.5[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a# 修改2台web服务器yum配置文件中的地址
[root@web1 ~]# sed -i 's/99/88/' /etc/yum.repos.d/local99.repo
[root@web1 ~]# cat /etc/yum.repos.d/local99.repo
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0[rpms]
name = rpms
baseurl = ftp://192.168.88.240/rpms
enabled = 1
gpgcheck = 0

4  配置LVS DR模式

<1>操作流程

Real Server

        - 配置WEB服务器

        - 配置辅助IP地址、调整内核参数

Director Server

        - 在上安装并启用ipvsadml

        - 配置辅助IP地址

        - 创建虚拟服务器、向虚拟服务器中加入节点

Client:

        - 连接虚拟服务器测试

<2>  ARP广播的问题

当客户端发起访问VIP对应的域名的请求时,根据网络通信原理会产生ARP广播

因为负载均衡器和真实的服务器在同一网络并且VIP设置在集群中的每个节点上

此时集群内的真实服务器会尝试回答来自客户端的ARP广播,这就会产生问题,大家都说我是VIP

<3>  内核参数说明

arp_ignore(定义回复ARP广播的方式)
-0:回应所有的本地地址ARP广播,本地地址可以配置在任意网络接口(默认值)
-1:只回应配置在入站网卡接口上的任意IP地址的ARP广播

arp_announce
-0:使用配置在任意网卡接口上的本地IP地址
-2:对查询目标使用最适当的本地地址。在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送

<4> 实施

  • 在lvs1的eth0上配置vip 192.168.88.15。
[root@pubserver cluster]# vim 05-config-lvsvip.yml
---
- name: config lvs viphosts: lbtasks:- name: add viplineinfile:   # 确保文件中有某一行内容path: /etc/sysconfig/network-scripts/ifcfg-eth0line: IPADDR2=192.168.88.15notify: restart eth0  # 通知执行handlers中的任务handlers:   # 被通知执行的任务写到这里- name: restart eth0shell: nmcli connection down eth0; nmcli connection up eth0
[root@pubserver cluster]# ansible-playbook 05-config-lvsvip.yml# 在lvs1查看添加的IP地址
[root@lvs1 ~]# ip a s eth0 | grep 88inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.15/24 brd 192.168.88.255 scope global secondary noprefixroute eth0
  • 在2台web服务器的lo上配置vip 192.168.88.15。lo:0网卡需要使用network-scripts提供的配置文件进行配置。
[root@pubserver cluster]# vim 06-config-webvip.yml
---
- name: config webservers viphosts: webserverstasks:- name: install network-scripts  # 安装服务yum:name: network-scriptsstate: present- name: add lo:0   # 创建lo:0的配置文件copy:dest: /etc/sysconfig/network-scripts/ifcfg-lo:0content: |DEVICE=lo:0NAME=lo:0IPADDR=192.168.88.15NETMASK=255.255.255.255NETWORK=192.168.88.15BROADCAST=192.168.88.15ONBOOT=yesnotify: activate lo:0handlers:- name: activate lo:0   # 激活网卡shell: ifup lo:0
[root@pubserver cluster]# ansible-playbook 06-config-webvip.yml# 查看结果
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cat ifcfg-lo:0
DEVICE=lo:0
NAME=lo:0
IPADDR=192.168.88.15
NETMASK=255.255.255.255
NETWORK=192.168.88.15
BROADCAST=192.168.88.15
ONBOOT=yes[root@web1 network-scripts]# ifconfig  # 可以查看到lo:0网卡信息
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.88.15  netmask 255.255.255.255loop  txqueuelen 1000  (Local Loopback)
  • 在2台web服务器上配置内核参数,使得它们不响应对192.168.88.15的请求
[root@web1 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 0
[root@web1 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 0[root@web1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@web1 ~]# sysctl -p[root@web2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@web2 ~]# sysctl -p
  • 在lvs1上配置虚拟服务器
# 创建虚拟服务器
[root@lvs1 ~]# ipvsadm -A -t 192.168.88.15:80 -s wlc
# 向虚拟服务器中加真实服务器
[root@lvs1 ~]# ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.100 -w 1 -g
[root@lvs1 ~]# ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.200 -w 2 -g
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln# 客户验证
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web2
Welcome from web1
Welcome from web2

附:出错时,排错步骤:

# 在lvs上可以访问到web服务器
[root@lvs1 ~]# curl http://192.168.88.100/
192.168.99.100
[root@lvs1 ~]# curl http://192.168.88.200/
apache web server2# 查看vip
[root@lvs1 ~]# ip a s eth0 | grep 88inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.15/24 brd 192.168.88.255 scope global secondary noprefixroute eth0[root@web1 ~]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.88.15  netmask 255.255.255.255loop  txqueuelen 1000  (Local Loopback)# 查看内核参数
[root@web1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2# 查看规则
[root@lvs1 ~]# 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.88.15:80 wlc-> 192.168.88.100:80            Route   1      0          12-> 192.168.88.200:80            Route   2      0          18

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++进阶】:AVL树(平衡因子)

AVL树 一.概念二.插入1.搜索二叉树2.平衡因子 三.旋转1.更新平衡因子2.旋转1.左单旋2.右单旋3.先右旋再左旋4.先左旋再右旋 四.完整代码 一.概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元…

2023区块链应用操作员认证(4级)报名来弘博创新

区块链应用操作员&#xff0c;是指运用区块链技术及工具&#xff0c;从事政务、金融、医疗、教育、养老等场景系统应用操作的人员。 腾讯作为广东省第一批公布的社会培训评价组织&#xff0c;可开展职业技能等级认定职业(工种)区块链应用操作员(4-3-2-1级)。 证书含金量 证书是…

Redis 删除策略

文章目录 Redis 删除策略一、过期数据二、数据删除策略1、定时删除2、惰性删除3、定期删除4、删除策略对比 三、逐出算法 Redis 删除策略 一、过期数据 Redis是一种内存级数据库&#xff0c;所有数据均存放在内存中&#xff0c;内存中的数据可以通过TTL指令获取其状态 XX &a…

100万级连接,爱奇艺WebSocket网关如何架构

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《高并发网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/微…

BPPISE数据科学案例框架

本专题共10篇内容&#xff0c;包含淘宝APP基础链路过去一年在用户体验数据科学领域&#xff08;包括商详、物流、性能、消息、客服、旅程等&#xff09;一些探索和实践经验。 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升&#xff1b;在物流侧洞察用户求助时间与…

Kafka3.0.0版本——增加副本因子

目录 一、服务器信息二、启动zookeeper和kafka集群2.1、先启动zookeeper集群2.2、再启动kafka集群 三、增加副本因子3.1、增加副本因子的概述3.2、增加副本因子的示例3.2.1、创建topic(主题)3.2.2、手动增加副本存储 一、服务器信息 四台服务器 原始服务器名称原始服务器ip节点…

被问到: http 协议和 https 协议的区别怎么办?别慌,这篇文章给你答案

前言 作为软件测试师&#xff0c;大家都知道一些常用的网络协议是我们必须要了解和掌握的&#xff0c;比如 HTTP 协议&#xff0c;HTTPS 协议就是两个使用非常广泛的协议&#xff0c;所以也是面试官问的面试的时候问的比较多的两个协议&#xff1b;因为这两个协议有相似和关联的…

为什么说网络安全是风口行业?是it行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…

移除链表元素_每日一题

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 ☕今日份刷题&#xff1a;移除链表元素 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例1&…

初步了解android如何锁键

百年三万六千日&#xff0c;光阴只有瞬息间。 手机下面的三个图形&#xff0c;正方形&#xff0c;园形&#xff0c;三角形分别的什么建&#xff1f;都起到什么功能&#xff1f; 三角形的那个叫返回键&#xff0c;就是可以返回你的上一个操作; 圆形是HOME键&#xff0c;按一下可…

使用IntelliJ IDEA本地启动调试Flink流计算工程的2个异常解决

记录&#xff1a;471 场景&#xff1a;使用IntelliJ IDEA本地启动调试Flink流计算时&#xff0c;报错一&#xff1a;加载DataStream报错java.lang.ClassNotFoundException。报错二&#xff1a;No ExecutorFactory found to execute the application。 版本&#xff1a;JDK 1.…

实现在一张图片中寻找另一张图片的目标

OpenCV库中的SIFT特征检测算法和FLANN&#xff08;快速最近邻搜索库&#xff09;匹配算法来找到一个图片中的元素在另一个图片中的位置&#xff0c;并在源图片中标出它们的位置。 以下是一个简单的例子&#xff0c;使用OpenCV库&#xff0c;利用SIFT特征检测算法&#xff0c;在…

无涯教程-JavaScript - IMABS函数

描述 IMABS函数以x yi或x yj文本格式返回复数的绝对值(模)。 Excel中的复数 复数简单地以文本形式存储在Excel中。 当将格式为" a bi"或" a bj"的文本字符串提供给Excel的内置复数函数之一时,这被解释为复数。 复数函数可以接受简单数值,因为它等效…

PostgreSQL 数据库使用 psql 导入 SQL

最近我们有一个 SQL 需要导入到 PostgreSQL &#xff0c;但数据格式使用的是用&#xff1a; -- -- TOC entry 7877 (class 0 OID 21961) -- Dependencies: 904 -- Data for Name: upload_references; Type: TABLE DATA; Schema: public; Owner: - --COPY public.upload_refere…

持续集成/技术交付全流程流水线工具的设计与落地

文章目录 持续集成/技术交付全流程流水线工具的设计与落地概述工具架构设计主要功能模块代码库Jenkins 流水线代码构建自动化测试产品部署监控报警 使用方法步骤一&#xff1a;安装 Jenkins步骤二&#xff1a;创建 Jenkins 流水线步骤三&#xff1a;配置监控报警步骤四&#xf…

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;加速科技杯二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼…

Linux文件操作

目录 复制文件、目录 cp 移动 重命名文件或目录 mv 创建删除文件 touch rm(remove) 创建删除目录 mkdir(make directory) rmdir(remove directory) 复制文件、目录 cp cp(copy) 同一个目录下复制&#xff0c;所以重命名了一下&#xff1b;把它复制到linuxcast.net/目录下可以…

方案:TSINGSEE青犀AI智能分析网关森林防火智慧监管平台方案

一、方案背景 森林是地球上最重要的生态系统之一&#xff0c;对环境、气候、水循环和空气质量具有重要影响。森林火灾会造成巨大的经济损失&#xff0c;具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点&#xff0c;严重危及人民生命财产和森林资源安全&a…

69、配置AWS服务,接收来自RTSP流的推送

基本思想:在上一篇的基础和视频教程之后,进行简单的aws服务,进行RTSP流的接收 第一步: 第二步:配置video_stream,记得选择香港节点 同时记录这个信息,后面的策略需要填充 第三步:进行策略设置 第四步:策略设置,选中右上角的创建策略 第五步、进行json填充 第六步:填…

骨传导耳机十大品牌有哪个,骨传导耳机十大品牌排行榜分享

在这个信息爆炸的时代&#xff0c;确实很容易在市场上找到各种各样的骨传导耳机品牌和型号&#xff0c;对于没有相关经验的消费者来说&#xff0c;他们很难判断哪些产品是真正值得信赖的&#xff0c;哪些可能有质量问题或者不适合自己的需求&#xff0c;现如今骨传导耳机的市场…