OpenvSwitch完全使用手册

2023-05-16

本文主要参考 Overview of functionality and components 以及 Frequently Asked Questions 以及结合自己的理解。

http://sdnhub.cn/index.php/openv-switch-full-guide/

1 什么是OpenvSwitch

OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。OpenvSwitch还支持多个物理机的分布式环境。

在这种某一台物理机器的虚拟化环境中,一个虚拟交换机(vswitch)主要有如下两个作用:

  • 传递虚拟机VM之间的流量
  • 以及实现VM和外界网络的通信。

如下图所示:

openvswitch-intro

整个OVS代码用C写的。目前有以下功能:

  • Standard 802.1Q VLAN model with trunk and access ports
  • NIC bonding with or without LACP on upstream switch
  • NetFlow, sFlow(R), and mirroring for increased visibility
  • QoS (Quality of Service) configuration, plus policing
  • GRE, GRE over IPSEC, VXLAN, and LISP tunneling
  • 802.1ag connectivity fault management
  • OpenFlow 1.0 plus numerous extensions
  • Transactional configuration database with C and Python bindings
  • High-performance forwarding using a Linux kernel module

2 OpenvSwitch的组成

OVS的核心组件包括 ovsdb-server,ovs-vswitchd,ovs kernel module。如下图所示:

openvswitch-main-components

运行原理:

内核模块实现了多个“数据路径(DataPath)”(类似于网桥),每个都可以有多个“vports”(类似于桥内的端口)。每个数据路径也通过关联流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后遇到相同类型的数据包可以在内核中执行操作)。细节如下图所示:

openvswitch-details

除了核心组件,还包括一些管理工具,详细介绍如下:

  • ovs-vswitchd:OVS守护进程是OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-based switching)。它和上层 controller 通信遵从 OPENFLOW 协议,它与 ovsdb-server 通信使用 OVSDB 协议,它和内核模块通过netlink通信,它支持多个独立的 datapath(网桥),它通过更改flow table 实现了绑定和VLAN等功能。
  • ovsdb-server:OVS轻量级的数据库服务器,用于整个OVS的配置信息,包括接口,交换内容,VLAN 等等。ovs-vswitchd 根据数据库中的配置信息工作。它于 manager 和 ovs-vswitchd 交换信息使用了OVSDB(JSON-RPC)的方式。
  • ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
  • ovs-vsctl:主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库。
  • ovs-appctl:主要是向OVS守护进程发送命令的,一般用不上。 a utility that sends commands to running Open vSwitch daemons (ovs-vswitchd)
  • ovsdbmonitor:GUI工具来显示ovsdb-server中数据信息。(Ubuntu下是可以使用apt-get安装,可以远程获取OVS数据库和OpenFlow的流表)
  • ovs-controller:一个简单的OpenFlow控制器
  • ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容。
  • ovs-pki:OpenFlow交换机创建和管理公钥框架;
  • ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息;
  • brocompat.ko : Linux bridge compatibility module
  • openvswitch.ko : Open vSwitch switching datapath

一些用用的OVS命令示例:

sudo ovs-vsctl show
sudo ovs-vsctl add-br mybridge
sudo ovs-vsctl del-br mybridge
sudo ovs-vsctl add-port mybridge port-name
sudo ovs-vsctl del-port mybridge port-name
sudo ovs-vsctl list Bridge/Port/Interface/...
sudo ovs-appctl fdb/show mybridge
sudo ovs-ofctl show mybridge
sudo ovs-ofctl dump-flows mybridge
sudo ovs-ofctl add-flow mybridge dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2,actions=output:6
sudo ovs-ofctl del-flows mybridge dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2
sudo ovs-ofctl add-flow dp0 in_port=2,actions=output:6
# This will delete all the flow entries in the flow table
sudo ovs-ofctl del-flows mybridge

3 OpenvSwitch和其他vswitch

