Using CitectSCADA > Building Redundancy Into Your System > I/O Server Redundancy > Redundancy and Persistence

Redundancy and Persistence

If you are using Server redundancy, Persistence Caches (I/O Server cache) keep standby servers updated with the most recently read device data. A Persistence Cache, or I/O Server Cache, is created for each cached I/O Device. The following diagram introduces the concept of a Persistence Cache.

The diagram shows that there are two I/O Servers, namely IOServer1 (primary) and IOServer2 (standby). Each connects to the public switched telephone network (PSTN) via a modem, which is in turn connects to the I/O Devices, also over a modem. Persistence Caches work as follows:

  1. Every IODevices->Cache Time period, data from an I/O Device is stored temporarily in the memory of the I/O Server (I/O Server cache).
  2. For every [IOServer]SavePeriod, IOServer1 saves its in-memory cache to disk.
  3. The cache is saved in Persistence Caches -one for each cached device.
  4. IOServer1 broadcasts to other I/O Servers the UNC path of the Persistence Caches (set with [IOServer]SaveNetwork).
  5. From these Persistence Caches, IOServer2 updates its in-memory cache for its I/O Devices.
  6. Depending on the value of the I/O Server parameter of `[IOServer]SavePeriod' (determines how often the Persistence Cache is saved to the hard disk in seconds), IOServer1 saves its in-memory cache to the hard disk every x amount of seconds.
  7. Note: You can define an I/O Device on an I/O Server using the Express Communications Wizard, or by adding a device in the I/O Devices form in CitectSCADA's Project Editor.

You are not limited to just one Standby Server, since the UNC path name set in [IOServer]SaveNetwork is broadcast to I/O Servers. Each I/O Server updates its cache from the Persistence Caches only for the I/O Devices defined on that server. It is then possible, therefore, set up several I/O Servers which update their in-memory caches with the most recently read data.

For example, we set the [IOServer]SaveFile and [IOServer]SaveNetwork parameters as follows:

On IOServer1

On IOServer2

[IOServer]

[IOServer]

SaveFile=C:\Data\IOServer1.dat

SaveFile=C:\Data\IOServer2.dat

SaveNetwork=\\IOServer1\Data\IOServer1.dat

SaveNetwork=\\IOServer2\Data\IOServer2.dat

IOServer1 would broadcast the following UNC path of the Persistence Cache to other I/O Servers: '\\IOServer1\Data\IOServer1.dat'. IOServer2 would then use the Persistence Caches to update its in-memory cache with the device data most recently read by IOServer1.

See Also