前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LINC switch系列之安装指南

LINC switch系列之安装指南

作者头像
SDNLAB
发布2018-04-03 13:44:12
9830
发布2018-04-03 13:44:12
举报
文章被收录于专栏:SDNLAB

前言

LINC switch是一个由flowforwarding. org主导开发的一款基于Apache2.0协议开源的Openflow交换机软件。本文介绍了其安装方式。

详细介绍

LINC switch是基于Erlang语言开发的一款支持Openflow的交换机软件,可以部署在物理机或是虚拟机上。特性如下:

  • 1.支持Openflow协议的1.2、1.3及1.4版本。
  • 2.支持OF-config的1.1.1版本。
  • 3.非常容易扩展的模块化架构。
  • 4.支持在一个Erlang node上运行多个逻辑交换机。

什么是Erlang?

Erlang是一款面向高并发环境的函数式语言,最早于上世纪80年代面世,在爱立信的产品中得到广泛应用。随着开源运动的发展,爱立信也开源了这一语言。Erlang能充分利用多核处理器,而且自身的OTP库为构建高可用的软件提供了非常可靠的支持。 使用Erlang开发的项目,比如:RabbitMQ,CouchDB,ejabberd,阿里云RDS中间件等等…

为什么选择LINC?

1.它提供了对Openflow特性完整支持,有利于深入理解Openflow的原理和细节。 2.在Erlang的支持下,实现了对多核处理器的充分利用,能在标准硬件上获得比较好的处理性能。同时有极高的容错性。

LINC架构图

LINC架构图
LINC架构图

安装:

官方方案:

在标准的64位x86服务器上安装。要求服务器至少拥有4GB内存,4个端口,Linux内核版本要求在3.1以上。详细安装方式可以参考官方文档:https://github.com/FlowForwarding/LINC-Switch/blob/master/docs/LINC_Switch_Quick_Start_Guide.pdf 本文只介绍在虚拟机上的安装。(备注:该文档的安装方式是通过ISO镜像安装,但是下载已经失效,也就是说只能依靠从源码编译安装)

可行方案:

我们将在在虚拟机中安装LINC。官方文档是在vsphere上安装的。这里我用了VMware workstation: 在虚拟机中安装只是为了以后的与其他虚拟机的联动测试。 前提准备:安装ubuntu 14.04 LTS 64bit,配置好源后,apt-get update,配置好ssh方便后续操作。

安装ubuntu 14.04 LTS 64bit
安装ubuntu 14.04 LTS 64bit

我使用xshell连接到虚拟机:

我使用xshell连接到虚拟机
我使用xshell连接到虚拟机

安装开始: 1.安装Erlang环境:

代码语言:javascript
复制
root@workgroup3:~# apt-get install erlang

2.进入Erlang shell检查版本信息(最低要求为R16):

代码语言:javascript
复制
root@workgroup3:~# erl
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
Eshell V5.10.4  (abort with ^G)
1> 

按下ctrl-c,再按v查看版本信息:

代码语言:javascript
复制
Eshell V5.10.4  (abort with ^G)
1> 
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
v
Erlang (BEAM) emulator version 5.10.4
Compiled on Tue Aug 19 16:45:11 2014

可以看到Erlang的相关信息,版本为R16B03,你也可以考虑从源码编译R18的版本。 (按ctrl-c再按a退出Erlang shell)

3.clone一份LINC的代码:

代码语言:javascript
复制
root@workgroup3:~# git clone https://github.com/FlowForwarding/LINC-Switch.git
root@workgroup3:~# cd LINC-Switch/
root@workgroup3:~/LINC-Switch# 

4.安装其他用于构建LINC的工具:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch# apt-get install git-core bridge-utils libpcap0.8 libpcap-dev libcap2-bin uml-utilities

5.重命名sys.config.orig为sys.config

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch# ls
apps  docs  LICENSE  Makefile  pcap.data  README.md  rebar  rebar.config  rel  scripts
root@workgroup3:~/LINC-Switch# cd rel/files/ 
root@workgroup3:~/LINC-Switch/rel/files# ls
erl  linc  nodetool  sys.config.orig  vm.args
root@workgroup3:~/LINC-Switch/rel/files# mv sys.config.orig sys.config

如果不重命名,会导致编译中断。

5.编译LINC:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch# make

在安装过程中会clone一些其他的库用于编译,编译时间很大程度上取决于网络状况。 如果没有出现其他问题,结果会是这样:

代码语言:javascript
复制
......
Compiled src/linc_us3_queue_sup.erl
Compiled src/linc_us3_queue.erl
Compiled src/linc_us3_sliding_window.erl
Compiled src/linc_us3_sup.erl
Compiled src/linc_us3_routing.erl
==> rel (compile)
==> LINC-Switch (compile)
==> rel (generate)
root@workgroup3:~/LINC-Switch# 

6.初次启动LINC并进入console模式:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch# rel/linc/bin/linc console
Exec: /root/LINC-Switch/rel/linc/erts-5.10.4/bin/erlexec -boot /root/LINC-Switch/rel/linc/releases/1.0/linc -mode embedded -config /root/LINC-Switch/rel/linc/releases/1.0/sys.config -args_file /root/LINC-Switch/rel/linc/releases/1.0/vm.args -- console
Root: /root/LINC-Switch/rel/linc
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
 
load_driver 'netlink_drv' from: '/root/LINC-Switch/rel/linc/lib/netlink-1/priv'
10:15:10.508 [info] Application lager started on node linc@workgroup3
10:15:10.508 [info] Application ssh started on node linc@workgroup3
10:15:10.511 [info] Application enetconf started on node linc@workgroup3
10:15:10.515 [info] Application linc started on node linc@workgroup3
Eshell V5.10.4  (abort with ^G)
(linc@workgroup3)1> 