这里其他的vswitch,包括VMware vNetwork distributed switch以及思科的Cisco Nexus 1000V。

VMware vNetwork distributed switch以及思科的Cisco Nexus 1000V这种虚拟交换机提供的是一个集中式的控制方式,。而OVS则是一个独立的vswitch,他运行在每个实现虚拟化的物理机器上,并提供远程管理。

OVS提供了两种在虚拟化环境中远程管理的协议:

  • 一个是OpenFlow,通过流表来管理交换机的行为,
  • 一个是OVSDB management protocol,用来暴露sietch的port状态。

4 概念及工作流程

4.1 vswitch、Bridge、Datapath

在网络中,交换机和桥都是同一个概念,OVS实现了一个虚拟机的以太交换机,换句话说,OVS也就是实现了一个以太桥。那么,在OVS中,给一个交换机,或者说一个桥,用了一个专业的名词,叫做DataPath!

要了解OVS如何工作,首先需要知道桥的概念:

网桥也叫做桥接器,连接两个局域网的设备,网桥工作在数据链路层,将两个LAN连接,根据MAC地址来转发帧,可以看成一个“低层的路由器”(路由器工作在网络层,根据IP地质进行转发)。

网桥的工作原理

网桥处理包遵循以下几条规则:

  • 在一个接口上接收到的包不会再往那个接口上发送此包。
  • 每个接收到的包都要学习其源MAC地址。
  • 如果数据包是多播或者广播包(通过2层MAC地址确定)则要向接收端口以外的所有端口转发,如果上层协议感兴趣,则还会递交上层处理。
  • 如果数据包的地址不能再CAM表中找到,则向接收端口以外的其他端口转发。
  • 如果CAM表中能找到,则转发给相应端口,如果发送和接收都是统一端口,则不发送。

注意,网桥是以混杂模式工作的。关于网桥更多,请查阅相关资料。

OVS中的bridge

上面,说到,一个桥就是一个交换机。例如,在OVS中:

root@localhost:~# ovs-vsctl add-br br0
root@localhost:~# ifconfig br0
      br0    Link encap:Ethernet  HWaddr 1a:09:56:ea:0b:49  
      inet6 addr: fe80::1809:56ff:feea:b49/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:1584 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:316502 (316.5 KB)  TX bytes:468 (468.0 B)

当我们创建了一个交换机(网桥)以后,此时网络功能不受影响,但是会产生一个虚拟网卡,名字就是网桥的名称(br-int),之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机)功能。有了这个交换机以后,还需要为这个交换机增加端口(port),一个端口,就是一个物理网卡,当网卡加入到这个交换机之后,其工作方式就和普通交换机的一个端口的工作方式类似了。

root@localhost:~# ovs-vsctl add-port br0 port

这里要特别注意,网卡加入网桥以后,要按照网桥的工作标准工作,那么加入的一个端口就必须是以混杂模式工作,工作在链路层,处理2层的帧,所以这个port就不需要配置IP了。(你没见过哪个交换的端口有IP的吧)

那么接下来你可能会问,通常的交换机不都是有一个管理接口,可以telnet到交换机上进行配置吧,那么在OVS中创建的虚拟交换机有木有这种呢,有的!上面既然创建交换机brname的时候产生了一个虚拟网口 br-int,那么,你给这个虚拟网卡配置了IP以后,就相当于给交换机的管理接口配置了IP,此时一个正常的虚拟交换机就搞定了。

root@localhost:~# ip address add 192.168.1.1/24 dev br0

最后,我们来看看一个br的具体信息:

root@localhost:~# ovs-vsctl show
bc12c8d2-6900-42dd-9c1c-30e8ecb99a1b
Bridge "br0"
    Port "eth0"
        Interface "eth0"
    Port "br0"
        Interface "br0"
            type: internal
ovs_version: "1.4.0+build0"

