MySQL Cluster database & MySQL Replication
RSS icon Email icon Home icon
  • My first Cluster running on Windows

    Posted on June 16th, 2009 andrew 71 comments

    I figured that it was time to check out how to install, configure, run and use MySQL Cluster on Windows. To keep things simple, this first Cluster will all run on a single host but includes these nodes:

    • 1 Management node (ndb_mgmd)
    • 2 Data nodes (ndbd)
    • 3 MySQL Server (API) nodes (mysqld)

    Downloading and installing

    Browse to the Windows section of the MySQL Cluster 7.0 download page and download the installer (32 or 64 bit).

    MySQL Cluster Windows Installer

    MySQL Cluster Windows Installer

    Run the .msi file and choose the “Custom” option. Don’t worry about the fact that it’s branded as “MySQL Server 7.0″ and that you’ll go on to see adverts for MySQL Enterprise – that’s just an artefact of how the installer was put together.

    On the next screen, I decided to change the “Install to” directory to “c:\mysql” – not essential but it saves some typing later.

    Go ahead and install the software and then you’ll be asked if you want to configure the server – uncheck that as we’ll want to tailor the configuration so that it works with our Cluster.

    There are a couple of changes you need to make to your Windows configuration before going any further:

    1. Add the new bin folder to your path (in my case “C:\mysql\bin”)
    2. Make hidden files visible (needed in order to set up multiple MySQL Server processes on the same machine)

    Configure and run the Cluster

    Copy the contents of “C:\ProgramData\MySQL\MySQL Server 7.0\data” to “C:\ProgramData\MySQL\MySQL Server 7.0\data4″, “C:\ProgramData\MySQL\MySQL Server 7.0\data5″ and “C:\ProgramData\MySQL\MySQL Server 7.0\data6″. Note that this assumes that you’ve already made hidden files visible. Each of these folders will be used by one of the mysqld processes.

    Create the folder “c:\mysql\cluster” and then create the following files there:

    config.ini

    [ndbd default]
    noofreplicas=2
    [ndbd]
    hostname=localhost
    id=2
    [ndbd]
    hostname=localhost
    id=3
    [ndb_mgmd]
    id = 1
    hostname=localhost
    [mysqld]
    id=4
    hostname=localhost
    [mysqld]
    id=5
    hostname=localhost
    [mysqld]
    id=6
    hostname=localhost

    my.4.cnf

    [mysqld]
    ndb-nodeid=4
    ndbcluster
    datadir="C:\ProgramData\MySQL\MySQL Server 7.0\data4"
    port=3306
    server-id=3306

    my.5.cnf

    [mysqld]
    ndb-nodeid=5
    ndbcluster
    datadir="C:\ProgramData\MySQL\MySQL Server 7.0\data5"
    port=3307
    server-id=3307

    my.6.cnf

    [mysqld]
    ndb-nodeid=6
    ndbcluster
    datadir="C:\ProgramData\MySQL\MySQL Server 7.0\data6"
    port=3308
    server-id=3308

    Those files configure the nodes that make up the Cluster.

    From a command prompt window, launch the management node:

    C:\Users\Andrew>cd \mysql\cluster
    C:\mysql\cluster>ndb_mgmd -f config.ini
    2009-06-16 20:01:20 [MgmSrvr] INFO     -- NDB Cluster Management Server. mysql-5.1.34 ndb-7.0.6
    2009-06-16 20:01:20 [MgmSrvr] INFO     -- The default config directory 'c:\mysql\mysql-cluster' does not exist. Trying to create it...
    2009-06-16 20:01:20 [MgmSrvr] INFO     -- Sucessfully created config directory
    2009-06-16 20:01:20 [MgmSrvr] INFO     -- Reading cluster configuration from 'config.ini'

    and then from another window, check that the cluster has been defined:

     C:\Users\Andrew>ndb_mgm
    -- NDB Cluster -- Management Client --
    ndb_mgm> show
    Connected to Management Server at: localhost:1186
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]     2 node(s)
    id=2 (not connected, accepting connect from localhost)
    id=3 (not connected, accepting connect from localhost)
    [ndb_mgmd(MGM)] 1 node(s)
    id=1    @localhost  (mysql-5.1.34 ndb-7.0.6)
    [mysqld(API)]   3 node(s)
    id=4 (not connected, accepting connect from localhost)
    id=5 (not connected, accepting connect from localhost)
    id=6 (not connected, accepting connect from localhost)

    Fire up 2 more command prompt windows and launch the 2 data nodes:

    C:\Users\Andrew>ndbd
    2009-06-16 20:08:57 [ndbd] INFO     -- Configuration fetched from 'localhost:118
    6', generation: 1
    2009-06-16 20:08:57 [ndbd] INFO     -- Ndb started
    NDBMT: non-mt
    2009-06-16 20:08:57 [ndbd] INFO     -- NDB Cluster -- DB node 2
    2009-06-16 20:08:57 [ndbd] INFO     -- mysql-5.1.34 ndb-7.0.6 --
    2009-06-16 20:08:57 [ndbd] INFO     -- Ndbd_mem_manager::init(1) min: 84Mb initi
    al: 104Mb
    Adding 104Mb to ZONE_LO (1,3327)
    2009-06-16 20:08:57 [ndbd] INFO     -- Start initiated (mysql-5.1.34 ndb-7.0.6)
    WOPool::init(61, 9)
    RWPool::init(22, 13)
    RWPool::init(42, 18)
    RWPool::init(62, 13)
    Using 1 fragments per node
    RWPool::init(c2, 18)
    RWPool::init(e2, 14)
    WOPool::init(41, 8 )
    RWPool::init(82, 12)
    RWPool::init(a2, 52)
    WOPool::init(21, 5)

    (repeat from another new window for the second data node).

    After both data nodes (ndbd) have been launched, you should be able to see them through the management client:

    ndb_mgm> show
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]     2 node(s)
    id=2    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0, Master)
    id=3    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0)
    [ndb_mgmd(MGM)] 1 node(s)
    id=1    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)
    [mysqld(API)]   3 node(s)
    id=4 (not connected, accepting connect from localhost)
    id=5 (not connected, accepting connect from localhost)
    id=6 (not connected, accepting connect from localhost)

    Finally, the 3 MySQL Server/API nodes should be lauched from 3 new windows:

    C:\Users\Andrew>cd \mysql\cluster
    C:\mysql\cluster>mysqld --defaults-file=my.4.cnf
    
    C:\Users\Andrew>cd \mysql\cluster
    C:\mysql\cluster>mysqld --defaults-file=my.5.cnf
    
    C:\Users\Andrew>cd \mysql\cluster
    C:\mysql\cluster>mysqld --defaults-file=my.6.cnf

    Now, just check that all of the Cluster nodes are now up and running from the management client…

    ndb_mgm> show
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]     2 node(s)
    id=2    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0, Master)
    id=3    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0)
    [ndb_mgmd(MGM)] 1 node(s)
    id=1    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)
    [mysqld(API)]   3 node(s)
    id=4    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)
    id=5    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)
    id=6    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)

    Using the Cluster

    There are now 3 API nodes/MySQL Servers/mgmds running; all accessing the same data. Each of those nodes can be accessed by the mysql client using the ports that were configured in the my.X.cnf files. For example, we can access the first of those nodes (node 4) in the following way from (yet another) window:

    C:\Users\Andrew>mysql -h localhost -P 3306
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.1.34-ndb-7.0.6-cluster-gpl MySQL Cluster Server (GPLType 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> use test;
    Database changed
    mysql> create table assets (name varchar(30) not null primary key, value int) engine=ndb;
    Query OK, 0 rows affected (1.44 sec
    mysql> insert into assets values ('car', 950);
    Query OK, 1 row affected (0.00 sec
    mysql> select * from assets;
    +------+-------+
    | name | value |
    +------+-------+
    | car  |   950 |
    +------+-------+
    1 row in set (0.00 sec
    mysql> insert into assets2 values ('car', 950);
    Query OK, 1 row affected (0.00 sec)

    To check that everything is working correctly, we can access the same database through another of the API nodes:

    C:\Users\Andrew>mysql -h localhost -P 3307
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.1.34-ndb-7.0.6-cluster-gpl MySQL Cluster Server (GPL)
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    mysql> use test;
    Database changed
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | assets         |
    +----------------+
    1 row in set (0.06 sec)
    mysql> select * from assets;
    +------+-------+
    | name | value |
    +------+-------+
    | car  |   950 |
    +------+-------+
    1 row in set (0.09 sec)

    It’s important to note that the table (and its contents) of any table created using the ndb storage engine can be accessed through any of the API nodes but those created using other storage engines are local to each of the API nodes (MySQL Servers).

    Your next steps

    This is a very simple, contrived set up – in any sensible deployment, the nodes would be spread accross multiple physical hosts in the interests of performance and redundancy. You’d also set several more variables in the configuration files in order to size and tune your Cluster. Finally, you’d likely want to have some of these processes running as daemons or services rather than firing up so many windows.

    It’s important to note that Windows is not a fully supported platform for MySQL Cluster. If you have an interest in deploying a production system on Windows then please contact me at andrew@clusterdb.com

     

    68 responses to “My first Cluster running on Windows” RSS icon

    • Haven’t tried it myself yet but if there is no way for you to specify the IP Address in addition to the port number then you could always run it on the same server as one of your mysqlds

    • Hi,

      thanks for your post for installing mysql cluster on a sinlge windows 7 pc. What i need is to install mysql cluster on two windows 7 pcs so as to show a small desmonstration of the data replication as part of my final year project.

      Is this possible? Is there any tutorial for this?

    • Panagiotis,

      Yes – it is definitely possible – and for high availability it’s essential – to run the cluster over multiple Windows machine.

      I don’t have a tutorial on this for Windows but if you combine the contents of this post with the Linux one from http://www.clusterdb.com/mysql-cluster/deploying-mysql-cluster-over-multiple-hosts/ you should be able to get it up and running pretty quickly.

      Let me know how you get on!

      Andrew.

    • Pradeep Sharam

      Hi,

      I want to install/configure mysql cluster on two nodes.

      Kindly tell me how can I install this .

      Kindly share the doc.

    • Hi Pradeep,

      a good place to start would be http://www.clusterdb.com/mysql-cluster/running-mysql-cluster-over-multiple-servers/ which describes how to run MySQL Cluster over 3 Windows machines. Note that we don’t recommend using just 2 machines for deployment as to avoid a single point of failure, the management node should be on a different machine than the data nodes.

      Andrew.

    • hey i followed the instructions but i am struck at

      C:\mysql\cluster>ndb_mgmd -f config.ini

      it shows an error ‘ndb_mgmd’ is not recognised as an external or external command,operable program or batch file.

      PLEASE HELP ME OUT ASAP

    • Hi bunty,

      you either need to include MySQL Cluster’s bin folder in your Windows path or provide the full path to ndb_mgmd.exe when you invoke it.

      Regards, Andrew.

    • sir

      i followed ur tutorial but when i type

      ndb_mgmd -f config.ini

      its showin an error

      ndb_mgmd is not recognized as an internal or external command,operable program or batch file.

      plzz help me out i m stuck

      i wz tryn to install it on win 7

    • Everything’s working fine.
      However, the ndbcluster engine is not being shown while exeucting ‘show engines’. Hence, i’m not able to create tables with ndbcluster engine support. Please help

    • Anand – a couple of things to check:

      1) include the text “ndbcluster” in the config file for the mysqld
      2) Make sure that there are no firewall rules preventing the mysqld connecting with the management and data nodes
      3) make sure that you only use the mysqld that comes with the Cluster package.

      Andrew.

    • Hi sir,
      I followed your steps, but when I type command “show engines” Nbdcluster suppourt is “NO”
      I checked the firewalls and they are disabled and I specified in the configuration file default-storage-engine=NDBCLUSTER
      so what may be the cause of the problem

      PLEAS HELP ME ASAP

    • Omar,

      Check what’s displayed when you start the mysqld process.

      Confirm that the management node and data nodes are running by executing ”ndb_mgm -e show”.

      Confirm that you’re running the mysqld that came with MySQL Cluster rather than another one that you already had installed on the system.

      Andrew.

    • Hi sir,
      Thank you very much for your response, I followed your steps and these where the results

      >Check what’s displayed when you start the >mysqld process.

      that was the result:-
      “welcome to MySQL monitor.
      your MySQL connection id is 11
      server version: 5.5.27-ndb-7.2.8-cluster-commercial-advanced MySQL Clusterserver – Advanced Edition”

      >Confirm that the management node and data >nodes are running by executing ”ndb_mgm -e >show”.

      I ran this command and it showed that all nodes are connected EXCEPT the SQL nodes

      >Confirm that you’re running the mysqld that >came with MySQL Cluster rather than another >one that you already had installed on the >system

      I confirm that the mysqld that came with MYSQL cluster is the one running.

      best regards,
      Omar

    • Omar, try running with the -vv option as it may give more clues. Have you checked the Cluster log (should be in the datadir of the management node)?

    • Thank you very much for your support!! highly appreciated, the problem has been solved, but another problem arised. I have two data nodes first one with nodeid=6 and the other one with nodeid=25, when I first started I typed the command “ndbd –initial” and the angle was connected and allocated correctly, then I typed the “show” command on the Managment node and the results where:
      id=6 @192.x.x.x (…, starting,nodegroup:0)
      id=6 @192.x.x.x (…, starting,nodegroup:0)
      then it shows a message:
      node 25:forced shutdown completed. occuring during startphase 0, Initiated by single 9
      and when I typed the “show command again this was the status:
      id=6 @192.x.x.x (…, starting,nodegroup:0)
      id=6 (not connected, accepting connect from 192.x.x.x)
      so how can I resolve this issue.
      thank you for your support

      best regards,
      omar

    • sorry correction: the output of the last “show” command is:
      id=6 @192.x.x.x (…, starting,nodegroup:0)
      id=25 (not connected, accepting connect from 192.x.x.x)

    • There is no .MSI file in the installation pacakge. just a zip package.

      Is there a way to install it using the MSI? I am just wondering if the MSI is missing

    • Hi Karen,

      at present, there is no MSI available and so you’ll have to use the zip.

      Best Regards, Andrew.


    3 Trackbacks / Pingbacks

    Leave a reply