这样就可以在Erlang shell的协助下操作LINC。 可以根据自己的需求将代码copy到其他地方,比如/usr/local/bin并设置好PATH。

编译后的探索: 1.编译时,rebar会自动下载所依赖的代码至/LINC-Switch/deps目录,可以看到里面的代码目录:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch/deps# ls
eenum     epcap     lager  netlink    of_protocol  procket  tunctl
enetconf  goldrush  meck   of_config  pkt          sync

2.编译时需要/LINC-Switch/rel/files目录下存在一个合法的sys.config文件,你也可以尝试用/LINC-Switch/scripts目录下的工具生成配置文件config_gen:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch/scripts# ./config_gen
./config_gen [-s LOGICAL_SWITCH_ID [INTERFACE_NAME]] -c [[tcp|tls]:CONTROLLER_ADDRES:CONTROLLER_PORT] [-l CONTROLLERS_LISTENER_ADDRESS:PORT] -o OUTPUT_FILE
 
Example usage:
 ./config_gen -s 0 tap0 tap1 -c tcp:10.48.11.5:6653 tls:10.48.11.6:5533 -o ../rel/files/sys.config

如果不提供任何输入,只会输出usage。

3.编译后,进入/LINC-Switch/rel/linc/releases目录,可以看到一个RELEASES文件,可以查看:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch/rel/linc/releases# cat RELEASES
[{release,"linc","1.0","5.10.4",
[{kernel,"2.16.4","/root/LINC-Switch/rel/linc/lib/kernel-2.16.4"},
{stdlib,"1.19.4","/root/LINC-Switch/rel/linc/lib/stdlib-1.19.4"},
{sasl,"2.3.4","/root/LINC-Switch/rel/linc/lib/sasl-2.3.4"},
{asn1,"2.0.4","/root/LINC-Switch/rel/linc/lib/asn1-2.0.4"},
{crypto,"3.2","/root/LINC-Switch/rel/linc/lib/crypto-3.2"},
{public_key,"0.21",
"/root/LINC-Switch/rel/linc/lib/public_key-0.21"},
{ssl,"5.3.2","/root/LINC-Switch/rel/linc/lib/ssl-5.3.2"},
{compiler,"4.9.4","/root/LINC-Switch/rel/linc/lib/compiler-4.9.4"},
{syntax_tools,"1.6.12",
"/root/LINC-Switch/rel/linc/lib/syntax_tools-1.6.12"},
{runtime_tools,"1.8.13",
"/root/LINC-Switch/rel/linc/lib/runtime_tools-1.8.13"},
{xmerl,"1.3.5","/root/LINC-Switch/rel/linc/lib/xmerl-1.3.5"},
{mnesia,"4.11","/root/LINC-Switch/rel/linc/lib/mnesia-4.11"},
{netlink,"1","/root/LINC-Switch/rel/linc/lib/netlink-1"},
{goldrush,"0.1.6","/root/LINC-Switch/rel/linc/lib/goldrush-0.1.6"},
{lager,"2.1.0","/root/LINC-Switch/rel/linc/lib/lager-2.1.0"},
{linc,"1.1","/root/LINC-Switch/rel/linc/lib/linc-1.1"},
{eenum,"0.1.2","/root/LINC-Switch/rel/linc/lib/eenum-0.1.2"},
{ssh,"3.0","/root/LINC-Switch/rel/linc/lib/ssh-3.0"},
{enetconf,"0.1","/root/LINC-Switch/rel/linc/lib/enetconf-0.1"},
{epcap,"0.05","/root/LINC-Switch/rel/linc/lib/epcap-0.05"},
{linc_us3,"1.1","/root/LINC-Switch/rel/linc/lib/linc_us3-1.1"},
{linc_us4,"1.1","/root/LINC-Switch/rel/linc/lib/linc_us4-1.1"},
{linc_us4_oe,"1.1",
"/root/LINC-Switch/rel/linc/lib/linc_us4_oe-1.1"},
{linc_us5,"1.1","/root/LINC-Switch/rel/linc/lib/linc_us5-1.1"},
{of_config,"0.2","/root/LINC-Switch/rel/linc/lib/of_config-0.2"},
{of_protocol,"1.0",
"/root/LINC-Switch/rel/linc/lib/of_protocol-1.0"},
{pkt,"0.03","/root/LINC-Switch/rel/linc/lib/pkt-0.03"},
{procket,"0.03","/root/LINC-Switch/rel/linc/lib/procket-0.03"},
{tunctl,"0.01","/root/LINC-Switch/rel/linc/lib/tunctl-0.01"}],
permanent}].

可以详细地看到我们编译出来的LINC的版本信息和它依赖的包的信息。

4.LINC的配置文件是/LINC-Switch/rel/linc/releases/1.0目录中的sys.config,应该是从/LINC-Switch/rel/files复制出来的:

代码语言:javascript
复制
root@workgroup3:~/LINC-Switch/rel/linc/releases/1.0# ls
linc.boot  linc.script       start_clean.rel     sys.config
linc.rel   start_clean.boot  start_clean.script  vm.args

总结:

本文介绍了LINC switch的从源码编译的安装方式。在接下来的文章中将介绍LINC switch的配置与使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 详细介绍
    • 什么是Erlang?
      • 为什么选择LINC?
      • 安装:
        • 官方方案:
          • 可行方案:
          • 总结:
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档