首先,这里显示了一个名为br0的桥(交换机),这个交换机有两个接口,一个是eth0,一个是br0,上面说到,创建桥的时候会创建一个和桥名字一样的接口,并自动作为该桥的一个端口,那么这个虚拟接口的作用,一方面是可以作为交换机的管理端口,另一方面也是基于这个虚拟接口,实现了桥的功能。

#### OpenvSwitch的典型工作流程

这一部分以一个简单的例子,说明在虚拟化环境中OpenvSwitch的典型工作流程。

前面已经说到,OVS主要是用来在虚拟化环境中。实现虚拟机之间通信以及一个虚拟机和外网之间通信,如下是一个典型的结构图:

那么,通常情况下的工作流程如下:

logical_model

  1. VM实例 instance 产生一个数据包并发送至实例内的虚拟网络接口 VNIC,图中就是 instance 中的 eth0.
  2. 这个数据包会传送到物理机上的VNIC接口,如图就是vnet接口。
  3. 数据包从 vnet NIC 出来,到达桥(虚拟交换机) br100 上.
  4. 数据包经过交换机的处理,从物理节点上的物理接口发出,如图中物理机上的 eth0 .
  5. 数据包从 eth0 出去的时候,是按照物理节点上的路由以及默认网关操作的,这个时候该数据包其实已经不受你的控制了。

一般 L2 switch 连接 eth0 的这个口是一个 trunk 口, 因为虚拟机对应的 VNET 往往会设置 VLAN TAG, 可以通过对虚拟机对应的 vnet 打 VALN TAG 来控制虚拟机的网络广播域. 如果跑多个虚拟机的话, 多个虚拟机对应的 vnet 可以设置不同的 vlan tag, 那么这些虚拟机的数据包从 eth0(4)出去的时候, 会带上TAG标记. 这样也就必须是 trunk 口才行.

6 OVS简单应用实例

6.1 创建物理机到物理机的网络拓扑

example-topo

root@localhost:~# ovs-vsctl add-br br0
root@localhost:~# ovs-vsctl add-port br0 eth0
root@localhost:~# ovs-vsctl add-port br0 eth1

6.2 创建虚拟机到虚拟机的网络拓扑

使用KVM虚拟化。

example-topo

root@localhost:~# ovs-vsctl add-br br0
root@localhost:~# cat /etc/ovs-ifup
#!/bin/sh

switch='br0'
/sbin/ifconfig  $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1

root@localhost:~# cat /etc/ovs-ifdown
#!/bin/sh

switch= 'br0'
ovs-vsctl del-port ${sw/sbin/ifconfig  $1 0.0.0.0 down
itch} $1

root@localhost:~# kvm -m 512 -net nic,macaddr=00:11:22:33:44:55 -net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
file=/path/to/disk-image,boot=on
        
root@localhost:~# kvm -m 512 -net nic,macaddr=11:22:33:44:55:66 -net \     
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
file=/path/to/disk-image,boot=on

7.Misc

7.1 查表

ovs-vsctl list bridge ovs-br

7.2 关于 Brdige 及 Port

创建 Brdige

ovs-vsctl add-br ovs-br

在 ovs-br 上添加 interface

ovs-vsctl add-port ovs-br eth0

(1) + (2) 的可以合并为:

ovs−vsctl add−br ovs-br -- add−port ovs-br eth0

删除 Bridge

ovs-vsctl del-br ovs-br #如果不存在, 会有error log
ovs-vsctl --if-exists del-br ovs-br

更改 ofport (openflow port number)为100:

ovs-vsctl add-port ovs-br eth0 -- set Interface eth0 ofport_request=100

设置 port 为 internal

ovs-vsctl set Interface eth0 type=internal

7.3 关于Controller

设置 Controller

ovs-vsctl set-controller ovs-br tcp:1.2.3.4:6633

设置 multi controller
ovs-vsctl set-controller ovs-br tcp:1.2.3.4:6633 tcp:5.6.7.8:6633

