Embedding PSRT server as EVA ICS v4 service

PSRT server can be embedded as EVA ICS v4 service and started by the EVA ICS service launcher. This allows to unify the deployment, configuration and management process.

Installing

If installed/updated from a .deb package, make sure psrtd is not running and disabled in systemd:

systemctl stop psrtd
systemctl disable psrtd

Configuring

Use the following configuration template:

command: /usr/sbin/psrtd --eva-svc
bus:
  path: var/bus.ipc
config:
  # all paths in config are relative to EVA ICS directory if do not start with . or /
  server:
    latency_warn: 50000
    # data stream queue, per client (server buffer)
    # larger data queue - more ops/sec for clients, but higher latency
    data_queue: 1024
    max_topic_depth: 32
    # max topic length, for bulk requests - total request length + 1 byte per topic
    max_topic_length: 1000000
    # max pub frame size (topic + data, bytes)
    max_pub_size: 1100000
    #bind_stats: 0.0.0.0:8880
  proto:
    bind:
      - 0.0.0.0:2873
      - var/psrt.sock
    bind_udp: 0.0.0.0:2873
    # max udp frame size
    udp_frame_size: 4096
    #tls_cert: /etc/psrtd/certs/server.crt
    # only RSA private keys are supported
    #tls_key: /etc/psrtd/certs/server.key
    allow_no_tls: true
  auth:
    allow_anonymous: true
    # use htpasswd -B to manage password file
    password_file: /etc/psrtd/psrt-passwd
    acl: /etc/psrtd/acl.yml
    # AES keys for UDP encryption
    #key_file: /etc/psrtd/keys.yml
timeout:
  default: 10
user: nobody
workers: 2

Create a PSRT service instance with eva-shell:

eva svc create eva.pubsub.default path/to/svc-tpl-psrtd.yml

Note that in the proposed configuration the server listens on two sockets: TCP port 2873 and UNIX socket var/psrt.sock (created as /opt/eva4/var/psrtd.sock.

Also note that certain parameters, such as timeout, FIPS mode, number of workers, are moved from the server configuration to EVA ICS service configuration and taken from there.

Running

The server is automatically launched as EVA ICS service. The process does not create a PID file and does not respond to system signals in a usual way. Use EVA ICS service management commands only.

Using with local replication services

The best practice for Replication service and Zero-failure replication service is to use UNIX socket instead of TCP to speed up data exchange and minimize system load.

Set socket path in the above service configurations as var/psrt.sock.