bundlecluster-computingmininetopendaylight

Connect 3+ OpenDaylight controllers to mininet topology


I would like to ask I have created a cluster according to this https://docs.opendaylight.org/en/stable-magnesium/getting-started-guide/clustering.html

And i would like to verify it is working can someone help me how to do it?

Also is it able to connect this cluster or those 3 controllers to one mininet topology? Or it cant be done?

EDIT I would like to ask why Not all bundle are active? Is there gonna be some problem with that ?


Solution

  • I'm not sure if you can specify multiple controllers on the mininet command line, but it's worth a try. Otherwise you can try like this person explains in this post setting up the controllers in a mininet .py config file.

    To verify the cluster is working, there are many ways, but you can try some rest calls to check the status of things. We have some examples in upstream CSIT tests. If you install the feature odl-jolokia, you can send a GET to:

    jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-default-config,type=DistributedConfigDatastore
    

    that is checking the default shard status for the config datastore. You'll get some output like this:

    content={
     "request": {
      "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-default-config,type=DistributedConfigDatastore",
      "type": "read"
     },
     "status": 200,
     "timestamp": 1588524930,
     "value": {
      "AbortTransactionsCount": 0,
      "CommitIndex": 70,
      "CommittedTransactionsCount": 0,
      "CurrentTerm": 7,
      "FailedReadTransactionsCount": 0,
      "FailedTransactionsCount": 0,
      "FollowerInfo": [],
      "FollowerInitialSyncStatus": true,
      "InMemoryJournalDataSize": 33,
      "InMemoryJournalLogSize": 1,
      "LastApplied": 70,
      "LastCommittedTransactionTime": "1970-01-01 00:00:00.000",
      "LastIndex": 70,
      "LastLeadershipChangeTime": "2020-05-03 16:54:45.034",
      "LastLogIndex": 70,
      "LastLogTerm": 7,
      "LastTerm": 7,
      "Leader": "member-2-shard-default-config",
      "LeadershipChangeCount": 1,
      "PeerAddresses": "member-3-shard-default-config: akka.tcp://opendaylight-cluster-data@10.30.170.119:2550/user/shardmanager-config/member-3-shard-default-config, member-2-shard-default-config: akka.tcp://opendaylight-cluster-data@10.30.170.113:2550/user/shardmanager-config/member-2-shard-default-config",
      "PeerVotingStates": "member-3-shard-default-config: true, member-2-shard-default-config: true",
      "PendingTxCommitQueueSize": 0,
      "RaftState": "Follower",
      "ReadOnlyTransactionCount": 0,
      "ReadWriteTransactionCount": 0,
      "ReplicatedToAllIndex": 69,
      "ShardName": "member-1-shard-default-config",
      "SnapshotCaptureInitiated": false,
      "SnapshotIndex": 69,
      "SnapshotTerm": 7,
      "StatRetrievalError": null,
      "StatRetrievalTime": "557.3 \u03bcs",
      "TxCohortCacheSize": 0,
      "VotedFor": "member-2-shard-default-config",
      "Voting": true
     }
    }
    

    Lots of info there, but the raftstate says Follower, so you know this node is one of the two followers. One node will be leader.

    Another thing we check is syncstatus to make sure it's "true". Use this URI:

        jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore
    

    example output