查询 Controller

ovs-vsctl show

如果有成功连到 controller 则提示 is_connected:true, 反之未连上:

ovs-vsctl get-controller ovs-br

移除 Controller
ovs-vsctl del-controller ovs-br

7.4 关于 STP (Spanning Tree Protocol)

开启 STP

ovs-vsctl set bridge ovs-br stp_enable=true

关闭 STP

ovs-vsctl set bridge ovs-br stp_enable=false

查询 STP 配置信息

ovs-vsctl get bridge ovs-br stp_enable

设置 Priority

ovs−vsctl set bridge br0 other_config:stp-priority=0x7800

设置 Cost
ovs−vsctl set port eth0 other_config:stp-path-cost=10

移除 STP 设置

ovs−vsctl clear bridge ovs-br other_config

7.5 关于 Openflow Version

支持 OpenFlow Version 1.3

ovs-vsctl set bridge ovs-br protocols=OpenFlow13

支持 OpenFlow Version 1.3 1.2

ovs-vsctl set bridge ovs-br protocols=OpenFlow12,OpenFlow13

移除 OpenFlow 支持设置

ovs-vsctl clear bridge ovs-br protocols

7.6 关于 VLAN

设置 VLAN tag

ovs-vsctl add-port ovs-br vlan3 tag=3 -- set interface vlan3 type=internal

移除 VLAN

ovs-vsctl del-port ovs-br vlan3

查询 VLAN

ovs-vsctl show
ifconfig vlan3

设置 Vlan trunk
ovs-vsctl add-port ovs-br eth0 trunk=3,4,5,6

设置已 add 的 port 为 access port, vlan id 9

ovs-vsctl set port eth0 tag=9

ovs-ofctl add-flow 设置 vlan 100

ovs-ofctl add-flow ovs-br in_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:100,output:3
ovs-ofctl add-flow ovs-br in_port=1,dl_vlan=0xffff,actions=push_vlan:0x8100,set_field:100-\>vlan_vid,output:3

ovs-ofctl add-flow 拿掉 vlan tag

ovs-ofctl add-flow ovs1 in_port=3,dl_vlan=100,actions=strip_vlan,output:1
two_vlan example

ovs-ofctl add-flow pop-vlan

ovs-ofctl add-flow ovs-br in_port=3,dl_vlan=0xffff,actions=pop_vlan,output:1

7.7 关于 GRE Tunnel

设置 GRE tunnel

ovs−vsctl add−port ovs-br ovs-gre -- set interface ovs-gre type=gre options:remote_ip=1.2.3.4

查询 GRE Tunnel

ovs-vsctl show

7.8 关于 Dump flows

Dumps OpenFlow flows 不含 hidden flows (常用)

ovs-ofctl dump-flows ovs-br

Dumps OpenFlow flows 包含 hidden flows

ovs-appctl bridge/dump-flows ovs-br

Dump 特定 bridge 的 datapath flows 不論任何 type

ovs-appctl dpif/dump-flows ovs-br

Dump 在 Linux kernel 裡的 datapath flow table (常用)

ovs-dpctl dump-flows [dp]

Top like behavior for ovs-dpctl dump-flows

ovs-dpctl-top

7.9 XenServer 开启 OpenvSwitch 方式

检查是否启动openvswitch服务:

service openvswitch status

启动服务

xe-switch-network-backend openvswitch

关闭服务

xe-switch-network-backend bridge

7.10 关于 Log

查询 log level list

ovs-appctl vlog/list

设置 log level (以 stp 设置 file 为 dbg level 为例)

ovs-appctl vlog/set stp:file:dbg
ovs-appctl vlog/set {module name}:{console, syslog, file}:{off, emer, err, warn, info, dbg}

7.11 关于 Fallback

Controller connection: false 的时候, 会自动调成 legacy switch mode

ovs-vsctl set-fail-mode ovs-br standalone

