Sunday, January 12, 2014

how to configure mysql cluster

CentOS 6: Install MySQL Cluster – The Simple Way

MySQL cluster is consists of 3 types of node:
    1.Data node (mysql-data1 & mysql-data2)
    2.Sql daemon node (mysql-mysqld1 & mysql-mysqld2)
    3.Management node (mysql-management)
Data nodes
Data node will hold the database and it will replicate automatically to all data nodes.
Sql Nodes
Sql daemon node is the interface between database and client.
It will serve the query they got from data nodes, similar like a “gateway”.
Management node
Management node is required in order to monitor and manage the whole cluster.
Recommended minimum setup for high availability and scalability will be 5 servers as what I have highlights in the picture below.
I will be using CentOS 6.3 64bit for all servers.  

 

All Servers
1.SELINUX must be disabled on all servers. Change the SELINUX configuration file at /etc/sysconfig/selinux:
2.Firewall is disabled on all servers:
    $ service iptables stop
    $ chkconfig iptables off
    $ setenforce 0
3.    Entries under /etc/hosts for all servers should be as below:
        web-server             192.168.1.21
        mysql-mysqld1          192.168.1.51
        mysql-mysqld2          192.168.1.52
        mysql-management    192.168.1.53
        mysql-data1            192.168.1.54
        mysql-data2            192.168.1.55

Management Node
1.    Download and install MySQL Cluster (management & tools) package from here:
    $ cd /usr/local/src
    $ wget http://download.softagency.net/MySQL/Downloads/MySQL-Cluster-7.0/MySQL-    Cluster-gpl-management-7.0.35-1.rhel5.x86_64.rpm
    $ wget http://download.softagency.net/MySQL/Downloads/MySQL-Cluster-7.0/MySQL-    Cluster-gpl-tools-7.0.34-1.rhel5.x86_64.rpm
    $ rpm -Uhv MySQL-Cluster-gpl-management-7.0.35-1.rhel5.x86_64.rpm
    $ rpm -Uhv MySQL-Cluster-gpl-tools-7.0.34-1.rhel5.x86_64.rpm
2.    Create the mysql-cluster directory and configuration file config.ini:
    $ mkdir -p /var/lib/mysql-cluster
    $ vim /var/lib/mysql-cluster/config.ini
    And add following line:
        [ndb_mgmd default]
        DataDir=/var/lib/mysql-cluster
        [ndb_mgmd]
        HostName=mysql-management
        [ndbd default]
        NoOfReplicas=2
        DataMemory=256M
        IndexMemory=128M
        DataDir=/var/lib/mysql-cluster
        [ndbd]
        HostName=mysql-data1
        [ndbd]
        HostName=mysql-data2
        [mysqld]
        HostName=mysql-mysqld1
        [mysqld]
        HostName=mysql-mysqld2

Data Nodes
1.    Following steps should be executed on both data nodes (mysql-data1 and mysql-data2). Download and install the MySQL storage package from here:
    $ cd /usr/local/src
    $ wget http://download.softagency.net/MySQL/Downloads/MySQL-Cluster-7.0/MySQL-Cluster-gpl-storage-7.0.35-1.rhel5.x86_64.rpm
    $ rpm -Uhv MySQL-Cluster-gpl-storage-7.0.35-1.rhel5.x86_64.rpm
2.    Add following line under /etc/my.cnf:
    [mysqld]
     ndbcluster
     ndb-connectstring=mysql-management
    [mysql_cluster]
     ndb-connectstring=mysql-management

SQL Nodes
1.Following steps should be executed on both SQL nodes (mysql-mysqld1 and mysql-mysqld2). Remove mysql-libs using yum:
    $ yum remove mysql-libs –y
2.    Install required package using yum:
    $ yum install libaio –y
