### Install MySQL and Start Service Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/tutorials/day-1-operations/deploy-database-cluster-offline-environment Commands to install MySQL community server, start and enable the service, and check its status. ```bash $ dnf install mysql-community-server $ systemctl start mysqld $ systemctl status mysqld $ systemctl enable mysqld ``` -------------------------------- ### Install ClusterControl Example Output on Ubuntu 22.04 LTS Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/quickstart Example terminal session showing the download, chmod, and execution of the installer on Ubuntu 22.04 LTS, including prompts for MySQL root and CMON user passwords. The installer sets innodb_buffer_pool_size to 50% of system RAM and completes with a URL to open in a web browser. ```bash $ wget https://severalnines.com/downloads/cmon/install-cc Resolving severalnines.com (severalnines.com)... 104.21.94.86, 172.67.221.146, 2606:4700:3034::6815:5e56, ... Connecting to severalnines.com (severalnines.com)|104.21.94.86|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/plain] Saving to: ‘install-cc’ install-cc [ <=> ] 79.83K --.-KB/s in 0.07s 2024-09-17 07:47:12 (1.05 MB/s) - ‘install-cc’ saved [81747] $ chmod +x install-cc $ sudo ./install-cc 2024-09-17 07:47:17 UTC -- Installing lsb-release ... Reading package lists... Building dependency tree... Reading state information... lsb-release is already the newest version (11.1.0ubuntu4). lsb-release set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 37 not upgraded. !! 2024-09-17 07:47:29 UTC -- Only RHEL/RockyLinux/AlmaLinux 8|9, Debian 11|12, Ubuntu 20.04|22.04|24.04 LTS versions are supported 2024-09-17 07:47:29 UTC -- System RAM is > 1.5G 2024-09-17 07:47:29 UTC -- Setting MySQL innodb_buffer_pool_size to 50% of system RAM 2024-09-17 07:47:29 UTC -- MySQL innodb_buffer_pool_size set to 1955M 2024-09-17 07:47:29 UTC -- Severalnines would like your help improving our installation process. 2024-09-17 07:47:29 UTC -- Information such as OS, memory and install success helps us improve how we onboard our users. 2024-09-17 07:47:29 UTC -- None of the collected information identifies you personally. 2024-09-17 07:47:29 UTC -- !! => Would you like to help us by sending diagnostics data for the installation? (Y/n): Y This script will add Severalnines repository server for deb and rpm packages and install the ClusterControl Web Applicaiton and Controller. An Apache and MySQL server will also be installed. An existing MySQL Server on this host can be used. => Enter a MySQL root password to use: 2024-09-17 08:31:53 UTC -- => Enter the MySQL root password again: => Enter a CMON MySQL user password to use: 2024-09-17 08:31:58 UTC -- => Enter the CMON user password again: ... ... 2024-09-17 08:37:12 UTC -- ClusterControl installation completed! Open your web browser to https://178.62.210.68 and create a default Admin User. If you want to uninstall ClusterControl then please follow the instructions here, https://severalnines.com/docs/administration.html#uninstall ``` -------------------------------- ### Install and start nginx web server Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/tutorials/day-1-operations/deploy-database-cluster-offline-environment Installs nginx, starts and enables the service, and checks its status. Used on the repo server to serve packages to yum. ```bash $ dnf install -y nginx $ systemctl start nginx $ systemctl enable nginx $ systemctl status nginx ``` -------------------------------- ### startServers response example Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-rpc-api Example response for the startServers operation, showing a successful start with a message and request status. ```json { "messages": [ "Started server 'host04'." ], "request_created": "2017-10-16T07:48:21.779Z", "request_id": 3, "request_processed": "2017-10-16T07:48:21.943Z", "request_status": "Ok", "request_user_id": 3 } ``` -------------------------------- ### Start MySQL and secure installation (Debian/Ubuntu) Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/manual-installation Starts MySQL, enables it on boot, and runs the mysql_secure_installation script to set a root password. ```bash systemctl start mysql systemctl enable mysql mysql_secure_installation ``` -------------------------------- ### Start MySQL and run secure installation Source: https://docs.severalnines.com/clustercontrol/latest/admin-guide/clustercontrol-replication Start MySQL and run secure installation on both nodes. Set the root password when prompted (e.g., Secur3_p4ssword). If you choose Yes for VALIDATE PASSWORD COMPONENT, use very strong passwords for all MySQL accounts. ```bash systemctl enable mysqld systemctl start mysqld systemctl status mysqld mysql_secure_installation ``` -------------------------------- ### Offline ClusterControl installation with OFFLINE=1 (install-cc script) Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/offline-installation The first command is the documented offline installation form with placeholders for memory allocation, cmon password, and root password. The second is a concrete example execution showing the installation script output, including supported OS checks, buffer pool configuration, and the final successful installation message with the web URL. Both share the same installation workflow and are presented sequentially in the source. ```bash OFFLINE=1 INNODB_BUFFER_POOL_SIZE={db_memory_allocation} \ SEND_DIAGNOSTICS=0 \ S9S_CMON_PASSWORD={cmon_password} \ S9S_ROOT_PASSWORD={root_password} ./install-cc ``` ```bash [root@clustercontrol ~]# OFFLINE=1 INNODB_BUFFER_POOL_SIZE=512 SEND_DIAGNOSTICS=0 S9S_CMON_PASSWORD=cmon123 S9S_ROOT_PASSWORD=root123 ./install-cc This script will configure the Severalnines repository server for both deb and rpm packages, and install the ClusterControl Web Application and Controller. It will install a new MySQL server or utilize an existing MySQL server on the host. 2025-05-30 06:12:33 UTC -- Only RHEL/RockyLinux/AlmaLinux 8|9, Debian 11|12, Ubuntu 20.04|22.04|24.04 LTS versions are supported Reading package lists... Building dependency tree... Reading state information... lsb-release is already the newest version (12.0-2). 0 upgraded, 0 newly installed, 0 to remove and 141 not upgraded. 2025-05-30 06:12:34 UTC -- System RAM is > 1.5G 2025-05-30 06:12:34 UTC -- Setting MySQL innodb_buffer_pool_size to 40% of system RAM 2025-05-30 06:12:34 UTC -- MySQL innodb_buffer_pool_size set to 512M 2025-05-30 06:12:34 UTC -- Run with 'INNODB_BUFFER_POOL_SIZE=512 ./install-cc' to customize the innodb buffer pool setting. 2025-05-30 06:12:34 UTC -- Severalnines would like your help improving our installation process. 2025-05-30 06:12:34 UTC -- Information such as OS, memory and install success helps us improve how we onboard our users. 2025-05-30 06:12:34 UTC -- None of the collected information identifies you personally. 2025-05-30 06:12:34 UTC -- !! This script will configure the Severalnines repository server for both deb and rpm packages, and install the ClusterControl Web Application and Controller. It will install a new MySQL server or utilize an existing MySQL server on the host. 2025-05-30 06:12:34 UTC -- Installing required packages ... Reading package lists... Building dependency tree... Reading state information... ... ... ... No VM guests are running outdated hypervisor (qemu) binaries on this host. => Waiting 60s until the CMON Controller completes its startup cycle ... 2025-05-30 06:18:22 UTC -- Create temporary cc setup user ... User created. 2025-05-30 06:18:22 UTC -- *** Restarting the Controller process to generate CMON API rpc_tls files. Synchronizing state of cmon-events.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable cmon-events Created symlink /etc/systemd/system/multi-user.target.wants/cmon-events.service -> /etc/systemd/system/cmon-events.service. Synchronizing state of cmon-ssh.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable cmon-ssh Created symlink /etc/systemd/system/multi-user.target.wants/cmon-ssh.service -> /etc/systemd/system/cmon-ssh.service. Synchronizing state of cmon-cloud.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable cmon-cloud Created symlink /etc/systemd/system/multi-user.target.wants/cmon-cloud.service -> /etc/systemd/system/cmon-cloud.service. 2025-05-30 06:18:43 UTC -- Configuring ClusterControl MCC / Ops-C ... 2025-05-30 06:18:43 UTC -- Configuring ccmgr (cmon-proxy) ... ClusterControl Manager - admin CLI v2.2 Controller 127.0.0.1:9501 registered successfully Changing port from 19051 to 443 Changing frontend_path from /app to /var/www/html/clustercontrol-mcc File /var/www/html/clustercontrol-mcc/config.js updated successfully Configuration /usr/share/ccmgr/ccmgr.yaml updated successfully Please restart 'cmon-proxy' service to apply changes 2025-05-30 06:18:43 UTC -- ClusterControl MCC / Ops-C frontend installed ... 2025-05-30 06:18:43 UTC -- ClusterControl installation completed! Open your web browser to https://10.10.10.11 to start using ClusterControl. If you want to uninstall ClusterControl then please follow the instructions here, https://severalnines.com/docs/administration.html#uninstall ``` -------------------------------- ### Start Sendmail service Source: https://docs.severalnines.com/clustercontrol/latest/user-guide/management/alerts-notifications Start the Sendmail service after installation. ```bash systemctl start sendmail ``` -------------------------------- ### startServers request example Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-rpc-api Example request body for the startServers operation. It includes the operation name, request metadata, and a list of servers to start, each with class_name and hostname. ```json { "operation": "startServers", "request_created": "2017-10-16T07:48:21.779Z", "request_id": 3, "servers": [ { "class_name": "CmonContainerServer", "hostname": "host04" } ] } ``` -------------------------------- ### Install MariaDB and Set Root Password Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/tutorials/day-1-operations/deploy-database-cluster-offline-environment Commands to install MariaDB, enable and start the service, and set the root password using mysqladmin. ```bash $ dnf clean all $ dnf repolist $ dnf install mariadb mariadb-server $ systemctl enable mariadb $ systemctl start mariadb $ mysqladmin -uroot password yourR00tP4ssw0rd ``` -------------------------------- ### SSH setup as sudoer (ubuntu) Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/quickstart Example commands for setting up SSH key-based authentication when running as a sudoer (ubuntu user). The whoami command confirms the current user. Replace the IP addresses with your target nodes. ```bash $ whoami ubuntu $ ssh-keygen -t rsa $ ssh-copy-id -i /home/ubuntu/.ssh/id_rsa ubuntu@192.168.17.101 # db1 $ ssh-copy-id -i /home/ubuntu/.ssh/id_rsa ubuntu@192.168.17.102 # db2 $ ssh-copy-id -i /home/ubuntu/.ssh/id_rsa ubuntu@192.168.17.103 # db3 ``` -------------------------------- ### Example /etc/default/cmon configuration file Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/components/clustercontrol-controller Defines RPC_PORT, RPC_BIND_ADDRESSES, EVENTS_CLIENT, and CLOUD_SERVICE for the cmon startup. The init script or systemd appends these options as command line arguments when starting cmon. ```bash $ cat /etc/default/cmon RPC_PORT=9500 RPC_BIND_ADDRESSES="10.10.10.13,192.168.33.1,127.0.0.1" EVENTS_CLIENT=http://127.0.0.1:9510 CLOUD_SERVICE=http://127.0.0.1:9518 ``` -------------------------------- ### SSH setup as root user Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/quickstart Example commands for setting up SSH key-based authentication when running as root. The whoami command confirms the current user. Replace the IP addresses with your target nodes. ```bash $ whoami root $ ssh-keygen -t rsa $ ssh-copy-id -i /root/.ssh/id_rsa root@192.168.17.101 # db1 $ ssh-copy-id -i /root/.ssh/id_rsa root@192.168.17.102 # db2 $ ssh-copy-id -i /root/.ssh/id_rsa root@192.168.17.103 # db3 ``` -------------------------------- ### Record current setup and back up configuration Source: https://docs.severalnines.com/clustercontrol/latest/admin-guide/scalable-controllers-pool Commands to record the current database user, hosts, and installed MariaDB packages, and to back up /etc/cmon.cnf and /etc/cmon.d. Run as root on the controller host. Uses the CMON_USER shell variable. ```bash grep -E '^(cmon_user|cmondb_user|mysql_)' /etc/cmon.cnf CMON_USER=$(sed -n -E 's/^(cmon_user|cmondb_user)[[:space:]]*=[[:space:]]*//p' /etc/cmon.cnf | tr -d "\"' " | head -n 1) CMON_USER=${CMON_USER:-cmon} mariadb -u"$CMON_USER" -p -e "SELECT user, host FROM mysql.user WHERE user = '$CMON_USER'" dpkg -l | grep -i mariadb cp -a /etc/cmon.cnf /root/cmon.cnf.mariadb cp -a /etc/cmon.d /root/cmon.d.mariadb ``` -------------------------------- ### Generate API language bindings Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-client-sdk Commands to generate language bindings. The example shows 'make go' and includes commented instructions for installing make and generating Python and Java bindings. The output shows the generation process and a thank-you message. ```bash # install make with 'apt install make' #make python #make java make go ... [main] INFO o.o.codegen.TemplateManager - writing file /root/clustercontrol-client-sdk/./generated/go/.openapi-generator/FILES ################################################################################ # Thanks for using OpenAPI Generator. # # Please consider donation to help us maintain this project 🙏 # # https://opencollective.com/openapi_generator/donate # ################################################################################ ``` -------------------------------- ### Sample output of --airgap-repo on Ubuntu 24.04 Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/offline-installation Example output of running ./install-cc --airgap-repo on a staging host with Ubuntu 24.04, showing the script configuration and package download details. ```bash [root@staging]:/home/vagrant# ./install-cc --airgap-repo This script will configure the Severalnines repository server for both deb and rpm packages, and install the ClusterControl Web Application and Controller. It will install a new MySQL server or utilize an existing MySQL server on the host. 2025-05-30 05:52:23 UTC -- Only RHEL/RockyLinux/AlmaLinux 8|9, Debian 11|12, Ubuntu 20.04|22.04|24.04 LTS versions are supported 2025-05-30 05:52:23 UTC -- Waiting for locks ... 2025-05-30 05:52:23 UTC -- Update distro repos ... 141 packages can be upgraded. Run 'apt list --upgradable' to see them. Reading package lists... Building dependency tree... Reading state information... lsb-release is already the newest version (12.0-2). lsb-release set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 141 not upgraded. 2025-05-30 05:52:56 UTC -- DOWNLOAD_DIR=/home/vagrant/cc_packages 2025-05-30 05:52:56 UTC -- REPO_DIR=/usr/local/repo/cc_repo 2025-05-30 05:52:56 UTC -- EXPORT_FILE=cc_repo.tar.gz 2025-05-30 05:52:56 UTC -- IMPORT_REPO_DIR=/usr/local/repo/cc_repo Reading package lists... Done Building dependency tree... Done Reading state information... Done wget is already the newest version (1.21.4-1ubuntu4.1). The following additional packages will be installed: dirmngr gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpgconf gpgsm gpgv keyboxd Suggested packages: pinentry-gnome3 tor parcimonie xloadimage gpg-wks-server scdaemon The following packages will be upgraded: dirmngr gnupg gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpgconf gpgsm gpgv keyboxd 11 upgraded, 0 newly installed, 0 to remove and 130 not upgraded. Need to get 2291 kB of archives. After this operation, 0 B of additional disk space will be used. Get:1 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gpg-wks-client amd64 2.4.4-2ubuntu17.2 [70.9 kB] Get:2 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 dirmngr amd64 2.4.4-2ubuntu17.2 [323 kB] Get:3 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gnupg-utils amd64 2.4.4-2ubuntu17.2 [109 kB] Get:4 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gpgsm amd64 2.4.4-2ubuntu17.2 [232 kB] Get:5 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gpg-agent amd64 2.4.4-2ubuntu17.2 [227 kB] Get:6 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gpg amd64 2.4.4-2ubuntu17.2 [565 kB] Get:7 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gpgconf amd64 2.4.4-2ubuntu17.2 [103 kB] Get:8 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gnupg all 2.4.4-2ubuntu17.2 [359 kB] Get:9 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 keyboxd amd64 2.4.4-2ubuntu17.2 [78.3 kB] Get:10 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gpgv amd64 2.4.4-2ubuntu17.2 [158 kB] Get:11 http://us.archive.ubuntu.com/ubuntu noble-updates/main amd64 gnupg-l10n all 2.4.4-2ubuntu17.2 [66.1 kB] Fetched 2291 kB in 3s (674 kB/s) (Reading database ... 50146 files and directories currently installed.) Preparing to unpack .../0-gpg-wks-client_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking gpg-wks-client (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../1-dirmngr_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking dirmngr (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../2-gnupg-utils_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking gnupg-utils (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../3-gpgsm_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking gpgsm (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../4-gpg-agent_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking gpg-agent (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../5-gpg_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking gpg (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../6-gpgconf_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking gpgconf (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../7-gnupg_2.4.4-2ubuntu17.2_all.deb ... Unpacking gnupg (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... Preparing to unpack .../8-keyboxd_2.4.4-2ubuntu17.2_amd64.deb ... Unpacking keyboxd (2.4.4-2ubuntu17.2) over (2.4.4-2ubuntu17) ... ``` -------------------------------- ### Expected pod list after ccxdeps installation Source: https://docs.severalnines.com/ccx/admin/Installation/Tutorial-openstack Example output of 'kubectl get pods -n ccx' showing all pods in Running state. ```text NAME READY STATUS RESTARTS AGE acid-ccx-0 1/1 Running 0 7m13s alertmanager-0 1/1 Running 0 7m22s ccxdeps-0 1/2 Running 0 67s ccxdeps-ccx-nats-0 3/3 Running 0 7m22s ccxdeps-ccx-nats-box-c777b9b98-thhfs 1/1 Running 0 7m22s ccxdeps-keycloak-0 1/1 Running 0 7m22s ccxdeps-loki-0 1/1 Running 0 7m22s ccxdeps-loki-gateway-56c8f56c6b-kw9s8 1/1 Running 0 7m22s ccxdeps-postgres-operator-6847687666-79x8l 1/1 Running 0 7m22s mysql-operator-5876cf5b66-6knkp 1/1 Running 0 27s victoria-metrics-845694c98d-24wng 1/1 Running 0 7m22s victoria-metrics-alert-7f695bf5c8-96ch5 1/1 Running 0 7m22s ``` -------------------------------- ### Install specific version on Debian/Ubuntu Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/online-installation If you want to install a specific version instead of the latest in the repository, you can use `CLUSTERCONTROL_BUILD`, `CONTROLLER_BUILD` and `S9S_TOOLS_BUILD` environment variables. You can get the available package name and version from the ClusterControl download site. Examples are as follows: ```bash CLUSTERCONTROL_BUILD="clustercontrol-1.7.1-5622 clustercontrol-cloud-1.7.1-163 clustercontrol-clud-1.7.1-163 clustercontrol-notifications-1.7.1-159 clustercontrol-ssh-1.7.1-70" \ CONTROLLER_BUILD="clustercontrol-controller-1.7.1-2985" \ S9S_TOOLS_BUILD="s9s-tools-1.7.20190117-release1" \ ./install-cc ``` -------------------------------- ### Example: Generate key and copy to target node Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/overview/requirements Shows the full process: verify user, generate key, list key files, and copy the public key to 192.168.0.10. Specify the root password if prompted. ```bash $ whoami root $ ls -1 ~/.ssh/id* /root/.ssh/id_rsa /root/.ssh/id_rsa.pub $ ssh-copy-id root@192.168.0.10 # specify the root password of 192.168.0.10 if prompted ``` -------------------------------- ### Install specific version on Red Hat/CentOS/AlmaLinux/Rocky Linux Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/online-installation If you want to install a specific version instead of the latest in the repository, you can use `CLUSTERCONTROL_BUILD`, `CONTROLLER_BUILD` and `S9S_TOOLS_BUILD` environment variables. You can get the available package name and version from the ClusterControl download site. Examples are as follows: ```bash CLUSTERCONTROL_BUILD="clustercontrol-1.7.1-5622 clustercontrol-cloud-1.7.1-163 clustercontrol-clud-1.7.1-163 clustercontrol-notifications-1.7.1-159 clustercontrol-ssh-1.7.1-70" \ CONTROLLER_BUILD="clustercontrol-controller-1.7.1-2985" \ S9S_TOOLS_BUILD="s9s-tools-1.7-93.1" \ ./install-cc ``` -------------------------------- ### Example output of successful initialization Source: https://docs.severalnines.com/clustercontrol/latest/admin-guide/upgrading-clustercontrol Example output showing successful registration of the controller and configuration updates. After this, you must restart the 'cmon-proxy' service. ```bash $ ccmgradm init --local-cmon -p 443 -f /var/www/html/clustercontrol-mcc ClusterControl Manager - admin CLI v2.2 Controller 127.0.0.1:9501 registered successfully Changing frontend_path from /app to /var/www/html/clustercontrol-mcc File /var/www/html/clustercontrol-mcc/config.js updated successfully Configuration /usr/share/ccmgr/ccmgr.yaml updated successfully Please restart 'cmon-proxy' service to apply changes ``` -------------------------------- ### MySQL start failure output during ClusterControl installation Source: https://docs.severalnines.com/clustercontrol/latest/user-guide/troubleshooting/common-issues Output shown when the installer script fails to start MySQL/MariaDB on the ClusterControl host. The message 'mysqld: unrecognized service' indicates the service is not recognized, and the installer aborts with a failure message. ```text => Starting database. This may take a couple of minutes. Do NOT press any key. mysqld: unrecognized service => Failed to start the MySQL Server. ... Please contact Severalnines support at http://support.severalnines.com if you have installation issues that cannot be resolved. ``` -------------------------------- ### Install and bootstrap OpenBao Source: https://docs.severalnines.com/clustercontrol/latest/admin-guide/scalable-controllers-pool Installs and bootstraps OpenBao on a host of your choice. Replace HOST with the target host. ```bash s9s pool-controllers --add-openbao --nodes=HOST --log ``` -------------------------------- ### Boot test server with boot-from-volume option Source: https://docs.severalnines.com/ccx/admin/Installation/Cloud-Providers/openstack/claude-prompt Boots a server from the chosen image and flavor on the specified network, attaching the ccx-common security group and the keypair. If the flavor has Disk 0, use --boot-from-volume 30 to prove that path. ```bash openstack server create --image --flavor --network --security-group ccx-common --key-name ccx-preflight --boot-from-volume 30 ``` -------------------------------- ### s9s replication --start example Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/components/clustercontrol-cli Starts the replication slave on a specified node for a given cluster ID. ```bash s9s replication \ --start \ --cluster-id=1 \ --slave="192.168.0.80:3306" \ --wait ``` -------------------------------- ### Example output of bootstrap.php configuration Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/legacy-gui-installation Shows an example of the configured bootstrap.php file with actual values for DB_HOST, DB_LOGIN, DB_PASS, DB_NAME, DB_PORT, and RPC_TOKEN. ```php ... define('DB_HOST', '127.0.0.1'); define('DB_LOGIN', 'cmon'); define('DB_PASS', 'PjsL23&H7dNsN$b'); define('DB_NAME', 'dcps'); define('DB_PORT', '3306'); ... define('RPC_TOKEN','80e0a3c8894e931f8b26d6f196c52a9818e513ba'); ``` -------------------------------- ### Example cmon --init command and output Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/manual-installation Example of initializing the cmon controller with sample values, showing the expected output during initialization. ```bash $ cmon --init \ --mysql-hostname="127.0.0.1" \ --mysql-port="3306" \ --mysql-username="cmon" \ --mysql-password="xxxx" \ --mysql-database="cmon" \ --hostname="10.10.10.13" \ --rpc-token="dcd17b14e88b47f8ac7f25cd85508fb0" \ --controller-id="clustercontrol" The --init option received, initializing the controller. Verifying the Cmon Database... Cmon Database connect success, the database is not yet created, ok. Checking the Cmon Database schema... Cmon Database does not exist, will be created now. Applying modifications from 'cmon_db.sql,cmon_db_mods_hotfix.sql,cmon_data.sql'. Verifying connection... Initializing the user manager. User manager is creating system users. Checking that the system users exist. Creating system groups: admins Creating system groups: users Creating system groups: nobody Creating system user. Creating nobody user. Creating admin user. ``` -------------------------------- ### Kubernetes-backed shared config startup pattern Source: https://docs.severalnines.com/clustercontrol/latest/admin-guide/scalable-controllers-pool Example /etc/default/cmon configuration for Kubernetes environments using --pool --k8s flags. ```bash # /etc/default/cmon EXTRA_OPTS=--pool --k8s ``` -------------------------------- ### Non-interactive installation with mandatory variables Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/online-installation If you want to perform a single-liner non-interactive installation, you can assign each mandatory variable with its value beforehand, similar to the example below: ```bash S9S_CMON_PASSWORD=cmonP4ss \ S9S_ROOT_PASSWORD=root123 \ S9S_DB_PORT=3306 \ HOST=10.10.10.10 \ ./install-cc ``` -------------------------------- ### project.conf example with scheduling sections Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-dsl Example project.conf file for an advisor bundle. It defines version and schedule_version in the [project] section, and schedules scripts in [schedules] and [schedules-] sections. The [schedules] section applies to every cluster type, while [schedules-] sections apply only to the specified cluster type. Scripts under programs/ or widgets/ are not listed in schedules and are invoked on demand. ```ini [project] # Increase this value to force cmon to reinstall the scripts (a backup # of the previous version is made automatically) on the next start/upgrade. version=20210922 # Increase this value when only the [schedules*] sections below changed. schedule_version=1029 [schedules] # Applies to every cluster type. s9s/host/cpu_usage.js="*/30 * * * *" s9s/host/disk_space_usage.js="*/30 * * * *" s9s/host/swappiness.js="0 1 * * *" [schedules-mysqlcluster] s9s/mysql/connections/connections_used_pct.js="*/1 * * * *" s9s/mysql/schema/schema_check_nopk.js="0 1 * * *" [schedules-replication] ... [schedules-group_replication] ... [schedules-galera] ... [schedules-mysql_single] ... [schedules-postgresql_single] ... [schedules-mongodb] ... ``` -------------------------------- ### Environment setup script for OpenStack CCX installation Source: https://docs.severalnines.com/ccx/admin/Installation/Cloud-Providers/openstack/claude-prompt Source the OpenStack RC file and export S3, license, and admin credentials. Required before starting Claude Code; the prompt builds Kubernetes secrets from these variables. S3 is mandatory on OpenStack; S3_ENDPOINT must be host[:port] without http://, and S3_INSECURE should be true only for self-signed certs. ```bash # OpenStack - the RC file exports OS_AUTH_URL, OS_USERNAME, OS_USER_DOMAIN_NAME, # OS_PROJECT_ID (or OS_PROJECT_NAME), OS_REGION_NAME, and prompts for the password # into OS_PASSWORD. These are the same variables the openstack CLI uses. source ~/ccx-tenant-openrc.sh # S3 - required on OpenStack export S3_ACCESS_KEY=... export S3_SECRET_KEY=... export S3_ENDPOINT=s3.example.com:9000 # host[:port], no http:// prefix export S3_INSECURE=false # true only for a self-signed cert - see the caution below # CCX export CMON_LICENSE=... # base64-encoded license export CCX_ADMIN_PASSWORD=... # optional, generated if unset export CCX_ADMIN_EMAIL=you@example.com # optional, the prompt asks if unset ``` -------------------------------- ### s9s account create with output Source: https://docs.severalnines.com/clustercontrol/latest/user-guide/management/database-users-privileges Example command and its output when creating a user 'myapp' with database creation. The output shows plugin usage, MySQL version, account creation, database creation, grant, and ProxySql import. ```bash $ s9s account \ --create \ --cluster-id=1 \ --account='myapp:Passw0rd999@192.168.0.%' \ --with-database Using plugin ''. 192.168.73.11:3306: Server supports new MySQL authentication syntax. Server has version 8.4.5-5.1. Account 'myapp' created. Database 'myapp' created. Access for 'myapp' to 'myapp' granted. Importing account on ProxySql host(s). Created. ``` -------------------------------- ### getNextMaintenance: response example Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-rpc-api Example response for getNextMaintenance. Shows found_maintenance true, the next maintenance period details, and the UI string indicating when the cluster maintenance starts. ```json { "debug_messages": [ "RPC V2 authenticated user is 'pipas'." ], "found_maintenance": true, "maintenance_period": { "UUID": "8a812d58-18a2-4d55-9702-2e5e05de1a41", "class_name": "CmonMaintenanceDate", "deadline": "2019-11-13T09:07:15.000Z", "groupid": 4, "groupname": "testgroup", "initiate": "2019-11-13T08:07:15.000Z", "reason": "testMaintenanceJob1", "userid": 4, "username": "pipas" }, "reply_received": "2019-11-12T08:07:29.973Z", "request_created": "2019-11-12T08:07:29.966Z", "request_id": 3, "request_processed": "2019-11-12T08:07:29.973Z", "request_status": "Ok", "request_user_id": 4, "ui_string": "Cluster 1 maintenance starts Nov 13 08:07:15: testMaintenanceJob1" } ``` -------------------------------- ### Install MySQL Server Source: https://docs.severalnines.com/clustercontrol/latest/admin-guide/clustercontrol-replication Install MySQL Server on cc1 and cc2. ```bash dnf install -y mysql-server ``` -------------------------------- ### TypeScript JWT login example - dependencies Source: https://docs.severalnines.com/ccx/admin/Customisation/JWT Installation commands for the TypeScript example: runtime dependencies jsonwebtoken, axios, uuid, and dev dependencies @types/jsonwebtoken, @types/node, @types/uuid. ```bash npm install jsonwebtoken axios uuid npm install --save-dev @types/jsonwebtoken @types/node @types/uuid ``` -------------------------------- ### Create a virtualization server with OS credentials Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/components/clustercontrol-cli Creates a virtualization server using the s9s server --create command, providing an OS username and password for authentication and using --log to wait for job execution. ```bash s9s server \ --create \ --os-user=testuser \ --os-password=passw0rd \ --servers=lxc://192.168.0.250 \ --log ``` -------------------------------- ### getObject request example Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-rpc-api POST /v2/imperative request to get an object using its full path as a reference. ```json { "operation": "getObject", "path": "/.runtime/cluster_manager", "request_created": "2018-11-29T09:09:22.836Z", "request_id": 2 } ``` -------------------------------- ### startController response example Source: https://docs.severalnines.com/clustercontrol/latest/reference-manuals/api-sdk/clustercontrol-rpc-api Response example for the startController operation. Returns the updated controller object and a status message. ```json { "controller": { "controller_id": 2, "hostname": "controller2", "port": 9500, "status": "active", "properties": "full_controller", "clusters": [ 4, 5 ] }, "message": "Controller start command sent successfully." } ``` -------------------------------- ### Run the ClusterControl Ansible playbook Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/online-installation Executes the playbook that installs ClusterControl. The playbook file is named cc.playbook in this example. ```bash ansible-playbook cc.playbook ``` -------------------------------- ### Import repository to air-gapped host using ./install-cc --import-repo Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/offline-installation Run this on the air-gapped host after disabling the default repository and placing the tarball (cc_repo.tar.gz) in the installer directory. ```bash ./install-cc --import-repo ``` -------------------------------- ### Download and run the ClusterControl offline installer Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/offline-installation Steps to download the offline installer outside the air-gapped environment, transfer it to the target server, make it executable, and run it to install ClusterControl. The final command in the group is an example execution that shows integrity checks, OS detection, and repository configuration. The installer supports only RHEL/RockyLinux/AlmaLinux 8|9, Debian 11|12, and Ubuntu 20.04|22.04|24.04 LTS. ```bash wget https://go.severalnines.com/cc/offline-installer ``` ```bash chmod +x offline-installer ``` ```bash ./offline-installer ``` ```bash root@clustercontrol:~# ./offline-installer Verifying archive integrity... 100% SHA256 checksums are OK. 100% MD5 checksums are OK. All good. Uncompressing ClusterControl Offline Installer v2.5.0 build 6 100% Detected OS: ubuntu Version: 24 === Starting Offline Installation at Fri Sep 25 07:35:02 UTC 2026 === Using buffer pool size: 512M CMON password and root password configured (not shown). Running commands for Ubuntu 22.04/24.04 Backing up and removing files in /etc/apt/sources.list.d/ Importing offline repository... This script will configure the Severalnines repository server for both deb and rpm packages, and install the ClusterControl Web Application and Controller. It will install a new MySQL server or utilize an existing MySQL server on the host. 2026-09-25 07:35:14 UTC -- Only RHEL/RockyLinux/AlmaLinux 8|9, Debian 11|12, Ubuntu 20.04|22.04|24.04 LTS versions are supported 2026-09-25 07:35:14 UTC -- Waiting for locks ... 2026-09-25 07:35:14 UTC -- Update distro repos ... WARNING: apt does not have a stable CLI interface. Use with caution in scripts. All packages are up to date. WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Reading package lists... Building dependency tree... Reading state information... lsb-release is already the newest version (12.0-2). 0 upgraded, 0 newly installed, 0 removed and 0 not upgraded. 2026-09-25 07:35:14 UTC -- Extracting /tmp/cc_repo.tar.gz to /usr/local/repo/cc_repo... 2026-09-25 07:35:16 UTC -- Configuring Debian repository... WARNING: apt does not have a stable CLI interface. Use with caution in scripts. ``` -------------------------------- ### List all available commands and options with s9s --help Source: https://docs.severalnines.com/clustercontrol/latest/user-guide/overview/clustercontrol-cli Use the --help flag to list all available commands and options. The output shows the command list and various option categories. ```bash s9s --help ``` ```bash $ s9s --help Usage: s9s COMMAND [OPTION...] Where COMMAND is: account - to manage accounts on clusters. alarm - to manage alarms. backup - to view, create and restore database backups. cluster - to list and manipulate clusters. controller - to manage Cmon controllers. job - to view jobs. maintenance - to view and manipulate maintenance periods. metatype - to print metatype information. node - to handle nodes. process - to view processes running on nodes. replication - to monitor and control data replication. dbschema - to view database schemas. report - to manage reports. script - to manage and execute scripts. server - to manage hardware resources. sheet - to manage spreadsheets. user - to manage users. Generic options: -c, --controller=URL The URL where the controller is found. --config-file=PATH Specify the configuration file for the program. --help Show help message and exit. -P, --controller-port INT The port of the controller. -p, --password=PASSWORD The password for the Cmon user. --private-key-file=FILE The name of the file for authentication. --rpc-tls Use TLS encryption to controller. -u, --cmon-user=USERNAME The username on the Cmon system. -v, --verbose Print more messages than normally. -V, --version Print version information and exit. Formatting: --batch No colors, no human readable, pure data. --color=always|auto|never Sets if colors should be used in the output. --date-format=FORMAT The format of the dates printed. -l, --long Print the detailed list. --log-file=PATH The path where the s9s client puts its logs. --no-header Do not print headers. --only-ascii Do not use UTF8 characters. --print-json Print the sent/received JSon messages. --print-request Print the sent JSon request message. Job related options: --job-tags=LIST Set job tags when creating a new job. --log Wait and monitor job messages. --recurrence=CRONTABSTRING Timing information for recurring jobs. --schedule=DATE&TIME Run the job at the specified time. --timeout=SECONDS Timeout value for the entire job. --wait Wait until the job ends. ``` -------------------------------- ### Setup DNS A Record Source: https://docs.severalnines.com/ccx/admin/Installation/Tutorial Ensure a DNS A record points the EXTERNAL_IP to the domain you wish to install CCX on, e.g., ccx.example.com. ```text A 203.0.113.10 ccx.example.com ``` -------------------------------- ### Install MariaDB repository with curl script Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/tutorials/day-1-operations/deploy-database-cluster-offline-environment Downloads and runs the MariaDB repository setup script from r.mariadb.com. Requires sudo privileges. ```bash $ curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash ``` -------------------------------- ### Simplest ClusterControl Ansible playbook Source: https://docs.severalnines.com/clustercontrol/latest/getting-started/installation/online-installation Minimal playbook that applies the severalnines.clustercontrol role to the clustercontrol-server host group. This is the starting point for a basic installation. ```yaml - hosts: clustercontrol-server roles: - { role: severalnines.clustercontrol } ```