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:/root/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,会导致设备掉线。需要重新连接工作的控制器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值