WHY OVS?
Posted philo_zhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WHY OVS?相关的知识,希望对你有一定的参考价值。
了解OVS绕不过SDN的发展,因为OVS的"O"就是openflow协议。2006年,SDN诞生于美国GENI项目资助的斯坦福大学Clean Slate课题,斯坦福大学Nick McKeown教授为首的研究团队提出了Openflow的概念用于校园网络的试验创新。后续基于Openflow给网络带来可编程的特性,SDN(software define network)的概念应运而生。
SDN提出了控制面与数据面分离的思想:比如以往的交换机,需要自己维护着自己的mac表,不停的自学习等,这就是控制面的概念,与此同时,交换机还进行转发操作,这就是数据面的概念。这有什么问题呢?在一个大型的网络中,这些节点构成了一张图,说到底交换机就是选择一个最短路,从A->B,可是一个交换机很难知道整个网络的拓扑结构,只能分布式地去更新最短路,往往最短路只是一种局部最优解。SDN里让控制面和数据面分离,就可以直接让控制面获取整个网络的拓扑结构,算出整个图的最短路,然后把相应的表(规则)下发到相应的设备上,这样设备只需要做转发,也就是数据面。SDN打破了网络传统设备制造商领域。SDN架构下,交换机支持可编程能力,可以自己用软件做一个网络,所以是软件定义网络。
那么openflow是什么呢,openflow就是下发的规则格式,是一种规则格式协议,控制面往设备下发这种协议就行了。
刚才说SDN架构下,交换机支持可编程能力,如何支持呢,还是需要硬件厂商去适配,开放接口等。网络硬件设备制造商因为成本等因素不提供对硬件进行重新编程的能力; 核心ASIC芯片从设计、定型到市场推广所需的超长周期,使得芯片制造商不愿意对新协议和标准轻易试水,导致硬件缺乏可编程特性。因为这两个原因Nick的学生Martin提出解决办法。Martin认为基于x86的虚拟交换机将会弥补传统硬件交换机转发面灵活性不足这一短板。 2007年8月的某一天,Martin Casado提交了第一个开源虚拟机的commit,这个开源虚拟交换机在2009年五月份正式称之为Open VSwitch。至此,OVS诞生了。
我们现在知道了WHY OVS,那现在物理机拆成多个虚拟机的云服务如何让虚拟机互相连通呢?
传统的网络包直接通过交换机路由器转发,就可以到达目的机器,但是一个物理机里面有多个虚拟机的网络包想发出去该怎么办呢?物理机收到一个发给虚拟机的网络包该如何分辨给那一台呢?其实每创建一个虚拟机时,控制器会对被影响到的所有节点下发流表,相当于整个网就通了。这些节点就是物理机上的OVS,虚拟机出来的包根据流表(被OVS封装一层真实的物理包头,然后发出去。比如发现虚拟机的包是发到另一台虚拟机B的,就会修改物理包头的目的ip,设置为控制面已经告知的对应B所在物理机的ip。交换机什么的根本感知不到虚拟机网络,就这样,发到了B,机器B上的OVS再根据包头查表,最后送到对应的虚拟机里面。
OVS核心就是围绕着流表(规则):如何匹配规则、如何管理规则、如何去执行规则的action。然后在实现基础上去进行各种性能保障,引入了一些同步机制,如rcu,引入的dpdk,设计了自己的缓存......
ovs自定义启动
用户可以根据自己的需求,使用特定选项分别启动/停止守护进程。 场景一:仅启动ovsdb守护进程,不启动ovs-vswitchd守护进程 $ ovs-ctl --no-ovs-vswitchd start 场景二:仅启动ovs-vswitchd守护进程,不启动ovsdb守护进程 $ ovs-ctl --no-ovsdb-server start 场景三:配置本机OVS使用的ovsdb-server数据库文件,手动启动所有守护进程。 $ mkdir -p /usr/local/etc/openvswitch $ ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema $ mkdir -p /usr/local/var/run/openvswitch $ ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach --log-file $ ovs-vsctl --no-wait init $ ovs-vswitchd --pidfile --detach --log-file
[root@kunpeng82 ~]# ps -elf | grep ovsdb 1 S root 6448 1 0 70 -10 - 270 do_wai 08:48 ? 00:00:00 ovsdb-server: monitoring pid 6449 (healthy) 1 S root 6449 6448 0 70 -10 - 275 do_sys 08:48 ? 00:00:00 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor 0 S root 6716 5082 0 80 0 - 1730 pipe_w 09:33 pts/1 00:00:00 grep --color=auto ovsdb [root@kunpeng82 ~]# kill -9 6449 [root@kunpeng82 ~]# ps -elf | grep ovsdb 0 S root 6720 5082 0 80 0 - 1729 pipe_w 09:33 pts/1 00:00:00 grep --color=auto ovsdb [root@kunpeng82 ~]# ps -elf | grep ovsdb 0 S root 6724 5082 0 80 0 - 1729 pipe_w 09:33 pts/1 00:00:00 grep --color=auto ovsdb [root@kunpeng82 ~]# ps -elf | grep ovsdb
以上是关于WHY OVS?的主要内容,如果未能解决你的问题,请参考以下文章