集群及LVS简介、LVSNAT模式原理、LVSNAT模式配置、LVSDR模式原理、LVSDR模式配置、LVS错误排查

目录

集群

LVS

配置LVS NAT模式步骤

LVS DR模式

配置LVS DR模式


集群

  • 将很多机器组织到一起,作为一个整体对外提供服务

  • 集群在扩展性、性能方面都可以做到很灵活

  • 集群分类:

    • 负载均衡集群:Load Balance
    • 高可用集群:High Availability
    • 高性能计算:High Performance Computing

LVS

  • LVS:Linux Virtual Server,Linux虚拟服务器

  • 实现负载均衡集群

  • 作者:章文嵩。国防科技大学读博士期间编写

  • LVS的工作模式:

    • NAT:网络地址转换
    • DR:路由模式
    • TUN:隧道模式
  • 术语:

    • 调度器:LVS服务器
    • 真实服务器Real Server:提供服务的服务器
    • VIP:虚拟地址,提供给用户访问的地址
    • DIP:指定地址,LVS服务器上与真实服务器通信的地址
    • RIP:真实地址,真实服务器的地址
  • 常见的调度算法,共10个,常用的有4个:

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

 

  • 环境准备

    • pubserver:eth0->192.168.88.240,eth1->192.168.99.240
    • client1:eth0->192.168.88.10,网关192.168.88.5
    • lvs1: eth0 -> 192.168.88.5;eth1->192.168.99.5
    • web1:eth1->192.168.99.100;网关192.168.99.5
    • web2:eth1->192.168.99.200;网关192.168.99.5
  • 虚拟机已关闭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.d

  hosts: all

  tasks:

    - name: delete repos.d  # 删除repos.d目录

      file:

        path: /etc/yum.repos.d

        state: absent


    - name: create repos.d  # 创建repos.d目录

      file:

        path: /etc/yum.repos.d

        state: directory

        mode: '0755'


- name: config local88      # 上传repo文件到88网段

  hosts: clients,lb

  tasks:

    - name: upload local88

      copy:

        src: files/local88.repo

        dest: /etc/yum.repos.d/


- name: config local99      # 上传repo文件到99网段

  hosts: webservers

  tasks:

    - name: upload local99

      copy:

        src: files/local99.repo

        dest: /etc/yum.repos.d/

        

[root@pubserver cluster]# ansible-playbook 01-upload-repo.yml
配置LVS NAT模式步骤
  • 配置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 webservers

  hosts: webservers

  tasks:

    - name: install nginx  # 安装nginx

      yum:

        name: nginx

        state: present


    - name: upload index   # 上传首页文件到web服务器

      template:

        src: files/index.html

        dest: /usr/share/nginx/html/index.html


    - name: start nginx    # 启动服务

      service:

        name: nginx

        state: started

        enabled: 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 sysctl

  hosts: lb

  tasks:

    - name: set ip_forward

      sysctl:   # 用于修改内核参数的模块

        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 lvs

  hosts: lb

  tasks:

    - name: install lvs  # 安装lvs

      yum:

        name: ipvsadm

        state: present

        

[root@pubserver cluster]# ansible-playbook 04-inst-lvs.yml
  • ipvsadm使用说明
[root@lvs1 ~]# ipvsadm

-A: 添加虚拟服务器

-E: 编辑虚拟服务器

-D: 删除虚拟服务器

-t: 添加tcp服务器

-u: 添加udp服务器

-s: 指定调度算法。如轮询rr/加权轮询wrr/最少连接lc/加权最少连接wlc


-a: 添加虚拟服务器后,向虚拟服务器中加入真实服务器

-r: 指定真实服务器

-w: 设置权重

-m: 指定工作模式为NAT

-g: 指定工作模式为DR
  • 配置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

LVS DR模式

 

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

  • 修改实验环境

    • client1:eth0-> 192.168.88.10
    • lvs1:eth0->192.168.88.5,删除eth1的IP
    • web1:eth0->192.168.88.100,删除eth1的IP
    • web2:eth0->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

配置LVS DR模式

  1. 在lvs1的eth0上配置vip 192.168.88.15。
[root@pubserver cluster]# vim 05-config-lvsvip.yml

