MySQL Cluster Manager 9.0 supports TLS Link Encryption for NDB Cluster, which is available for NDB Cluster 8.3.0 and later. This section describes a few scenarios for using MySQL Cluster Manager to configure or manage TLS connections in an NDB Cluster.
Create a new cluster with TLS enabled on initial startup
Create a site, package, and a cluster with the desired configuration—see Section 4.4, “Setting Up MySQL NDB Clusters with MySQL Cluster Manager” for instructions. Then follow the steps for a basic or a user-defined setup.
Basic setup.
Create the CA and certificates for the cluster; this also
defines
--ndb-tls-search-path
for any managed process in the cluster:
mcm> create certs mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Certificates created successfully |
+-----------------------------------+
1 row in set (8.56 sec)
Verify --ndb-tls-search-path
settings:
mcm> get -d ndb-tls*: mycluster;
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
| Name | Value | Process1 | NodeId1 | Process2 | NodeId2 | Level | Comment |
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndb_mgmd | 145 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndbmtd | 1 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndbmtd | 2 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | mysqld | 146 | | | | |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | mysqld | 147 | | | | |
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
5 rows in set (0.10 sec)
User-defined setup.
Set --ndb-tls-search-path
(the
command is split into multiple lines for easy reading only; it
should be entered in a single line):
mcm> set
ndb_tls_search_path:ndb_mgmd=/foo/mcm_data/clusters/mycluster/certs,
ndb_tls_search_path:ndbmtd=/foo/mcm_data/clusters/mycluster/certs,
ndb_tls_search_path:mysqld=/foo/mcm_data/clusters/mycluster/certs
mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (3.17 sec)
Ensure --ndb-tls-search-path
is
set correctly for all managed processes (and issue more
set
commands for corrections, if
needed):
mcm> get -d ndb-tls*: mycluster;
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
| Name | Value | Process1 | NodeId1 | Process2 | NodeId2 | Level | Comment |
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndb_mgmd | 145 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndbmtd | 1 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndbmtd | 2 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | mysqld | 146 | | | | |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | mysqld | 147 | | | | |
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
5 rows in set (0.10 sec)
For both kinds of setups, create CA and certificates for the cluster (notice that the certificates are only loaded once by the processes at startup):
mcm> create certs mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Certificates created successfully |
+-----------------------------------+
1 row in set (8.56 sec)
Enable RequireTls
for
ndb_mgmd and datanodes with another
set
command.
mcm> set RequireTls:ndb_mgmd=true,RequireTls:ndbmtd=true mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (3.56 sec)
Optionally one may also enable
RequireCertificate
,
or set --ndb-mgm-tls mode
to
strict
:
mcm> set RequireCertificate:ndb_mgmd=true,RequireCertificate:ndbmtd=true mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (2.53 sec)
mcm> set ndb_mgm_tls:ndb_mgmd=strict,ndb_mgm_tls:ndbmtd=strict mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (2.39 sec)
Start the cluster:
mcm> start cluster mycluster;
+------------------------------+
| Command result |
+------------------------------+
| Cluster started successfully |
+------------------------------+
1 row in set (1 min 33.62 sec)
Cluster is now running with TLS enabled, required, and (optionally) with certificates required for peers, and in strict mode.
Enable TLS for an Existing Cluster
Assuming you have a cluster already created and started by MySQL Cluster Manager, follow these steps to enable TLS connections for it.
Ensure --ndb-tls-search-path
is
set correctly for all managed processes, and issue the needed
set
commands for corrections if
needed:
mcm> get -d ndb-tls*: mycluster;
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
| Name | Value | Process1 | NodeId1 | Process2 | NodeId2 | Level | Comment |
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndb_mgmd | 145 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndbmtd | 1 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | ndbmtd | 2 | | | | Command Line |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | mysqld | 146 | | | | |
| ndb_tls_search_path | /foo/mcm_data/clusters/mycluster/certs | mysqld | 147 | | | | |
+---------------------+----------------------------------------+----------+---------+----------+---------+-------+--------------+
5 rows in set (0.10 sec)
Create the CA and certificates for the cluster using MySQL Cluster Manager:
mcm> create certs mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Certificates created successfully |
+-----------------------------------+
1 row in set (8.57 sec)
Restart the cluster so that processes load the certificates created (notice that the certificates are only loaded once by the processes at startup):
mcm> restart cluster mycluster;
+--------------------------------+
| Command result |
+--------------------------------+
| Cluster restarted successfully |
+--------------------------------+
1 row in set (1 min 38.09 sec)
Enable RequireTls
for
ndb_mgmd and datanodes with another
set
command:
mcm> set RequireTls:ndb_mgmd=true,RequireTls:ndbmtd=true mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (1 min 47.38 sec)
Cluster is now running with TLS enabled and required.
Optionally, one may also enable
RequireCertificate
,
or set either --ndb-mgm-tls
mode
to strict
:
mcm> set RequireCertificate:ndb_mgmd=true,RequireCertificate:ndbmtd=true mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (1 min 42.53 sec)
mcm> set ndb_mgm_tls:ndb_mgmd=strict,ndb_mgm_tls:ndbmtd=strict mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (1 min 48.13 sec)
Cluster is now running with TLS enabled, required, and (optionally) with certificates required for peers, and strict mode.