You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Temp directory for transaction logs/journals (default: `data/_transactions`).
814
+
Local directory for transaction rollback logs and recovery bookkeeping (default: `data/_transactions`). Engines with native transaction support, such as SQLite, Postgres, and Redis, do not write rollback logs for successful commits, but the directory is still used for transaction housekeeping.
Copy file name to clipboardExpand all lines: docs/hosting.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -135,7 +135,7 @@ See our [Command Line Guide](cli.md) for controlling the xyOps service via comma
135
135
136
136
When you manually install xyOps, it creates a cluster of one, and promotes itself to primary. To add backup conductors, follow these instructions.
137
137
138
-
First, for multi-conductor setups, **you must have an external storage backend**, such as S3, or S3-compatible (MinIO, etc.). See [Storage Engines](https://github.com/jhuckaby/pixl-server-storage#engines) for details.
138
+
First, for multi-conductor setups, **you must have shared external storage**. For live production, we recommend a Hybrid storage setup using Redis or Postgres for JSON data, plus S3 or an S3-compatible service for files. See [Storage Setup](storage.md) for details.
139
139
140
140
Once you have external storage setup and working, stop the xyOps service, and edit the `/opt/xyops/conf/masters.json` file:
141
141
@@ -265,7 +265,7 @@ For a load balanced multi-conductor setup with Nginx w/TLS, please read this sec
265
265
266
266
A few prerequisites for this setup:
267
267
268
-
- For multi-conductor setups, **you must have an external storage backend**, such as S3, or S3-compatible (MinIO, etc.). See [Storage Engines](https://github.com/jhuckaby/pixl-server-storage#engines) for details.
268
+
- For multi-conductor setups, **you must have shared external storage**. For live production, we recommend a Hybrid storage setup using Redis or Postgres for JSON data, plus S3 or an S3-compatible service for files. See [Storage Setup](storage.md) for details.
269
269
- You will need a custom domain configured and TLS certs created and ready to attach.
270
270
- You have your xyOps configuration file customized and ready to go ([config.json](https://github.com/pixlcore/xyops/blob/main/sample_conf/config.json)) (see below).
271
271
@@ -373,7 +373,7 @@ A few things to note here:
373
373
374
374
## External Storage
375
375
376
-
For using an external storage system, you have [several to choose from](storage.md). We currently recommend **MinIO**, because it has an open source community edition, it is S3 compatible, and it handles both data and files in the same engine.
376
+
For using an external storage system, you have [several to choose from](storage.md). For live production multi-conductor setups, we currently recommend **Redis + S3** or **Postgres + S3** via the Hybrid storage engine. The S3 side can be AWS S3 or an S3-compatible service such as MinIO or RustFS.
377
377
378
378
For more details, see the [Storage Setup Guide](storage.md).
Copy file name to clipboardExpand all lines: docs/scaling.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ Running xyOps in live production with lots of servers and/or lots of running job
9
9
- CPU cores: xyOps is multi-process and highly concurrent. More cores help the scheduler, web server, storage I/O, and log compression run smoothly under load.
10
10
- RAM: Add headroom for the Node.js heap, in-process caches, storage engine caches, and OS page cache. RAM directly improves cache hit rates and reduces disk/remote I/O.
11
11
- Storage: Prefer fast SSD/NVMe for local Filesystem/SQLite and log archives. Ensure enough IOPS for parallel job logs, snapshots, and uploads.
12
-
- Network: For large fleets, ensure good NIC throughput and low latency between conductors and workers. If using external storage (S3, Redis, MinIO), place conductors close to it.
12
+
- Network: For large fleets, ensure good NIC throughput and low latency between conductors, workers, and shared storage. For multi-conductor production, place conductors close to both the JSON data store (Redis or Postgres) and the file store (S3 or S3-compatible).
13
13
- OS limits: Increase file descriptor and process limits for busy nodes (e.g. `ulimit -n`, systemd Limits). Ensure swap is configured conservatively to avoid heap thrash.
14
14
15
15
## Increase Node.js Memory
@@ -53,15 +53,15 @@ Or, you can set it globally in the main [satellite.config](config.md#satellite-c
53
53
54
54
## Multi-Conductor Setups
55
55
56
-
Multi-conductor requires external shared storage so all conductors see the same state. See [Multi-Conductor with Nginx](hosting.md#multi-conductor-with-nginx).
56
+
Multi-conductor requires shared external storage so all conductors see the same state. For live production, use a Hybrid storage setup with Redis or Postgres for JSON data, plus S3 or an S3-compatible service for files. Redis and Postgres support native storage transactions, so the database owns the commit or rollback decision if a conductor fails during a transaction.
57
57
58
58
For details, see the [Storage Setup Guide](storage.md).
59
59
60
60
### NFS Warning
61
61
62
-
While it is possible to use the [Filesystem](https://github.com/jhuckaby/pixl-server-storage#local-filesystem) engine with an NFS mount, this is **only** recommended if used in conjunction with the [Hybrid](https://github.com/jhuckaby/pixl-server-storage#hybrid) engine, where the Filesystem is set as the `binaryEngine`(to store only files), and the `docEngine` is set to a dedicated key/value store like [MinIO or RustFS](https://github.com/jhuckaby/pixl-server-storage#s3-compatible-services).
62
+
While it is possible to use the [Filesystem](https://github.com/jhuckaby/pixl-server-storage#local-filesystem) engine with an NFS mount, this is **only** recommended if used in conjunction with the [Hybrid](https://github.com/jhuckaby/pixl-server-storage#hybrid) engine, where the Filesystem is set as the `binaryEngine` to store only files, and the `docEngine` is set to Redis or Postgres for JSON data.
63
63
64
-
The reason is, xyOps reads and writes thousands upon thousands of tiny key/value records as part of its [database system](https://github.com/jhuckaby/pixl-server-unbase), and this is *extremely* difficult for NFS to deal with at scale.
64
+
The reason is, xyOps reads and writes thousands upon thousands of tiny key/value records as part of its [database system](https://github.com/jhuckaby/pixl-server-unbase), and this is *extremely* difficult for NFS to deal with at scale. Also, NFS does not provide native pixl-server-storage transactions, so it should not be the document store for multi-conductor production.
65
65
66
66
## Automated Backups
67
67
@@ -204,5 +204,5 @@ This would limit traffic to 100 requests/sec per IP, utilizing up to 20MB of IP
204
204
## References
205
205
206
206
-[xyOps Self-Hosting Guide](hosting.md)
207
-
-[Storage engines and Hybrid](https://github.com/jhuckaby/pixl-server-storage#engines)
207
+
-[xyOps Storage Setup Guide](storage.md)
208
208
-[Web server documentation](https://github.com/jhuckaby/pixl-server-web)
Copy file name to clipboardExpand all lines: docs/sso.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -577,7 +577,7 @@ For a load balanced multi-conductor setup with Nginx w/TLS and OAuth-Proxy for S
577
577
578
578
A few prerequisites for this setup:
579
579
580
-
- For multi-conductor setups, **you must have a central external storage backend**, such as [MinIO](storage.md#minio), [RustFS](storage.md#rustfs), or a [Hybrid storage](storage.md#hybrid-configurations) setup. Do not use local Docker data volumes for multi-conductor.
580
+
- For multi-conductor setups, **you must have shared external storage**. For live production, we recommend a Hybrid storage setup using Redis or Postgres for JSON data, plus S3 or an S3-compatible service for files. Do not use local Docker data volumes for multi-conductor. See [Storage Setup](storage.md) for details.
581
581
- You will need a custom domain configured and TLS certs created and ready to attach.
582
582
- You have your xyOps configuration files customized and ready to go ([config.json](https://github.com/pixlcore/xyops/blob/main/sample_conf/config.json) and [sso.json](https://github.com/pixlcore/xyops/blob/main/sample_conf/sso.json)) (see below for details).
583
583
- And of course you should have a pretested SSO configuration for OAuth2-Proxy, so you are confident that piece works before integrating it here.
@@ -645,7 +645,7 @@ Next is the OAuth2-Proxy setup (we use the official Docker image here). Configu
645
645
- `OAUTH2_PROXY_SET_XAUTHREQUEST`is set to `true`. This returns the set of trusted headers in auth_request mode.
646
646
- `OAUTH2_PROXY_SKIP_AUTH_ROUTES`has been removed, as OAuth2-Proxy doesn't actually do any routing in this configuration.
647
647
648
-
Once you have those two components running, we can fire up the xyOps backend. This is listed separately as you'll usually want to run these on dedicated servers. Before starting multiple conductors, configure xyOps to use a central storage engine as described in the [Storage Setup Guide](storage.md). Here is the multi-conductor configuration as a single Docker compose file. For additional conductor servers you can duplicate this service, change the hostname, and point each conductor at the same central storage configuration:
648
+
Once you have those two components running, we can fire up the xyOps backend. This is listed separately as you'll usually want to run these on dedicated servers. Before starting multiple conductors, configure xyOps to use shared external storage as described in the [Storage Setup Guide](storage.md). Here is the multi-conductor configuration as a single Docker compose file. For additional conductor servers you can duplicate this service, change the hostname, and point each conductor at the same shared storage configuration:
649
649
650
650
```yaml
651
651
services:
@@ -669,10 +669,10 @@ A few things to note here:
669
669
- We're using our official xyOps Docker image, but you can always [build your own from source](https://github.com/pixlcore/xyops/blob/main/Dockerfile).
670
670
- All conductor server hostnames need to be listed in the `XYOPS_masters` environment variable, comma-separated.
671
671
- All conductor servers need to be able to route to each other via their hostnames, so they can self-negotiate and hold elections.
672
-
- All conductor servers must share the same central storage backend. Do not mount separate local `/opt/xyops/data` volumes per conductor, as that will create split-brain data.
672
+
- All conductor servers must use the same shared external storage configuration. Do not mount separate local `/opt/xyops/data` volumes per conductor, as that will create split-brain data.
673
673
- The timezone (`TZ`) should be set to your company's main timezone, so things like midnight log rotation and daily stat resets work as expected.
674
674
675
-
For the xyOps container, we are bind mapping local host directories for configuration and logs (`./xyops-conf` and `./xyops-logs`). Please change those paths to appropriate locations on the host where you want these files stored. Launch the container once, and it will generate all the config files for you. Then configure a central storage engine in `./xyops-conf/config.json` before bringing up multiple conductors. See the [xyOps Configuration Guide](config.md) and [Storage Setup Guide](storage.md) for details. Specifically though, let's talk about `sso.json` for this configuration. This file is largely discussed above (see [Configuration](#configuration)), but the [Header Map](#header-map) in particular is going to be different for Nginx + OAuth2-Proxy:
675
+
For the xyOps container, we are bind mapping local host directories for configuration and logs (`./xyops-conf` and `./xyops-logs`). Please change those paths to appropriate locations on the host where you want these files stored. Launch the container once, and it will generate all the config files for you. Then configure shared external storage in `./xyops-conf/config.json` before bringing up multiple conductors. See the [xyOps Configuration Guide](config.md) and [Storage Setup Guide](storage.md) for details. Specifically though, let's talk about `sso.json` for this configuration. This file is largely discussed above (see [Configuration](#configuration)), but the [Header Map](#header-map) in particular is going to be different for Nginx + OAuth2-Proxy:
0 commit comments