Octo Cascade Bridges - here's how! FULL GUIDE

My problem now is that I can’t make it happen. For example:
user A goes to region1.example.com/test
user B goes to region2.example.com/test
region2 server is a cascading server.
when the two users open the URLs above, they are not in the same room.
What could be missing?

Share your JVB JMS config files

Here are the config files:

Region1:
-config.js:

testing: {
octo: {
probability: 1
},
deploymentInfo: {
shard: ‘shard-US’,
region: ‘US’,
userRegion: ‘US-east’
},

// Information about the jitsi-meet instance we are connecting to, including
// the user region as seen by the server.
deploymentInfo: {
shard: “shardUS1”,
region: “US-east”,
userRegion: “US-east”
},

JVB:

org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=muc
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=region1.example.com
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.region1.example.com
org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=MySecrete
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.region1.example.com
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=US-east

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=Region1_Local_IP
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=Region1_Public_IP

org.jitsi.videobridge.octo.BIND_ADDRESS=127.0.0.1
org.jitsi.videobridge.octo.PUBLIC_ADDRESS=Region1_Public_IP
org.jitsi.videobridge.octo.BIND_PORT=4096
org.jitsi.videobridge.REGION=US-east

Jicofo:
org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.region1.example.com
org.jitsi.jicofo.BridgeSelector.BRIDGE_SELECTION_STRATEGY=RegionBasedBridgeSelectionStrategy

Region2:
-config.js:

testing: {
octo: {
probability: 1
},
deploymentInfo: {
shard: ‘shard-AP2’,
region: ‘AP-Japan’,
userRegion: ‘AP-Japan’
},

// Information about the jitsi-meet instance we are connecting to, including
// the user region as seen by the server.
deploymentInfo: {
shard: “shardAP2”,
region: “AP-Japan”,
userRegion: “AP-Japan”
},

JVB:

org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=muc
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=region1.example.com
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.region1.example.com
org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=MySecrete
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.region1.example.com
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=AP-Japan
org.jitsi.videobridge.xmpp.user.shard.DISABLE_CERTIFICATE_VERIFICATION=true
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=Region2_Local_IP
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=Region2_Public_IP

org.jitsi.videobridge.octo.BIND_ADDRESS=127.0.0.1
org.jitsi.videobridge.octo.PUBLIC_ADDRESS=Region2_Public_IP
org.jitsi.videobridge.octo.BIND_PORT=4096
org.jitsi.videobridge.REGION=AP-Japan

Jicofo:
org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.region1.example.com
org.jitsi.jicofo.BridgeSelector.BRIDGE_SELECTION_STRATEGY=RegionBasedBridgeSelectionStrategy

You need to specify the all the JVBs you want to connect on same Shard value. A shard is comprised of the following instances:

  1. Jicofo
  2. Prosody
  3. JMS
  4. Turn server
  5. JVB

So if you configure different shards the JVBs won’t be on same conference.

Thanks. I will try again.

I have changed the config file on region2.example.com server. making it have the same shard name as region1, but I still can’t get into the same room using region2 server URL. Is there anything else needs to be done to make it work?
JVB in region2 can register with region1 Jicofo. If there are users in a room on region1 server, and I stop JVB on region1 server, the users would be moved to region2 JVB.
Thanks again.

Share your Jicofo log of that meeting and both JVBs config files

Two participants joined the same meeting on region1.example.com/1234. JVB on that server is stopped after the meeting starts. Participants are then placed on region2’s JVB. The meeting can continue without any problem.

Region1 Jicofo log file:
region1-jicofo.log (16.7 KB)

Region1 JVB config:
region1-JVB-config.txt (707 Bytes)

Region1 JVB sip-communicator.properties:
region1-JVB-sip-communicator.properties.txt (975 Bytes)

Region2 JVB config:
region2-JVB-config.txt (736 Bytes)

region2 JVB sip-communicator.properties:
region2-JVB-sip-communicator.properties.txt (1.0 KB)

Participants can use either JVB (region1 JVB or region2 JVB) to join same meeting on region1 server using region1 URL, but they can only be on one JVB (us-east-2 or ap-northeast-1, default is us-east-2).

Participant A using region1 URL and participant B using region2 URL cannot join the same meeting (expected behavior is A and B can join the same meeting on region1 server, using different URL and JVB)

Ok now it’s clearer.
You config are all messed up.
What is the address of your Jicofo ?

It is region1.example.com.
How should I config these 2 servers to make the expected behavior happen?
Can you help me make the config files right?

Use these files. Make corrections accordingly {RE3GION2_PUBLIC_IP} etc…
region1-JVB-config.txt (713 Bytes)

region1-JVB-sip-communicator.properties.txt (928 Bytes)

region2-JVB-config.txt (717 Bytes)

region2-JVB-sip-communicator.properties.txt (1.1 KB)

They I still a bit messy but didn’t want to delete all of it. Check those see if they work

Thanks for the help.
I modified the config files according to the files you provided. Now, all the meetings go to the region2 JVB. However, participant A using URL region1.example.com/test1234 will not see participant B using URL: region2.example.com/test1234.

Question: in your region1-JVB-config file, you are using {jicofo secret} as “JVB_SECRET”; in your region1-JVB-sipcommunicator.properties, you are using {jicofo secret} as org.jitsi.videobridge.xmpp.user.shard.PASSWORD.
in your region2-JVB-sip-communicatior.properties, you kept “MY_SECRET” as org.jitsi.videobridge.xmpp.user.shard.PASSWORD
Is this intentionally done?

Another question: in your region1-JVB-config file, you left out the following:
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=Region1_Local_IP
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=Region1_Public_IP
Aren’t these necessary?

After modifying the config file on the two servers, I see errors in JVB log file on region1:
2020-09-18 21:32:21.693 INFO: [20] [hostname=region1.example.com id=shard] MucClient.lambda$getConnectAndLoginCallable$8#676: Logging in.
2020-09-18 21:32:21.694 SEVERE: [20] RetryStrategy$TaskRunner.run#198: org.jivesoftware.smack.sasl.SASLErrorException: SASLError using SCRAM-SHA-1: not-authorized
org.jivesoftware.smack.sasl.SASLErrorException: SASLError using SCRAM-SHA-1: not-authorized
at org.jivesoftware.smack.SASLAuthentication.authenticationFailed(SASLAuthentication.java:292)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1100)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:1000)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1016)


