How to set up a three-node cluster on a single box¶
This tutorial describes how to set up a 3-node cluster on a single physical box.
For the purposes of this tutorial, assume the following:
-
The local IP address is
192.168.2.21
. -
Percona XtraDB Cluster is extracted from binary tarball into
/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64
To set up the cluster:
-
Create three MySQL configuration files for the corresponding nodes:
-
/etc/my.4000.cnf
[mysqld] port = 4000 socket=/tmp/mysql.4000.sock datadir=/data/bench/d1 basedir=/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64 user=mysql log_error=error.log binlog_format=ROW wsrep_cluster_address='gcomm://192.168.2.21:5030,192.168.2.21:6030' wsrep_provider=/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64/lib/libgalera_smm.so wsrep_sst_receive_address=192.168.2.21:4020 wsrep_node_incoming_address=192.168.2.21 wsrep_slave_threads=2 wsrep_cluster_name=trimethylxanthine wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.2.21:4030;" wsrep_sst_method=rsync wsrep_node_name=node4000 innodb_autoinc_lock_mode=2
-
/etc/my.5000.cnf
[mysqld] port = 5000 socket=/tmp/mysql.5000.sock datadir=/data/bench/d2 basedir=/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64 user=mysql log_error=error.log binlog_format=ROW wsrep_cluster_address='gcomm://192.168.2.21:4030,192.168.2.21:6030' wsrep_provider=/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64/lib/libgalera_smm.so wsrep_sst_receive_address=192.168.2.21:5020 wsrep_node_incoming_address=192.168.2.21 wsrep_slave_threads=2 wsrep_cluster_name=trimethylxanthine wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.2.21:5030;" wsrep_sst_method=rsync wsrep_node_name=node5000 innodb_autoinc_lock_mode=2
-
/etc/my.6000.cnf
[mysqld] port = 6000 socket=/tmp/mysql.6000.sock datadir=/data/bench/d3 basedir=/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64 user=mysql log_error=error.log binlog_format=ROW wsrep_cluster_address='gcomm://192.168.2.21:4030,192.168.2.21:5030' wsrep_provider=/usr/local/Percona-XtraDB-Cluster-5.7.11-rel4beta-25.14.2.beta.Linux.x86_64/lib/libgalera_smm.so wsrep_sst_receive_address=192.168.2.21:6020 wsrep_node_incoming_address=192.168.2.21 wsrep_slave_threads=2 wsrep_cluster_name=trimethylxanthine wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.2.21:6030;" wsrep_sst_method=rsync wsrep_node_name=node6000 innodb_autoinc_lock_mode=2
-
Create three data directories for the nodes:
-
/data/bench/d1
-
/data/bench/d2
-
/data/bench/d3
-
Start the first node using the following command (from the Percona XtraDB Cluster install directory):
$ bin/mysqld_safe --defaults-file=/etc/my.4000.cnf --wsrep-new-cluster
If the node starts correctly, you should see the following output:
111215 19:01:49 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 0)
111215 19:01:49 [Note] WSREP: New cluster view: global state: 4c286ccc-2792-11e1-0800-94bd91e32efa:0, view# 1: Primary, number of nodes: 1, my index: 0, protocol version 1
To check the ports, run the following command:
$ netstat -anp | grep mysqld
The example of the output is the following:
tcp 0 0 192.168.2.21:4030 0.0.0.0:* LISTEN 21895/mysqld
tcp 0 0 0.0.0.0:4000 0.0.0.0:* LISTEN 21895/mysqld
- Start the second and third nodes:
bin/mysqld_safe --defaults-file=/etc/my.5000.cnf
bin/mysqld_safe --defaults-file=/etc/my.6000.cnf
If the nodes start and join the cluster successful, you should see the following output:
111215 19:22:26 [Note] WSREP: Shifting JOINER -> JOINED (TO: 2)
111215 19:22:26 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 2)
111215 19:22:26 [Note] WSREP: Synchronized with group, ready for connections
To check the cluster size, run the following command:
$ mysql -h127.0.0.1 -P6000 -e "show global status like 'wsrep_cluster_size';"
The example of the output is the following:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
After that you can connect to any node and perform queries, which will be automatically synchronized with other nodes. For example, to create a database on the second node, you can run the following command:
$ mysql -h127.0.0.1 -P5000 -e "CREATE DATABASE hello_peter"