---

- name: config lvs vip

  hosts: lb

  tasks:

    - name: add vip

      lineinfile:   # 确保文件中有某一行内容

        path: /etc/sysconfig/network-scripts/ifcfg-eth0

        line: IPADDR2=192.168.88.15

      notify: restart eth0  # 通知执行handlers中的任务


  handlers:   # 被通知执行的任务写到这里

    - name: restart eth0

      shell: 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 88

    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0

    inet 192.168.88.15/24 brd 192.168.88.255 scope global secondary noprefixroute eth0

2.在2台web服务器的lo上配置vip 192.168.88.15。lo:0网卡需要使用network-scripts提供的配置文件进行配置

[root@pubserver cluster]# vim 06-config-webvip.yml

---

- name: config webservers vip

  hosts: webservers

  tasks:

    - name: install network-scripts  # 安装服务

      yum:

        name: network-scripts

        state: present


    - name: add lo:0   # 创建lo:0的配置文件

      copy:

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

        content: |

          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

      notify: activate lo:0


  handlers:

    - 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 65536

        inet 192.168.88.15  netmask 255.255.255.255

        loop  txqueuelen 1000  (Local Loopback)

3.在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

 4.在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 88

    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0

    inet 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 65536

        inet 192.168.88.15  netmask 255.255.255.255

        loop  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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask+python高校学生综合测评管理系统 phl8b

系统包括管理员、教师和学生三个角色&#xff1b; 。通过研究&#xff0c;以MySQL为后端数据库&#xff0c;以python为前端技术&#xff0c;以pycharm为开发平台&#xff0c;采用vue架构&#xff0c;建立一个提供个人中心、学生管理、教师管理、课程类型管理、课程信息管理、学…

CSS基础---新手入门级详解

CSS:层叠样式表 CSS&#xff08;Cascading Style Sheets,层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档添加样式&#xff08;字体、间距和颜色&#xff09;的计算机语言&#xff0c;css扩展名为.css。 实例: <!DOCTYPE html><html> <head><…

ubuntu中尝试安装ros2

首先&#xff0c;ubuntu打开后有个机器人栏目&#xff0c;打开后&#xff0c;有好多可选的&#xff0c;看了半天 ,好像是博客&#xff0c;算了&#xff0c;没啥关系&#xff0c;再看看其他菜单 这些都不是下载链接。先不管&#xff0c;考虑了一下&#xff0c;问了ai&#xff…

板块一 Servlet编程:第二节 Servlet的实现与生命周期 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第二节 Servlet的实现与生命周期 一、Servlet相关概念Serlvet的本质 二、中Web项目中实现Servlet规范&#xff08;1&#xff09;在普通的Java类中继承HttpServlet类&#xff08;2&#xff09;重写service方法编辑项目对外访问路径 二、Servlet工…

LeetCode.144. 二叉树的前序遍历

题目 144. 二叉树的前序遍历 分析 这道题目是比较基础的题目&#xff0c;我们首先要知道二叉树的前序遍历是什么&#xff1f; 就是【根 左 右】 的顺序&#xff0c;然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现…

[C++] opencv + qt 创建带滚动条的图像显示窗口代替imshow

在OpenCV中&#xff0c;imshow函数默认情况下是不支持滚动条的。如果想要显示滚动条&#xff0c;可以考虑使用其他库或方法来进行实现。 一种方法是使用Qt库&#xff0c;使用该库可以创建一个带有滚动条的窗口&#xff0c;并在其中显示图像。具体步骤如下&#xff1a; 1&…

使用PyOD进行异常值检测

异常值检测各个领域的关键任务之一。PyOD是Python Outlier Detection的缩写&#xff0c;可以简化多变量数据集中识别异常值的过程。在本文中&#xff0c;我们将介绍PyOD包&#xff0c;并通过实际给出详细的代码示例 PyOD简介 PyOD为异常值检测提供了广泛的算法集合&#xff0c…

【Rust】使用Rust实现一个简单的shell

一、Rust Rust是一门系统编程语言&#xff0c;由Mozilla开发并开源&#xff0c;专注于安全、速度和并发性。它的主要目标是解决传统系统编程语言&#xff08;如C和C&#xff09;中常见的内存安全和并发问题&#xff0c;同时保持高性能和底层控制能力。 Rust的特点包括&#x…