Also, the following is the error message on region2 JVB log:
2020-09-18 21:36:38.956 SEVERE: [13] RecurringRunnableExecutor.run#230: The invocation of the method org.jitsi.videobridge.stats.StatsManager$StatisticsPeriodicRunnable.run() threw an exception.
kotlin.KotlinNullPointerException
at org.jitsi.videobridge.octo.OctoRelayService.getStats(OctoRelayService.kt:88)
at org.jitsi.videobridge.stats.VideobridgeStatistics.generate0(VideobridgeStatistics.java:477)
at org.jitsi.videobridge.stats.VideobridgeStatistics.generate(VideobridgeStatistics.java:157)
at org.jitsi.videobridge.stats.StatsManager$StatisticsPeriodicRunnable.doRun(StatsManager.java:310)
at org.jitsi.utils.concurrent.PeriodicRunnableWithObject.run(PeriodicRunnableWithObject.java:87)
at org.jitsi.utils.concurrent.RecurringRunnableExecutor.run(RecurringRunnableExecutor.java:216)
at org.jitsi.utils.concurrent.RecurringRunnableExecutor.runInThread(RecurringRunnableExecutor.java:292)
at org.jitsi.utils.concurrent.RecurringRunnableExecutor.access$000(RecurringRunnableExecutor.java:36)
at org.jitsi.utils.concurrent.RecurringRunnableExecutor$1.run(RecurringRunnableExecutor.java:328)

What could be wrong now?
Thanks.

Needs to be identical - must have missed it

Yes they are necessary

Try these changes first

I have changed the configurations as described above, but still, user using URL region1.example.com/test1234 cannot see user joining with the URL region2.example.com/test1234.

Also, user joining with the URL region2.example.com/test1234 will see the following error message even if he is the only one in the meeting:

Is there anything else can be done?