无论 Controller connection status 为何, 都必须通过 OpenFlow 进行网络行为 (default)

ovs-vsctl set-fail-mode ovs-br secure

移除

ovs-vsctl del-fail-mode ovs-br

查询

ovs-vsctl get-fail-mode ovs-br

7.12 关于 sFlow

查询

ovs-vsctl list sflow

新增

Set sFlow 缺

刪除

ovs-vsctl -- clear Bridge ovs-br sflow

7.13关于 NetFlow

查询

ovs-vsctl list netflow

新增

Set NetFlow 缺

刪除

ovs-vsctl -- clear Bridge ovs-br netflow

7.14 设置 Out-of-band 和 in-band

查询

ovs-vsctl get controller ovs-br connection-mode

Out-of-band

ovs-vsctl set controller ovs-br connection-mode=out-of-band

In-band (default)

ovs-vsctl set controller ovs-br connection-mode=in-band

移除 hidden flow

ovs-vsctl set bridge br0 other-config:disable-in-band=true

7.15 关于 ssl

查询

ovs-vsctl get-ssl

设置

ovs-vsctl set-ssl sc-privkey.pem sc-cert.pem cacert.pem
OpenvSwitch Lab 6$ TLS SSL : http://roan.logdown.com/posts/208707-openvswitch-lab-6-ssl

刪除

ovs-vsctl del-ssl

7.16 关于 SPAN

详细设置

ovs-vsctl add-br ovs-br
ovs-vsctl add-port ovs-br eth0
ovs-vsctl add-port ovs-br eth1
ovs-vsctl add-port ovs-br tap0 \
     -- --id=@p get port tap0 \
     -- --id=@m create mirror name=m0 select-all=true output-port=@p \
     -- set bridge ovs-br mirrors=@m

将 ovs-br 上 add-port {eth0,eth1} mirror 至 tap0

刪除

ovs-vsctl clear bridge ovs-br mirrors # 關於 Table

查 table ovs-ofctl dump-tables ovs-br

7.17 关于 Group Table

参考 hwchiu – Multipath routing with Group table at mininet

建立 Group id 及对应的 bucket

ovs-ofctl -O OpenFlow13 add-group ovs-br group_id=5566,type=select,bucket=output:1,bucket=output:2,bucket=output:3

type 共有 All, Select, Indirect, FastFailover, 详细规格:http://flowgrammable.org/sdn/openflow/message-layer/groupmod/#GroupMod_1.3

使用 Group Table

ovs-ofctl -O OpenFlow13 add-flow ovs-br in_port=4,actions=group:5566

7.18 关于 VXLAN

参考 rascov – Bridge Remote Mininets using VXLAN

建立 VXLAN Network ID (VNI) 和指定的 OpenFlow port number, eg: VNI=5566, OF_PORT=9

ovs-vsctl set interface vxlan type=vxlan option:remote_ip=x.x.x.x option:key=5566 ofport_request=9

VNI flow by flow

ovs-vsctl set interface vxlan type=vxlan option:remote_ip=140.113.215.200 option:key=flow ofport_request=9

设置 VXLAN tunnel id

ovs-ofctl add-flow ovs-br in_port=1,actions=set_field:5566->tun_id,output:2
ovs-ofctl add-flow s1 in_port=2,tun_id=5566,actions=output:1

7.19 关于 OVSDB Manager

参考 OVSDB Integration:Mininet OVSDB Tutorial

Active Listener 设置

ovs-vsctl set-manager tcp:1.2.3.4:6640

Passive Listener 设置

ovs-vsctl set-manager ptcp:6640

7.20 OpenFlow Trace

Generate pakcet trace

ovs-appctl ofproto/trace ovs-br in_port=1,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02 -generate

7.21 其它

查询 OpenvSwitch 版本

ovs-ofctl -V

查询指令历史记录

ovsdb-tool show-log [-mmm]