3.    Download the MySQL client, shared and server package from MySQL download site here:
    $ cd /usr/local/src
    $ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/MySQL-Cluster-client-gpl-7.2.8-1.el6.x86_64.rpm/
    $ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/MySQL-Cluster-shared-gpl-7.2.8-1.el6.x86_64.rpm/
    $ wget http://www.mysql.com/get/Downloads/MySQL-Cluster-7.2/MySQL-Cluster-server-gpl-7.2.8-1.el6.x86_64.rpm/
4.    Install all packages:
    rpm -Uhv MySQL-Cluster-*
5.    Add following line into /etc/my.cnf:
    [mysqld]
     ndbcluster
     ndb-connectstring=mysql-management
     default_storage_engine=ndbcluster
    [mysql_cluster]
     ndb-connectstring=mysql-management

Start the Cluster
1.To start the cluster, we must follow this order:
    Management Node > Data Node > SQL Node
2.So, login to management node (mysql-management) and execute following command:
    $ ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    MySQL Cluster Management Server mysql-5.1.63 ndb-7.0.35
    2012-11-22 07:36:55 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
    2012-11-22 07:36:55 [MgmtSrvr] INFO -- Sucessfully created config directory
3.Next is start the ndbd service in Data Node (mysql-data1):
    $ ndbd
    2012-11-22 07:37:24 [ndbd] INFO -- Angel connected to 'mysql-management:1186'
    2012-11-22 07:37:24 [ndbd] INFO -- Angel allocated nodeid: 2
4.Next is start the ndbd service in Data Node (mysql-data2):
    $ ndbd
    2012-11-22 07:37:24 [ndbd] INFO -- Angel connected to 'mysql-management:1186'
    2012-11-22 07:37:24 [ndbd] INFO -- Angel allocated nodeid: 3
5.Next is start the mysql service in SQL node (mysql-mysqld1):
    service mysql start
6.Next is start the mysql service in SQL node (mysql-mysqld2):
    service mysql start
Monitor the Cluster
Monitoring the cluster will require you to login into management server. To check overall status of cluster:
$ ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.54 (mysql-5.1.63 ndb-7.0.35, Nodegroup: 0, Master)
id=3 @192.168.1.55 (mysql-5.1.63 ndb-7.0.35, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.53 (mysql-5.1.63 ndb-7.0.35)

[mysqld(API)] 2 node(s)
id=4 @192.168.1.51 (mysql-5.5.27 ndb-7.2.8)
id=5 @192.168.1.52 (mysql-5.5.27 ndb-7.2.8)
To check the Data nodes status:
$ ndb_mgm -e "all status"
Connected to Management Server at: localhost:1186
Node 2: started (mysql-5.1.63 ndb-7.0.35)
Node 3: started (mysql-5.1.63 ndb-7.0.35)
To check the memory usage of data nodes:
$ ndb_mgm -e "all report memory"
Connected to Management Server at: localhost:1186
Node 2: Data usage is 0%(23 32K pages of total 8192)
Node 2: Index usage is 0%(20 8K pages of total 16416)
Node 3: Data usage is 0%(23 32K pages of total 8192)
Node 3: Index usage is 0%(20 8K pages of total 16416)

Stopping the Cluster
1.To stop the cluster, we must follow this order:
  SQL Node > Management Node / Data Node
2.Login to SQL node (mysql-mysqld1 & mysql-mysqld2) and run following command:
  $ service mysql stop
3.Login to management node (mysql-management) and run following command:
  $ ndb_mgm -e shutdown
Done! You should now able to create or import database on one of the SQL node. You can put a load balancer in front of the SQL node to take advantage on the performance and high availability.
Notes
You may notice that the distribution version I installed is “rhel5?. You can get the “el6” distribution package at this page: http://mirror.services.wisc.edu/mysql/Downloads/MySQL-Cluster-7.2/ and search for any “el6? package name.

Reference

http://blog.secaserver.com/2012/11/centos-6-install-mysql-cluster-the-simple-way/