ONOS 1.1.0支持集群模式,控制器之间彼此分享各自的运行状态,当底层OpenFlow交换机连接多个控制器时,由交换机确定主备控制器,这对于容错和高可用性是非常有用的。ONOS利用Hazelcast做集群成员管理,目前官网上提供了一个预编译的ONOS 1.1.0版本,另外还有一个ONOS Docker版本。下面我们利用ONOS Docker版本一起探索ONOS的集群吧。
1.下载镜像
下载镜像文件onos-tutorial-1.0.0r161-ovf.zip,使用VirtualBox导入镜像文件,该VirtualBox至少要有2GB的RAM和5GB的硬盘空间,以及良好的处理器和固态硬盘。启动虚拟机后使用distributed/distributed用户名、密码登录。登录后界面如图显示:
2.建立多Docker实例
Docker是开发者和系统管理员用于编译、运行分布式应用程序的开放平台,在本实验中我们将使用docker来提供运行ONOS实例的环境。查看系统中ONOS分布式镜像:
生产ONOS实例:
1 2 3 |
distributed@mininet-vm:~$ sudo docker run -t -P -i -d --name onos-1 onos/tutorial-dist distributed@mininet-vm:~$ sudo docker run -t -P -i -d --name onos-2 onos/tutorial-dist distributed@mininet-vm:~$ sudo docker run -t -P -i -d --name onos-3 onos/tutorial-dist |
以上生产了3个docker实例,且每个实例间运行互不干扰。
查看正在运行的docker实例:
启动docker实例后我们还需要对ONOS进行配置,为此我们将使用标准的ONOS工具,这与在VM或者实体裸机中部署ONOS是同一组命令。
3.安装ONOS
1.检查环境是否正确安装
2.设置无密码访问实例,这对很多时候尤其是在开发和经常推进组件时是安全的,ONOS提供了一个脚本用于推动本地关键实例。
1 2 3 4 5 6 7 8 9 |
distributed@mininet-vm:~$ onos-push-keys $OC1 root@172.17.0.6's password: onosrocks root@172.17.0.6's password: onosrocks distributed@mininet-vm:~$ onos-push-keys $OC2 root@172.17.0.7's password: onosrocks root@172.17.0.7's password: onosrocks distributed@mininet-vm:~$ onos-push-keys $OC3 root@172.17.0.8's password: onosrocks root@172.17.0.8's password: onosrocks |
3.下载packet包,在远程实例中安装ONOS
1 2 3 4 5 6 7 8 |
distributed@mininet-vm:~$ onos-package -rw-rw-r-- 1 distributed distributed 41940395 Dec 11 13:20 /tmp/onos-1.0.0.distributed.tar.gz distributed@mininet-vm:~$ onos-install $OC1 onos start/running, process 308 distributed@mininet-vm:~$ onos-install $OC2 onos start/running, process 302 distributed@mininet-vm:~$ onos-install $OC3 onos start/running, process 300 |
4.验证ONOS部署情况
打开ONOS命令行界面:
打开另两个窗口,同样的方法进入onos-2和onos-3的命令行界面。
在命令行界面,使用命令feature:list,可以看出集群模块onos-core已经代替了单机模块的onos-core-trivial
以下命令查看控制器集群情况:
未连接任何交换机时的web界面如下:
5.ONOS集群和容错实验步骤
启动mininet仿真基础网络,运行mininet脚本文件,模拟4个交换机和24个主机,连接到三个控制器节点:
在onos中可以查看到已经连接到的交换机情况:
每个onos实例中的交换机数量可能不同,第一次显示为与交换机握手的第一控制器,如果想平衡交换机比例可以运行balance-masters,本次三个节点的onos分别控制器了2台交换机,主备情况可使用命令roles查看:
控制器web界面如下显示:
Mininet中主机可以成功ping通:
到目前为止,所有三个控制器在主动模式下,这个时候假如停止其中一个控制器,看看onos控制器是如何容错的:
由命令行可以查出控制器172.17.0.6已经处于非活跃状态了,原本由它控制的交换机已经被重新分派到onos-2和onos-3下:
相应的web界面如下:
mininet依然可以通过节点2和节点3的控制器实现通信:
我们进一步删除节点,系统功能仍然能通过一个控制器节点运作起来,这就是集群的魅力所在!