Can anyone provide guidance on how to set up redundancy for two Niagara N4 Supervisor stations on the network? I’m looking for insights on best practices or if anyone has already implemented this type of redundancy. Also, is a specific redundancy license required for this configuration, or does the standard licensing cover it?
Here is the documentation you need
docJaceRedundant.pdf (981.3 KB)
I had no idea you could do this. That’s awesome!
Lol yeah was new info for me too. Was in the middle of writing a long post about how you could set up multiple supervisors. Got a work call and when I returned to the post, Jedi Master Johnson had answered with the correct way to do it ![]()
I used to have to do this the hard way, like making a value and having it read from the other server and if didn’t return, fail the supervisor or Jace. This service is noice
I was also unaware about the JACE redundancy. I had a large site that required the supervisor to be redundant and we used Stratus Everrun. This service allows for two separate servers to act as a single supervisor. This allows the the two servers to have a single IP address so you don’t have to manage trying to switch the IP address. Since the two supervisors act as a single supervisor, you just process with licensing the same way you would for a single supervisor. Using Stratus made it to where we didn’t have to do anything different than we would do with just a single (non-redundant) supervisor.
Where can i find redundancy jar file module?
Does this work for the Niagara Network as well. I read the documentation and it seemed to be geared toward BACnet.
Hello sir, I’m sorry for disturbing you but I’m a newbie in this redundancy. Can you explain to me how and what happens when the primary jace down? Will the secondary automatically be the main jace when the primary down?
Thank you.
Dear all i have install Niagara redundancy on server but i have found watch dog kill VM impact to station was restart i found log in below:
“Nre:Engine” #29 daemon prio=5 os_prio=0 tid=0x0000020e30f3e000 nid=0x2b44 runnable [0x000000e2e177d000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at com.tridium.history.file.BFileHistoryTable.createFromFile(BFileHistoryTable.java:214)
at com.tridium.history.db.BLocalHistoryDatabase.lambda$getTable$7(BLocalHistoryDatabase.java:936)
at com.tridium.history.db.BLocalHistoryDatabase$$Lambda$439/96213251.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.tridium.history.db.BLocalHistoryDatabase.getTable(BLocalHistoryDatabase.java:928)
at com.tridium.history.db.BLocalDbHistory.getTable(BLocalDbHistory.java:282)
- locked <0x00000006019fce00> (a com.tridium.history.db.BLocalDbHistory)
at com.tridium.history.db.LocalDbConnection.getTableHandle(LocalDbConnection.java:597)
at com.tridium.history.db.LocalDbConnection.getLastTimestamp(LocalDbConnection.java:106)
at javax.baja.history.ext.BHistoryExt.append(BHistoryExt.java:1414)
- locked <0x00000005de5b9468> (a javax.baja.history.ext.BNumericIntervalHistoryExt)
at javax.baja.history.ext.BNumericIntervalHistoryExt.writeRecord(BNumericIntervalHistoryExt.java:268)
at javax.baja.history.ext.BIntervalHistoryExt.doIntervalElapsed(BIntervalHistoryExt.java:267)
at auto.javax_baja_history_ext_BNumericIntervalHistoryExt.invoke(AutoGenerated)
at com.tridium.sys.schema.ComponentSlotMap.invoke(ComponentSlotMap.java:1911)
at com.tridium.sys.schema.ComponentSlotMap.invoke(ComponentSlotMap.java:1874)
at javax.baja.sys.BComponent.invoke(BComponent.java:1231)
at com.tridium.sys.engine.EngineUtil.invoke(EngineUtil.java:42)
at com.tridium.sys.engine.NClockTicket.process(NClockTicket.java:135)
at com.tridium.sys.engine.TicketQueue.scan(TicketQueue.java:107)
at com.tridium.sys.engine.TicketQueue.check(TicketQueue.java:43)
at com.tridium.sys.engine.EngineManager.execute(EngineManager.java:268)
at com.tridium.sys.engine.EngineManager$EngineThread.run(EngineManager.java:910)
“CoreCryptoManager.recurringCertsSave-0” #28 daemon prio=5 os_prio=0 tid=0x0000020e3198e800 nid=0x111c waiting on condition [0x000000e2e16ff000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000005c003dff8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2083)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
“CoreCryptoManager.fileMonitor-0” #27 daemon prio=5 os_prio=0 tid=0x0000020e32580800 nid=0x18a8 waiting on condition [0x000000e2e167f000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000005c0070568> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2083)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
“SyslogManager.fileMonitor-0” #26 daemon prio=5 os_prio=0 tid=0x0000020e30a53800 nid=0x32e8 waiting on condition [0x000000e2e15ff000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000005c0059940> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2083)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
“Service Thread” #24 daemon prio=9 os_prio=0 tid=0x0000020e2d035000 nid=0x2734 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C1 CompilerThread17” #23 daemon prio=9 os_prio=2 tid=0x0000020e2cfe6800 nid=0x1354 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C1 CompilerThread16” #22 daemon prio=9 os_prio=2 tid=0x0000020e2cfd7800 nid=0x2f28 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C1 CompilerThread15” #21 daemon prio=9 os_prio=2 tid=0x0000020e2cfd0000 nid=0xbc8 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C1 CompilerThread14” #20 daemon prio=9 os_prio=2 tid=0x0000020e2cfc3000 nid=0x31cc waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C1 CompilerThread13” #19 daemon prio=9 os_prio=2 tid=0x0000020e2cfba800 nid=0x2bf0 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C1 CompilerThread12” #18 daemon prio=9 os_prio=2 tid=0x0000020e2cfa9800 nid=0x31e4 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread11” #17 daemon prio=9 os_prio=2 tid=0x0000020e2cf9c800 nid=0x305c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread10” #16 daemon prio=9 os_prio=2 tid=0x0000020e2cf8b800 nid=0x25a0 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread9” #15 daemon prio=9 os_prio=2 tid=0x0000020e2cf7a800 nid=0x2b78 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread8” #14 daemon prio=9 os_prio=2 tid=0x0000020e2cf72000 nid=0x2ba0 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread7” #13 daemon prio=9 os_prio=2 tid=0x0000020e2cf71000 nid=0x152c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread6” #12 daemon prio=9 os_prio=2 tid=0x0000020e2aeaa000 nid=0x3140 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread5” #11 daemon prio=9 os_prio=2 tid=0x0000020e2ae9d000 nid=0x2250 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread4” #10 daemon prio=9 os_prio=2 tid=0x0000020e2ae9c000 nid=0xa08 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread3” #9 daemon prio=9 os_prio=2 tid=0x0000020e2ae9b000 nid=0x26ec waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread2” #8 daemon prio=9 os_prio=2 tid=0x0000020e26ff8800 nid=0x1c44 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread1” #7 daemon prio=9 os_prio=2 tid=0x0000020e26ff4800 nid=0x2818 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“C2 CompilerThread0” #6 daemon prio=9 os_prio=2 tid=0x0000020e26ff2800 nid=0x326c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“Attach Listener” #5 daemon prio=5 os_prio=2 tid=0x0000020e2ae9a000 nid=0x3260 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“Signal Dispatcher” #4 daemon prio=9 os_prio=2 tid=0x0000020e2ae99800 nid=0x146c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
“Finalizer” #3 daemon prio=8 os_prio=1 tid=0x0000020e2ae8a800 nid=0x1c2c in Object.wait() [0x000000e2e00ff000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
- locked <0x00000005c0070d90> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:188)
“Reference Handler” #2 daemon prio=10 os_prio=2 tid=0x0000020e2cf24000 nid=0x2bdc in Object.wait() [0x000000e2e007f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000005c0061620> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
“VM Thread” os_prio=2 tid=0x0000020e2cf01800 nid=0x2604 runnable
“ParGC Thread#0” os_prio=0 tid=0x0000020e03baa800 nid=0x1778 runnable
“ParGC Thread#1” os_prio=0 tid=0x0000020e03bac000 nid=0x1fd0 runnable
“ParGC Thread#2” os_prio=0 tid=0x0000020e03bad800 nid=0x149c runnable
“ParGC Thread#3” os_prio=0 tid=0x0000020e03baf800 nid=0x266c runnable
“ParGC Thread#4” os_prio=0 tid=0x0000020e03bb0800 nid=0xaa0 runnable
“ParGC Thread#5” os_prio=0 tid=0x0000020e03bb1800 nid=0x9c8 runnable
“ParGC Thread#6” os_prio=0 tid=0x0000020e03bb5800 nid=0xb4c runnable
“ParGC Thread#7” os_prio=0 tid=0x0000020e03bb6800 nid=0x7e8 runnable
“ParGC Thread#8” os_prio=0 tid=0x0000020e03bb8800 nid=0x295c runnable
“ParGC Thread#9” os_prio=0 tid=0x0000020e03bb9800 nid=0x1374 runnable
“ParGC Thread#10” os_prio=0 tid=0x0000020e03bba800 nid=0x16b4 runnable
“ParGC Thread#11” os_prio=0 tid=0x0000020e03bbd800 nid=0x2c30 runnable
“ParGC Thread#12” os_prio=0 tid=0x0000020e03bbe800 nid=0x1380 runnable
“ParGC Thread#13” os_prio=0 tid=0x0000020e03bc1000 nid=0x33ec runnable
“ParGC Thread#14” os_prio=0 tid=0x0000020e03bc4000 nid=0x32f0 runnable
“ParGC Thread#15” os_prio=0 tid=0x0000020e03bc5000 nid=0x13b0 runnable
“ParGC Thread#16” os_prio=0 tid=0x0000020e03bc8000 nid=0x18b8 runnable
“ParGC Thread#17” os_prio=0 tid=0x0000020e03bd1000 nid=0x33a4 runnable
“ParGC Thread#18” os_prio=0 tid=0x0000020e03bd2000 nid=0xe60 runnable
“ParGC Thread#19” os_prio=0 tid=0x0000020e03bd0000 nid=0x2828 runnable
“ParGC Thread#20” os_prio=0 tid=0x0000020e03bca800 nid=0x2a14 runnable
“ParGC Thread#21” os_prio=0 tid=0x0000020e03bcb000 nid=0x2a00 runnable
“ParGC Thread#22” os_prio=0 tid=0x0000020e03bcc000 nid=0x3350 runnable
“ParGC Thread#23” os_prio=0 tid=0x0000020e03bd0800 nid=0x307c runnable
“ParGC Thread#24” os_prio=0 tid=0x0000020e03bcc800 nid=0x7c0 runnable
“ParGC Thread#25” os_prio=0 tid=0x0000020e03bcd000 nid=0x32a0 runnable
“ParGC Thread#26” os_prio=0 tid=0x0000020e03bce000 nid=0x3118 runnable
“ParGC Thread#27” os_prio=0 tid=0x0000020e03bce800 nid=0x3120 runnable
“ParGC Thread#28” os_prio=0 tid=0x0000020e03bcf000 nid=0x3300 runnable
“ParGC Thread#29” os_prio=0 tid=0x0000020e03be5000 nid=0x948 runnable
“ParGC Thread#30” os_prio=0 tid=0x0000020e03be3000 nid=0x3138 runnable
“ParGC Thread#31” os_prio=0 tid=0x0000020e03be0000 nid=0x3004 runnable
“ParGC Thread#32” os_prio=0 tid=0x0000020e03be3800 nid=0x2fdc runnable
“ParGC Thread#33” os_prio=0 tid=0x0000020e03be1800 nid=0x31ec runnable
“ParGC Thread#34” os_prio=0 tid=0x0000020e03be1000 nid=0x1488 runnable
“ParGC Thread#35” os_prio=0 tid=0x0000020e03be5800 nid=0x3054 runnable
“ParGC Thread#36” os_prio=0 tid=0x0000020e03be4000 nid=0x10c4 runnable
“ParGC Thread#37” os_prio=0 tid=0x0000020e03be6000 nid=0x337c runnable
“ParGC Thread#38” os_prio=0 tid=0x0000020e03bdf000 nid=0xbcc runnable
“ParGC Thread#39” os_prio=0 tid=0x0000020e03be2000 nid=0x2238 runnable
“ParGC Thread#40” os_prio=0 tid=0x0000020e03be6800 nid=0x2de8 runnable
“ParGC Thread#41” os_prio=0 tid=0x0000020e03bdf800 nid=0x2ffc runnable
“ParGC Thread#42” os_prio=0 tid=0x0000020e03be7800 nid=0xf00 runnable
“VM Periodic Task Thread” os_prio=2 tid=0x0000020e2d03e000 nid=0x3310 waiting on condition
JNI global references: 2414
Heap
PSYoungGen total 2656768K, used 1886320K [0x0000000715580000, 0x00000007bf480000, 0x00000007c0000000)
eden space 2542592K, 72% used [0x0000000715580000,0x00000007864bc660,0x00000007b0880000)
from space 114176K, 31% used [0x00000007b8500000,0x00000007ba7dfd10,0x00000007bf480000)
to space 120832K, 0% used [0x00000007b0880000,0x00000007b0880000,0x00000007b7e80000)
ParOldGen total 5592576K, used 4430719K [0x00000005c0000000, 0x0000000715580000, 0x0000000715580000)
object space 5592576K, 79% used [0x00000005c0000000,0x00000006ce6dfee0,0x0000000715580000)
Metaspace used 98901K, capacity 107935K, committed 108200K, reserved 1142784K
class space used 12768K, capacity 15414K, committed 15528K, reserved 1048576K