Full manual diffs (L15, C20, E30, L25, J40, C10 §2, L10, P10, P11, J20, C30, P20, R40, E10) and read-only checks on the shared R1.05 test server. Skills and summaries moved to R1.05; new skill pytools (IM 36K10P40) from docs (no Python on the test server). Issues ISS-132..181; corrections to version-differences (E10, E30, P11, dss_ath_grp_u0104); C10 summary lists the 3 new authorization actions; r105-verification V10-V17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8.4 KiB
8.4 KiB
| task | version | source | status |
|---|---|---|---|
| Set up and operate a redundant HAC server pair (steps, hac.sup tabs, switchover, patching) | R1.05 (first written for R1.03) | IM 36K10J20-01EN 4th Edition (Feb. 2026) §1.2–§1.5, §2.4–§2.6, §3, §4.3–§4.11, §6.4, §7 (unchanged since the 3rd Edition); IM 36K01A50-01EN 5th Edition §1.15, §1.19; IM 36K01C10-01EN §3.4; hac.sup and scripts checked on the R1.03 test system 2026-10-01 and compared with the R1.05 test server 2026-10-08/09 | from docs; not tested on R1.03 or R1.05 (needs two licensed servers, the R1.05 test server is a single server); R1.05 installed files compared read-only (hac.sup and hacw_standby/stop identical, hacw_activate/deactivate extension hooks and hacw_hmi classpath new) |
Redundant server pair (HAC)
Everything here needs admin rights on both servers and a planned outage. Prepare the files; the user applies them.
1. Preparation
- Identical servers: same OS, CI Server version and patches, install path, TLS variables, node number and licence (including HAC).
- ≥ 2 separate network interfaces/segments between the servers (≤ 4), separate from field networks if possible. One link only = single point of failure and the risk that both servers go active.
- Time sync on each server from an NTP/GPS source with jumps ≤ 1 s (not DUR time sync between the pair: same node number).
- At least one real IP device per server for the network check (router/switch, priority 1).
- CI Service start type Automatic (HAC reboots servers).
- All servers physical, or all virtual: never mix them in one HAC configuration (A50 §1.19).
TLS_BACKUP_PATHon a partition at least as large asTLS_HIS_PATH(the standby zips its runtime environment before each synchronization; without the variable the scripts useTLS_LST_PATH).
2. Steps (on every server unless noted)
- System variable
CI_PRIM= 0 (primary), 1 (secondary), 2, 3. - Start CI Server once; create the optional status items per server (section, e.g.
SYSTEM.HAC1, itemsOPER_MODE,OPER_STAT,CI_STAT,IP_STAT,DATA1_MODE,DATA1_STAT, …, all Integer); stop CI Server. tls\com: renameci_start.cmd/ci_stop.cmdto e.g.ci_start_old.cmd/ci_stop_old.cmd, copyhacw_standby.cmd→ci_start.cmd,hacw_stop.cmd→ci_stop.cmd. R1.05:hacw_standby/hacw_stophave no extension-script hook, so?*_ci_start.cmd/?*_ci_stop.cmdscripts (ISS-121) no longer run onceci_start/ci_stopare replaced. The service scripts thathacw_activate/hacw_deactivatecall (integration_start…) still run their own?*_<script>.cmdhooks. For project processes that must run only on the active server, use<prefix>_hacw_activate.cmd/<prefix>_hacw_deactivate.cmd(ISS-160, from the installed scripts, not tested):hacw_activatecalls them after all services (last USER) are started, before it loads the HAC status items and reports ACTIVE to the Watchdog: keep them short (the server must be active within 5 minutes, §5) and never wait for user input.hacw_deactivatecalls them after the dynamic processes andhacwitmare stopped, before DURM, INTEGRATION and the other services are stopped.- Put the same scripts on every server (the template mirror set includes
tls\com, so the standby normally receives them; check after the first synchronization).
hac.supon the primary (Setup File Editor), then copy to the others:
| Tab | Set |
|---|---|
| General | MODE (DUAL/TRIPLE/QUAD), HAC_HOSTS (host names in priority order), HAC_UNIT (status item sections), HEARTBEAT |
| Network | PRIMARY, SECONDARY … = the IP address of each network, same order on all servers |
| Watchdog | IP_DEVICE = <ip>, <label>, <timeout>, <retries>, <interval>, <priority> (≤ 20; priority 1 = loss makes the server unhealthy; remove the template localhost entry), WDG_CONNECT = <alive check s>, <timeout s>, <retries>, <max time diff s>, <inhibit s>, HARDWARE_WDG, CUSTOM (script in tls\com, exit 0 = healthy), START_MANUAL |
| Mirror (General) | QUESIZE, MAXOPNDB, timeouts, MAX_ACTIONS, LOG_FILE_SIZE — defaults normally fine |
| Mirror (Working set) | INCLUDE_DIR/EXCLUDE_DIR/EXCLUDE_FILE; keep the default excludes (node-private files such as durm*.sup, *ini.sup, hac.sup) |
| Recovery (General) | RECOVERY_ON = YES (required: it reports CI Server health to the Watchdog), START_DELAY, TOOL hierarchy, PROCESS list (remove unlicensed processes; add HACMIR2/HACMIR3 for TRIPLE/QUAD), NO_RUN, STANDBY |
| Recovery (Monitoring) | MAX_QUEUE, MAX_CPU, INACTIVE (none set in the installed file) |
| Recovery (Custom actions) | ACTION = <id>, <command>, <delay>, <params> |
| History merge | HMF_DAYS (0 = off), HMF_PATH (outside the mirror, ~3 × period of history), HMF_PORT (34489) |
| Other | JOURNAL_ON (only small systems; needs write cache off), log size/pages/level, PORTNUMS (also change the hacwsck lines in the hacw_* scripts and the HMI properties) |
- HAC HMI properties (
%TLS_WAP_PATH%\cfg\jhacProperties\application.properties) on every machine that runs the HMI:primary=,secondary=addresses. On R1.05hacw_hmialso needstls\exe\lib(complete CI Server installation on the HMI machine; ISS-161). - Firewall: UDP 16000 (GUI/commands), 16003 (recovery), 16004 (watchdog↔watchdog), 16005 (item
setter), 16006 (file copy slave) between servers/HMI stations; 16001/16002 local; the HMI's
own UDP ports 16010–16041 (
ownport/ownportsin the HMI properties; IM 36K01C30); TCP 34489; ICMP. - Start both servers; both come up STANDBY, the primary goes ACTIVE (if not in manual mode).
Test switchovers, then set
START_MANUAL = NOso they start in AUTOMATIC.
3. Operating
- Manual switchover (HAC HMI): only when the mirror is consistent (active = master/active, standby = slave/standby, black text) and at least one LAN is good. Set the ACTIVE server to MANUAL and the STANDBY to AUTOMATIC, then change the ACTIVE server's status to STANDBY.
- Short maintenance on the active server: set all servers MANUAL (no automatic switchover), restart what is needed, set back to AUTOMATIC. Status changes are refused in AUTOMATIC mode.
- No automatic switch-back to the primary after it recovers.
- Both servers active (HAC network lost): before reconnecting, put the server that should
become standby into standby by hand; then the active one synchronizes it. Use history merge
(
hachmfcmdon the active server) to recover event history from the other server. - Monitoring the standby from the active side:
hacitmval -c <active host> -n <section>.<item> -v <int>on the standby (the section must be one of the status item sections). - OPC UA PubSub (R1.04 and later, A50 §1.15): if a HAC network card breaks and the system
moves to another card, PubSub-connected items stay offline; upload the PubSub dataset writer
to the runtime again (skill
data-access). A cable pulled and reconnected recovers by itself.
4. Patching a redundant pair (§6.4)
- Full backup. 2. Stop the standby for maintenance (set it MANUAL, stop CI Server, set
START_MANUAL = YES). 3. Patch it. 4. Start it in manual; wait until the mirror shows master active / slave standby. 5. Manual switchover to it. 6. Stop and patch the old active server. - Start it in manual (it becomes standby). 8. Set both to AUTOMATIC and
START_MANUAL = NO. Patches change files outside the mirror (exe, common files), so they are never copied automatically. For a version upgrade (e.g. to R1.05) follow IM 36K01C10 §3.4 (skillinstallation-security): the standby is upgraded and tested off the network first. After an upgrade, check thatci_start/ci_stopare still the HAC copies and that the newhacw_activate/hacw_deactivate/hacw_hmiare in place.
5. Tips (§4.8, §6.5, §7)
- Large history: synchronization backups take long (ZIP of
TLS_HIS_PATH); the manual's options are to zip only the*000000.*administration files inhacm_create_backup/hacm_restore_backup(history data then not protected) or use another archiver. - Increase the Watchdog inhibit time on big systems so a fresh standby is synchronized before another switchover is allowed; increase Data to master timeout if big key-file repairs on the slave restart the synchronization.
- CI Server must start within 5 minutes, otherwise the servers keep switching.