路径没来得及替换,docker里面有的写成usr/local/有的是root,领会精神
(1) 创建网桥
为了重启后也可以使用固定ip,创建一个网桥,给容器分配网段的Ip。
// 创建自定义网络
docker network create --subnet=172.16.1.0/24 docker-br0
//永久的,可以使用docker network rm docker-br0 移除网桥。
(2) 三个容器(控制器)的ip将分别配置为:
这个会单独写个生成镜像的部署方法。先欠着。
docker build -t odl:ubuntu .
(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 绑定宿主机目录,几个容器需要指定不同的宿主机目录。(没试过)
opendaylight/bin/configure-cluster-ipdetect.sh 172.16.1.11 172.16.1.12 172.16.1.13
注意ip前有没有index,需要看下sh文件去判断。有的话根据每个ip分别去修改index。
等控制器启动完成后在日志中查找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数据保持一致。
三个控制器需要至少两个正常集群才能工作。
宿主机
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) 创建网桥(不能用默认网段,防止出现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
docker build -t odl:ubuntu .
镜像输出到tar文件
docker save o ./odl-ubuntu.tar odl:ubuntu
将jar复制到另外两个宿主机上,导入镜像
docker load -i odl-ubuntu.tar
可以加上-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端口应该不用,因为几个网桥网段已经是可以互通的了)
/root/opendaylight/bin/configure-cluster-ipdetect.sh 172.16.1.11 172.16.2.12 172.16.3.13
集群建立后,设备上连,使用任何一个宿主机的ip都可以。
当Leader挂掉之后,集群会重新选举,1个Follower变成Leader。如果设备连接的ip是挂掉控制器的宿主机ip,会导致设备掉线。需要重新连接工作的控制器。