[参考]

  1. http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=FAQ;hb=HEAD
  2. http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=README;hb=HEAD
  3. http://openvswitch.org/support/config-cookbooks/vlan-configuration-cookbook/
  4. http://roan.logdown.com/posts/191801-set-openvswitch
  5. http://roan.logdown.com/posts/208707-openvswitch-lab-6-ssl
  6. http://flowgrammable.org/sdn/openflow/message-layer/groupmod/#GroupMod_1.3
  7. http://www.areteix.net/blog/2013/08/network-flow-monitoring-with-open-vswitch/
  8. http://blog.scottlowe.org/2014/11/21/removing-ovs-configuration-settings/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenvSwitch完全使用手册 的相关文章

  • Spring Cloud OpenFeign详解

    作为Spring Cloud的子项目之一 xff0c Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式 xff0c 为微服务架构下服务之间的调用提供了解决方案 首先 xff0c 利用
  • Docker容器支持IPv6的方法

    1 设置Docker Engine支持IPv6 1 启动Docker Engine时即开启对IPv6的支持 默认启动时Docker Engine只支持IPv4 启动Docker Engine时 xff0c 指定 ipv6选项即可支持IPv6
  • 总线带宽计算公式(解析)

    总线带宽 xff1a 一定时间内总线上可以传输的数据量 xff0c 使用MByte s表示 总线位宽 xff1a 总线能同时传送的数位数 xff0c 使用bit表示 xff08 常见的如32位 xff0c 64位 xff09 总线频率 xf
  • macOS终端命令行配置网络代理

    一 前言 xff1a 在下载一些需要vpn下载公司内网的源码或者认证时 xff0c 必不可少的需要使用代理 xff0c 与普通的网页及应用代理不同 xff0c 在mac的终端中并没有开启默认的代理模式 xff0c 所以需要手动进行设置 xf
  • VUE源码浅读

    首先我们要知道vue代码如何运行的 xff1f 初始化及挂载 61 gt 编译 xff08 parse optimize generate xff09 61 gt render function渲染 xff08 响应式 xff09 61 g
  • 一文解决Vue2过渡Vue3痛点

    项目升级vue3 0总结 醉逍遥neo的博客 CSDN博客 升级项目vue版本
  • 前端vue需求:将当前页面转成图片或者PDF并下载

    一 xff0c 下载依赖并引用 npm install html2canvas jspdf import html2canvas from 34 html2canvas 34 import jsPDF from 34 jspdf 34 二
  • react数据之dispatch,reducer

    1 之前写了一篇fetch的简单用法 xff0c 实际项目中数据比那个要复杂 xff0c 下面看一下通过dispatch和reducer来控制数据的更新 xff1b 2 还是以上一个添加分组的组件为例 xff1a 首先我们写一个MoveGr
  • 定时器/计数器介绍

    第一次在学习定时器的时候模模糊糊 xff0c 在做过一些题目之后对定时器有了更新的理解 xff0c 现在整理一下 xff0c 做笔记使用 目录 一 基础知识 定时器的作用 xff1a 定时器的实质 xff1a 定时器的工作原理 xff1a
  • echarts图表大小自适应

    1 还是我上一篇echarts简单使用的例子 xff1a 如果是随windows的width和height自适应的话 xff0c 如下 xff1a var echartsWarp 61 document getElementById 39
  • audio自动播放完美兼容实现方案

    前述 xff1a 最近解决的一个疑难杂症 xff0c 是关于audio自动播放与监听audio加载完成在ios上的兼容性问题 xff0c 其表现为pc xff0c 安卓谷歌浏览器正常 xff0c ios微信 xff0c 谷歌浏览器不正常 需
  • uni-app开发流程一(项目搭建)

    uni app其实是DCloud推出的众多产品之一 xff0c 当然我只研究目前能用到的 DCloud的官网 xff1a https www dcloud io uni app的官网 xff1a https uniapp dcloud io
  • uni-app开发问题总结(小程序与h5)2:兼容性

    前端时间连着开发了俩个项目 xff0c 都是在线教育类的 xff0c uni app架构 xff0c 一套代码兼容移动端h5 43 小程序 碰到一些兼容性问题 xff0c 这里做个记录 xff1a 一 默认使用uni app创建的css 有
  • nginx location proxy_pass的一些坑

    常规博客是 xff0c 先讲自己的经历 xff0c 然后再啰嗦一段话 xff0c 并且再穿插一些自己的感想之类的 不 xff0c 我的博客力求最高效率 需求 xff1a 把 URL 中带 proxy 的统统转发至另外的机子 1 loacat
  • mysql 5.7.28版本 my.cnf 文件的路径

    缘起改mysql的 slow query log 的配置 xff0c 在下 5 7 28版本 etc my cnf 文件据说在5 7 1X版本更改了 xff0c 此后版本把该文件丢在 etc mysql mysql conf d mysql
  • mysql 跨服务器导入

    本机a 服务器b 服务器c xff0c 在本机a 通过终端操作 xff0c 把服务器b上mysql 数据 导入到服务器C mysqldump h192 168 79 130 P3306 ushit pyoueat database youe
  • mysql 查看help手册

    作用 xff1a 解决 记得函数 xff0c 不记得语法的窘境 查看总的目录 mysql gt contents 其下的是各大分类 You asked for help about help category 34 Contents 34
  • vim 查看help命令

    并不需要查找vim 的工作手册 xff0c vim 自带说明书 步骤1 xff1a xff1a help 步骤2 xff1a quickref 步骤3 xff1a 找到 步骤4 xff1a ctrl键 键 同时按下 步骤5 xff1a 会来
  • ubuntu自带的命令查看

    xff1a man ls 比如查ls 命令
  • 【无标题】安装ROS E: 无法定位软件包 ros-melodic-desktop-full

    一 遇到问题 二 可能的原因和解决方法 1 源换一下 xff1a xff08 1 xff09 我是看这位大佬的 5条消息 记录 解决Ubuntu安装ros报错E Unable to locate package ros kinetic de