C++构造和折构函数详解,超详细!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家龙年好呀&#xff0c;今天我们来学习一下C构造函数和折构函数。 文章目录 1.构造函数 1.1构造函数的概念 1.2构造函数的思想 1.3构造函数的特点 1.4构造函数的作用 1.5构造函数的操作 1.6构造函数…

洗地机哪个品牌最耐用质量好?耐用的洗地机型号

相较于传统的打扫方式&#xff0c;洗地机的出现可以称得上是懒人福音。一台洗地机就能包办吸、扫、拖所有清洁步骤&#xff0c;节省了大量的打扫时间。不过最近几年洗地机行业涌入的品牌属实有些鱼龙混杂了&#xff0c;至于型号就更是乱七八糟&#xff0c;稍不留神就会白白花了…

深度学习之线性模型

深度学习之线性模型 y w * x模型思路 y w * x b模型思路 y w * x模型 思路 这里求权重w , 求最适合的权重&#xff0c;就是求损失值最小的时候 这里用穷举法:在一个范围内&#xff0c;列出w的所有值&#xff0c;并且计算出每组数据的平均损失值,以w 为横坐标, 损失值为纵坐…

【射影几何15】python双曲几何工具geometry_tools

目录 一、说明二、​环境问题&#xff1a;如何安装三、实现一个简单的例子四、绘制双曲组五、使用有限状态自动机加快速度六、资源和代码 一、说明 Geometry_tools 是一个 Python 包&#xff0c;旨在帮助您处理和可视化双曲空间和射影空间上的群动作。 该包主要构建在 numpy、…

C语言求解猴子分桃子

问题&#xff1a;海滩上有一堆桃子&#xff0c;五只猴子来分。第一只猴子把这堆桃子平均分为五份&#xff0c;多了一个&#xff0c;这只 猴子把多的一个扔入海中&#xff0c;拿走了一份。第二只猴子把剩下的桃子又平均分成五份&#xff0c;又多了 一个&#xff0c;它同样把多的…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Divider组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Divider组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Divider组件 提供分隔器组件&#xff0c;分隔不同内容块/内容元素。 子组件 …

2024年湖南省考报名时间及流程,选岗很重要!

注册时间&#xff1a;2024年2月18日9:00-25日17:00 报名时间&#xff1a;2024年2月19日9:00-25日17:00 网上确认时间&#xff1a;2024年2月28日9:00-3月2日24:00 缴费时间&#xff1a;2024年2月28日9:00-3月2日24:00 打印准考证时间&#xff1a;2024年3月11日9:00-15日17:00 考…

漂亮不是工业HMI的追求?我劝你,这个想法要变了

对于工业HMI&#xff08;Human Machine Interface&#xff09;来说&#xff0c;漂亮并不是唯一的追求&#xff0c;但它仍然是一个重要的方面。在工业环境中&#xff0c;HMI的设计需要考虑到使用者的工作效率和安全性&#xff0c;因此功能性和易用性是首要考虑的因素。然而&…

【EAI 015】CLIPort: What and Where Pathways for Robotic Manipulation

论文标题&#xff1a;CLIPort: What and Where Pathways for Robotic Manipulation 论文作者&#xff1a;Mohit Shridhar1, Lucas Manuelli, Dieter Fox1 作者单位&#xff1a;University of Washington, NVIDIA 论文原文&#xff1a;https://arxiv.org/abs/2109.12098 论文出处…

【计算机网络】网络基础入门

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 局域网和广域网2. 协议2.1 认识协议2.2 协议分层 3. OSI七层模型和TCP五层&#x…

Ainx-V0.2-简单的连接封装与业务绑定

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

vue中watch和computed的不同

第076个 查看专栏目录: VUE ------ element UI Vue.js 中的 watch 和 computed 都是用于监听数据变化并执行相应操作的选项&#xff0c;但它们的使用场景和优劣势有所不同。 两者区别 watch 用于监听一个或多个数据属性的变化&#xff0c;并在变化时执行相应的处理函数。 它…