ODL docker集群部署

路径没来得及替换,docker里面有的写成usr/local/有的是root,领会精神

一、同一个宿主机上docker起3个容器,搭建集群

1.集群网络

(1) 创建网桥

为了重启后也可以使用固定ip,创建一个网桥,给容器分配网段的Ip。

// 创建自定义网络
docker network create --subnet=172.16.1.0/24 docker-br0

//永久的,可以使用docker network rm docker-br0 移除网桥。

(2) 三个容器(控制器)的ip将分别配置为:

  • 172.16.1.11
  • 172.16.1.12
  • 172.16.1.13

2.生成镜像(在Dockerfile路径下)

这个会单独写个生成镜像的部署方法。先欠着。

docker build -t odl:ubuntu  .

3.生成容器

(1) 没有-v的情况,docker会在安装目录下指定一个目录绑定容器匿名卷,如/var/lib/docker/volumes
(端口是2.生成镜像中指定的)

docker run -d -it --net docker-br0 --ip 172.16.1.11 --name node1 -p 8181:8181 -p 4334:4334 -p 2550 odl:ubuntu

docker run -d -it --net docker-br0 --ip 172.16.1.12 --name node2 -p 8181 -p 4334 -p 2550 odl:ubuntu

docker run -d -it --net docker-br0 --ip 172.16.1.13 --name node3 -p 8181 -p 4334 -p 2550 odl:ubuntu

只有一个容器的8181和4334要映射到宿主机8181和4334。这个控制器不能down,否则netconf设备没法通过4334端口连接。

(2) 加-v 绑定宿主机目录,几个容器需要指定不同的宿主机目录。(没试过)

4. 启动控制器前先执行这个脚本,三个控制器都执行

opendaylight/bin/configure-cluster-ipdetect.sh 172.16.1.11 172.16.1.12 172.16.1.13

注意ip前有没有index,需要看下sh文件去判断。有的话根据每个ip分别去修改index。

5. 进入几个容器检查集群情况。

等控制器启动完成后在日志中查找cat karaf.log | grep clustering,可知集群建立是否成功。

Leader的显示

RoleChangeNotifier for member-1-shard-entity-ownership-operational , received role change from Candidate to Leader

Follower的显示

member-2-shard-entity-ownership-operational (Candidate): New Leader member-1-shard-entity-ownership-operational sent an AppendEntries to Candidate for term 1 - will switch to Follower
member-2-shard-entity-ownership-operational (Candidate) :- Switching from behavior Candidate to Follower, election term: 1
RoleChangeNotifier for member-2-shard-entity-ownership-operational , received role change from Candidate to Follower

现在用postman给任何一个控制器发请求,几个控制器的datastore数据保持一致。

三个控制器需要至少两个正常集群才能工作。

二、不同宿主机上docker起3个容器,搭建集群

宿主机
172.16.101.14
172.16.101.15
172.16.101.16
docker网桥
172.16.1.0/24
172.16.2.0/24
172.16.3.0/24
容器
172.16.1.11
172.16.2.12
172.16.3.13

1.集群网络

(1) 创建网桥(不能用默认网段,防止出现ip地址冲突)

几个宿主机docker分别创建网桥172.16.1.0/24、172.16.2.0/24、172.16.3.0/24

(2) 三个容器ip分别为:

172.16.1.11

172.16.2.12

172.16.3.13

(3) 在宿主机上配置互通路由

几个宿主机的ip需要为同一网段(我理解是能直达?能作为下一跳路由)。

配置后几个docker网桥的网段是可以互通的。

宿主机1

ip route add 172.16.2.0/24 via 172.16.101.15

ip route add 172.16.3.0/24 via 172.16.101.16

宿主机2

ip route add 172.16.1.0/24 via 172.16.101.14

ip route add 172.16.3.0/24 via 172.16.101.16

宿主机3

ip route add 172.16.2.0/24 via 172.16.101.15

ip route add 172.16.1.0/24 via 172.16.101.14

2.生成 输出 导入镜像

docker build -t odl:ubuntu  .

镜像输出到tar文件

docker save o ./odl-ubuntu.tar odl:ubuntu

将jar复制到另外两个宿主机上,导入镜像

docker load -i odl-ubuntu.tar

3.生成容器

可以加上-v /home/alex/dockerodl/persistence:/usr/local/opendaylight/persistence 绑定宿主机目录。

docker run -d -it --net docker-br0 --ip 172.16.1.11 --name node1 -p 8181:8181 -p 4334:4334 -p 2550:2550 odl:ubuntu

docker run -d -it --net docker-br0 --ip 172.16.2.12 --name node2 -p 8181:8181 -p 4334:4334 -p 2550:2550 odl:ubuntu

docker run -d -it --net docker-br0 --ip 172.16.3.13 --name node3 -p 8181:8181 -p 4334:4334 -p 2550:2550 odl:ubuntu

这里每一个容器的8181、4334都需要映射到宿主机8181、4334端口。(2550端口应该不用,因为几个网桥网段已经是可以互通的了)

4. 启动控制器前先执行这个脚本,三个控制器都执行

/root/opendaylight/bin/configure-cluster-ipdetect.sh 172.16.1.11 172.16.2.12 172.16.3.13

5.进入几个容器检查集群情况,同(一)。

集群建立后,设备上连,使用任何一个宿主机的ip都可以。
当Leader挂掉之后,集群会重新选举,1个Follower变成Leader。如果设备连接的ip是挂掉控制器的宿主机ip,会导致设备掉线。需要重新连接工作的控制器。

你可能感兴趣的:(odl,docker,容器)