随机推荐

  • taskset命令:查看、指定进程运行在哪个cpu上

    reference xff1a https baijiahao baidu com s id 61 1592330790387359245 amp wfr 61 spider amp for 61 pc https www cnblogs
  • 超详细手把手教你四种方案彻底解决MAC npm install -g 报错permission denied

    在日常开发过程中 xff0c 我们使用MAC执行 npm install g 下载安装包的时候 xff0c 经常会遇到如下报错 xff1a permission denied 报错详情 xxx 64 CN C02xxxxx6M npm in
  • Ubuntu16.04 LTS 安装VNC Server开启远程桌面

    转载自http blog csdn net longhr article details 51657610 comments 查了各种博客 xff0c 有推荐XRDP的 xff0c 建议安装VNC的 xff0c 都不好用 xff0c 建议按
  • O2OA平台下载及安装部署

    平台下载及安装部署 O2OA安装部署非常方便 xff0c 只需要简单的三步即可完成安装 平台内部集成了多项管理命令 xff0c 可以进行系统升级 xff0c 管理员密码修改 xff0c 数据导出恢复等管理操作 一 下载安装包并且解压 安装包
  • 访问和操作H2数据库

    访问和操作H2数据库 O2OA平台内嵌了H2数据库 xff0c 管理员可以通过支持JDBC的客户端对H2数据库进行访问和数据操作 O2OA默认内嵌了H2数据库 xff0c H2数据库支持两种访问方式 xff1a 一 以WEB方式访问数据库
  • O2OA人员身份,人员属性

    人员信息创建 从组织管理应用中进入个人管理界面后 xff0c 点击左侧上方的添加按钮 xff0c 如下图所示 xff1a 在右侧显示的界面中填写人员信息 xff1a 人员名称 手机号码 唯一编码 xff08 以上必填 xff0c 其他选填写
  • O2OA的SSO与单点认证

    SSO与单点认证 与其他系统实现单点登入 1 1 URL传递加密参数方式 这种方式是比较通用简单的实现方式 xff0c 应急门户将用户登录信息 xff08 用户ID xff09 以URL参数方式传递给被集成系统 xff0c 被集成系统通过接
  • newman和Jenkins(postname和Jenkins的结合使用)

    Newman介绍 Newman 是 Postman 推出的一个 nodejs 库 xff0c 直接来说就是 Postman 的json文件可以在命令行执行的插件 Newman 可以方便地运行和测试集合 xff0c 并用之构造接口自动化测试和
  • SmartBI入门(一)介绍和安装

    一 SmartBI系统介绍 商业智能 xff08 Business Intelligence xff0c 简称 xff1a BI xff09 xff0c 又称商业智慧或商务智能 xff0c 指用现代数据仓库技术 线上分析处理技术 数据挖掘和
  • SmartBI入门(二)配置SmartBI

    具体可以参考文档 Smartbi Config页面介绍 Smartbi V10帮助中心 SmartBI配置 如果是首次访问 xff0c 需要设置 管理员账号 密码 xff0c 以便下次登录配置界面时验证 xff0c 设置后用用户名密码登录即
  • 求助 关于A-Frame带有动画模型的导入

    哪位大神知道导入带有动画的模型后 如何调用模型自带的动画 gltf格式的
  • SmartBI入门(三)数据源配置

    1 设置数据连接 配置连接 2 选择数据表 创建的数据源 xff0c 点击数据库管理 xff0c 添加实际报表需要的数据表 3 数据库展现
  • 再见2014,你好2015

    过去就是过去了 2014年再见 xff0c 2015年你好 xff01 回首 总结也只是慰藉 1999年12月至今 xff0c 经历了整整十五个曾经 xff0c 这其中的波折 xff0c 怎是我这样的小辈能够理解的 借这个平台也只是为了感谢
  • idea报错 Artifact web:war exploded: Error during artifact deployment. See server log for details.

    因为tomcat把报错信息重定向到日志文件中了 xff0c 所以在控制台找不到报错信息 所以需要看一下tomcat日志文件报错信息 xff0c 一般情况下都有报错 日志的路径默认是在C Users 你的用户名 AppData Local J
  • Unity离线用户手册打开缓慢、卡顿

    Unity中文离线用户手册下载页面 https docs unity3d com cn 2019 4 Manual OfflineDocumentation html 文档包下载地址 xff08 需要FQ xff09 https stora
  • Python MapReduce 案例

    map t py import sys import re p 61 re compile r 39 w 43 39 for line in sys stdin ss 61 line strip split 39 39 for s in s
  • ARM基础学习-快速上下文切换技术

    FCSE的原理 快速上下文切换技术 xff08 FCSE xff09 通过修改系统中不同进程的虚拟地址 xff0c 避免在进行进程间切换时造成虚拟地址到物理地址的重映射 xff0c 从而提高系统性能 xff1b 通常情况下 xff0c 如果
  • linux下使用VNC

    安装 xff1a root 64 localhost vncserver You will require a password to access your desktops Password Verify New 39 localhos
  • svn忽略ignore文件记住方式(转)

    每个项目中的配置文件都有区别 xff0c 在本地开发和线上生产 xff0c 之前一直很懒 xff0c 不想去忽略提交一些配置文件 xff0c 只是在提交的时候排除掉 但是在项目上传部署的时候又必须小心 xff0c 害怕覆盖线上的配置 xff
  • OpenvSwitch完全使用手册

    本文主要参考 Overview of functionality and components 以及 Frequently Asked Questions 以及结合自己的理解 http sdnhub cn index php openv s