COPT Compute Cluster Service
The Cardinal Optimizer provides COPT compute cluster service on all supported platforms, which allows you to offload optimization computations from COPT client applications over local network.
Once COPT compute cluster server runs at local network, any COPT client application with matching COPT version can connect to server and offload optimization computations. That is, COPT compute cluster clients are allowed to do modelling locally, execute optimization jobs remotely, and then obtain results interactively.
Note that the more computing power server has, the more optimization jobs can run simultaneously. Furthermore, COPT compute cluster service has functionality to cluster multiple servers together and therefore serve more COPT compute cluster clients over local network.
Server Setup
The COPT compute cluster service includes copt_cluster
executable
and a configuration file cls.ini
. The very first thing to do when cluster server starts
is to verify cluster license locally, whose path is specified in cls.ini
.
If local validation passes, cluster server might connect remotely to COPT licensing server
for further validation, such as verifying machine IP, which is supposed to match IP range
that user provided during registration. This means the server running COPT compute cluster service
should have internet access in specified area, such as campus network.
For details, please see descriptions below or refer to
How to obtain and setup license.
Installation
The Cardinal Optimizer provides a separate package for remote services, which include COPT compute cluster. Users may apply for remote package from customer service. Afterwards, unzip the remote package and move to any folder on your computer. The software is portable and does not change anything in the system it runs on. Below are details of installation.
Windows
Please unzip the remote package and move to any folder. Though, it is common
to move to folder under C:\Program Files
.
Linux
To unzip the remote package, enter the following command in terminal:
tar -xzf CardinalOptimizer-Remote-7.1.1-lnx64.tar.gz
Then, the following command moves folder copt_remote71 in current
directory to other path. For an example, admin user may move it to folder
under /opt
and standard user may move it to $HOME
.
sudo mv copt_remote71 /opt
Note that it requires root
privilege to execute this command.
MacOS
To unzip the remote package, enter the following command in terminal:
tar -xzf CardinalOptimizer-Remote-7.1.1-universal_mac.tar.gz
Then, the following command moves folder copt_remote71 in current
directory to other path. For an example, admin user may move it to folder
under /Applications
and standard user may move it to $HOME
.
mv copt_remote71 /Applications
If you see errors below or similar signature problem of COPT lib during installation,
"libcopt.dylib" cannot be opened because the developer cannot be verified.
macOS cannot verify that this app is free from malware.
run the following command as root user, to bypass check of loading dynamic lib on MacOS.
xattr -d com.apple.quarantine CardinalOptimizer-Remote-7.1.1-universal_mac.tar.gz
or
xattr -dr com.apple.quarantine /Applications/copt_remote71
Cluster License
After installing COPT remote package, it requirs cluster license to run.
It is prefered to save cluster license files, license.dat
and
license.key
, to cluster
folder in path of remote package.
The following explains how to obtain the license file
via the copt_licgen
tool and the license credential information key
under different systems.
Note
If the user has already obtained the two license files license.dat
and license.key
, there is no need to obtain them again.
You can skip the following steps to obtain the license file and refer to Configuration directly.
Windows
If the COPT remote package is installed under "C:\Program Files"
,
execute the following command to enter cluster
folder in path of
remote package.
cd "C:\Program Files\copt_remote71\cluster"
Note that the tool copt_licgen
creating license files exists
under tools
folder in path of remote package. The following command
creates cluster license files in current directory, given a cluster
license key, such as 7483dff0863ffdae9fff697d3573e8bc
.
..\tools\copt_licgen -key 7483dff0863ffdae9fff697d3573e8bc
Linux and MacOS
If the COPT remote package is installed under "/Applications"
,
execute the following command to enter cluster
folder in path of
remote package on MacOS system.
cd /Applications/copt_remote71/cluster
The following command creates cluster license files in current directory,
given a cluster license key, such as 7483dff0863ffdae9fff697d3573e8bc
.
../tools/copt_licgen -key 7483dff0863ffdae9fff697d3573e8bc
In addition, if users run the above command when current directory is
different than cluster
folder in path of remote package, it is prefered
to move them to cluster
. The following command does so.
mv license.* /Application/copt_remote71/cluster
Configuration
Below is a typical configuration file, cls.ini
, of COPT compute cluster.
[Main]
Port = 7878
# Number of total tokens, what copt jobs can run simutaneously up to.
NumToken = 3
# Password is case-sensitive and default is emtpy;
# It applies to both copt clients and cluster nodes.
PassWd =
# Data folder of cluster relative to its binary folder,
# where multiple versions of copt libraries and related licenses reside.
DataFolder = ./data
[SSL]
# Needed if connecting using SSL/TLS
CaFile =
CertFile =
CertkeyFile =
[Licensing]
# If empty or default license name, it is from binary folder;
# To get license files from cwd, add prefix "./";
# Full path is supported as well.
LicenseFile = license.dat
PubkeyFile = license.key
[WLS]
# WebServer have a default host and no need to edit in most scenarios
# Must specify WebLicenseId and WebAccesskey to trigger web licensing
WebServer =
WebLicenseId =
WebAccessKey =
WebTokenDuration = 300
[Cluster]
# Host name and port of parent node in cluster.
# Default is empty, meaning not connecting to other node.
Parent =
PPort = 7878
[Filter]
# default policy 0 indicates accepting all connections, except for ones in blacklist
# otherwise, denying all connections except for ones in whitelist
DefaultPolicy = 0
UseBlackList = true
UseWhiteList = true
FilterListFile = clsfilters.ini
The Main
section specifies port number, through which COPT compute cluster clients
connect to server; token number, the number of optimization jobs that
server can run simultaneously up to; password string, if specified, cluster
clients should send the same password when requesting for service.
The COPT compute cluster may install multiple versions of COPT to subfolder of DataFolder
.
Only clients with matching version (major and minor) will get approved and then offload optimization
jobs at server side. Note that the COPT compute cluster pre-installs a COPT solver of the same version
as server itself, which illustrate how to install other versions of COPT.
For instance, the COPT compute cluster has default COPT v7.1.1 installed and users plan to install
COPT of other version v4.0.7. users may create a folder ./data/copt/4.0.7/ and
copy a COPT C lib of the same version to it. Specifically, on Linux platform,
copy C dynamic library libcopt.so
from the binary folder $COPT_HOME/lib/
of COPT v4.0.7
to subfolder ./data/copt/4.0.7/ of the COPT compute cluster.
Furthermore, users are allowed to install newer version of COPT than cluster server version, such as COPT v7.5.0. To do so, follow the same step of copying a C lib of COPT v7.5.0 to ./data/copt/7.5.0/. In addition, users need a personal license of v7.5.0 to load C lib of COPT v7.5.0 at server side. That is, copy valid personal license files to folder ./data/copt/7.5.0/ as well. However, this simple procedure may break if the newer COPT solver has significant updates. In this case, it is necessary to upgrade the COPT compute cluster to newer version, that is, v7.5.0.
Below is an example of directory structure of cluster server on Linux platform. It includes pre-installed COPT v7.1.1, COPT of previous version v4.0.7, and COPT of newer version v7.5.0.
~/copt_remote71/cluster │ cls.ini │ copt_cluster │ license.dat -> cluster license v7.1.1 │ license.key │ └─data └─copt └─4.0.7 │ libcopt.so └─7.1.1 │ libcopt.so └─7.5.0 libcopt.so license.dat -> license v7.5.0 license.key
The Licensing
section specifies location of cluster license files.
As described in comments above, if emtpy string or default license file name
is specified, cluster license files are read from the binary folder where
the cluster executable reside.
It is possible to run COPT compute cluster service, even if
cluster license files do not exist in the same folder as the cluster executive.
One option is to set LicenseFile = ./license.dat
and PubkeyFile = ./license.key
.
By doing so, the COPT compute cluster reads cluster license files from the current
working directory. That is, user could execute command at the path where cluster
license files exist to run service.
The other option is to set full path of license files in configuration.
As mentioned before, Cardinal Optimizer allows user to set
environment variable COPT_LICENSE_DIR
for license files. For details,
please refer to How to install Cardinal Optimizer.
If user prefers the way of environment variable, cls.ini
should have
the full path to cluster license files.
The Cluster
section specifies IP and port number of parent node. By connecting to
parent node, this server joins a cluster of servers running COPT compute cluster service. The default
value is empty, which means this server does not join other cluster group.
In the Filter
section, DefaultPolicy
has default value 0, meaning
all connections are accepted except for those in black lists; if it is set
to non-zero value, then all connection are blocked except for those in white
lists. In addition, black list is enabled if UseBlackList
is true and white list
is enabled if UseWhiteList
is true. The filter configuration file is specified by
FilterListFile
. Below is an example of the filter configuration file.
[BlackList]
# 127.0.*.* + user@machine*
[WhiteList]
# 127.0.1.2/16 - user@machine*
[ToolList]
# only tool client at server side can access by default
127.0.0.1/32
It has three sections and each section has its own rules. In section of BlackList
,
one may add rules to block others from connection. In section of WhiteList
,
one may add rules to grant others for connection, even if the default policy is to block
all connections. Only users listed in section of ToolList
are able to connect to
cluster server by Cluster Managing Tool (see below for details).
Specifically, rules in filter configuration have format of starting with IP address.
To specify IP range, you may include wildcard (*) in IP address, or use CIDR notation,
that is, a IPv4 address and its associated network prefix.
In addtion, a rule may include (+) or exclude (-) given user at given machine, such as
127.0.1.2/16 - user@machine
. Here, user
refers to username
, which can be queried
by whoami
on Linux/MacOS platform; machine
refers to computer name
, which can
be queried by hostname
on Linux/MacOS platform.
Web License for Compute Cluster
Besides local cluster license above, users may use web license for compute cluster to run compute cluster service. This requires that machines running compute cluster server must have internet access. However, hardware info are not required any more. That is, users are free to deploy compute cluster servers to any cloud machine or container, as long as they have internet access. Please refer to COPT Web Licenses for details.
Below are brief steps:
Follow steps to register an account and apply for trial of web license for compute cluster.
Once approved, Web License ID is generated for users
On page of API Keys, create Web Access Key using given Web License ID
Afterwards, users edit configuration file cls.ini and add values of both Web License ID and Web Access Key to related keywords in section of WLS. For instance,
[Main]
Port = 7878
# Number of total tokens, what copt jobs can run simutaneously up to.
NumToken = 3
# Password is case-sensitive and default is emtpy;
# It applies to both copt clients and cluster nodes.
PassWd =
# Data folder of cluster relative to its binary folder,
# where multiple versions of copt libraries and related licenses reside.
DataFolder = ./data
[SSL]
# Needed if connecting using SSL/TLS
CaFile =
CertFile =
CertkeyFile =
[Licensing]
# If empty or default license name, it is from binary folder;
# To get license files from cwd, add prefix "./";
# Full path is supported as well.
LicenseFile = license.dat
PubkeyFile = license.key
[WLS]
# WebServer have a default host and no need to edit in most scenarios
# Must specify WebLicenseId and WebAccesskey to trigger web licensing
WebServer =
WebLicenseId = 1ed6da0c781d26ac4fc9233718b8eb64
WebAccessKey = 1f6fcb3b68d94e2bb5185bd05c87b93f
WebTokenDuration = 300
[Cluster]
# Host name and port of parent node in cluster.
# Default is empty, meaning not connecting to other node.
Parent =
PPort = 7878
As of now, compute cluster server talks to COPT Web Licenses for licensing. Users are able to monitor its token usage and other informations online.
Example Usage
Suppose that cluster license files exist in the same folder where the cluster executable reside. To start the COPT compute cluster, just execute the following command at any directory in Windows console, or Linux/Mac terminal.
copt_cluster
If you see log information as follows, the COPT compute cluster has been
successfully started. Server monitors any connection from COPT compute cluster clients, manages
client requests in queue as well as approved clients. User may stop cluster server
anytime when entering q
or Q
.
> copt_cluster [ Info] start COPT Compute Cluster, COPT v7.1.1 20240304 [ Info] [NODE] node has been initialized [ Info] server started at port 7878
If failed to verify local cluster license, or something is wrong on remote COPT licensing server, you might see error logs as follows.
> copt_cluster [ Info] start COPT Compute Cluster, COPT v7.1.1 20240304 [Error] Invalid signature in public key file [Error] Fail to verify local license
and
> copt_cluster [ Info] start COPT Compute Cluster, COPT v7.1.1 20240304 [Error] Error to connect license server [Error] Fail to verify cluster license by server
Client Setup
The COPT compute cluster client can be COPT command-line, or any application which solves problems by COPT API, such as COPT cpp/java/csharp/python interface. The COPT compute cluster service is a better approach in terms of flexibility and efficiency. Any COPT compute cluster client can legally run Cardingal Optimizer without local license.
Configuration
Before running COPT as cluster client, please make sure that you have
installed COPT locally. For details, please refer to
How to install Cardinal Optimizer.
Users can skip obtaining local licenses by adding a cluster configuration
file client.ini
.
Below is a typical configuration file, client.ini
, of COPT compute cluster client.
Cluster = 192.168.1.11
Port = 7878
QueueTime = 600
Passwd =
As configured above, COPT compute cluster client tries to connect to 192.168.1.11
at port 7878
with waiting time in queue up to 600 seconds. Here, the default value of Cluster
is localhost;
QueueTime
or WaitTime
is set to 0 if empty or not specified. Specifically,
empty QueueTime
means client does not wait and should quit immediately, if the COPT compute
cluster have no more token available. Port
number must be great than zero if specified
and should be the same as that specified in cluster configuration file cls.ini
.
Note that keywords in the configuration file are case insensitive.
To run as a COPT compute cluster client, an application must have configuration
file, client.ini
, in one of the following three locations, that is,
current working directory, environment directory by COPT_LICENSE_DIR
and binary
directory where COPT executable resides.
By design, COPT application reads local license files instead of client.ini
,
if they both exist in the same location. However, if local license files are under
the environment directory, to connect to cluster server, user could simply
add a configuration file, client.ini
, under the current working directory (different from
the environment directory).
If a COPT application calls COPT API to solve problems, such as COPT python interface,
license is checked as soon as COPT environment object is created. If there only exists proper
configuration file, client.ini
, the application works as a COPT compute cluster client and obtains token
to offload optimization jobs. As soon as COPT environment object is destroyed, the COPT compute cluster
server is notified to release token and thus to approve more requests waiting in queue.
High Availability
When there are multiple cluster servers, the client can achieve high availability by configuring multiple Cluster server IP addresses in the Cluster
field of client.ini
, as shown in the following table:
Cluster = 192.168.1.11; 192.168.1.22; 192.168.1.33
Port = 7878
QueueTime = 600
Passwd =
According to the above configuration, the first IP in the Cluster
field is the root node IP of the cluster. If the port of other child nodes of the cluster is not 7878
, it could be added after the IP address.
The above configuration file indicates that the client will first try to connect to the root node 192.168.1.11:7878
.
If the root node is not available, it will try to connect to the child node of 192.168.1.22:7878
, and so on, until the connection with the cluster server is successful.
If a cluster node fails when performing a computing task, the client will reallocate the available cluster nodes according to the backup nodes in the configuration file. This can enable the cluster service to have a certain disaster recovery capability, thereby improving the high availability of the COPT computing cluster service.
Example Usage
Suppose that we’ve set configuration file client.ini
properly and have no local
license, below is an example of connecting to cluster server by COPT command-line tool
copt_cmd
. Execute the following command in Windows console, or Linux/Mac terminal.
copt_cmd
If you see log information as follows, the COPT compute cluster client, copt_cmd
, has
connected to cluster server successfully. COPT command-line tool is ready to do
modelling locally and then offload optimization jobs to server.
> copt_cmd Cardinal Optimizer v7.1.1. Build date Mar 04 2024 Copyright Cardinal Operations 2024. All Rights Reserved [ Info] initialize cluster client with ./client.ini [ Info] wait for server in 0 / 39 secs [ Info] connecting to cluster server 192.168.1.11:7878 COPT>
If you see log information as follows, the COPT compute cluster client, copt_cmd
, has connected to
cluster server. However, due to limited number of tokens, it waits in queue of size 5, until timeout.
> copt_cmd Cardinal Optimizer v7.1.1. Build date Mar 04 2024 Copyright Cardinal Operations 2024. All Rights Reserved [ Info] initialize cluster client with ./client.ini [ Info] wait for server in 0 / 39 secs [ Info] connecting to cluster server 192.168.1.11:7878 [ Warn] wait in queue of size 5 [ Info] wait for license in 2 / 39 secs [ Info] wait for license in 4 / 39 secs [ Info] wait for license in 6 / 39 secs [ Info] wait for license in 8 / 39 secs [ Info] wait for license in 10 / 39 secs [ Info] wait for license in 20 / 39 secs [ Info] wait for license in 30 / 39 secs [Error] timeout at waiting for server approval [Error] Fail to initialize copt command-line tool
If you see log information as follows, the COPT compute cluster client, copt_cmd
, has connected to
cluster server. But it refused to wait in queue, as Queuetime was set to 0. Therefore,
client quits with error immediately.
> copt_cmd Cardinal Optimizer v7.1.1. Build date Mar 04 2024 Copyright Cardinal Operations 2024. All Rights Reserved [ Info] initialize cluster client with ./client.ini [ Info] wait for server in 0 / 9 secs [ Info] connecting to cluster server 192.168.1.11:7878 [ Warn] server error: "no more token available", code = 129 [Error] Fail to initialize copt command-line tool
If you see log information as follows, the COPT compute cluster client, copt_cmd
, fails to connect to
cluster server. Finally, client quits after timeout.
> copt_cmd Cardinal Optimizer v7.1.1. Build date Mar 04 2024 Copyright Cardinal Operations 2024. All Rights Reserved [ Info] initialize cluster client with ./client.ini [ Info] wait for server in 0 / 39 secs [ Info] connecting to cluster server 192.168.1.11:7878 [ Info] wait for license in 2 / 39 secs [ Info] wait for license in 4 / 39 secs [ Info] wait for license in 6 / 39 secs [ Info] wait for license in 8 / 39 secs [ Info] wait for license in 10 / 39 secs [ Info] wait for license in 20 / 39 secs [ Info] wait for license in 30 / 39 secs [Error] timeout at waiting for server approval [Error] Fail to initialize copt command-line tool
COPT Cluster Managing Tool
COPT cluster service ships with a tool copt_clstool
, for retrieving information
and tune parameters of cluster servers on fly.
Tool Usage
Execute the following command in Windows console, Linux or MacOS terminal:
> copt_clstool
Below displays help messages of this tool:
> copt_clstool
COPT Cluster Managing Tool
copt_clstool [-s server ip] [-p port] [-x passwd] command <param>
commands are: addblackrule <127.0.0.1/20[-user@machine]>
addwhiterule <127.0.*.*[+user@machine]>
getfilters
getinfo
getnodes
reload
resetfilters
setparent <xxx:7878>
setpasswd <xxx>
settoken <num>
toggleblackrule <n-th>
togglewhiterule <n-th>
writefilters
If the -s
and -p
option are present, tool connects to cluster server
with given server IP and port. Otherwise, tool connections to localhost and
default port 7878. If cluster server sets a password, tool must provide
password string after the -x
option.
This tool provides the following commands:
AddBlackRule
: Add a new rule in black filters. each rule has format starting with non-empty IP address, which may have wildcard to match IPs in the scope. In addition, it is optional to be followed by including (+) or excluding (-) user name at machine name.AddWhiteRule
: Add a new rule in white filters. Note that a white rule has the same format as a black rule.GetFilters
: Get all rules of black filters, white filters and tool filters, along with relative sequence numbers, which are parameters for command ToggleBlackRule and ToggleWhiteRule.GetInfo
: Get general information of cluster server, including token usage, connected clients, and all COPT versions in support.GetNodes
: Get information of nodes in cluster, including parent address and status, all children nodes.Reload
: Reload available token information of all child nodes, in case it is not consistent for various reasons.ResetFilters
: Reset filter lists in memory to those on filter config file.SetParent
: Change parent node address on fly and then connecting to new parent. In this way, it avoidsdraining
operation when stopping a node for maintenance purpose.SetPasswd
: Update password of target cluster server on fly.SetToken
: Change token number of target cluster server on fly.ToggleBlackRule
: Toggle between enabling and disabling a black rule, given its sequence number by GetFilters.ToggleWhiteRule
: Toggle between enabling and disabling a white rule, given its sequence number by GetFilters.WriteFilters
: Write filter lists in memory to filter config file.
Example Usage
The following command lists general information on local machine.
> copt_clstool GetInfo [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to localhost:7878 [ Info] [command] wait for connecting to cluster [ Info] [cluster] general info # of available tokens is 3 / 3, queue size is 0 # of active clients is 0 # of installed COPT versions is 1 COPT v7.1.1
To run managing tool on other machine, its IP should be added to
a rule in ToolList
section in filter configuration file clsfilters.ini
.
The following command from other machine lists cluster information of server 192.168.1.11.
> copt_clstool -s 192.168.1.11 GetNodes [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to 192.168.1.11:7878 [ Info] [command] wait for connecting to cluster [ Info] [cluster] node info [Parent] (null):7878 (Lost) [Child] Node_192.168.1.12:7878_N0001, v2.0=3 Total num of child nodes is 1
The following command changes token number of server 192.168.1.11 from 3 to 0.
> copt_clstool -s 192.168.1.11 SetToken 0 [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to 192.168.1.11:7878 [ Info] [command] wait for connecting to cluster [ Info] [cluster] total token was 3 and now set to 0
The following command shows all filter lists of server 192.168.1.11, including those in BlackList section, WhiteList section and ToolList section.
> copt_clstool -s 192.168.1.11 GetFilters [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to 192.168.1.11:7979 [ Info] [command] wait for connecting to cluster [ Info] [cluster] filters info [BlackList] [WhiteList] [ToolList] [1] 127.0.0.1
The following command added user of IP 192.168.3.13 to black list.
> copt_clstool -s 192.168.1.11 AddBlackRule 192.168.3.133 [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to 192.168.1.11:7979 [ Info] [command] wait for connecting to cluster [ Info] [cluster] server added new black rule (succeeded)
The follwing command shows that a new rule in BlackList section is added.
> copt_clstool -s 192.168.1.11 GetFilters [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to 192.168.1.11:7979 [ Info] [command] wait for connecting to cluster [ Info] [cluster] filters info [BlackList] [1] 192.168.3.133 [WhiteList] [ToolList] [1] 127.0.0.1
The following command disable a rule in BlackList section.
> copt_clstool -s 192.168.1.11 ToggleBlackRule 1 [ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304 [ Info] connecting to 192.168.1.11:7979 [ Info] [command] wait for connecting to cluster [ Info] [cluster] server toggle black rule [1] (succeeded)
Running as service
To run COPT compute cluster server as a system service, follow steps described
in readme.txt
under cluster
folder, and set config file
copt_cluster.service
properly.
Below is readme.txt
, which lists installing steps in both Linux and MacOS
platforms.
[Linux] To run copt_cluster as a service with systemd
Add a systemd file
copy copt_cluster.service to /lib/systemd/system/
sudo systemctl daemon-reload
Enable new service
sudo systemctl start copt_cluster.service
or
sudo systemctl enable copt_cluster.service
Restart service
sudo systemctl restart copt_cluster.service
Stop service
sudo systemctl stop copt_cluster.service
or
sudo systemctl disable copt_cluster.service
Verify service is running
sudo systemctl status copt_cluster.service
[MacOS] To run copt_cluster as a service with launchctrl
Add a plist file
copy copt_cluster.plist to /Library/LaunchAgents as current user
or
copy copt_cluster.plist to /Library/LaunchDaemons with the key 'UserName'
Enable new service
sudo launchctl load -w /Library/LaunchAgents/copt_cluster.plist
or
sudo launchctl load -w /Library/LaunchDaemons/copt_cluster.plist
Stop service
sudo launchctl unload -w /Library/LaunchAgents/copt_cluster.plist
or
sudo launchctl unload -w /Library/LaunchDaemons/copt_cluster.plist
Verify service is running
sudo launchctl list shanshu.copt.cluster
Linux
Below are steps in details of how to run COPT compute cluster server as a system service in Linux platform.
For instance, assume that COPT remote service is installed under '/home/eleven'
.
In your terminal, type the following command to enter the root directory of
cluster service.
cd /home/eleven/copt_remote71/cluster
modify template of the service config file copt_cluster.service
in text format:
[Unit]
Description=COPT Compute Cluster Server
[Service]
WorkingDirectory=/path/to/service
ExecStart=/path/to/service/copt_cluster
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
That is, update template path in keyword WorkingDirectory
and ExecStart
to
actual path where the cluster service exits.
[Unit] Description=COPT Compute Cluster Server [Service] WorkingDirectory=/home/eleven/copt_remote71/cluster ExecStart=/home/eleven/copt_remote71/cluster/copt_cluster Restart=always RestartSec=1 [Install] WantedBy=multi-user.target
Afterwards, copy copt_cluster.service
to system service folder
/lib/systemd/system/
(see below).
sudo cp copt_cluster.service /lib/systemd/system/
The following command may be needed if you add or update service config file. It is not needed if service unit has been loaded before.
sudo systemctl daemon-reload
The following command starts the new cluster service.
sudo systemctl start copt_cluster.service
To verify the cluster service is actually running, type the following command
sudo systemctl status copt_cluster.service
If you see logs similar to below, COPT compute cluster server is running successfully as a system service.
copt_cluster.service - COPT Cluster Server Loaded: loaded (/lib/systemd/system/copt_cluster.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-08-28 11:46:10 CST; 3s ago Main PID: 3054 (copt_cluster) Tasks: 6 (limit: 4915) CGroup: /system.slice/copt_cluster.service └─3054 /home/eleven/copt_remote71/cluster/copt_cluster eleven-ubuntu systemd[1]: Started COPT Cluster Server. eleven-ubuntu COPTCLS[3054]: LWS: 4.1.4-b2011a00, loglevel 1039 eleven-ubuntu COPTCLS[3054]: NET CLI SRV H1 H2 WS IPv6-absent eleven-ubuntu COPTCLS[3054]: server started at port 7878 eleven-ubuntu COPTCLS[3054]: LWS: 4.1.4-b2011a00, loglevel 1039 eleven-ubuntu COPTCLS[3054]: NET CLI SRV H1 H2 WS IPv6-absent eleven-ubuntu COPTCLS[3054]: [NODE] node has been initialized
To stop the cluster service, type the following command
sudo systemctl stop copt_cluster.service
MacOS
Below are steps in details of how to run COPT Compute Cluster server as a system service in MacOS platform.
For instance, assume that COPT remote service is installed under "/Applications"
.
In your terminal, type the following command to enter the root directory of
cluster service.
cd /Applications/copt_remote71/cluster
modify template of the service config file copt_cluster.plist
in xml format:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>shanshu.copt.cluster</string>
<key>Program</key>
<string>/path/to/service/copt_cluster</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
That is, update template path in Program
tag to
actual path where the cluster service exits.
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>Label</key> <string>shanshu.copt.cluster</string> <key>Program</key> <string>/Applications/copt_remote71/cluster/copt_cluster</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist>
Afterwards, copy copt_cluster.plist
to system service folder
/Library/LaunchAgents
(see below).
sudo cp copt_cluster.plist /Library/LaunchAgents
The following command starts the new cluster service.
sudo launchctl load -w /Library/LaunchAgents/copt_cluster.plist
To verify the cluster service is actually running, type the following command
sudo launchctl list shanshu.copt.cluster
If you see logs similar to below, COPT compute cluster server is running successfully as a system service.
{ "LimitLoadToSessionType" = "System"; "Label" = "shanshu.copt.cluster"; "OnDemand" = false; "LastExitStatus" = 0; "PID" = 16406; "Program" = "/Applications/copt_remote71/cluster/copt_cluster"; };
To stop the cluster service, type the following command
sudo launchctl unload -w /Library/LaunchAgents/copt_cluster.plist
If the cluster service should be run by a specific user, add UserName
tag to conifg file.
Below adds a user eleven
, who has priviledge to run the cluster service.
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>Label</key> <string>shanshu.copt.cluster</string> <key>Program</key> <string>/Applications/copt_remote71/cluster/copt_cluster</string> <key>UserName</key> <string>eleven</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist>
Then copy new copt_cluster.plist
to system service folder
/Library/LaunchDaemons
(see below).
sudo cp copt_cluster.plist /Library/LaunchDaemons
The following command starts the new cluster service.
sudo launchctl load -w /Library/LaunchDaemons/copt_cluster.plist
To stop the cluster service, type the following command
sudo launchctl unload -w /Library/LaunchDaemons/copt_cluster.plist