Buy Percona ServicesBuy Now!

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:

  1. 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
      
  2. Create three data directories for the nodes:

    • /data/bench/d1
    • /data/bench/d2
    • /data/bench/d3
  3. 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
    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
    
  4. 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';"
    +--------------------+-------+
    | 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:

Visit Percona Store


General Inquiries

For general inquiries, please send us your question and someone will contact you.